From 8c4806898aa881812ed531ad928b50e8ceeebcc7 Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Fri, 14 May 2021 07:15:44 +0100 Subject: [PATCH 001/194] Remove deprecated rules (#5295) --- docs/user-guide/rules/list.md | 27 - lib/rules/at-rule-blacklist/README.md | 52 -- .../at-rule-blacklist/__tests__/index.js | 202 ------- lib/rules/at-rule-blacklist/index.js | 64 -- .../at-rule-property-requirelist/README.md | 55 -- .../__tests__/index.js | 89 --- .../at-rule-property-requirelist/index.js | 74 --- lib/rules/at-rule-whitelist/README.md | 67 --- .../at-rule-whitelist/__tests__/index.js | 195 ------ lib/rules/at-rule-whitelist/index.js | 64 -- lib/rules/comment-word-blacklist/README.md | 50 -- .../comment-word-blacklist/__tests__/index.js | 352 ----------- lib/rules/comment-word-blacklist/index.js | 66 -- .../README.md | 76 --- .../__tests__/index.js | 200 ------ .../index.js | 86 --- .../README.md | 87 --- .../__tests__/index.js | 205 ------- .../index.js | 86 --- .../README.md | 107 ---- .../__tests__/index.js | 215 ------- .../index.js | 68 --- .../README.md | 98 --- .../__tests__/index.js | 106 ---- .../index.js | 68 --- lib/rules/function-blacklist/README.md | 54 -- .../function-blacklist/__tests__/index.js | 248 -------- lib/rules/function-blacklist/index.js | 71 --- .../function-url-scheme-blacklist/README.md | 73 --- .../__tests__/index.js | 285 --------- .../function-url-scheme-blacklist/index.js | 76 --- .../function-url-scheme-whitelist/README.md | 78 --- .../__tests__/index.js | 347 ----------- .../function-url-scheme-whitelist/index.js | 76 --- lib/rules/function-whitelist/README.md | 75 --- .../function-whitelist/__tests__/index.js | 209 ------- lib/rules/function-whitelist/index.js | 73 --- lib/rules/index.js | 49 -- .../media-feature-name-blacklist/README.md | 66 -- .../__tests__/index.js | 233 ------- .../media-feature-name-blacklist/index.js | 86 --- .../README.md | 86 --- .../__tests__/index.js | 200 ------ .../index.js | 99 --- .../media-feature-name-whitelist/README.md | 66 -- .../__tests__/index.js | 223 ------- .../media-feature-name-whitelist/index.js | 86 --- lib/rules/property-blacklist/README.md | 66 -- .../property-blacklist/__tests__/index.js | 187 ------ lib/rules/property-blacklist/index.js | 67 --- lib/rules/property-whitelist/README.md | 77 --- .../property-whitelist/__tests__/index.js | 196 ------ lib/rules/property-whitelist/index.js | 67 --- .../README.md | 46 -- .../__tests__/index.js | 119 ---- .../index.js | 75 --- .../README.md | 56 -- .../__tests__/index.js | 125 ---- .../index.js | 75 --- .../selector-combinator-blacklist/README.md | 56 -- .../__tests__/index.js | 94 --- .../selector-combinator-blacklist/index.js | 80 --- .../selector-combinator-whitelist/README.md | 56 -- .../__tests__/index.js | 118 ---- .../selector-combinator-whitelist/index.js | 80 --- .../selector-pseudo-class-blacklist/README.md | 55 -- .../__tests__/index.js | 252 -------- .../selector-pseudo-class-blacklist/index.js | 85 --- .../selector-pseudo-class-whitelist/README.md | 55 -- .../__tests__/index.js | 201 ------- .../selector-pseudo-class-whitelist/index.js | 84 --- .../README.md | 56 -- .../__tests__/index.js | 131 ---- .../index.js | 84 --- .../README.md | 56 -- .../__tests__/index.js | 153 ----- .../index.js | 84 --- lib/rules/unit-blacklist/README.md | 161 ----- lib/rules/unit-blacklist/__tests__/index.js | 568 ------------------ lib/rules/unit-blacklist/index.js | 132 ---- lib/rules/unit-whitelist/README.md | 117 ---- lib/rules/unit-whitelist/__tests__/index.js | 370 ------------ lib/rules/unit-whitelist/index.js | 92 --- 83 files changed, 9994 deletions(-) delete mode 100644 lib/rules/at-rule-blacklist/README.md delete mode 100644 lib/rules/at-rule-blacklist/__tests__/index.js delete mode 100644 lib/rules/at-rule-blacklist/index.js delete mode 100644 lib/rules/at-rule-property-requirelist/README.md delete mode 100644 lib/rules/at-rule-property-requirelist/__tests__/index.js delete mode 100644 lib/rules/at-rule-property-requirelist/index.js delete mode 100644 lib/rules/at-rule-whitelist/README.md delete mode 100644 lib/rules/at-rule-whitelist/__tests__/index.js delete mode 100644 lib/rules/at-rule-whitelist/index.js delete mode 100644 lib/rules/comment-word-blacklist/README.md delete mode 100644 lib/rules/comment-word-blacklist/__tests__/index.js delete mode 100644 lib/rules/comment-word-blacklist/index.js delete mode 100644 lib/rules/declaration-property-unit-blacklist/README.md delete mode 100644 lib/rules/declaration-property-unit-blacklist/__tests__/index.js delete mode 100644 lib/rules/declaration-property-unit-blacklist/index.js delete mode 100644 lib/rules/declaration-property-unit-whitelist/README.md delete mode 100644 lib/rules/declaration-property-unit-whitelist/__tests__/index.js delete mode 100644 lib/rules/declaration-property-unit-whitelist/index.js delete mode 100644 lib/rules/declaration-property-value-blacklist/README.md delete mode 100644 lib/rules/declaration-property-value-blacklist/__tests__/index.js delete mode 100644 lib/rules/declaration-property-value-blacklist/index.js delete mode 100644 lib/rules/declaration-property-value-whitelist/README.md delete mode 100644 lib/rules/declaration-property-value-whitelist/__tests__/index.js delete mode 100644 lib/rules/declaration-property-value-whitelist/index.js delete mode 100644 lib/rules/function-blacklist/README.md delete mode 100644 lib/rules/function-blacklist/__tests__/index.js delete mode 100644 lib/rules/function-blacklist/index.js delete mode 100644 lib/rules/function-url-scheme-blacklist/README.md delete mode 100644 lib/rules/function-url-scheme-blacklist/__tests__/index.js delete mode 100644 lib/rules/function-url-scheme-blacklist/index.js delete mode 100644 lib/rules/function-url-scheme-whitelist/README.md delete mode 100644 lib/rules/function-url-scheme-whitelist/__tests__/index.js delete mode 100644 lib/rules/function-url-scheme-whitelist/index.js delete mode 100644 lib/rules/function-whitelist/README.md delete mode 100644 lib/rules/function-whitelist/__tests__/index.js delete mode 100644 lib/rules/function-whitelist/index.js delete mode 100644 lib/rules/media-feature-name-blacklist/README.md delete mode 100644 lib/rules/media-feature-name-blacklist/__tests__/index.js delete mode 100644 lib/rules/media-feature-name-blacklist/index.js delete mode 100644 lib/rules/media-feature-name-value-whitelist/README.md delete mode 100644 lib/rules/media-feature-name-value-whitelist/__tests__/index.js delete mode 100644 lib/rules/media-feature-name-value-whitelist/index.js delete mode 100644 lib/rules/media-feature-name-whitelist/README.md delete mode 100644 lib/rules/media-feature-name-whitelist/__tests__/index.js delete mode 100644 lib/rules/media-feature-name-whitelist/index.js delete mode 100644 lib/rules/property-blacklist/README.md delete mode 100644 lib/rules/property-blacklist/__tests__/index.js delete mode 100644 lib/rules/property-blacklist/index.js delete mode 100644 lib/rules/property-whitelist/README.md delete mode 100644 lib/rules/property-whitelist/__tests__/index.js delete mode 100644 lib/rules/property-whitelist/index.js delete mode 100644 lib/rules/selector-attribute-operator-blacklist/README.md delete mode 100644 lib/rules/selector-attribute-operator-blacklist/__tests__/index.js delete mode 100644 lib/rules/selector-attribute-operator-blacklist/index.js delete mode 100644 lib/rules/selector-attribute-operator-whitelist/README.md delete mode 100644 lib/rules/selector-attribute-operator-whitelist/__tests__/index.js delete mode 100644 lib/rules/selector-attribute-operator-whitelist/index.js delete mode 100644 lib/rules/selector-combinator-blacklist/README.md delete mode 100644 lib/rules/selector-combinator-blacklist/__tests__/index.js delete mode 100644 lib/rules/selector-combinator-blacklist/index.js delete mode 100644 lib/rules/selector-combinator-whitelist/README.md delete mode 100644 lib/rules/selector-combinator-whitelist/__tests__/index.js delete mode 100644 lib/rules/selector-combinator-whitelist/index.js delete mode 100644 lib/rules/selector-pseudo-class-blacklist/README.md delete mode 100644 lib/rules/selector-pseudo-class-blacklist/__tests__/index.js delete mode 100644 lib/rules/selector-pseudo-class-blacklist/index.js delete mode 100644 lib/rules/selector-pseudo-class-whitelist/README.md delete mode 100644 lib/rules/selector-pseudo-class-whitelist/__tests__/index.js delete mode 100644 lib/rules/selector-pseudo-class-whitelist/index.js delete mode 100644 lib/rules/selector-pseudo-element-blacklist/README.md delete mode 100644 lib/rules/selector-pseudo-element-blacklist/__tests__/index.js delete mode 100644 lib/rules/selector-pseudo-element-blacklist/index.js delete mode 100644 lib/rules/selector-pseudo-element-whitelist/README.md delete mode 100644 lib/rules/selector-pseudo-element-whitelist/__tests__/index.js delete mode 100644 lib/rules/selector-pseudo-element-whitelist/index.js delete mode 100644 lib/rules/unit-blacklist/README.md delete mode 100644 lib/rules/unit-blacklist/__tests__/index.js delete mode 100644 lib/rules/unit-blacklist/index.js delete mode 100644 lib/rules/unit-whitelist/README.md delete mode 100644 lib/rules/unit-whitelist/__tests__/index.js delete mode 100644 lib/rules/unit-whitelist/index.js diff --git a/docs/user-guide/rules/list.md b/docs/user-guide/rules/list.md index c8218dd614..af7025223f 100644 --- a/docs/user-guide/rules/list.md +++ b/docs/user-guide/rules/list.md @@ -108,14 +108,10 @@ Grouped first by the following categories and then by the [_thing_](http://apps. ### Function - [`function-allowed-list`](../../../lib/rules/function-allowed-list/README.md): Specify a list of allowed functions. -- [`function-blacklist`](../../../lib/rules/function-blacklist/README.md): Specify a list of disallowed functions. **(deprecated)** - [`function-disallowed-list`](../../../lib/rules/function-disallowed-list/README.md): Specify a list of disallowed functions. - [`function-url-no-scheme-relative`](../../../lib/rules/function-url-no-scheme-relative/README.md): Disallow scheme-relative urls. - [`function-url-scheme-allowed-list`](../../../lib/rules/function-url-scheme-allowed-list/README.md): Specify a list of allowed URL schemes. -- [`function-url-scheme-blacklist`](../../../lib/rules/function-url-scheme-blacklist/README.md): Specify a list of disallowed URL schemes. **(deprecated)** - [`function-url-scheme-disallowed-list`](../../../lib/rules/function-url-scheme-disallowed-list/README.md): Specify a list of disallowed URL schemes. -- [`function-url-scheme-whitelist`](../../../lib/rules/function-url-scheme-whitelist/README.md): Specify a list of allowed URL schemes. **(deprecated)** -- [`function-whitelist`](../../../lib/rules/function-whitelist/README.md): Specify a list of allowed functions. **(deprecated)** ### Keyframes @@ -132,9 +128,7 @@ Grouped first by the following categories and then by the [_thing_](http://apps. ### Unit - [`unit-allowed-list`](../../../lib/rules/unit-allowed-list/README.md): Specify a list of allowed units. -- [`unit-blacklist`](../../../lib/rules/unit-blacklist/README.md): Specify a list of disallowed units. **(deprecated)** - [`unit-disallowed-list`](../../../lib/rules/unit-disallowed-list/README.md): Specify a list of disallowed units. -- [`unit-whitelist`](../../../lib/rules/unit-whitelist/README.md): Specify a list of allowed units. **(deprecated)** ### Shorthand property @@ -151,23 +145,17 @@ Grouped first by the following categories and then by the [_thing_](http://apps. ### Property - [`property-allowed-list`](../../../lib/rules/property-allowed-list/README.md): Specify a list of allowed properties. -- [`property-blacklist`](../../../lib/rules/property-blacklist/README.md): Specify a list of disallowed properties. **(deprecated)** - [`property-disallowed-list`](../../../lib/rules/property-disallowed-list/README.md): Specify a list of disallowed properties. - [`property-no-vendor-prefix`](../../../lib/rules/property-no-vendor-prefix/README.md): Disallow vendor prefixes for properties (Autofixable). -- [`property-whitelist`](../../../lib/rules/property-whitelist/README.md): Specify a list of allowed properties. **(deprecated)** ### Declaration - [`declaration-block-no-redundant-longhand-properties`](../../../lib/rules/declaration-block-no-redundant-longhand-properties/README.md): Disallow longhand properties that can be combined into one shorthand property. - [`declaration-no-important`](../../../lib/rules/declaration-no-important/README.md): Disallow `!important` within declarations. - [`declaration-property-unit-allowed-list`](../../../lib/rules/declaration-property-unit-allowed-list/README.md): Specify a list of allowed property and unit pairs within declarations. -- [`declaration-property-unit-blacklist`](../../../lib/rules/declaration-property-unit-blacklist/README.md): Specify a list of disallowed property and unit pairs within declarations. **(deprecated)** - [`declaration-property-unit-disallowed-list`](../../../lib/rules/declaration-property-unit-disallowed-list/README.md): Specify a list of disallowed property and unit pairs within declarations. -- [`declaration-property-unit-whitelist`](../../../lib/rules/declaration-property-unit-whitelist/README.md): Specify a list of allowed property and unit pairs within declarations. **(deprecated)** - [`declaration-property-value-allowed-list`](../../../lib/rules/declaration-property-value-allowed-list/README.md): Specify a list of allowed property and value pairs within declarations. -- [`declaration-property-value-blacklist`](../../../lib/rules/declaration-property-value-blacklist/README.md): Specify a list of disallowed property and value pairs within declarations. **(deprecated)** - [`declaration-property-value-disallowed-list`](../../../lib/rules/declaration-property-value-disallowed-list/README.md): Specify a list of disallowed property and value pairs within declarations. -- [`declaration-property-value-whitelist`](../../../lib/rules/declaration-property-value-whitelist/README.md): Specify a list of allowed property and value pairs within declarations. **(deprecated)** ### Declaration block @@ -177,14 +165,10 @@ Grouped first by the following categories and then by the [_thing_](http://apps. - [`selector-attribute-name-disallowed-list`](../../../lib/rules/selector-attribute-name-disallowed-list/README.md): Specify a list of disallowed attribute names. - [`selector-attribute-operator-allowed-list`](../../../lib/rules/selector-attribute-operator-allowed-list/README.md): Specify a list of allowed attribute operators. -- [`selector-attribute-operator-blacklist`](../../../lib/rules/selector-attribute-operator-blacklist/README.md): Specify a list of disallowed attribute operators. **(deprecated)** - [`selector-attribute-operator-disallowed-list`](../../../lib/rules/selector-attribute-operator-disallowed-list/README.md): Specify a list of disallowed attribute operators. -- [`selector-attribute-operator-whitelist`](../../../lib/rules/selector-attribute-operator-whitelist/README.md): Specify a list of allowed attribute operators. **(deprecated)** - [`selector-class-pattern`](../../../lib/rules/selector-class-pattern/README.md): Specify a pattern for class selectors. - [`selector-combinator-allowed-list`](../../../lib/rules/selector-combinator-allowed-list/README.md): Specify a list of allowed combinators. -- [`selector-combinator-blacklist`](../../../lib/rules/selector-combinator-blacklist/README.md): Specify a list of disallowed combinators. **(deprecated)** - [`selector-combinator-disallowed-list`](../../../lib/rules/selector-combinator-disallowed-list/README.md): Specify a list of disallowed combinators. -- [`selector-combinator-whitelist`](../../../lib/rules/selector-combinator-whitelist/README.md): Specify a list of allowed combinators. **(deprecated)** - [`selector-disallowed-list`](../../../lib/rules/selector-disallowed-list/README.md): Specify a list of disallowed selectors. - [`selector-id-pattern`](../../../lib/rules/selector-id-pattern/README.md): Specify a pattern for ID selectors. - [`selector-max-attribute`](../../../lib/rules/selector-max-attribute/README.md): Limit the number of attribute selectors in a selector. @@ -201,24 +185,17 @@ Grouped first by the following categories and then by the [_thing_](http://apps. - [`selector-no-qualifying-type`](../../../lib/rules/selector-no-qualifying-type/README.md): Disallow qualifying a selector by type. - [`selector-no-vendor-prefix`](../../../lib/rules/selector-no-vendor-prefix/README.md): Disallow vendor prefixes for selectors (Autofixable). - [`selector-pseudo-class-allowed-list`](../../../lib/rules/selector-pseudo-class-allowed-list/README.md): Specify a list of allowed pseudo-class selectors. -- [`selector-pseudo-class-blacklist`](../../../lib/rules/selector-pseudo-class-blacklist/README.md): Specify a list of disallowed pseudo-class selectors. **(deprecated)** - [`selector-pseudo-class-disallowed-list`](../../../lib/rules/selector-pseudo-class-disallowed-list/README.md): Specify a list of disallowed pseudo-class selectors. -- [`selector-pseudo-class-whitelist`](../../../lib/rules/selector-pseudo-class-whitelist/README.md): Specify a list of allowed pseudo-class selectors. **(deprecated)** - [`selector-pseudo-element-allowed-list`](../../../lib/rules/selector-pseudo-element-allowed-list/README.md): Specify a list of allowed pseudo-element selectors. -- [`selector-pseudo-element-blacklist`](../../../lib/rules/selector-pseudo-element-blacklist/README.md): Specify a list of disallowed pseudo-element selectors. **(deprecated)** - [`selector-pseudo-element-colon-notation`](../../../lib/rules/selector-pseudo-element-colon-notation/README.md): Specify single or double colon notation for applicable pseudo-elements (Autofixable). - [`selector-pseudo-element-disallowed-list`](../../../lib/rules/selector-pseudo-element-disallowed-list/README.md): Specify a list of disallowed pseudo-element selectors. -- [`selector-pseudo-element-whitelist`](../../../lib/rules/selector-pseudo-element-whitelist/README.md): Specify a list of allowed pseudo-element selectors. **(deprecated)** ### Media feature - [`media-feature-name-allowed-list`](../../../lib/rules/media-feature-name-allowed-list/README.md): Specify a list of allowed media feature names. -- [`media-feature-name-blacklist`](../../../lib/rules/media-feature-name-blacklist/README.md): Specify a list of disallowed media feature names. **(deprecated)** - [`media-feature-name-disallowed-list`](../../../lib/rules/media-feature-name-disallowed-list/README.md): Specify a list of disallowed media feature names. - [`media-feature-name-no-vendor-prefix`](../../../lib/rules/media-feature-name-no-vendor-prefix/README.md): Disallow vendor prefixes for media feature names (Autofixable). - [`media-feature-name-value-allowed-list`](../../../lib/rules/media-feature-name-value-allowed-list/README.md): Specify a list of allowed media feature name and value pairs. -- [`media-feature-name-value-whitelist`](../../../lib/rules/media-feature-name-value-whitelist/README.md): Specify a list of allowed media feature name and value pairs. **(deprecated)** -- [`media-feature-name-whitelist`](../../../lib/rules/media-feature-name-whitelist/README.md): Specify a list of allowed media feature names. **(deprecated)** ### Custom media @@ -227,17 +204,13 @@ Grouped first by the following categories and then by the [_thing_](http://apps. ### At-rule - [`at-rule-allowed-list`](../../../lib/rules/at-rule-allowed-list/README.md): Specify a list of allowed at-rules. -- [`at-rule-blacklist`](../../../lib/rules/at-rule-blacklist/README.md): Specify a list of disallowed at-rules. **(deprecated)** - [`at-rule-disallowed-list`](../../../lib/rules/at-rule-disallowed-list/README.md): Specify a list of disallowed at-rules. - [`at-rule-no-vendor-prefix`](../../../lib/rules/at-rule-no-vendor-prefix/README.md): Disallow vendor prefixes for at-rules (Autofixable). - [`at-rule-property-required-list`](../../../lib/rules/at-rule-property-required-list/README.md): Specify a list of required properties for an at-rule. -- [`at-rule-property-requirelist`](../../../lib/rules/at-rule-property-requirelist/README.md): Specify a list of required properties for an at-rule. **(deprecated)** -- [`at-rule-whitelist`](../../../lib/rules/at-rule-whitelist/README.md): Specify a list of allowed at-rules. **(deprecated)** ### Comment - [`comment-pattern`](../../../lib/rules/comment-pattern/README.md): Specify a pattern for comments. -- [`comment-word-blacklist`](../../../lib/rules/comment-word-blacklist/README.md): Specify a list of disallowed words within comments. **(deprecated)** - [`comment-word-disallowed-list`](../../../lib/rules/comment-word-disallowed-list/README.md): Specify a list of disallowed words within comments. ### General / Sheet diff --git a/lib/rules/at-rule-blacklist/README.md b/lib/rules/at-rule-blacklist/README.md deleted file mode 100644 index 454160549b..0000000000 --- a/lib/rules/at-rule-blacklist/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# at-rule-blacklist - -**_Deprecated: Instead use the [`at-rule-disallowed-list`](../at-rule-disallowed-list/README.md) rule._** - -Specify a list of disallowed at-rules. - - -```css - @keyframes name {} -/** ↑ - * At-rules like this */ -``` - -## Options - -`array|string`: `["array", "of", "unprefixed", "at-rules"]|"at-rule"` - -Given: - -``` -["extend", "keyframes"] -``` - -The following patterns are considered violations: - - -```css -a { @extend placeholder; } -``` - - -```css -@keyframes name { - from { top: 10px; } - to { top: 20px; } -} -``` - - -```css -@-moz-keyframes name { - from { top: 10px; } - to { top: 20px; } -} -``` - -The following patterns are _not_ considered violations: - - -```css -@import "path/to/file.css"; -``` diff --git a/lib/rules/at-rule-blacklist/__tests__/index.js b/lib/rules/at-rule-blacklist/__tests__/index.js deleted file mode 100644 index d0900a78a7..0000000000 --- a/lib/rules/at-rule-blacklist/__tests__/index.js +++ /dev/null @@ -1,202 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: ['extend'], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'at-rule-disallowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - - config: ['extend', 'supports', 'keyframes'], - - accept: [ - { - code: 'a { color: pink; }', - description: 'Some random code.', - }, - { - code: '@mixin name ($p) {}', - description: '@rule not from a disallowed list.', - }, - ], - - reject: [ - { - code: 'a { @extend %placeholder; }', - message: messages.rejected('extend'), - line: 1, - column: 5, - description: '@rule from a disallowed list, is a Sass directive.', - }, - { - code: ` - a { - @extend - %placeholder; - } - `, - message: messages.rejected('extend'), - line: 3, - column: 9, - description: '@rule from a disallowed list; newline after its name.', - }, - { - code: ` - @keyframes name { - from { top: 10px; } - to { top: 20px; } - } - `, - message: messages.rejected('keyframes'), - line: 2, - description: '@rule from a disallowed list; independent rule.', - }, - { - code: ` - @Keyframes name { - from { top: 10px; } - to { top: 20px; } - } - `, - message: messages.rejected('Keyframes'), - line: 2, - column: 7, - description: '@rule from a disallowed list; independent rule; messed case.', - }, - { - code: ` - @-moz-keyframes name { - from { top: 10px; } - to { top: 20px; } - } - `, - message: messages.rejected('-moz-keyframes'), - line: 2, - column: 7, - description: '@rule from a disallowed list; independent rule; has vendor prefix.', - }, - { - code: ` - @-WEBKET-KEYFRAMES name { - from { top: 10px; } - to { top: 20px; } - } - `, - message: messages.rejected('-WEBKET-KEYFRAMES'), - line: 2, - column: 7, - description: '@rule from a disallowed list; independent rule; has vendor prefix.', - }, - ], -}); - -testRule({ - ruleName, - - config: ['keyframes'], - - accept: [ - { - code: 'a { color: pink; }', - description: 'Some random code.', - }, - { - code: '@mixin name ($p) {}', - description: '@rule not from a disallowed list.', - }, - ], - - reject: [ - { - code: ` - @keyframes name { - from { top: 10px; } - to { top: 20px; } - } - `, - message: messages.rejected('keyframes'), - line: 2, - column: 7, - description: '@rule from a disallowed list; independent rule.', - }, - { - code: ` - @Keyframes name { - from { top: 10px; } - to { top: 20px; } - } - `, - message: messages.rejected('Keyframes'), - line: 2, - column: 7, - description: '@rule from a disallowed list; independent rule; messed case.', - }, - { - code: ` - @-moz-keyframes name { - from { top: 10px; } - to { top: 20px; } - } - `, - message: messages.rejected('-moz-keyframes'), - line: 2, - column: 7, - description: '@rule from a disallowed list; independent rule; has vendor prefix.', - }, - { - code: ` - @-WEBKET-KEYFRAMES name { - from { top: 10px; } - to { top: 20px; } - } - `, - message: messages.rejected('-WEBKET-KEYFRAMES'), - line: 2, - column: 7, - description: '@rule from a disallowed list; independent rule; has vendor prefix.', - }, - ], -}); - -testRule({ - ruleName, - syntax: 'less', - config: ['keyframes'], - - accept: [ - { - code: ` - .keyframes() { margin: 0; } - - span { .keyframes(); } - `, - description: 'ignore Less mixin which are treated as at-rule', - }, - ], -}); diff --git a/lib/rules/at-rule-blacklist/index.js b/lib/rules/at-rule-blacklist/index.js deleted file mode 100644 index ee90505aeb..0000000000 --- a/lib/rules/at-rule-blacklist/index.js +++ /dev/null @@ -1,64 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const isStandardSyntaxAtRule = require('../../utils/isStandardSyntaxAtRule'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); -const vendor = require('../../utils/vendor'); - -const ruleName = 'at-rule-blacklist'; - -const messages = ruleMessages(ruleName, { - rejected: (name) => `Unexpected at-rule "${name}"`, -}); - -function rule(listInput) { - // To allow for just a string as a parameter (not only arrays of strings) - const list = [].concat(listInput); - - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isString], - }); - - if (!validOptions) { - return; - } - - result.warn(`'${ruleName}' has been deprecated. Instead use 'at-rule-disallowed-list'.`, { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }); - - root.walkAtRules((atRule) => { - const name = atRule.name; - - if (!isStandardSyntaxAtRule(atRule)) { - return; - } - - if (!list.includes(vendor.unprefixed(name).toLowerCase())) { - return; - } - - report({ - message: messages.rejected(name), - node: atRule, - result, - ruleName, - }); - }); - }; -} - -rule.primaryOptionArray = true; - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/at-rule-property-requirelist/README.md b/lib/rules/at-rule-property-requirelist/README.md deleted file mode 100644 index 6108023b72..0000000000 --- a/lib/rules/at-rule-property-requirelist/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# at-rule-property-requirelist - -**_Deprecated: Instead use the [`at-rule-property-required-list`](../at-rule-property-required-list/README.md) rule._** - -Specify a list of required properties for an at-rule. - - -```css - @font-face { font-display: swap; font-family: 'foo'; } -/** ↑ ↑ ↑ - * At-rule and required property names */ -``` - -## Options - -`object`: `{ "at-rule-name": ["array", "of", "properties"] }` - -Given: - -``` -{ - "font-face": ["font-display", "font-family", "font-style"] -} -``` - -The following patterns are considered violations: - - -```css -@font-face { - font-family: 'foo'; - src: url('./fonts/foo.woff2') format('woff2'); -} -``` - - -```css -@font-face { - font-family: 'foo'; - font-style: normal; - src: url('./fonts/foo.woff2') format('woff2'); -} -``` - -The following patterns are _not_ considered violations: - - -```css -@font-face { - font-display: swap; - font-family: 'foo'; - font-style: normal; - src: url('./fonts/foo.woff2') format('woff2'); -} -``` diff --git a/lib/rules/at-rule-property-requirelist/__tests__/index.js b/lib/rules/at-rule-property-requirelist/__tests__/index.js deleted file mode 100644 index 751f3ce403..0000000000 --- a/lib/rules/at-rule-property-requirelist/__tests__/index.js +++ /dev/null @@ -1,89 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: { page: ['margin'] }, - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'at-rule-property-required-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - config: { - 'font-face': ['font-display', 'font-family'], - page: ['margin'], - }, - - accept: [ - { - code: "@font-face { font-display: auto; font-family: 'Arvo'; }", - description: '@font-face with both required properties', - }, - { - code: "@font-face { font-display: auto; font-family: 'Arvo'; src: url('abc'); /* IE9 */ }", - description: '@font-face with inner comment', - }, - { - code: "@FONT-FACE { FONT-DISPLAY: AUTO; FONT-FAMILY: 'ARVO'; }", - description: '@font-face with both required properties (case-sensitive)', - }, - { - code: '@page { padding: 0.5cm; margin: 1cm; }', - description: '@page with required property', - }, - { - code: '@counter-style counter { system: cyclic; }', - description: 'at-rule not specified in config', - }, - { - code: '@mixin invalid-at-rule { @content; }', - description: '@mixin with invalid at-rule', - }, - ], - - reject: [ - { - code: '@font-face { font-display: auto; }', - description: '@font-face with missing property', - message: messages.expected('font-family', 'font-face'), - }, - { - code: '@FONT-FACE { FONT-DISPLAY: AUTO; }', - description: '@font-face with missing property (case-sensitive)', - message: messages.expected('font-family', 'font-face'), - }, - { - code: "@font-face { font-family: 'Arvo'; font-weight: normal }", - description: '@font-face with missing property', - message: messages.expected('font-display', 'font-face'), - }, - { - code: '@page { padding: 0.5cm }', - description: '@page with missing property', - message: messages.expected('margin', 'page'), - }, - ], -}); diff --git a/lib/rules/at-rule-property-requirelist/index.js b/lib/rules/at-rule-property-requirelist/index.js deleted file mode 100644 index fec1038679..0000000000 --- a/lib/rules/at-rule-property-requirelist/index.js +++ /dev/null @@ -1,74 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const isStandardSyntaxAtRule = require('../../utils/isStandardSyntaxAtRule'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); - -const ruleName = 'at-rule-property-requirelist'; - -const messages = ruleMessages(ruleName, { - expected: (property, atRule) => `Expected property "${property}" for at-rule "${atRule}"`, -}); - -function rule(list) { - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isObject], - }); - - if (!validOptions) { - return; - } - - result.warn( - `'${ruleName}' has been deprecated. Instead use 'at-rule-property-required-list'.`, - { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }, - ); - - root.walkAtRules((atRule) => { - if (!isStandardSyntaxAtRule(atRule)) { - return; - } - - const { name, nodes } = atRule; - const atRuleName = name.toLowerCase(); - - if (!list[atRuleName]) { - return; - } - - list[atRuleName].forEach((property) => { - const propertyName = property.toLowerCase(); - - const hasProperty = nodes.find( - ({ type, prop }) => type === 'decl' && prop.toLowerCase() === propertyName, - ); - - if (hasProperty) { - return; - } - - return report({ - message: messages.expected(propertyName, atRuleName), - node: atRule, - result, - ruleName, - }); - }); - }); - }; -} - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/at-rule-whitelist/README.md b/lib/rules/at-rule-whitelist/README.md deleted file mode 100644 index f6e0a006a3..0000000000 --- a/lib/rules/at-rule-whitelist/README.md +++ /dev/null @@ -1,67 +0,0 @@ -# at-rule-whitelist - -**_Deprecated: Instead use the [`at-rule-allowed-list`](../at-rule-allowed-list/README.md) rule._** - -Specify a list of allowed at-rules. - - -```css - @keyframes name {} -/** ↑ - * At-rules like this */ -``` - -## Options - -`array|string`: `["array", "of", "unprefixed", "at-rules"]|"at-rule"` - -Given: - -``` -["extend", "keyframes"] -``` - -The following patterns are considered violations: - - -```css -@import "path/to/file.css"; -``` - - -```css -@media screen and (max-width: 1024px) { - a { display: none; } -} -``` - -The following patterns are _not_ considered violations: - - -```css -a { @extend placeholder; } -``` - - -```css -@keyframes name { - from { top: 10px; } - to { top: 20px; } -} -``` - - -```css -@KEYFRAMES name { - from { top: 10px; } - to { top: 20px; } -} -``` - - -```css -@-moz-keyframes name { - from { top: 10px; } - to { top: 20px; } -} -``` diff --git a/lib/rules/at-rule-whitelist/__tests__/index.js b/lib/rules/at-rule-whitelist/__tests__/index.js deleted file mode 100644 index cf2ca77dea..0000000000 --- a/lib/rules/at-rule-whitelist/__tests__/index.js +++ /dev/null @@ -1,195 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: ['extend'], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'at-rule-allowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - - config: ['extend', 'import', 'keyframes'], - - accept: [ - { - code: 'a { color: pink; }', - description: 'Some random code.', - }, - { - code: 'a { @extend %placeholder; }', - description: '@rule from an allowed list, is a Sass directive.', - }, - { - code: ` - a { - @extend - %placeholder; - } - `, - description: '@rule from an allowed list; newline after its name.', - }, - { - code: ` - @keyframes name { - from { top: 10px; } - to { top: 20px; } - } - `, - description: '@rule from an allowed list; independent rule.', - }, - { - code: ` - @Keyframes name { - from { top: 10px; } - to { top: 20px; } - } - `, - description: '@rule from an allowed list; independent rule; messed case.', - }, - { - code: ` - @-moz-keyframes name { - from { top: 10px; } - to { top: 20px; } - } - `, - description: '@rule from an allowed list; independent rule; has vendor prefix.', - }, - { - code: ` - @-WEBKET-KEYFRAMES name { - from { top: 10px; } - to { top: 20px; } - } - `, - description: '@rule from an allowed list; independent rule; has vendor prefix.', - }, - ], - - reject: [ - { - code: ` - @mixin name () {} - `, - line: 2, - columt: 7, - message: messages.rejected('mixin'), - description: '@rule not from an allowed list; independent rule.', - }, - ], -}); - -testRule({ - ruleName, - skipBasicChecks: true, - - config: ['keyframes'], - - accept: [ - { - code: ` - @keyframes name { - from { top: 10px; } - to { top: 20px; } - } - `, - description: '@rule from an allowed list; independent rule.', - }, - { - code: ` - @Keyframes name { - from { top: 10px; } - to { top: 20px; } - } - `, - description: '@rule from an allowed list; independent rule; messed case.', - }, - { - code: ` - @-moz-keyframes name { - from { top: 10px; } - to { top: 20px; } - } - `, - description: '@rule from an allowed list; independent rule; has vendor prefix.', - }, - { - code: ` - @-WEBKET-KEYFRAMES name { - from { top: 10px; } - to { top: 20px; } - } - `, - description: '@rule from an allowed list; independent rule; has vendor prefix.', - }, - ], - - reject: [ - { - code: ` - @mixin name ($p) {} - `, - message: messages.rejected('mixin'), - line: 2, - column: 7, - description: '@rule not from an allowed list.', - }, - { - code: "@import 'path/to/file.css';", - message: messages.rejected('import'), - line: 1, - column: 1, - description: '@rule not from an allowed list.', - }, - { - code: '@media screen and (max-witdh: 1000px) {}', - message: messages.rejected('media'), - line: 1, - column: 1, - description: '@rule not from an allowed list.', - }, - ], -}); - -testRule({ - ruleName, - syntax: 'less', - config: ['keyframes'], - skipBasicChecks: true, - - accept: [ - { - code: ` - .mixin() { margin: 0; } - - span { .mixin(); } - `, - description: 'ignore Less mixin which are treated as at-rule', - }, - ], -}); diff --git a/lib/rules/at-rule-whitelist/index.js b/lib/rules/at-rule-whitelist/index.js deleted file mode 100644 index afba56047c..0000000000 --- a/lib/rules/at-rule-whitelist/index.js +++ /dev/null @@ -1,64 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const isStandardSyntaxAtRule = require('../../utils/isStandardSyntaxAtRule'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); -const vendor = require('../../utils/vendor'); - -const ruleName = 'at-rule-whitelist'; - -const messages = ruleMessages(ruleName, { - rejected: (name) => `Unexpected at-rule "${name}"`, -}); - -function rule(listInput) { - // To allow for just a string as a parameter (not only arrays of strings) - const list = [].concat(listInput); - - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isString], - }); - - if (!validOptions) { - return; - } - - result.warn(`'${ruleName}' has been deprecated. Instead use 'at-rule-allowed-list'.`, { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }); - - root.walkAtRules((atRule) => { - const name = atRule.name; - - if (!isStandardSyntaxAtRule(atRule)) { - return; - } - - if (list.includes(vendor.unprefixed(name).toLowerCase())) { - return; - } - - report({ - message: messages.rejected(name), - node: atRule, - result, - ruleName, - }); - }); - }; -} - -rule.primaryOptionArray = true; - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/comment-word-blacklist/README.md b/lib/rules/comment-word-blacklist/README.md deleted file mode 100644 index bcac8e8b90..0000000000 --- a/lib/rules/comment-word-blacklist/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# comment-word-blacklist - -**_Deprecated: Instead use the [`comment-word-disallowed-list`](../comment-word-disallowed-list/README.md) rule._** - -Specify a list of disallowed words within comments. - - -```css - /* words within comments */ -/** ↑ ↑ ↑ - * These three words */ -``` - -**Caveat:** Comments within _selector and value lists_ are currently ignored. - -## Options - -`array|string|regexp`: `["array", "of", "words", /or/, "/regex/"]|"word"|"/regex/"` - -If a string is surrounded with `"/"` (e.g. `"/^TODO:/"`), it is interpreted as a regular expression. - -Given: - -``` -["/^TODO:/", "badword"] -``` - -The following patterns are considered violations: - - -```css -/* TODO: */ -``` - - -```css -/* TODO: add fallback */ -``` - - -```css -/* some badword */ -``` - -The following patterns are _not_ considered violations: - - -```css -/* comment */ -``` diff --git a/lib/rules/comment-word-blacklist/__tests__/index.js b/lib/rules/comment-word-blacklist/__tests__/index.js deleted file mode 100644 index 2e5a7288c1..0000000000 --- a/lib/rules/comment-word-blacklist/__tests__/index.js +++ /dev/null @@ -1,352 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: ['bad-word'], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'comment-word-disallowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - config: ['bad-word'], - - accept: [ - { - code: '/* comment */', - }, - { - code: '/*# bad-word */', - }, - ], - - reject: [ - { - code: '/* Comment with bad-word */', - message: messages.rejected('bad-word'), - line: 1, - column: 1, - }, - { - code: '/* bad-word */', - message: messages.rejected('bad-word'), - line: 1, - column: 1, - }, - { - code: '/*** bad-word ***/', - message: messages.rejected('bad-word'), - line: 1, - column: 1, - }, - { - code: '/*! bad-word */', - message: messages.rejected('bad-word'), - line: 1, - column: 1, - }, - { - code: '/** bad-word **/', - message: messages.rejected('bad-word'), - line: 1, - column: 1, - }, - ], -}); - -testRule({ - ruleName, - config: ['/^TODO:/', 'bad-word'], - - accept: [ - { - code: '/* comment */', - }, - { - code: '/* comment comment */', - }, - { - code: '/* comment\ncomment */', - }, - { - code: '/* comment\n\ncomment */', - }, - { - code: '/** comment */', - }, - { - code: '/**** comment ***/', - }, - { - code: '/*\ncomment\n*/', - }, - { - code: '/*\tcomment */', - }, - { - code: '/*! copyright */', - }, - { - code: '/*# sourcemap */', - }, - { - code: '/*# sourcemap bad-word */', - }, - { - code: 'a { color: pink; /* comment */\ntop: 0; }', - }, - { - code: 'a {} /* comment */', - }, - { - code: '/* todo */', - }, - { - code: '/* todo: */', - }, - { - code: '/* todo: comment */', - }, - { - code: '/* tOdO: comment */', - }, - { - code: '/* Todo: comment */', - }, - { - code: '/*! Todo: comment */', - }, - { - code: '/*# Todo: comment */', - }, - { - code: '/** TODO: comment **/', - }, - { - code: '/*** TODO: comment ***/', - }, - ], - - reject: [ - { - code: '/* TODO: */', - message: messages.rejected('/^TODO:/'), - line: 1, - column: 1, - }, - { - code: '/* TODO: comment */', - message: messages.rejected('/^TODO:/'), - line: 1, - column: 1, - }, - { - code: '/* TODO: comment\n next line */', - message: messages.rejected('/^TODO:/'), - line: 1, - column: 1, - }, - { - code: '/* TODO: comment\n next line */', - message: messages.rejected('/^TODO:/'), - line: 1, - column: 1, - }, - { - code: '/* TODO: comment\r\n next line */', - message: messages.rejected('/^TODO:/'), - line: 1, - column: 1, - }, - { - code: '/* TODO: comment\n\n next line */', - message: messages.rejected('/^TODO:/'), - line: 1, - column: 1, - }, - { - code: '/*\n TODO: comment */', - message: messages.rejected('/^TODO:/'), - line: 1, - column: 1, - }, - { - code: '/*\r\n TODO: comment */', - message: messages.rejected('/^TODO:/'), - line: 1, - column: 1, - }, - { - code: '/*\n\n TODO: comment */', - message: messages.rejected('/^TODO:/'), - line: 1, - column: 1, - }, - { - code: '/*\r\n\r\n TODO: comment */', - message: messages.rejected('/^TODO:/'), - line: 1, - column: 1, - }, - { - code: '/* bad-word */', - message: messages.rejected('bad-word'), - line: 1, - column: 1, - }, - { - code: '/* Comment with bad-word */', - message: messages.rejected('bad-word'), - line: 1, - column: 1, - }, - { - code: '/*! copyright bad-word */', - message: messages.rejected('bad-word'), - line: 1, - column: 1, - }, - { - code: '/** bad-word **/', - message: messages.rejected('bad-word'), - line: 1, - column: 1, - }, - { - code: '/*** bad-word ***/', - message: messages.rejected('bad-word'), - line: 1, - column: 1, - }, - ], -}); - -testRule({ - ruleName, - syntax: 'scss', - config: [['/^TODO:/', 'bad-word']], - - accept: [ - { - code: '// comment', - }, - { - code: '// todo', - }, - { - code: '// todo:', - }, - { - code: '// Todo:', - }, - { - code: '// tOdO:', - }, - ], - - reject: [ - { - code: '// TODO:', - message: messages.rejected('/^TODO:/'), - line: 1, - column: 1, - }, - { - code: '// TODO: comment', - message: messages.rejected('/^TODO:/'), - line: 1, - column: 1, - }, - { - code: '// bad-word', - message: messages.rejected('bad-word'), - line: 1, - column: 1, - }, - ], -}); - -testRule({ - ruleName, - syntax: 'less', - config: ['/^TODO:/', 'bad-word'], - - accept: [ - { - code: '// comment', - }, - { - code: '// todo:', - }, - { - code: '// Todo:', - }, - { - code: '// tOdO:', - }, - ], - - reject: [ - { - code: '// TODO:', - message: messages.rejected('/^TODO:/'), - line: 1, - column: 1, - }, - { - code: '// TODO: comment', - message: messages.rejected('/^TODO:/'), - line: 1, - column: 1, - }, - { - code: '// bad-word', - message: messages.rejected('bad-word'), - line: 1, - column: 1, - }, - ], -}); - -testRule({ - ruleName, - config: [/^TODO:/, 'bad-word'], - - accept: [ - { - code: '/* comment */', - }, - ], - - reject: [ - { - code: '/* TODO: */', - message: messages.rejected(/^TODO:/), - line: 1, - column: 1, - }, - ], -}); diff --git a/lib/rules/comment-word-blacklist/index.js b/lib/rules/comment-word-blacklist/index.js deleted file mode 100644 index ba75f9611e..0000000000 --- a/lib/rules/comment-word-blacklist/index.js +++ /dev/null @@ -1,66 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const containsString = require('../../utils/containsString'); -const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); - -const ruleName = 'comment-word-blacklist'; - -const messages = ruleMessages(ruleName, { - rejected: (pattern) => `Unexpected word matching pattern "${pattern}"`, -}); - -function rule(list) { - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isString, _.isRegExp], - }); - - if (!validOptions) { - return; - } - - result.warn(`'${ruleName}' has been deprecated. Instead use 'comment-word-disallowed-list'.`, { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }); - - root.walkComments((comment) => { - const text = comment.text; - const rawComment = comment.toString(); - const firstFourChars = rawComment.substr(0, 4); - - // Return early if sourcemap - if (firstFourChars === '/*# ') { - return; - } - - const matchesWord = matchesStringOrRegExp(text, list) || containsString(text, list); - - if (!matchesWord) { - return; - } - - report({ - message: messages.rejected(matchesWord.pattern), - node: comment, - result, - ruleName, - }); - }); - }; -} - -rule.primaryOptionArray = true; - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/declaration-property-unit-blacklist/README.md b/lib/rules/declaration-property-unit-blacklist/README.md deleted file mode 100644 index 7537255e43..0000000000 --- a/lib/rules/declaration-property-unit-blacklist/README.md +++ /dev/null @@ -1,76 +0,0 @@ -# declaration-property-unit-blacklist - -**_Deprecated: Instead use the [`declaration-property-unit-disallowed-list`](../declaration-property-unit-disallowed-list/README.md) rule._** - -Specify a list of disallowed property and unit pairs within declarations. - - -```css -a { width: 100px; } -/** ↑ ↑ - * These properties and these units */ -``` - -## Options - -`object`: `{ "unprefixed-property-name": ["array", "of", "units"] }` - -If a property name is surrounded with `"/"` (e.g. `"/^animation/"`), it is interpreted as a regular expression. This allows, for example, easy targeting of shorthands: `/^animation/` will match `animation`, `animation-duration`, `animation-timing-function`, etc. - -Given: - -``` -{ - "font-size": ["em", "px"], - "/^animation/": ["s"] -} -``` - -The following patterns are considered violations: - - -```css -a { font-size: 1em; } -``` - - -```css -a { animation: animation-name 5s ease; } -``` - - -```css -a { -webkit-animation: animation-name 5s ease; } -``` - - -```css -a { animation-duration: 5s; } -``` - -The following patterns are _not_ considered violations: - - -```css -a { font-size: 1.2rem; } -``` - - -```css -a { height: 100px; } -``` - - -```css -a { animation: animation-name 500ms ease; } -``` - - -```css -a { -webkit-animation: animation-name 500ms ease; } -``` - - -```css -a { animation-duration: 500ms; } -``` diff --git a/lib/rules/declaration-property-unit-blacklist/__tests__/index.js b/lib/rules/declaration-property-unit-blacklist/__tests__/index.js deleted file mode 100644 index 3e09c79fe8..0000000000 --- a/lib/rules/declaration-property-unit-blacklist/__tests__/index.js +++ /dev/null @@ -1,200 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: [{ margin: ['em'] }], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'declaration-property-unit-disallowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - - config: [ - { - 'font-size': ['px', 'em'], - margin: ['em'], - 'background-position': ['%'], - animation: ['s'], - }, - ], - - accept: [ - { - code: 'a { color: pink; }', - }, - { - code: 'a { top: 0; }', - }, - { - code: 'a { color: #000; }', - }, - { - code: 'a { margin: 0 0 0 0 }', - }, - { - code: 'a { margin: 0 10px 5rem 2in; }', - }, - { - code: 'a { margin: 0 10pX 5rem 2in; }', - }, - { - code: 'a { margin: 0 10PX 5rem 2in; }', - }, - { - code: 'a { background-position: top right, 1em 5vh; }', - }, - { - code: 'a { margin: calc(30vh - 10vh); }', - }, - { - code: 'a { animation: animation-name 300ms ease; }', - }, - { - code: 'a { -webkit-animation: animation-name 300ms ease; }', - }, - { - code: 'a { animation-duration: 3s; }', - }, - { - code: 'a { -webkit-animation-duration: 3s; }', - }, - { - code: 'a { font-size: /* 100px */ 1.2rem; }', - description: 'ignore unit within comments', - }, - { - code: 'a::before { font-size: "10px"}', - description: 'ignore unit within quotes', - }, - { - code: 'a { font-size: $fs10px; }', - description: 'ignore preprocessor variable includes unit', - }, - { - code: 'a { font-size: --some-fs-10px; }', - description: 'ignore css variable includes unit', - }, - ], - - reject: [ - { - code: 'a { font-size: 12px; }', - message: messages.rejected('font-size', 'px'), - line: 1, - column: 16, - }, - { - code: 'a { font-size: 12pX; }', - message: messages.rejected('font-size', 'pX'), - line: 1, - column: 16, - }, - { - code: 'a { font-size: 12PX; }', - message: messages.rejected('font-size', 'PX'), - line: 1, - column: 16, - }, - { - code: 'a { margin: 10px 0 5em; }', - message: messages.rejected('margin', 'em'), - line: 1, - column: 20, - }, - { - code: 'a { background-position: 0 10%; }', - message: messages.rejected('background-position', '%'), - line: 1, - column: 28, - }, - { - code: 'a { background-position: top right, 0 10%; }', - message: messages.rejected('background-position', '%'), - line: 1, - column: 39, - }, - { - code: 'a { margin: calc(10vh - 10em); }', - message: messages.rejected('margin', 'em'), - column: 25, - }, - { - code: 'a { animation: foo 3s; }', - message: messages.rejected('animation', 's'), - }, - { - code: 'a { -webkit-animation: foo 3s; }', - message: messages.rejected('-webkit-animation', 's'), - }, - ], -}); - -testRule({ - ruleName, - - config: [ - { - '/^animation/': ['s'], - }, - ], - - skipBasicChecks: true, - - accept: [ - { - code: 'a { animation: animation-name 300ms ease; }', - }, - { - code: 'a { -webkit-animation: animation-name 300ms ease; }', - }, - { - code: 'a { animation-duration: 300ms; }', - }, - { - code: 'a { -webkit-animation-duration: 300ms; }', - }, - ], - - reject: [ - { - code: 'a { animation: animation-name 3s ease; }', - message: messages.rejected('animation', 's'), - }, - { - code: 'a { -webkit-animation: animation-name 3s ease; }', - message: messages.rejected('-webkit-animation', 's'), - }, - { - code: 'a { animation-duration: 3s; }', - message: messages.rejected('animation-duration', 's'), - }, - { - code: 'a { -webkit-animation-duration: 3s; }', - message: messages.rejected('-webkit-animation-duration', 's'), - }, - ], -}); diff --git a/lib/rules/declaration-property-unit-blacklist/index.js b/lib/rules/declaration-property-unit-blacklist/index.js deleted file mode 100644 index 15eaf928c5..0000000000 --- a/lib/rules/declaration-property-unit-blacklist/index.js +++ /dev/null @@ -1,86 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const declarationValueIndex = require('../../utils/declarationValueIndex'); -const getUnitFromValueNode = require('../../utils/getUnitFromValueNode'); -const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); -const valueParser = require('postcss-value-parser'); -const vendor = require('../../utils/vendor'); - -const ruleName = 'declaration-property-unit-blacklist'; - -const messages = ruleMessages(ruleName, { - rejected: (property, unit) => `Unexpected unit "${unit}" for property "${property}"`, -}); - -function rule(list) { - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isObject], - }); - - if (!validOptions) { - return; - } - - result.warn( - `'${ruleName}' has been deprecated. Instead use 'declaration-property-unit-disallowed-list'.`, - { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }, - ); - - root.walkDecls((decl) => { - const prop = decl.prop; - const value = decl.value; - - const unprefixedProp = vendor.unprefixed(prop); - - const propList = _.find(list, (units, propIdentifier) => - matchesStringOrRegExp(unprefixedProp, propIdentifier), - ); - - if (!propList) { - return; - } - - valueParser(value).walk((node) => { - // Ignore wrong units within `url` function - if (node.type === 'function' && node.value.toLowerCase() === 'url') { - return false; - } - - if (node.type === 'string') { - return; - } - - const unit = getUnitFromValueNode(node); - - if (!unit || (unit && !propList.includes(unit.toLowerCase()))) { - return; - } - - report({ - message: messages.rejected(prop, unit), - node: decl, - index: declarationValueIndex(decl) + node.sourceIndex, - result, - ruleName, - }); - }); - }); - }; -} - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/declaration-property-unit-whitelist/README.md b/lib/rules/declaration-property-unit-whitelist/README.md deleted file mode 100644 index da73901d63..0000000000 --- a/lib/rules/declaration-property-unit-whitelist/README.md +++ /dev/null @@ -1,87 +0,0 @@ -# declaration-property-unit-whitelist - -**_Deprecated: Instead use the [`declaration-property-unit-allowed-list`](../declaration-property-unit-allowed-list/README.md) rule._** - -Specify a list of allowed property and unit pairs within declarations. - - -```css -a { width: 100px; } -/** ↑ ↑ - * These properties and these units */ -``` - -## Options - -`object`: `{ "unprefixed-property-name": ["array", "of", "units"] }` - -If a property name is surrounded with `"/"` (e.g. `"/^animation/"`), it is interpreted as a regular expression. This allows, for example, easy targeting of shorthands: `/^animation/` will match `animation`, `animation-duration`, `animation-timing-function`, etc. - -Given: - -``` -{ - "font-size": ["em", "px"], - "/^animation/": ["s"], - "line-height": [] -} -``` - -The following patterns are considered violations: - - -```css -a { font-size: 1.2rem; } -``` - - -```css -a { animation: animation-name 500ms ease; } -``` - - -```css -a { -webkit-animation: animation-name 500ms ease; } -``` - - -```css -a { animation-duration: 500ms; } -``` - - -```css -a { line-height: 13px; } -``` - -The following patterns are _not_ considered violations: - - -```css -a { font-size: 1em; } -``` - - -```css -a { height: 100px; } -``` - - -```css -a { animation: animation-name 5s ease; } -``` - - -```css -a { -webkit-animation: animation-name 5s ease; } -``` - - -```css -a { animation-duration: 5s; } -``` - - -```css -a { line-height: 1; } -``` diff --git a/lib/rules/declaration-property-unit-whitelist/__tests__/index.js b/lib/rules/declaration-property-unit-whitelist/__tests__/index.js deleted file mode 100644 index d37f31fe4d..0000000000 --- a/lib/rules/declaration-property-unit-whitelist/__tests__/index.js +++ /dev/null @@ -1,205 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: [{ margin: ['em'] }], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'declaration-property-unit-allowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - - config: [ - { - 'font-size': ['px', 'em'], - margin: ['em'], - 'background-position': ['%'], - animation: ['s'], - 'line-height': [], - }, - ], - - accept: [ - { - code: 'a { color: pink; }', - }, - { - code: 'a { top: 0; }', - }, - { - code: 'a { color: #000; }', - }, - { - code: 'a { margin: 0 0 0 0; }', - }, - { - code: 'a { margin: 0 10em; }', - }, - { - code: 'a { margin: 0 10eM; }', - }, - { - code: 'a { margin: 0 10EM; }', - }, - { - code: 'a { background-position: top right, 0 50%; }', - }, - { - code: 'a { margin: calc(30em - 10em); }', - }, - { - code: 'a { animation: animation-name 1s ease; }', - }, - { - code: 'a { -webkit-animation: animation-name 1s ease; }', - }, - { - code: 'a { line-height: 1; }', - }, - { - code: 'a { font-size: /* 1.2rem */ 12px; }', - description: 'ignore unit within comments', - }, - { - code: 'a::before { font-size: "1.2rem"}', - description: 'ignore unit within quotes', - }, - { - code: 'a { font-size: $fs1rem; }', - description: 'ignore preprocessor variable includes unit', - }, - { - code: 'a { font-size: --some-fs-1rem; }', - description: 'ignore css variable includes unit', - }, - ], - - reject: [ - { - code: 'a { font-size: 1.2rem; }', - message: messages.rejected('font-size', 'rem'), - line: 1, - column: 16, - }, - { - code: 'a { font-size: 1.2rEm; }', - message: messages.rejected('font-size', 'rEm'), - line: 1, - column: 16, - }, - { - code: 'a { font-size: 1.2REM; }', - message: messages.rejected('font-size', 'REM'), - line: 1, - column: 16, - }, - { - code: 'a { margin: 10em 0 1rem; }', - message: messages.rejected('margin', 'rem'), - line: 1, - column: 20, - }, - { - code: 'a { background-position: 0 10px; }', - message: messages.rejected('background-position', 'px'), - line: 1, - column: 28, - }, - { - code: 'a { background-position: top right, 0 10px; }', - message: messages.rejected('background-position', 'px'), - line: 1, - column: 39, - }, - { - code: 'a { margin: calc(10em - 10px); }', - message: messages.rejected('margin', 'px'), - column: 25, - }, - { - code: 'a { animation: animation-name 300ms ease; }', - message: messages.rejected('animation', 'ms'), - column: 31, - }, - { - code: 'a { -webkit-animation: animation-name 300ms ease; }', - message: messages.rejected('-webkit-animation', 'ms'), - column: 39, - }, - { - code: 'a { line-height: 1.2em; }', - message: messages.rejected('line-height', 'em'), - column: 18, - }, - ], -}); - -testRule({ - ruleName, - - config: [ - { - '/^animation/': ['ms'], - }, - ], - - skipBasicChecks: true, - - accept: [ - { - code: 'a { animation: animation-name 300ms ease; }', - }, - { - code: 'a { -webkit-animation: animation-name 300ms ease; }', - }, - { - code: 'a { animation-duration: 300ms; }', - }, - { - code: 'a { -webkit-animation-duration: 300ms; }', - }, - ], - - reject: [ - { - code: 'a { animation: animation-name 3s ease; }', - message: messages.rejected('animation', 's'), - }, - { - code: 'a { -webkit-animation: animation-name 3s ease; }', - message: messages.rejected('-webkit-animation', 's'), - }, - { - code: 'a { animation-duration: 3s; }', - message: messages.rejected('animation-duration', 's'), - }, - { - code: 'a { -webkit-animation-duration: 3s; }', - message: messages.rejected('-webkit-animation-duration', 's'), - }, - ], -}); diff --git a/lib/rules/declaration-property-unit-whitelist/index.js b/lib/rules/declaration-property-unit-whitelist/index.js deleted file mode 100644 index a70bcfd512..0000000000 --- a/lib/rules/declaration-property-unit-whitelist/index.js +++ /dev/null @@ -1,86 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const declarationValueIndex = require('../../utils/declarationValueIndex'); -const getUnitFromValueNode = require('../../utils/getUnitFromValueNode'); -const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); -const valueParser = require('postcss-value-parser'); -const vendor = require('../../utils/vendor'); - -const ruleName = 'declaration-property-unit-whitelist'; - -const messages = ruleMessages(ruleName, { - rejected: (property, unit) => `Unexpected unit "${unit}" for property "${property}"`, -}); - -function rule(list) { - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isObject], - }); - - if (!validOptions) { - return; - } - - result.warn( - `'${ruleName}' has been deprecated. Instead use 'declaration-property-unit-allowed-list'.`, - { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }, - ); - - root.walkDecls((decl) => { - const prop = decl.prop; - const value = decl.value; - - const unprefixedProp = vendor.unprefixed(prop); - - const propList = _.find(list, (units, propIdentifier) => - matchesStringOrRegExp(unprefixedProp, propIdentifier), - ); - - if (!propList) { - return; - } - - valueParser(value).walk((node) => { - // Ignore wrong units within `url` function - if (node.type === 'function' && node.value.toLowerCase() === 'url') { - return false; - } - - if (node.type === 'string') { - return; - } - - const unit = getUnitFromValueNode(node); - - if (!unit || (unit && propList.indexOf(unit.toLowerCase())) !== -1) { - return; - } - - report({ - message: messages.rejected(prop, unit), - node: decl, - index: declarationValueIndex(decl) + node.sourceIndex, - result, - ruleName, - }); - }); - }); - }; -} - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/declaration-property-value-blacklist/README.md b/lib/rules/declaration-property-value-blacklist/README.md deleted file mode 100644 index 9edd6c9b1d..0000000000 --- a/lib/rules/declaration-property-value-blacklist/README.md +++ /dev/null @@ -1,107 +0,0 @@ -# declaration-property-value-blacklist - -**_Deprecated: Instead use the [`declaration-property-value-disallowed-list`](../declaration-property-value-disallowed-list/README.md) rule._** - -Specify a list of disallowed property and value pairs within declarations. - - -```css -a { text-transform: uppercase; } -/** ↑ ↑ - * These properties and these values */ -``` - -## Options - -`object`: `{ "unprefixed-property-name": ["array", "of", "values"], "unprefixed-property-name": ["/regex/", "non-regex", /regex/] }` - -If a property name is surrounded with `"/"` (e.g. `"/^animation/"`), it is interpreted as a regular expression. This allows, for example, easy targeting of shorthands: `/^animation/` will match `animation`, `animation-duration`, `animation-timing-function`, etc. - -The same goes for values. Keep in mind that a regular expression value is matched against the entire value of the declaration, not specific parts of it. For example, a value like `"10px solid rgba( 255 , 0 , 0 , 0.5 )"` will _not_ match `"/^solid/"` (notice beginning of the line boundary) but _will_ match `"/\\s+solid\\s+/"` or `"/\\bsolid\\b/"`. - -Be careful with regex matching not to accidentally consider quoted string values and `url()` arguments. For example, `"/red/"` will match value such as `"1px dotted red"` as well as `"\"foo\""` and `"white url(/mysite.com/red.png)"`. - -Given: - -``` -{ - "transform": ["/scale3d/", "/rotate3d/", "/translate3d/"], - "position": ["fixed"], - "color": ["/^green/"], - "/^animation/": ["/ease/"] -} -``` - -The following patterns are considered violations: - - -```css -a { position: fixed; } -``` - - -```css -a { transform: scale3d(1, 2, 3); } -``` - - -```css -a { -webkit-transform: scale3d(1, 2, 3); } -``` - - -```css -a { color: green; } -``` - - -```css -a { animation: foo 2s ease-in-out; } -``` - - -```css -a { animation-timing-function: ease-in-out; } -``` - - -```css -a { -webkit-animation-timing-function: ease-in-out; } -``` - -The following patterns are _not_ considered violations: - - -```css -a { position: relative; } -``` - - -```css -a { transform: scale(2); } -``` - - -```css -a { -webkit-transform: scale(2); } -``` - - -```css -a { color: lightgreen; } -``` - - -```css -a { animation: foo 2s linear; } -``` - - -```css -a { animation-timing-function: linear; } -``` - - -```css -a { -webkit-animation-timing-function: linear; } -``` diff --git a/lib/rules/declaration-property-value-blacklist/__tests__/index.js b/lib/rules/declaration-property-value-blacklist/__tests__/index.js deleted file mode 100644 index 5526e3a659..0000000000 --- a/lib/rules/declaration-property-value-blacklist/__tests__/index.js +++ /dev/null @@ -1,215 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: [{ color: ['red'] }], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'declaration-property-value-disallowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - - config: [ - { - // regular string - 'text-transform': ['uppercase'], - // regexes - transform: ['/scale3d/', '/rotate3d/', '/translate3d/'], - // mixed string and regex - color: ['red', 'green', 'blue', '/^sea/'], - }, - ], - - accept: [ - { - code: 'a { color: pink; }', - }, - { - code: 'a { color: lightgreen; }', - }, - { - code: 'a { text-transform: lowercase; }', - }, - { - code: 'a { transform: matrix(1.0, 2.0, 3.0, 4.0, 5.0, 6.0) translate(12px, 50%); }', - }, - { - code: 'a { -webkit-transform: matrix(1.0, 2.0, 3.0, 4.0, 5.0, 6.0) translate(12px, 50%); }', - }, - { - code: 'a { color: /* red */ pink; }', - description: 'ignore value within comments', - }, - { - code: 'a::before { color: "red"}', - description: 'ignore value within quotes', - }, - { - code: 'a { color: $red; }', - description: 'ignore preprocessor variable includes value', - }, - { - code: 'a { color: --some-red; }', - description: 'ignore css variable includes value', - }, - { - code: 'a { color: darkseagreen }', - }, - ], - - reject: [ - { - code: 'a { color: red; }', - message: messages.rejected('color', 'red'), - line: 1, - column: 5, - }, - { - code: 'a { color: green }', - message: messages.rejected('color', 'green'), - line: 1, - column: 5, - }, - { - code: 'a { text-transform: uppercase; }', - message: messages.rejected('text-transform', 'uppercase'), - line: 1, - column: 5, - }, - { - code: 'a { transform: scale3d(1, 2, 3) }', - message: messages.rejected('transform', 'scale3d(1, 2, 3)'), - line: 1, - column: 5, - }, - { - code: 'a { -webkit-transform: scale3d(1, 2, 3) }', - message: messages.rejected('-webkit-transform', 'scale3d(1, 2, 3)'), - column: 5, - }, - { - code: 'a { color: seagreen }', - message: messages.rejected('color', 'seagreen'), - column: 5, - }, - ], -}); - -testRule({ - ruleName, - - config: [ - { - '/^animation/': ['/ease/'], - }, - ], - - skipBasicChecks: true, - - accept: [ - { - code: 'a { animation: foo 1s linear; }', - }, - { - code: 'a { -webkit-animation: foo 1s linear; }', - }, - { - code: 'a { animation-timing-function: linear; }', - }, - { - code: 'a { -webkit-animation-timing-function: linear; }', - }, - ], - - reject: [ - { - code: 'a { animation: foo 1s ease-in-out; }', - message: messages.rejected('animation', 'foo 1s ease-in-out'), - }, - { - code: 'a { -webkit-animation: foo 1s ease-in-out; }', - message: messages.rejected('-webkit-animation', 'foo 1s ease-in-out'), - }, - { - code: 'a { animation-timing-function: ease-in-out; }', - message: messages.rejected('animation-timing-function', 'ease-in-out'), - }, - { - code: 'a { -webkit-animation-timing-function: ease-in-out; }', - message: messages.rejected('-webkit-animation-timing-function', 'ease-in-out'), - }, - ], -}); - -testRule({ - ruleName, - - config: [ - { - '/^animation/': [/ease/], - }, - ], - - skipBasicChecks: true, - - accept: [ - { - code: 'a { animation: foo 1s linear; }', - }, - ], - - reject: [ - { - code: 'a { animation: foo 1s ease-in-out; }', - message: messages.rejected('animation', 'foo 1s ease-in-out'), - }, - { - code: 'a { -webkit-animation: foo 1s ease-in-out; }', - message: messages.rejected('-webkit-animation', 'foo 1s ease-in-out'), - }, - { - code: 'a { animation-timing-function: ease-in-out; }', - message: messages.rejected('animation-timing-function', 'ease-in-out'), - }, - { - code: 'a { -webkit-animation-timing-function: ease-in-out; }', - message: messages.rejected('-webkit-animation-timing-function', 'ease-in-out'), - }, - ], -}); - -testRule({ - ruleName, - config: { position: ['fixed'] }, - skipBasicChecks: true, - accept: [ - { - code: 'a { font-size: 1em; }', - description: 'irrelevant CSS', - }, - ], -}); diff --git a/lib/rules/declaration-property-value-blacklist/index.js b/lib/rules/declaration-property-value-blacklist/index.js deleted file mode 100644 index ced1e21978..0000000000 --- a/lib/rules/declaration-property-value-blacklist/index.js +++ /dev/null @@ -1,68 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); -const vendor = require('../../utils/vendor'); - -const ruleName = 'declaration-property-value-blacklist'; - -const messages = ruleMessages(ruleName, { - rejected: (property, value) => `Unexpected value "${value}" for property "${property}"`, -}); - -function rule(list) { - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isObject], - }); - - if (!validOptions) { - return; - } - - result.warn( - `'${ruleName}' has been deprecated. Instead use 'declaration-property-value-disallowed-list'.`, - { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }, - ); - - root.walkDecls((decl) => { - const prop = decl.prop; - const value = decl.value; - - const unprefixedProp = vendor.unprefixed(prop); - const propList = _.find(list, (values, propIdentifier) => - matchesStringOrRegExp(unprefixedProp, propIdentifier), - ); - - if (_.isEmpty(propList)) { - return; - } - - if (!matchesStringOrRegExp(value, propList)) { - return; - } - - report({ - message: messages.rejected(prop, value), - node: decl, - result, - ruleName, - }); - }); - }; -} - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/declaration-property-value-whitelist/README.md b/lib/rules/declaration-property-value-whitelist/README.md deleted file mode 100644 index 2e7f2b9848..0000000000 --- a/lib/rules/declaration-property-value-whitelist/README.md +++ /dev/null @@ -1,98 +0,0 @@ -# declaration-property-value-whitelist - -**_Deprecated: Instead use the [`declaration-property-value-allowed-list`](../declaration-property-value-allowed-list/README.md) rule._** - -Specify a list of allowed property and value pairs within declarations. - - -```css -a { text-transform: uppercase; } -/** ↑ ↑ - * These properties and these values */ -``` - -## Options - -`object`: `{ "unprefixed-property-name": ["array", "of", "values"], "unprefixed-property-name": ["/regex/", "non-regex"] }` - -If a property name is found in the object, only the listed property values are allowed. This rule complains about all non-matching values. (If the property name is not included in the object, anything goes.) - -If a property name is surrounded with `"/"` (e.g. `"/^animation/"`), it is interpreted as a regular expression. This allows, for example, easy targeting of shorthands: `/^animation/` will match `animation`, `animation-duration`, `animation-timing-function`, etc. - -The same goes for values. Keep in mind that a regular expression value is matched against the entire value of the declaration, not specific parts of it. For example, a value like `"10px solid rgba( 255 , 0 , 0 , 0.5 )"` will _not_ match `"/^solid/"` (notice beginning of the line boundary) but _will_ match `"/\\s+solid\\s+/"` or `"/\\bsolid\\b/"`. - -Be careful with regex matching not to accidentally consider quoted string values and `url()` arguments. For example, `"/red/"` will match value such as `"1px dotted red"` as well as `"\"red\""` and `"white url(/mysite.com/red.png)"`. - -Given: - -``` -{ - "transform": ["/scale/"], - "whitespace": ["nowrap"], - "/color/": ["/^green/"] -} -``` - -The following patterns are considered violations: - - -```css -a { whitespace: pre; } -``` - - -```css -a { transform: translate(1, 1); } -``` - - -```css -a { -webkit-transform: translate(1, 1); } -``` - - -```css -a { color: pink; } -``` - - -```css -a { background-color: pink; } -``` - -The following patterns are _not_ considered violations: - - -```css -a { color: pink; } -``` - - -```css -a { whitespace: nowrap; } -``` - - -```css -a { transform: scale(1, 1); } -``` - - -```css -a { -webkit-transform: scale(1, 1); } -``` - - -```css -a { color: green; } -``` - - -```css -a { background-color: green; } -``` - - -```css -a { background: pink; } -``` diff --git a/lib/rules/declaration-property-value-whitelist/__tests__/index.js b/lib/rules/declaration-property-value-whitelist/__tests__/index.js deleted file mode 100644 index 2daf53488e..0000000000 --- a/lib/rules/declaration-property-value-whitelist/__tests__/index.js +++ /dev/null @@ -1,106 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: [{ transform: ['/scale/'] }], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'declaration-property-value-allowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - - config: [ - { - transform: ['/scale/'], - whitespace: ['nowrap'], - '/color/': ['/^green/'], - }, - ], - - accept: [ - { - code: 'div { whitespace: nowrap; }', - }, - { - code: 'a { transform: scale(1, 1); }', - }, - { - code: 'a { -webkit-transform: scale(1, 1); }', - }, - { - code: 'a { color: green; }', - }, - { - code: 'a { background-color: green; }', - }, - ], - - reject: [ - { - code: 'div { whitespace: pre; }', - message: messages.rejected('whitespace', 'pre'), - line: 1, - column: 7, - }, - { - code: 'a { transform: translate(1, 1); }', - message: messages.rejected('transform', 'translate(1, 1)'), - line: 1, - column: 5, - }, - { - code: 'a { -webkit-transform: translate(1, 1); }', - message: messages.rejected('-webkit-transform', 'translate(1, 1)'), - line: 1, - column: 5, - }, - { - code: 'a { color: pink; }', - message: messages.rejected('color', 'pink'), - line: 1, - column: 5, - }, - { - code: 'a { background-color: pink; }', - message: messages.rejected('background-color', 'pink'), - line: 1, - column: 5, - }, - ], -}); - -testRule({ - ruleName, - config: { position: ['static'] }, - skipBasicChecks: true, - accept: [ - { - code: 'a { font-size: 1em; }', - description: 'irrelevant CSS', - }, - ], -}); diff --git a/lib/rules/declaration-property-value-whitelist/index.js b/lib/rules/declaration-property-value-whitelist/index.js deleted file mode 100644 index e6d95577e2..0000000000 --- a/lib/rules/declaration-property-value-whitelist/index.js +++ /dev/null @@ -1,68 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); -const vendor = require('../../utils/vendor'); - -const ruleName = 'declaration-property-value-whitelist'; - -const messages = ruleMessages(ruleName, { - rejected: (property, value) => `Unexpected value "${value}" for property "${property}"`, -}); - -function rule(list) { - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isObject], - }); - - if (!validOptions) { - return; - } - - result.warn( - `'${ruleName}' has been deprecated. Instead use 'declaration-property-value-allowed-list'.`, - { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }, - ); - - root.walkDecls((decl) => { - const prop = decl.prop; - const value = decl.value; - - const unprefixedProp = vendor.unprefixed(prop); - const propList = _.find(list, (values, propIdentifier) => - matchesStringOrRegExp(unprefixedProp, propIdentifier), - ); - - if (_.isEmpty(propList)) { - return; - } - - if (matchesStringOrRegExp(value, propList)) { - return; - } - - report({ - message: messages.rejected(prop, value), - node: decl, - result, - ruleName, - }); - }); - }; -} - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/function-blacklist/README.md b/lib/rules/function-blacklist/README.md deleted file mode 100644 index 9cb80e361c..0000000000 --- a/lib/rules/function-blacklist/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# function-blacklist - -**_Deprecated: Instead use the [`function-disallowed-list`](../function-disallowed-list/README.md) rule._** - -Specify a list of disallowed functions. - - -```css -a { transform: scale(1); } -/** ↑ - * This function */ -``` - -## Options - -`array|string`: `["array", "of", "unprefixed", /functions/ or "regex"]|"function"|"/regex/"` - -If a string is surrounded with `"/"` (e.g. `"/^rgb/"`), it is interpreted as a regular expression. - -Given: - -``` -["scale", "rgba", "linear-gradient"] -``` - -The following patterns are considered violations: - - -```css -a { transform: scale(1); } -``` - - -```css -a { - color: rgba(0, 0, 0, 0.5); -} -``` - - -```css -a { - background: - red, - -moz-linear-gradient(45deg, blue, red); -} -``` - -The following patterns are _not_ considered violations: - - -```css -a { background: red; } -``` diff --git a/lib/rules/function-blacklist/__tests__/index.js b/lib/rules/function-blacklist/__tests__/index.js deleted file mode 100644 index 77bb83177d..0000000000 --- a/lib/rules/function-blacklist/__tests__/index.js +++ /dev/null @@ -1,248 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: ['rgba'], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'function-disallowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - - config: ['rgba', 'scale', 'linear-gradient'], - - accept: [ - { - code: 'a { color: pink; }', - }, - { - code: 'a { transform: SCALE(1); }', - }, - { - code: 'a { transform: sCaLe(1); }', - }, - { - code: 'a { transform: rotate(7deg) }', - }, - { - code: 'a { transform: rOtAtE(7deg) }', - }, - { - code: 'a { transform: ROTATE(7deg) }', - }, - { - code: 'a { background: -webkit-radial-gradient(red, green, blue); }', - }, - { - code: 'a { color: color(rgb(0, 0, 0) lightness(50%)); }', - }, - { - code: '@media (max-width: 10px) { a { color: color(rgb(0, 0, 0) lightness(50%)); } }', - }, - { - code: '$scale: (value, value2)', - description: 'Sass list ignored', - }, - ], - - reject: [ - { - code: 'a { transform: scale(1); }', - message: messages.rejected('scale'), - line: 1, - column: 16, - }, - { - code: 'a { transform : scale(1); }', - message: messages.rejected('scale'), - line: 1, - column: 17, - }, - { - code: 'a\n{ transform: scale(1); }', - message: messages.rejected('scale'), - line: 2, - column: 14, - }, - { - code: 'a { transform: scale(1); }', - message: messages.rejected('scale'), - line: 1, - column: 19, - }, - { - code: ' a { transform: scale(1); }', - message: messages.rejected('scale'), - line: 1, - column: 18, - }, - { - code: 'a { color: rgba(0, 0, 0, 0) }', - message: messages.rejected('rgba'), - line: 1, - column: 12, - }, - { - code: 'a { color: color(rgba(0, 0, 0, 0) lightness(50%)); }', - message: messages.rejected('rgba'), - line: 1, - column: 18, - }, - { - code: 'a { background: red, -moz-linear-gradient(45deg, blue, red); }', - message: messages.rejected('-moz-linear-gradient'), - line: 1, - column: 22, - }, - { - code: '@media (max-width: 10px) { a { color: color(rgba(0, 0, 0) lightness(50%)); } }', - message: messages.rejected('rgba'), - line: 1, - column: 45, - }, - ], -}); - -testRule({ - ruleName, - - config: ['/rgb/'], - - accept: [ - { - code: 'a { color: hsl(208, 100%, 97%); }', - }, - ], - - reject: [ - { - code: 'a { color: rgb(0, 0, 0); }', - message: messages.rejected('rgb'), - line: 1, - column: 12, - }, - { - code: 'a { color: rgba(0, 0, 0); }', - message: messages.rejected('rgba'), - line: 1, - column: 12, - }, - ], -}); - -testRule({ - ruleName, - - config: [/rgb/], - - accept: [ - { - code: 'a { color: hsl(208, 100%, 97%); }', - }, - ], - - reject: [ - { - code: 'a { color: rgb(0, 0, 0); }', - message: messages.rejected('rgb'), - line: 1, - column: 12, - }, - { - code: 'a { color: rgba(0, 0, 0); }', - message: messages.rejected('rgba'), - line: 1, - column: 12, - }, - ], -}); - -testRule({ - ruleName, - - config: ['skewx', 'translateX', 'SCALEX', '/rotate/i', '/MATRIX/'], - - accept: [ - { - code: 'a { transform: stewX(10deg); }', - }, - { - code: 'a { transform: translateY(5px); }', - }, - { - code: 'a { transform: scaleX(1); }', - }, - { - code: 'a { transform: matrix3d(a1); }', - }, - ], - - reject: [ - { - code: 'a { transform: skewx(10deg); }', - message: messages.rejected('skewx'), - line: 1, - column: 16, - }, - { - code: 'a { transform: translateX(5px); }', - message: messages.rejected('translateX'), - line: 1, - column: 16, - }, - { - code: 'a { transform: SCALEX(1); }', - message: messages.rejected('SCALEX'), - line: 1, - column: 16, - }, - { - code: 'a { transform: rotatex(60deg); }', - message: messages.rejected('rotatex'), - line: 1, - column: 16, - }, - { - code: 'a { transform: rotateX(60deg); }', - message: messages.rejected('rotateX'), - line: 1, - column: 16, - }, - { - code: 'a { transform: ROTATEX(60deg); }', - message: messages.rejected('ROTATEX'), - line: 1, - column: 16, - }, - { - code: 'a { transform: MATRIX3d(a1); }', - message: messages.rejected('MATRIX3d'), - line: 1, - column: 16, - }, - ], -}); diff --git a/lib/rules/function-blacklist/index.js b/lib/rules/function-blacklist/index.js deleted file mode 100644 index 1c1e09cdc9..0000000000 --- a/lib/rules/function-blacklist/index.js +++ /dev/null @@ -1,71 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const declarationValueIndex = require('../../utils/declarationValueIndex'); -const isStandardSyntaxFunction = require('../../utils/isStandardSyntaxFunction'); -const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); -const valueParser = require('postcss-value-parser'); -const vendor = require('../../utils/vendor'); - -const ruleName = 'function-blacklist'; - -const messages = ruleMessages(ruleName, { - rejected: (name) => `Unexpected function "${name}"`, -}); - -function rule(list) { - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isString, _.isRegExp], - }); - - if (!validOptions) { - return; - } - - result.warn(`'${ruleName}' has been deprecated. Instead use 'function-disallowed-list'.`, { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }); - - root.walkDecls((decl) => { - const value = decl.value; - - valueParser(value).walk((node) => { - if (node.type !== 'function') { - return; - } - - if (!isStandardSyntaxFunction(node)) { - return; - } - - if (!matchesStringOrRegExp(vendor.unprefixed(node.value), list)) { - return; - } - - report({ - message: messages.rejected(node.value), - node: decl, - index: declarationValueIndex(decl) + node.sourceIndex, - result, - ruleName, - }); - }); - }); - }; -} - -rule.primaryOptionArray = true; - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/function-url-scheme-blacklist/README.md b/lib/rules/function-url-scheme-blacklist/README.md deleted file mode 100644 index 14fb678310..0000000000 --- a/lib/rules/function-url-scheme-blacklist/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# function-url-scheme-blacklist - -**_Deprecated: Instead use the [`function-url-scheme-disallowed-list`](../function-url-scheme-disallowed-list/README.md) rule._** - -Specify a list of disallowed URL schemes. - - -```css -a { background-image: url('http://www.example.com/file.jpg'); } -/** ↑ - * This URL scheme */ -``` - -A [URL scheme](https://url.spec.whatwg.org/#syntax-url-scheme) consists of alphanumeric, `+`, `-`, and `.` characters. It can appear at the start of a URL and is followed by `:`. - -This rule ignores: - -- URL arguments without an existing URL scheme -- URL arguments with variables or variable interpolation (`$sass`, `@less`, `--custom-property`, `#{$var}`, `@{var}`, `$(var)`) - -## Options - -`array|string|regex`: `["array", "of", /schemes/ or "/regex/"]|"scheme"|/regex/` - -Given: - -``` -["ftp", "/^http/"] -``` - -The following patterns are considered violations: - - -```css -a { background-image: url('ftp://www.example.com/file.jpg'); } -``` - - -```css -a { background-image: url('http://www.example.com/file.jpg'); } -``` - - -```css -a { background-image: url('https://www.example.com/file.jpg'); } -``` - -The following patterns are _not_ considered violations: - - -```css -a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); } -``` - - -```css -a { background-image: url('example.com/file.jpg'); } -``` - - -```css -a { background-image: url('/example.com/file.jpg'); } -``` - - -```css -a { background-image: url('//example.com/file.jpg'); } -``` - - -```css -a { background-image: url('./path/to/file.jpg'); } -``` diff --git a/lib/rules/function-url-scheme-blacklist/__tests__/index.js b/lib/rules/function-url-scheme-blacklist/__tests__/index.js deleted file mode 100644 index fb0f9513a3..0000000000 --- a/lib/rules/function-url-scheme-blacklist/__tests__/index.js +++ /dev/null @@ -1,285 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: ['https'], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'function-url-scheme-disallowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - config: [[]], - - accept: [ - { - code: "a { background: url('http://www.example.com/file.jpg'); }", - }, - ], -}); - -testRule({ - ruleName, - config: [''], - - accept: [ - { - code: "a { background: url('http://www.example.com/file.jpg'); }", - }, - ], -}); - -testRule({ - ruleName, - config: ['https', 'data'], - - accept: [ - { - code: 'a { background: url(); }', - }, - { - code: "a { background: url(''); }", - }, - { - code: 'a { background: url(""); }', - }, - { - code: 'a { background: url(:); }', - }, - { - code: 'a { background: url(://); }', - }, - { - code: 'a { background: url(//); }', - }, - { - code: 'a { background: url(/); }', - }, - { - code: 'a { background: url(./); }', - }, - { - code: 'a { background: url(./file.jpg); }', - }, - { - code: 'a { background: url(../file.jpg); }', - }, - { - code: 'a { background: URL(../file.jpg); }', - }, - { - code: "a { background: url('../file.jpg'); }", - }, - { - code: 'a { background: url("../file.jpg"); }', - }, - { - code: "a { background: url('/path/to/file.jpg'); }", - }, - { - code: 'a { background: url(//www.example.com/file.jpg); }', - }, - { - code: 'a { background: url("//www.example.com/file.jpg"); }', - }, - { - code: "a { background: url('http://www.example.com/file.jpg'); }", - }, - { - code: "a { background-image: url('http://example.com:3000'); }", - }, - { - code: "a { background-image: url('//example.com:3000'); }", - }, - { - code: "@font-face { font-family: 'foo'; src: url('/path/to/foo.ttf'); }", - }, - { - code: 'a { background: url(HTTP://example.com/file.jpg); }', - description: 'ignore case', - }, - { - code: 'a { background: some-url(); }', - description: 'ignore contain url function', - }, - { - code: 'a { background: url($image); }', - description: 'ignore variable', - }, - { - code: 'a { background: url(@image); }', - description: 'ignore variable', - }, - { - code: 'a { background: url(http://#{$host}/path); }', - description: 'ignore interpolation', - }, - { - code: "a { background: url('http://@{host}/path'); }", - description: 'ignore interpolation', - }, - { - code: 'a { background: url(http://$(host)/path); }', - description: 'ignore interpolation', - }, - { - code: 'a { background: url(var(--image)); }', - description: 'ignore variable', - }, - { - code: 'a { background: url(example.com); }', - description: 'schemeless url', - }, - { - code: 'a { background: url(example.com:3000); }', - description: 'schemeless url and port', - }, - { - code: 'a { background: url(http://example.com:3000); }', - description: 'url with scheme and port', - }, - ], - - reject: [ - { - code: - "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", - message: messages.rejected('data'), - line: 1, - column: 27, - }, - { - code: 'a { background: url(HTTPS://www.example.com/file.jpg); }', - message: messages.rejected('https'), - line: 1, - column: 21, - }, - { - code: "a { background: url('https://www.example.com/file.jpg'); }", - message: messages.rejected('https'), - line: 1, - column: 21, - }, - { - code: 'a { background: url("https://www.example.com/file.jpg"); }', - message: messages.rejected('https'), - line: 1, - column: 21, - }, - { - code: "a { background: url('https://example.com:3000'); }", - message: messages.rejected('https'), - line: 1, - column: 21, - }, - { - code: "@font-face { font-family: 'foo'; src: url('https://www.example.com/file.jpg'); }", - message: messages.rejected('https'), - line: 1, - column: 43, - }, - { - code: "a { background: no-repeat center/80% url('https://www.example.com/file.jpg'); }", - message: messages.rejected('https'), - line: 1, - column: 42, - }, - ], -}); - -testRule({ - ruleName, - - config: [['/^http/']], - - accept: [ - { - code: - "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", - }, - { - code: 'a { background: url(./file.jpg); }', - }, - ], - - reject: [ - { - code: 'a { background: url(https://example.com/file.jpg); }', - message: messages.rejected('https'), - line: 1, - column: 21, - }, - { - code: 'a { background: url(HTTPS://example.com/file.jpg); }', - message: messages.rejected('https'), - line: 1, - column: 21, - }, - { - code: 'a { background: url(http://example.com/file.jpg); }', - message: messages.rejected('http'), - line: 1, - column: 21, - }, - ], -}); - -testRule({ - ruleName, - - config: [[/^http/]], - - accept: [ - { - code: - "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", - }, - { - code: 'a { background: url(./file.jpg); }', - }, - ], - - reject: [ - { - code: 'a { background: url(https://example.com/file.jpg); }', - message: messages.rejected('https'), - line: 1, - column: 21, - }, - { - code: 'a { background: url(HTTPS://example.com/file.jpg); }', - message: messages.rejected('https'), - line: 1, - column: 21, - }, - { - code: 'a { background: url(http://example.com/file.jpg); }', - message: messages.rejected('http'), - line: 1, - column: 21, - }, - ], -}); diff --git a/lib/rules/function-url-scheme-blacklist/index.js b/lib/rules/function-url-scheme-blacklist/index.js deleted file mode 100644 index 9580add5cb..0000000000 --- a/lib/rules/function-url-scheme-blacklist/index.js +++ /dev/null @@ -1,76 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const functionArgumentsSearch = require('../../utils/functionArgumentsSearch'); -const getSchemeFromUrl = require('../../utils/getSchemeFromUrl'); -const isStandardSyntaxUrl = require('../../utils/isStandardSyntaxUrl'); -const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); - -const ruleName = 'function-url-scheme-blacklist'; - -const messages = ruleMessages(ruleName, { - rejected: (scheme) => `Unexpected URL scheme "${scheme}:"`, -}); - -function rule(list) { - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isString, _.isRegExp], - }); - - if (!validOptions) { - return; - } - - result.warn( - `'${ruleName}' has been deprecated. Instead use 'function-url-scheme-disallowed-list'.`, - { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }, - ); - - root.walkDecls((decl) => { - functionArgumentsSearch(decl.toString().toLowerCase(), 'url', (args, index) => { - const unspacedUrlString = _.trim(args, ' '); - - if (!isStandardSyntaxUrl(unspacedUrlString)) { - return; - } - - const urlString = _.trim(unspacedUrlString, '\'"'); - const scheme = getSchemeFromUrl(urlString); - - if (scheme === null) { - return; - } - - if (!matchesStringOrRegExp(scheme, list)) { - return; - } - - report({ - message: messages.rejected(scheme), - node: decl, - index, - result, - ruleName, - }); - }); - }); - }; -} - -rule.primaryOptionArray = true; - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/function-url-scheme-whitelist/README.md b/lib/rules/function-url-scheme-whitelist/README.md deleted file mode 100644 index ece68797d7..0000000000 --- a/lib/rules/function-url-scheme-whitelist/README.md +++ /dev/null @@ -1,78 +0,0 @@ -# function-url-scheme-whitelist - -**_Deprecated: Instead use the [`function-url-scheme-allowed-list`](../function-url-scheme-allowed-list/README.md) rule._** - -Specify a list of allowed URL schemes. - - -```css -a { background-image: url('http://www.example.com/file.jpg'); } -/** ↑ - * This URL scheme */ -``` - -A [URL scheme](https://url.spec.whatwg.org/#syntax-url-scheme) consists of alphanumeric, `+`, `-`, and `.` characters. It can appear at the start of a URL and is followed by `:`. - -This rule ignores: - -- URL arguments without an existing URL scheme -- URL arguments with variables or variable interpolation (`$sass`, `@less`, `--custom-property`, `#{$var}`, `@{var}`, `$(var)`) - -## Options - -`array|string|regex`: `["array", "of", /schemes/ or "/regex/"]|"scheme"|/regex/` - -Given: - -``` -["data", "/^http/"] -``` - -The following patterns are considered violations: - - -```css -a { background-image: url('file://file.jpg'); } -``` - -The following patterns are _not_ considered violations: - - -```css -a { background-image: url('example.com/file.jpg'); } -``` - - -```css -a { background-image: url('/example.com/file.jpg'); } -``` - - -```css -a { background-image: url('//example.com/file.jpg'); } -``` - - -```css -a { background-image: url('./path/to/file.jpg'); } -``` - - -```css -a { background-image: url('http://www.example.com/file.jpg'); } -``` - - -```css -a { background-image: url('https://www.example.com/file.jpg'); } -``` - - -```css -a { background-image: url('HTTPS://www.example.com/file.jpg'); } -``` - - -```css -a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); } -``` diff --git a/lib/rules/function-url-scheme-whitelist/__tests__/index.js b/lib/rules/function-url-scheme-whitelist/__tests__/index.js deleted file mode 100644 index 7cfe199c9b..0000000000 --- a/lib/rules/function-url-scheme-whitelist/__tests__/index.js +++ /dev/null @@ -1,347 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: ['https'], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'function-url-scheme-allowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - config: ['https', 'data'], - - accept: [ - { - code: 'a { background: url(); }', - }, - { - code: "a { background: url(''); }", - }, - { - code: 'a { background: url(""); }', - }, - { - code: 'a { background: url(:); }', - }, - { - code: 'a { background: url(://); }', - }, - { - code: 'a { background: url(//); }', - }, - { - code: 'a { background: url(/); }', - }, - { - code: 'a { background: url(./); }', - }, - { - code: 'a { background: url(./file.jpg); }', - }, - { - code: 'a { background: url(../file.jpg); }', - }, - { - code: 'a { background: URL(../file.jpg); }', - }, - { - code: "a { background: url('../file.jpg'); }", - }, - { - code: 'a { background: url("../file.jpg"); }', - }, - { - code: "a { background: url('/path/to/file.jpg'); }", - }, - { - code: 'a { background: url(//www.example.com/file.jpg); }', - }, - { - code: 'a { background: url("//www.example.com/file.jpg"); }', - }, - { - code: "a { background: url('https://www.example.com/file.jpg'); }", - }, - { - code: - "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", - }, - { - code: "a { background-image: url('https://example.com:3000'); }", - }, - { - code: "a { background-image: url('//example.com:3000'); }", - }, - { - code: "@font-face { font-family: 'foo'; src: url('/path/to/foo.ttf'); }", - }, - { - code: 'a { background: url(HTTPS://example.com/file.jpg); }', - description: 'ignore case', - }, - { - code: 'a { background: some-url(); }', - description: 'ignore contain url function', - }, - { - code: 'a { background: url($image); }', - description: 'ignore variable', - }, - { - code: 'a { background: url(@image); }', - description: 'ignore variable', - }, - { - code: 'a { background: url(http://#{$host}/path); }', - description: 'ignore interpolation', - }, - { - code: "a { background: url('http://@{host}/path'); }", - description: 'ignore interpolation', - }, - { - code: 'a { background: url(http://$(host)/path); }', - description: 'ignore interpolation', - }, - { - code: 'a { background: url(var(--image)); }', - description: 'ignore variable', - }, - { - code: 'a { background: url(example.com); }', - description: 'schemeless url', - }, - { - code: 'a { background: url(example.com:3000); }', - description: 'schemeless url and port', - }, - { - code: 'a { background: url(https://example.com:3000); }', - description: 'url with scheme and port', - }, - ], - - reject: [ - { - code: 'a { background: url(http://www.example.com/file.jpg); }', - message: messages.rejected('http'), - line: 1, - column: 21, - }, - { - code: "a { background: url('http://www.example.com/file.jpg'); }", - message: messages.rejected('http'), - line: 1, - column: 21, - }, - { - code: 'a { background: url("http://www.example.com/file.jpg"); }', - message: messages.rejected('http'), - line: 1, - column: 21, - }, - { - code: "a { background: url('http://example.com:3000'); }", - message: messages.rejected('http'), - line: 1, - column: 21, - }, - { - code: "@font-face { font-family: 'foo'; src: url('http://www.example.com/file.jpg'); }", - message: messages.rejected('http'), - line: 1, - column: 43, - }, - { - code: "a { background: no-repeat center/80% url('http://www.example.com/file.jpg'); }", - message: messages.rejected('http'), - line: 1, - column: 42, - }, - ], -}); - -testRule({ - ruleName, - config: [[]], - - accept: [ - { - code: "a { background: url('/path/to/file.jpg'); }", - }, - { - code: 'a { background: url(//www.example.com/file.jpg); }', - }, - { - code: 'a { background: url("//www.example.com/file.jpg"); }', - }, - { - code: 'a { background: url(example.com:3000); }', - }, - ], - - reject: [ - { - code: "a { background: url('https://www.example.com/file.jpg'); }", - message: messages.rejected('https'), - line: 1, - column: 21, - }, - { - code: - "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", - message: messages.rejected('data'), - line: 1, - column: 27, - }, - ], -}); - -testRule({ - ruleName, - config: [''], - - accept: [ - { - code: "a { background: url('/path/to/file.jpg'); }", - }, - { - code: 'a { background: url(//www.example.com/file.jpg); }', - }, - { - code: 'a { background: url("//www.example.com/file.jpg"); }', - }, - { - code: 'a { background: url(example.com:3000); }', - }, - ], - - reject: [ - { - code: "a { background: url('https://www.example.com/file.jpg'); }", - message: messages.rejected('https'), - line: 1, - column: 21, - }, - { - code: - "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", - message: messages.rejected('data'), - line: 1, - column: 27, - }, - ], -}); - -testRule({ - ruleName, - // primaryOptionArray - config: ['uri', 'file', 'https'], - - accept: [ - { - code: 'a { background: url(https://example.com/file.jpg); }', - }, - ], - - reject: [ - { - code: 'a { background: url(http://example.com/file.jpg); }', - message: messages.rejected('http'), - line: 1, - column: 21, - }, - ], -}); - -testRule({ - ruleName, - - config: [['/^http/']], - - accept: [ - { - code: 'a { background: url(http://example.com/file.jpg); }', - }, - { - code: 'a { background: url(HTTP://example.com/file.jpg); }', - }, - { - code: 'a { background: url(https://example.com/file.jpg); }', - }, - ], - - reject: [ - { - code: 'a { background: url(ftp://example.com/file.jpg); }', - message: messages.rejected('ftp'), - line: 1, - column: 21, - }, - { - code: - "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", - message: messages.rejected('data'), - line: 1, - column: 27, - }, - ], -}); - -testRule({ - ruleName, - - config: [[/^http/]], - - accept: [ - { - code: 'a { background: url(http://example.com/file.jpg); }', - }, - { - code: 'a { background: url(HTTP://example.com/file.jpg); }', - }, - { - code: 'a { background: url(https://example.com/file.jpg); }', - }, - ], - - reject: [ - { - code: 'a { background: url(ftp://example.com/file.jpg); }', - message: messages.rejected('ftp'), - line: 1, - column: 21, - }, - { - code: - "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", - message: messages.rejected('data'), - line: 1, - column: 27, - }, - ], -}); diff --git a/lib/rules/function-url-scheme-whitelist/index.js b/lib/rules/function-url-scheme-whitelist/index.js deleted file mode 100644 index 9bcadd8930..0000000000 --- a/lib/rules/function-url-scheme-whitelist/index.js +++ /dev/null @@ -1,76 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const functionArgumentsSearch = require('../../utils/functionArgumentsSearch'); -const getSchemeFromUrl = require('../../utils/getSchemeFromUrl'); -const isStandardSyntaxUrl = require('../../utils/isStandardSyntaxUrl'); -const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); - -const ruleName = 'function-url-scheme-whitelist'; - -const messages = ruleMessages(ruleName, { - rejected: (scheme) => `Unexpected URL scheme "${scheme}:"`, -}); - -function rule(list) { - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isString, _.isRegExp], - }); - - if (!validOptions) { - return; - } - - result.warn( - `'${ruleName}' has been deprecated. Instead use 'function-url-scheme-allowed-list'.`, - { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }, - ); - - root.walkDecls((decl) => { - functionArgumentsSearch(decl.toString().toLowerCase(), 'url', (args, index) => { - const unspacedUrlString = _.trim(args, ' '); - - if (!isStandardSyntaxUrl(unspacedUrlString)) { - return; - } - - const urlString = _.trim(unspacedUrlString, '\'"'); - const scheme = getSchemeFromUrl(urlString); - - if (scheme === null) { - return; - } - - if (matchesStringOrRegExp(scheme, list)) { - return; - } - - report({ - message: messages.rejected(scheme), - node: decl, - index, - result, - ruleName, - }); - }); - }); - }; -} - -rule.primaryOptionArray = true; - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/function-whitelist/README.md b/lib/rules/function-whitelist/README.md deleted file mode 100644 index f3620b3b4b..0000000000 --- a/lib/rules/function-whitelist/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# function-whitelist - -**_Deprecated: Instead use the [`function-allowed-list`](../function-allowed-list/README.md) rule._** - -Specify a list of allowed functions. - - -```css -a { transform: scale(1); } -/** ↑ - * This function */ -``` - -## Options - -`array|string`: `["array", "of", "unprefixed", /functions/ or "regex"]|"function"|"/regex/"` - -If a string is surrounded with `"/"` (e.g. `"/^rgb/"`), it is interpreted as a regular expression. - -Given: - -``` -["scale", "rgba", "linear-gradient"] -``` - -The following patterns are considered violations: - - -```css -a { transform: rotate(1); } -``` - - -```css -a { - color: hsla(170, 50%, 45%, 1) -} -``` - - -```css -a { - background: - red, - -webkit-radial-gradient(red, green, blue); -} -``` - -The following patterns are _not_ considered violations: - - -```css -a { background: red; } -``` - - -```css -a { transform: scale(1); } -``` - - -```css -a { - color: rgba(0, 0, 0, 0.5); -} -``` - - -```css -a { - background: - red, - -moz-linear-gradient(45deg, blue, red); -} -``` diff --git a/lib/rules/function-whitelist/__tests__/index.js b/lib/rules/function-whitelist/__tests__/index.js deleted file mode 100644 index 5563c23f1f..0000000000 --- a/lib/rules/function-whitelist/__tests__/index.js +++ /dev/null @@ -1,209 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: ['rgba'], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'function-allowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - - config: ['rotate', 'rgb', 'radial-gradient', 'lightness', 'color'], - - accept: [ - { - code: 'a { color: pink; }', - }, - { - code: 'a { transform: rotate(7deg) }', - }, - { - code: 'a { background: -webkit-radial-gradient(red, green, blue); }', - }, - { - code: 'a { color: color(rgb(0, 0, 0) lightness(50%)); }', - }, - { - code: '@media (max-width: 10px) { a { color: color(rgb(0, 0, 0) lightness(50%)); } }', - }, - { - code: '$list: (value, value2)', - description: 'Sass list ignored', - }, - ], - - reject: [ - { - code: 'a { transform: rOtAtE(7deg) }', - message: messages.rejected('rOtAtE'), - line: 1, - column: 16, - }, - { - code: 'a { transform: ROTATE(7deg) }', - message: messages.rejected('ROTATE'), - line: 1, - column: 16, - }, - { - code: 'a { transform: scale(1); }', - message: messages.rejected('scale'), - line: 1, - column: 16, - }, - { - code: 'a { transform: sCaLe(1); }', - message: messages.rejected('sCaLe'), - line: 1, - column: 16, - }, - { - code: 'a { transform: SCALE(1); }', - message: messages.rejected('SCALE'), - line: 1, - column: 16, - }, - { - code: 'a { transform : scale(1); }', - message: messages.rejected('scale'), - line: 1, - column: 17, - }, - { - code: 'a\n{ transform: scale(1); }', - message: messages.rejected('scale'), - line: 2, - column: 14, - }, - { - code: 'a { transform: scale(1); }', - message: messages.rejected('scale'), - line: 1, - column: 19, - }, - { - code: ' a { transform: scale(1); }', - message: messages.rejected('scale'), - line: 1, - column: 18, - }, - { - code: 'a { color: rgba(0, 0, 0, 0) }', - message: messages.rejected('rgba'), - line: 1, - column: 12, - }, - { - code: 'a { color: color(rgba(0, 0, 0, 0) lightness(50%)); }', - message: messages.rejected('rgba'), - line: 1, - column: 18, - }, - { - code: 'a { background: red, -moz-linear-gradient(45deg, blue, red); }', - message: messages.rejected('-moz-linear-gradient'), - line: 1, - column: 22, - }, - { - code: '@media (max-width: 10px) { a { color: color(rgba(0, 0, 0) lightness(50%)); } }', - message: messages.rejected('rgba'), - line: 1, - column: 45, - }, - ], -}); - -testRule({ - ruleName, - config: ['translate'], - skipBasicChecks: true, - - accept: [ - { - code: 'a { transform: translate(1px); }', - }, - ], - - reject: [ - { - code: 'a { transform: scale(4); }', - message: messages.rejected('scale'), - line: 1, - column: 16, - }, - ], -}); - -testRule({ - ruleName, - - config: ['/rgb/'], - - accept: [ - { - code: 'a { color: rgb(0, 0, 0); }', - }, - { - code: 'a { color: rgba(0, 0, 0, 0); }', - }, - ], - - reject: [ - { - code: 'a { color: hsl(208, 100%, 97%); }', - message: messages.rejected('hsl'), - line: 1, - column: 12, - }, - ], -}); - -testRule({ - ruleName, - - config: [/rgb/], - - accept: [ - { - code: 'a { color: rgb(0, 0, 0); }', - }, - { - code: 'a { color: rgba(0, 0, 0, 0); }', - }, - ], - - reject: [ - { - code: 'a { color: hsl(208, 100%, 97%); }', - message: messages.rejected('hsl'), - line: 1, - column: 12, - }, - ], -}); diff --git a/lib/rules/function-whitelist/index.js b/lib/rules/function-whitelist/index.js deleted file mode 100644 index d64abb84df..0000000000 --- a/lib/rules/function-whitelist/index.js +++ /dev/null @@ -1,73 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const declarationValueIndex = require('../../utils/declarationValueIndex'); -const isStandardSyntaxFunction = require('../../utils/isStandardSyntaxFunction'); -const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); -const valueParser = require('postcss-value-parser'); -const vendor = require('../../utils/vendor'); - -const ruleName = 'function-whitelist'; - -const messages = ruleMessages(ruleName, { - rejected: (name) => `Unexpected function "${name}"`, -}); - -function rule(listInput) { - const list = [].concat(listInput); - - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isString, _.isRegExp], - }); - - if (!validOptions) { - return; - } - - result.warn(`'${ruleName}' has been deprecated. Instead use 'function-allowed-list'.`, { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }); - - root.walkDecls((decl) => { - const value = decl.value; - - valueParser(value).walk((node) => { - if (node.type !== 'function') { - return; - } - - if (!isStandardSyntaxFunction(node)) { - return; - } - - if (matchesStringOrRegExp(vendor.unprefixed(node.value), list)) { - return; - } - - report({ - message: messages.rejected(node.value), - node: decl, - index: declarationValueIndex(decl) + node.sourceIndex, - result, - ruleName, - }); - }); - }); - }; -} - -rule.primaryOptionArray = true; - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/index.js b/lib/rules/index.js index b05ceeab21..4b1ef3e657 100644 --- a/lib/rules/index.js +++ b/lib/rules/index.js @@ -10,7 +10,6 @@ const importLazy = require('import-lazy'); const rules = { 'alpha-value-notation': importLazy(() => require('./alpha-value-notation'))(), 'at-rule-allowed-list': importLazy(() => require('./at-rule-allowed-list'))(), - 'at-rule-blacklist': importLazy(() => require('./at-rule-blacklist'))(), 'at-rule-disallowed-list': importLazy(() => require('./at-rule-disallowed-list'))(), 'at-rule-empty-line-before': importLazy(() => require('./at-rule-empty-line-before'))(), 'at-rule-name-case': importLazy(() => require('./at-rule-name-case'))(), @@ -20,11 +19,9 @@ const rules = { 'at-rule-no-unknown': importLazy(() => require('./at-rule-no-unknown'))(), 'at-rule-no-vendor-prefix': importLazy(() => require('./at-rule-no-vendor-prefix'))(), 'at-rule-property-required-list': importLazy(() => require('./at-rule-property-required-list'))(), - 'at-rule-property-requirelist': importLazy(() => require('./at-rule-property-requirelist'))(), 'at-rule-semicolon-newline-after': importLazy(() => require('./at-rule-semicolon-newline-after'), )(), - 'at-rule-whitelist': importLazy(() => require('./at-rule-whitelist'))(), 'block-closing-brace-empty-line-before': importLazy(() => require('./block-closing-brace-empty-line-before'), )(), @@ -63,7 +60,6 @@ const rules = { 'comment-no-empty': importLazy(() => require('./comment-no-empty'))(), 'comment-pattern': importLazy(() => require('./comment-pattern'))(), 'comment-whitespace-inside': importLazy(() => require('./comment-whitespace-inside'))(), - 'comment-word-blacklist': importLazy(() => require('./comment-word-blacklist'))(), 'comment-word-disallowed-list': importLazy(() => require('./comment-word-disallowed-list'))(), 'custom-media-pattern': importLazy(() => require('./custom-media-pattern'))(), 'custom-property-empty-line-before': importLazy(() => @@ -112,27 +108,15 @@ const rules = { 'declaration-property-unit-allowed-list': importLazy(() => require('./declaration-property-unit-allowed-list'), )(), - 'declaration-property-unit-blacklist': importLazy(() => - require('./declaration-property-unit-blacklist'), - )(), 'declaration-property-unit-disallowed-list': importLazy(() => require('./declaration-property-unit-disallowed-list'), )(), - 'declaration-property-unit-whitelist': importLazy(() => - require('./declaration-property-unit-whitelist'), - )(), 'declaration-property-value-allowed-list': importLazy(() => require('./declaration-property-value-allowed-list'), )(), - 'declaration-property-value-blacklist': importLazy(() => - require('./declaration-property-value-blacklist'), - )(), 'declaration-property-value-disallowed-list': importLazy(() => require('./declaration-property-value-disallowed-list'), )(), - 'declaration-property-value-whitelist': importLazy(() => - require('./declaration-property-value-whitelist'), - )(), 'font-family-no-missing-generic-family-keyword': importLazy(() => require('./font-family-no-missing-generic-family-keyword'), )(), @@ -140,7 +124,6 @@ const rules = { 'font-family-no-duplicate-names': importLazy(() => require('./font-family-no-duplicate-names'))(), 'font-weight-notation': importLazy(() => require('./font-weight-notation'))(), 'function-allowed-list': importLazy(() => require('./function-allowed-list'))(), - 'function-blacklist': importLazy(() => require('./function-blacklist'))(), 'function-calc-no-invalid': importLazy(() => require('./function-calc-no-invalid'))(), 'function-calc-no-unspaced-operator': importLazy(() => require('./function-calc-no-unspaced-operator'), @@ -168,13 +151,10 @@ const rules = { 'function-url-scheme-allowed-list': importLazy(() => require('./function-url-scheme-allowed-list'), )(), - 'function-url-scheme-blacklist': importLazy(() => require('./function-url-scheme-blacklist'))(), 'function-url-scheme-disallowed-list': importLazy(() => require('./function-url-scheme-disallowed-list'), )(), - 'function-url-scheme-whitelist': importLazy(() => require('./function-url-scheme-whitelist'))(), 'function-whitespace-after': importLazy(() => require('./function-whitespace-after'))(), - 'function-whitelist': importLazy(() => require('./function-whitelist'))(), 'hue-degree-notation': importLazy(() => require('./hue-degree-notation'))(), 'keyframe-declaration-no-important': importLazy(() => require('./keyframe-declaration-no-important'), @@ -194,7 +174,6 @@ const rules = { 'media-feature-name-allowed-list': importLazy(() => require('./media-feature-name-allowed-list'), )(), - 'media-feature-name-blacklist': importLazy(() => require('./media-feature-name-blacklist'))(), 'media-feature-name-case': importLazy(() => require('./media-feature-name-case'))(), 'media-feature-name-disallowed-list': importLazy(() => require('./media-feature-name-disallowed-list'), @@ -206,10 +185,6 @@ const rules = { 'media-feature-name-value-allowed-list': importLazy(() => require('./media-feature-name-value-allowed-list'), )(), - 'media-feature-name-value-whitelist': importLazy(() => - require('./media-feature-name-value-whitelist'), - )(), - 'media-feature-name-whitelist': importLazy(() => require('./media-feature-name-whitelist'))(), 'media-feature-parentheses-space-inside': importLazy(() => require('./media-feature-parentheses-space-inside'), )(), @@ -254,12 +229,10 @@ const rules = { 'number-max-precision': importLazy(() => require('./number-max-precision'))(), 'number-no-trailing-zeros': importLazy(() => require('./number-no-trailing-zeros'))(), 'property-allowed-list': importLazy(() => require('./property-allowed-list'))(), - 'property-blacklist': importLazy(() => require('./property-blacklist'))(), 'property-case': importLazy(() => require('./property-case'))(), 'property-disallowed-list': importLazy(() => require('./property-disallowed-list'))(), 'property-no-unknown': importLazy(() => require('./property-no-unknown'))(), 'property-no-vendor-prefix': importLazy(() => require('./property-no-vendor-prefix'))(), - 'property-whitelist': importLazy(() => require('./property-whitelist'))(), 'rule-empty-line-before': importLazy(() => require('./rule-empty-line-before'))(), 'selector-attribute-brackets-space-inside': importLazy(() => require('./selector-attribute-brackets-space-inside'), @@ -270,9 +243,6 @@ const rules = { 'selector-attribute-operator-allowed-list': importLazy(() => require('./selector-attribute-operator-allowed-list'), )(), - 'selector-attribute-operator-blacklist': importLazy(() => - require('./selector-attribute-operator-blacklist'), - )(), 'selector-attribute-operator-disallowed-list': importLazy(() => require('./selector-attribute-operator-disallowed-list'), )(), @@ -282,15 +252,11 @@ const rules = { 'selector-attribute-operator-space-before': importLazy(() => require('./selector-attribute-operator-space-before'), )(), - 'selector-attribute-operator-whitelist': importLazy(() => - require('./selector-attribute-operator-whitelist'), - )(), 'selector-attribute-quotes': importLazy(() => require('./selector-attribute-quotes'))(), 'selector-class-pattern': importLazy(() => require('./selector-class-pattern'))(), 'selector-combinator-allowed-list': importLazy(() => require('./selector-combinator-allowed-list'), )(), - 'selector-combinator-blacklist': importLazy(() => require('./selector-combinator-blacklist'))(), 'selector-combinator-disallowed-list': importLazy(() => require('./selector-combinator-disallowed-list'), )(), @@ -300,7 +266,6 @@ const rules = { 'selector-combinator-space-before': importLazy(() => require('./selector-combinator-space-before'), )(), - 'selector-combinator-whitelist': importLazy(() => require('./selector-combinator-whitelist'))(), 'selector-descendant-combinator-no-non-space': importLazy(() => require('./selector-descendant-combinator-no-non-space'), )(), @@ -336,9 +301,6 @@ const rules = { 'selector-pseudo-class-allowed-list': importLazy(() => require('./selector-pseudo-class-allowed-list'), )(), - 'selector-pseudo-class-blacklist': importLazy(() => - require('./selector-pseudo-class-blacklist'), - )(), 'selector-pseudo-class-case': importLazy(() => require('./selector-pseudo-class-case'))(), 'selector-pseudo-class-disallowed-list': importLazy(() => require('./selector-pseudo-class-disallowed-list'), @@ -349,15 +311,9 @@ const rules = { 'selector-pseudo-class-parentheses-space-inside': importLazy(() => require('./selector-pseudo-class-parentheses-space-inside'), )(), - 'selector-pseudo-class-whitelist': importLazy(() => - require('./selector-pseudo-class-whitelist'), - )(), 'selector-pseudo-element-allowed-list': importLazy(() => require('./selector-pseudo-element-allowed-list'), )(), - 'selector-pseudo-element-blacklist': importLazy(() => - require('./selector-pseudo-element-blacklist'), - )(), 'selector-pseudo-element-case': importLazy(() => require('./selector-pseudo-element-case'))(), 'selector-pseudo-element-colon-notation': importLazy(() => require('./selector-pseudo-element-colon-notation'), @@ -368,9 +324,6 @@ const rules = { 'selector-pseudo-element-no-unknown': importLazy(() => require('./selector-pseudo-element-no-unknown'), )(), - 'selector-pseudo-element-whitelist': importLazy(() => - require('./selector-pseudo-element-whitelist'), - )(), 'selector-type-case': importLazy(() => require('./selector-type-case'))(), 'selector-type-no-unknown': importLazy(() => require('./selector-type-no-unknown'))(), 'shorthand-property-no-redundant-values': importLazy(() => @@ -381,11 +334,9 @@ const rules = { 'time-min-milliseconds': importLazy(() => require('./time-min-milliseconds'))(), 'unicode-bom': importLazy(() => require('./unicode-bom'))(), 'unit-allowed-list': importLazy(() => require('./unit-allowed-list'))(), - 'unit-blacklist': importLazy(() => require('./unit-blacklist'))(), 'unit-case': importLazy(() => require('./unit-case'))(), 'unit-disallowed-list': importLazy(() => require('./unit-disallowed-list'))(), 'unit-no-unknown': importLazy(() => require('./unit-no-unknown'))(), - 'unit-whitelist': importLazy(() => require('./unit-whitelist'))(), 'value-keyword-case': importLazy(() => require('./value-keyword-case'))(), 'value-list-comma-newline-after': importLazy(() => require('./value-list-comma-newline-after'))(), 'value-list-comma-newline-before': importLazy(() => diff --git a/lib/rules/media-feature-name-blacklist/README.md b/lib/rules/media-feature-name-blacklist/README.md deleted file mode 100644 index e89f5753cf..0000000000 --- a/lib/rules/media-feature-name-blacklist/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# media-feature-name-blacklist - -**_Deprecated: Instead use the [`media-feature-name-disallowed-list`](../media-feature-name-disallowed-list/README.md) rule._** - -Specify a list of disallowed media feature names. - - -```css -@media (min-width: 700px) {} -/** ↑ - * This media feature name */ -``` - -## Options - -`array|string|regex`: `["array", "of", "unprefixed", /media-features/ or "regex"]|"media-feature"|/regex/` - -Given: - -``` -["max-width", "/^my-/"] -``` - -The following patterns are considered violations: - - -```css -@media (max-width: 50em) {} -``` - - -```css -@media (my-width: 50em) {} -``` - - -```css -@media (max-width < 50em) {} -``` - - -```css -@media (10em < my-height < 50em) {} -``` - -The following patterns are _not_ considered violations: - - -```css -@media (min-width: 50em) {} -``` - - -```css -@media print and (min-resolution: 300dpi) {} -``` - - -```css -@media (min-width >= 50em) {} -``` - - -```css -@media (10em < width < 50em) {} -``` diff --git a/lib/rules/media-feature-name-blacklist/__tests__/index.js b/lib/rules/media-feature-name-blacklist/__tests__/index.js deleted file mode 100644 index 62855b5924..0000000000 --- a/lib/rules/media-feature-name-blacklist/__tests__/index.js +++ /dev/null @@ -1,233 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: ['max-width'], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'media-feature-name-disallowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - config: ['max-width', '--wide-viewport', 'width', '/^my-/', 'color'], - - accept: [ - { - code: '@media (min-width: 50em) { }', - }, - { - code: '@media (MaX-wIdTh: 50em) { }', - }, - { - code: '@media (MiN-wIdTh: 50em) { }', - }, - { - code: '@media (height <= 50em) { }', - }, - { - code: '@media (400px < height < 1000px) { }', - }, - { - code: '@media (--wide-viewport) { }', - description: 'ignore custom media query', - }, - { - code: '@media (/* max-width: 50em */ min-width: 50em) { }', - description: 'ignore comments', - }, - { - code: '@media (monochrome) { }', - description: 'boolean feature name', - }, - ], - - reject: [ - { - code: '@media (max-width: 50em) { }', - message: messages.rejected('max-width'), - line: 1, - column: 9, - }, - { - code: '@media print and (max-width: 50em) { }', - message: messages.rejected('max-width'), - line: 1, - column: 19, - }, - { - code: '@media handheld and (min-width: 20em), screen and (max-width: 20em) { }', - message: messages.rejected('max-width'), - line: 1, - column: 52, - }, - { - code: '@media (my-width: 50em) { }', - message: messages.rejected('my-width'), - line: 1, - column: 9, - }, - { - code: '@media (color) { }', - message: messages.rejected('color'), - line: 1, - column: 9, - }, - { - code: '@media (width: 50em) { }', - message: messages.rejected('width'), - line: 1, - column: 9, - }, - { - code: '@media (20em < width <= 50em) { }', - message: messages.rejected('width'), - line: 1, - column: 16, - }, - { - code: '@media (10em < max-width <= 50em) and (width > 50em) { }', - warnings: [ - { - message: messages.rejected('max-width'), - line: 1, - column: 16, - }, - { - message: messages.rejected('width'), - line: 1, - column: 40, - }, - ], - }, - ], -}); - -testRule({ - ruleName, - config: [/^my-/], - - accept: [ - { - code: '@media (min-width: 50em) { }', - }, - ], - - reject: [ - { - code: '@media (my-width: 50em) { }', - message: messages.rejected('my-width'), - line: 1, - column: 9, - }, - { - code: '@media (my-width >= 50em) { }', - message: messages.rejected('my-width'), - line: 1, - column: 9, - }, - { - code: '@media (10em < my-width <= 50em) { }', - message: messages.rejected('my-width'), - line: 1, - column: 16, - }, - { - code: '@media (50em < my-width) { }', - message: messages.rejected('my-width'), - line: 1, - column: 16, - }, - ], -}); - -testRule({ - ruleName, - config: ['feature-name'], - syntax: 'less', - - accept: [ - { - code: '@media @feature-name and (orientation: landscape) { }', - }, - { - code: '@media @feature-name { }', - }, - ], -}); - -testRule({ - ruleName, - config: ['feature-name', 'width'], - syntax: 'scss', - - accept: [ - { - code: '@media not all and ($feature-name) { }', - }, - { - code: '@media not all and ($FEATURE-NAME) { }', - }, - { - code: '@media not all and (#{feature-name}) { }', - }, - { - code: '@media not all and (#{FEATURE-NAME}) { }', - }, - { - code: '@media ($feature-name: $value) { }', - }, - { - code: '@media ($FEATURE-NAME: $value) { }', - }, - { - code: '@media (#{$feature-name}: $value) { }', - }, - { - code: '@media (#{$FEATURE-NAME}: $value) { }', - }, - { - code: "@media ('min-' + $width: $value) { }", - }, - { - code: "@media ('MIN-' + $WIDTH: $value) { }", - }, - { - code: "@media ($value + 'width': $value) { }", - }, - { - code: "@media ($VALUE + 'WIDTH': $value) { }", - }, - { - code: '@media (#{$width}: $value) { }', - }, - { - code: '@media (#{$WIDTH}: $value) { }', - }, - { - code: '@media #{$feature-name} { }', - }, - ], -}); diff --git a/lib/rules/media-feature-name-blacklist/index.js b/lib/rules/media-feature-name-blacklist/index.js deleted file mode 100644 index 7dba881daa..0000000000 --- a/lib/rules/media-feature-name-blacklist/index.js +++ /dev/null @@ -1,86 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const atRuleParamIndex = require('../../utils/atRuleParamIndex'); -const isCustomMediaQuery = require('../../utils/isCustomMediaQuery'); -const isRangeContextMediaFeature = require('../../utils/isRangeContextMediaFeature'); -const isStandardSyntaxMediaFeatureName = require('../../utils/isStandardSyntaxMediaFeatureName'); -const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); -const mediaParser = require('postcss-media-query-parser').default; -const rangeContextNodeParser = require('../rangeContextNodeParser'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); - -const ruleName = 'media-feature-name-blacklist'; - -const messages = ruleMessages(ruleName, { - rejected: (name) => `Unexpected media feature name "${name}"`, -}); - -function rule(list) { - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isString, _.isRegExp], - }); - - if (!validOptions) { - return; - } - - result.warn( - `'${ruleName}' has been deprecated. Instead use 'media-feature-name-disallowed-list'.`, - { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }, - ); - - root.walkAtRules(/^media$/i, (atRule) => { - mediaParser(atRule.params).walk(/^media-feature$/i, (mediaFeatureNode) => { - const parent = mediaFeatureNode.parent; - const mediaFeatureRangeContext = isRangeContextMediaFeature(parent.value); - - let value; - let sourceIndex; - - if (mediaFeatureRangeContext) { - const parsedRangeContext = rangeContextNodeParser(mediaFeatureNode); - - value = parsedRangeContext.name.value; - sourceIndex = parsedRangeContext.name.sourceIndex; - } else { - value = mediaFeatureNode.value; - sourceIndex = mediaFeatureNode.sourceIndex; - } - - if (!isStandardSyntaxMediaFeatureName(value) || isCustomMediaQuery(value)) { - return; - } - - if (!matchesStringOrRegExp(value, list)) { - return; - } - - report({ - index: atRuleParamIndex(atRule) + sourceIndex, - message: messages.rejected(value), - node: atRule, - ruleName, - result, - }); - }); - }); - }; -} - -rule.primaryOptionArray = true; - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/media-feature-name-value-whitelist/README.md b/lib/rules/media-feature-name-value-whitelist/README.md deleted file mode 100644 index 3a975e64d7..0000000000 --- a/lib/rules/media-feature-name-value-whitelist/README.md +++ /dev/null @@ -1,86 +0,0 @@ -# media-feature-name-value-whitelist - -**_Deprecated: Instead use the [`media-feature-name-value-allowed-list`](../media-feature-name-value-allowed-list/README.md) rule._** - -Specify a list of allowed media feature name and value pairs. - - -```css -@media screen and (min-width: 768px) {} -/** ↑ ↑ - * These features and values */ -``` - -## Options - -```js -{ - "unprefixed-media-feature-name": ["array", "of", "values"], - "/unprefixed-media-feature-name/": ["/regex/", "non-regex", /real-regex/] -} -``` - -If a media feature name is found in the object, only its allowed-listed values are -allowed. If the media feature name is not included in the object, anything goes. - -If a name or value is surrounded with `/` (e.g. `"/width$/"`), it is interpreted -as a regular expression. For example, `/width$/` will match `max-width` and -`min-width`. - -Given: - -``` -{ - "min-width": ["768px", "1024px"], - "/resolution/": ["/dpcm$/"] -} -``` - -The following patterns are considered violations: - - -```css -@media screen and (min-width: 1000px) {} -``` - - -```css -@media screen and (min-resolution: 2dpi) {} -``` - - -```css -@media screen and (min-width > 1000px) {} -``` - -The following patterns are _not_ considered violations: - - -```css -@media screen and (min-width: 768px) {} -``` - - -```css -@media screen and (min-width: 1024px) {} -``` - - -```css -@media screen and (orientation: portrait) {} -``` - - -```css -@media screen and (min-resolution: 2dpcm) {} -``` - - -```css -@media screen and (resolution: 10dpcm) {} -``` - - -```css -@media screen and (768px < min-width) {} -``` diff --git a/lib/rules/media-feature-name-value-whitelist/__tests__/index.js b/lib/rules/media-feature-name-value-whitelist/__tests__/index.js deleted file mode 100644 index 4aadec3d88..0000000000 --- a/lib/rules/media-feature-name-value-whitelist/__tests__/index.js +++ /dev/null @@ -1,200 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: [{ color: [] }], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'media-feature-name-value-allowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - config: [ - { - 'min-width': ['768px', '$sm'], - '/resolution/': ['/dpcm$/'], // Only dpcm unit - color: [], // Test boolean context - width: [], // Test range context - }, - ], - - accept: [ - { - code: '@media screen and (min-width: 768px) {}', - description: 'Specified media feature', - }, - { - code: '@media screen and ( min-width : 768px ) {}', - description: 'Whitespace', - }, - { - code: '@media screen and (max-width: 1000px) {}', - description: 'Unspecified media feature', - }, - { - code: '@media screen and ( min-resolution : 2dpcm ) {}', - description: 'Regex feature name and Regex value', - }, - { - code: '@media screen and (resolution: 10.1dpcm) {}', - description: 'Floating point value', - }, - { - code: '@media screen and (min-width: $sm) {}', - description: 'Non-standard syntax in allowed list', - }, - { - code: '@media (color) {}', - description: 'Boolean context, media feature in allowed list', - }, - { - code: '@media (update) {}', - description: 'Boolean context, media feature NOT in allowed list', - }, - { - code: '@media (update /* pw:ned */) {}', - description: 'Boolean context with colon in comments', - }, - { - code: '@media screen and (min-width <= 768px) {}', - description: 'Range context, media feature in allowed list', - }, - ], - - reject: [ - { - code: '@media screen and (min-width: 1000px) {}', - message: messages.rejected('min-width', '1000px'), - line: 1, - column: 31, - }, - { - code: '@media screen (min-width: 768px) and (min-width: 1000px) {}', - description: 'Media feature multiple', - message: messages.rejected('min-width', '1000px'), - line: 1, - column: 50, - }, - { - code: '@media screen (min-width: 768px)\nand (min-width: 1000px) {}', - description: 'Media feature multiline', - message: messages.rejected('min-width', '1000px'), - line: 2, - column: 17, - }, - { - code: '@media screen and (min-width: 768PX) {}', - description: 'Case sensitive', - message: messages.rejected('min-width', '768PX'), - line: 1, - column: 31, - }, - { - code: '@media screen and (min-width: $md) {}', - description: 'Non-standard syntax NOT in allowed list', - message: messages.rejected('min-width', '$md'), - line: 1, - column: 31, - }, - { - code: '@media screen and (min-resolution: 2dpi) {}', - message: messages.rejected('min-resolution', '2dpi'), - line: 1, - column: 37, - }, - { - code: '@media screen and (min-width > 500px) {}', - message: messages.rejected('min-width', '500px'), - line: 1, - column: 32, - }, - { - code: '@media screen and (400px < min-width) {}', - message: messages.rejected('min-width', '400px'), - line: 1, - column: 20, - }, - { - code: '@media (400px < min-width < 500px) and (min-width < 1200px)', - warnings: [ - { - message: messages.rejected('min-width', '400px'), - line: 1, - column: 9, - }, - { - message: messages.rejected('min-width', '500px'), - line: 1, - column: 29, - }, - { - message: messages.rejected('min-width', '1200px'), - line: 1, - column: 53, - }, - ], - }, - ], -}); - -testRule({ - ruleName, - config: [ - { - '/resolution/': [/dpcm$/], // Only dpcm unit - }, - ], - - accept: [ - { - code: '@media screen and (min-width: 768px) {}', - description: 'Specified media feature', - }, - { - code: '@media screen and ( min-resolution : 2dpcm ) {}', - description: 'Regex feature name and Regex value', - }, - { - code: '@media screen and (resolution: 10.1dpcm) {}', - description: 'Floating point value', - }, - ], - - reject: [ - { - code: '@media screen and (min-resolution: 2dpi) {}', - message: messages.rejected('min-resolution', '2dpi'), - line: 1, - column: 37, - }, - { - code: '@media screen and (min-resolution > 2dpi) {}', - message: messages.rejected('min-resolution', '2dpi'), - line: 1, - column: 38, - }, - ], -}); diff --git a/lib/rules/media-feature-name-value-whitelist/index.js b/lib/rules/media-feature-name-value-whitelist/index.js deleted file mode 100644 index c410017924..0000000000 --- a/lib/rules/media-feature-name-value-whitelist/index.js +++ /dev/null @@ -1,99 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const atRuleParamIndex = require('../../utils/atRuleParamIndex'); -const isRangeContextMediaFeature = require('../../utils/isRangeContextMediaFeature'); -const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); -const mediaParser = require('postcss-media-query-parser').default; -const rangeContextNodeParser = require('../rangeContextNodeParser'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); -const vendor = require('../../utils/vendor'); - -const ruleName = 'media-feature-name-value-whitelist'; - -const messages = ruleMessages(ruleName, { - rejected: (name, value) => `Unexpected value "${value}" for name "${name}"`, -}); - -function rule(list) { - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isObject], - }); - - if (!validOptions) { - return; - } - - result.warn( - `'${ruleName}' has been deprecated. Instead use 'media-feature-name-value-allowed-list'.`, - { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }, - ); - - root.walkAtRules(/^media$/i, (atRule) => { - mediaParser(atRule.params).walk(/^media-feature-expression$/i, (node) => { - const mediaFeatureRangeContext = isRangeContextMediaFeature(node.parent.value); - - // Ignore boolean - if (!node.value.includes(':') && !mediaFeatureRangeContext) { - return; - } - - const mediaFeatureNode = _.find(node.nodes, { type: 'media-feature' }); - - let mediaFeatureName; - let values = []; - - if (mediaFeatureRangeContext) { - const parsedRangeContext = rangeContextNodeParser(mediaFeatureNode); - - mediaFeatureName = parsedRangeContext.name.value; - values = parsedRangeContext.values; - } else { - mediaFeatureName = mediaFeatureNode.value; - values.push(_.find(node.nodes, { type: 'value' })); - } - - for (let i = 0; i < values.length; i++) { - const valueNode = values[i]; - const value = valueNode.value; - const unprefixedMediaFeatureName = vendor.unprefixed(mediaFeatureName); - - const allowedValues = _.find(list, (v, featureName) => - matchesStringOrRegExp(unprefixedMediaFeatureName, featureName), - ); - - if (allowedValues === undefined) { - return; - } - - if (matchesStringOrRegExp(value, allowedValues)) { - return; - } - - report({ - index: atRuleParamIndex(atRule) + valueNode.sourceIndex, - message: messages.rejected(mediaFeatureName, value), - node: atRule, - ruleName, - result, - }); - } - }); - }); - }; -} - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/media-feature-name-whitelist/README.md b/lib/rules/media-feature-name-whitelist/README.md deleted file mode 100644 index 292ab9afe9..0000000000 --- a/lib/rules/media-feature-name-whitelist/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# media-feature-name-whitelist - -**_Deprecated: Instead use the [`media-feature-name-allowed-list`](../media-feature-name-allowed-list/README.md) rule._** - -Specify a list of allowed media feature names. - - -```css -@media (min-width: 700px) {} -/** ↑ - * This media feature name */ -``` - -## Options - -`array|string|regex`: `["array", "of", "unprefixed", /media-features/ or "regex"]|"media-feature"|/regex/` - -Given: - -``` -["max-width", "/^my-/"] -``` - -The following patterns are considered violations: - - -```css -@media (min-width: 50em) {} -``` - - -```css -@media print and (min-resolution: 300dpi) {} -``` - - -```css -@media (min-width < 50em) {} -``` - - -```css -@media (10em < min-width < 50em) {} -``` - -The following patterns are _not_ considered violations: - - -```css -@media (max-width: 50em) {} -``` - - -```css -@media (my-width: 50em) {} -``` - - -```css -@media (max-width > 50em) {} -``` - - -```css -@media (10em < my-width < 50em) {} -``` diff --git a/lib/rules/media-feature-name-whitelist/__tests__/index.js b/lib/rules/media-feature-name-whitelist/__tests__/index.js deleted file mode 100644 index b711d1cbbb..0000000000 --- a/lib/rules/media-feature-name-whitelist/__tests__/index.js +++ /dev/null @@ -1,223 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: ['max-width'], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'media-feature-name-allowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - config: ['max-width', '/^my-/', 'color'], - - accept: [ - { - code: '@media (max-width: 50em) { }', - }, - { - code: '@media (--wide-viewport) { }', - description: 'ignore custom media query', - }, - { - code: '@media (/* min-width: 50em */ max-width: 50em) { }', - description: 'ignore comments', - }, - { - code: '@media (max-width <= 50em) { }', - }, - { - code: '@media (400px < my-width < 1000px) { }', - }, - { - code: '@media (my-width: 50em) { }', - }, - { - code: '@media (my-max-width: 50em) { }', - }, - { - code: '@media print and (max-width: 50em) { }', - }, - { - code: '@media (color) { }', - }, - ], - - reject: [ - { - code: '@media (MaX-wIdTh: 50em) { }', - message: messages.rejected('MaX-wIdTh'), - line: 1, - column: 9, - }, - { - code: '@media (min-width: 50em) { }', - message: messages.rejected('min-width'), - line: 1, - column: 9, - }, - { - code: '@media (-webkit-min-device-pixel-ratio: 2) { }', - message: messages.rejected('-webkit-min-device-pixel-ratio'), - line: 1, - column: 9, - }, - { - code: '@media handheld and (max-width: 20em), screen and (min-width: 20em) { }', - message: messages.rejected('min-width'), - line: 1, - column: 52, - }, - { - code: '@media (monochrome) { }', - message: messages.rejected('monochrome'), - line: 1, - column: 9, - }, - { - code: '@media (width: 50em) { }', - message: messages.rejected('width'), - line: 1, - column: 9, - }, - { - code: '@media (50em < width) { }', - message: messages.rejected('width'), - line: 1, - column: 16, - }, - { - code: '@media (10em < width <= 50em) { }', - message: messages.rejected('width'), - line: 1, - column: 16, - }, - { - code: '@media (max-width <= 50em) and (10em < min-width < 50em) { }', - message: messages.rejected('min-width'), - line: 1, - column: 40, - }, - ], -}); - -testRule({ - ruleName, - config: [/^my-/], - - accept: [ - { - code: '@media (my-width: 50em) { }', - }, - { - code: '@media (my-max-width: 50em) { }', - }, - { - code: '@media (my-width >= 50em) { }', - }, - { - code: '@media (10em < my-max-width <= 50em) { }', - }, - ], - - reject: [ - { - code: '@media (MaX-wIdTh: 50em) { }', - message: messages.rejected('MaX-wIdTh'), - line: 1, - column: 9, - }, - ], -}); - -testRule({ - ruleName, - config: ['max-width', 'orientation'], - syntax: 'less', - - accept: [ - { - code: '@media @feature-name and (orientation: landscape) { }', - }, - { - code: '@media @feature-name { }', - }, - ], -}); - -testRule({ - ruleName, - config: ['max-width'], - syntax: 'scss', - - accept: [ - { - code: '@media not all and ($feature-name) { }', - }, - { - code: '@media not all and ($FEATURE-NAME) { }', - }, - { - code: '@media not all and (#{feature-name}) { }', - }, - { - code: '@media not all and (#{FEATURE-NAME}) { }', - }, - { - code: '@media ($feature-name: $value) { }', - }, - { - code: '@media ($FEATURE-NAME: $value) { }', - }, - { - code: '@media (#{$feature-name}: $value) { }', - }, - { - code: '@media (#{$FEATURE-NAME}: $value) { }', - }, - { - code: "@media ('min-' + $width: $value) { }", - }, - { - code: "@media ('MIN-' + $WIDTH: $value) { }", - }, - { - code: "@media ($value + 'width': $value) { }", - }, - { - code: "@media ($VALUE + 'WIDTH': $value) { }", - }, - { - code: '@media (#{$width}: $value) { }', - }, - { - code: '@media (#{$WIDTH}: $value) { }', - }, - { - code: '@media #{$feature-name} { }', - }, - ], -}); diff --git a/lib/rules/media-feature-name-whitelist/index.js b/lib/rules/media-feature-name-whitelist/index.js deleted file mode 100644 index 6dfcb91ee8..0000000000 --- a/lib/rules/media-feature-name-whitelist/index.js +++ /dev/null @@ -1,86 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const atRuleParamIndex = require('../../utils/atRuleParamIndex'); -const isCustomMediaQuery = require('../../utils/isCustomMediaQuery'); -const isRangeContextMediaFeature = require('../../utils/isRangeContextMediaFeature'); -const isStandardSyntaxMediaFeatureName = require('../../utils/isStandardSyntaxMediaFeatureName'); -const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); -const mediaParser = require('postcss-media-query-parser').default; -const rangeContextNodeParser = require('../rangeContextNodeParser'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); - -const ruleName = 'media-feature-name-whitelist'; - -const messages = ruleMessages(ruleName, { - rejected: (name) => `Unexpected media feature name "${name}"`, -}); - -function rule(list) { - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isString, _.isRegExp], - }); - - if (!validOptions) { - return; - } - - result.warn( - `'${ruleName}' has been deprecated. Instead use 'media-feature-name-allowed-list'.`, - { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }, - ); - - root.walkAtRules(/^media$/i, (atRule) => { - mediaParser(atRule.params).walk(/^media-feature$/i, (mediaFeatureNode) => { - const parent = mediaFeatureNode.parent; - const mediaFeatureRangeContext = isRangeContextMediaFeature(parent.value); - - let value; - let sourceIndex; - - if (mediaFeatureRangeContext) { - const parsedRangeContext = rangeContextNodeParser(mediaFeatureNode); - - value = parsedRangeContext.name.value; - sourceIndex = parsedRangeContext.name.sourceIndex; - } else { - value = mediaFeatureNode.value; - sourceIndex = mediaFeatureNode.sourceIndex; - } - - if (!isStandardSyntaxMediaFeatureName(value) || isCustomMediaQuery(value)) { - return; - } - - if (matchesStringOrRegExp(value, list)) { - return; - } - - report({ - index: atRuleParamIndex(atRule) + sourceIndex, - message: messages.rejected(value), - node: atRule, - ruleName, - result, - }); - }); - }); - }; -} - -rule.primaryOptionArray = true; - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/property-blacklist/README.md b/lib/rules/property-blacklist/README.md deleted file mode 100644 index b244fb8584..0000000000 --- a/lib/rules/property-blacklist/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# property-blacklist - -**_Deprecated: Instead use the [`property-disallowed-list`](../property-disallowed-list/README.md) rule._** - -Specify a list of disallowed properties. - - -```css -a { text-rendering: optimizeLegibility; } -/** ↑ - * This property */ -``` - -## Options - -`array|string`: `["array", "of", "unprefixed", /properties/ or "regex"]|"property"|"/regex/"`|/regex/ - -If a string is surrounded with `"/"` (e.g. `"/^background/"`), it is interpreted as a regular expression. This allows, for example, easy targeting of shorthands: `/^background/` will match `background`, `background-size`, `background-color`, etc. - -Given: - -``` -["text-rendering", "animation", "/^background/"] -``` - -The following patterns are considered violations: - - -```css -a { text-rendering: optimizeLegibility; } -``` - - -```css -a { - animation: my-animation 2s; - color: pink; -} -``` - - -```css -a { -webkit-animation: my-animation 2s; } -``` - - -```css -a { background: pink; } -``` - - -```css -a { background-size: cover; } -``` - -The following patterns are _not_ considered violations: - - -```css -a { color: pink; } -``` - - -```css -a { no-background: sure; } -``` diff --git a/lib/rules/property-blacklist/__tests__/index.js b/lib/rules/property-blacklist/__tests__/index.js deleted file mode 100644 index 208fc96dc5..0000000000 --- a/lib/rules/property-blacklist/__tests__/index.js +++ /dev/null @@ -1,187 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: [], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'property-disallowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - - config: [''], - - accept: [ - { - code: 'a { color: pink; }', - }, - ], -}); - -testRule({ - ruleName, - - config: [[]], - - accept: [ - { - code: 'a { color: pink; }', - }, - ], -}); - -testRule({ - ruleName, - - config: ['transform', 'background-size'], - - accept: [ - { - code: 'a { color: pink; }', - }, - { - code: 'a { background: red; }', - }, - { - code: 'a { top: 0; color: pink; }', - }, - { - code: 'a { $scss: 0; }', - }, - { - code: 'a { @less: 0; }', - }, - { - code: 'a { --custom-property: 0; }', - }, - ], - - reject: [ - { - code: 'a { transform: scale(1); }', - message: messages.rejected('transform'), - line: 1, - column: 5, - }, - { - code: 'a { color: pink; background-size: cover; }', - message: messages.rejected('background-size'), - line: 1, - column: 18, - }, - { - code: 'a { color: pink; -webkit-transform: scale(1); }', - message: messages.rejected('-webkit-transform'), - line: 1, - column: 18, - }, - ], -}); - -testRule({ - ruleName, - - config: [['/^background/']], - - accept: [ - { - code: 'a { color: pink; }', - }, - { - code: 'a { no-background: sure; }', - }, - { - code: 'a { $scss: 0; }', - }, - { - code: 'a { @less: 0; }', - }, - { - code: 'a { --custom-property: 0; }', - }, - ], - - reject: [ - { - code: 'a { background: pink; }', - message: messages.rejected('background'), - line: 1, - column: 5, - }, - { - code: 'a { background-size: cover; }', - message: messages.rejected('background-size'), - line: 1, - column: 5, - }, - { - code: 'a { background-image: none; }', - message: messages.rejected('background-image'), - line: 1, - column: 5, - }, - ], -}); - -testRule({ - ruleName, - - config: [[/^background/]], - - accept: [ - { - code: 'a { color: pink; }', - }, - ], - - reject: [ - { - code: 'a { background-size: cover; }', - message: messages.rejected('background-size'), - line: 1, - column: 5, - }, - ], -}); - -testRule({ - ruleName, - - config: ['/margin/'], - - accept: [ - { - code: 'a { $margin: 0; }', - }, - { - code: 'a { @margin: 0; }', - }, - { - code: 'a { --margin: 0; }', - }, - ], -}); diff --git a/lib/rules/property-blacklist/index.js b/lib/rules/property-blacklist/index.js deleted file mode 100644 index f1584acf86..0000000000 --- a/lib/rules/property-blacklist/index.js +++ /dev/null @@ -1,67 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const isCustomProperty = require('../../utils/isCustomProperty'); -const isStandardSyntaxProperty = require('../../utils/isStandardSyntaxProperty'); -const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); -const vendor = require('../../utils/vendor'); - -const ruleName = 'property-blacklist'; - -const messages = ruleMessages(ruleName, { - rejected: (property) => `Unexpected property "${property}"`, -}); - -function rule(list) { - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isString, _.isRegExp], - }); - - if (!validOptions) { - return; - } - - result.warn(`'${ruleName}' has been deprecated. Instead use 'property-disallowed-list'.`, { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }); - - root.walkDecls((decl) => { - const prop = decl.prop; - - if (!isStandardSyntaxProperty(prop)) { - return; - } - - if (isCustomProperty(prop)) { - return; - } - - if (!matchesStringOrRegExp(vendor.unprefixed(prop), list)) { - return; - } - - report({ - message: messages.rejected(prop), - node: decl, - result, - ruleName, - }); - }); - }; -} - -rule.primaryOptionArray = true; - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/property-whitelist/README.md b/lib/rules/property-whitelist/README.md deleted file mode 100644 index 1500c0ca19..0000000000 --- a/lib/rules/property-whitelist/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# property-whitelist - -**_Deprecated: Instead use the [`property-allowed-list`](../property-allowed-list/README.md) rule._** - -Specify a list of allowed properties. - - -```css -a { display: block; } -/** ↑ - * This property */ -``` - -This rule ignores variables (`$sass`, `@less`, `--custom-property`). - -## Options - -`array|string`: `["array", "of", "unprefixed", /properties/ or "regex"]|"property"|"/regex/"`|/regex/ - -If a string is surrounded with `"/"` (e.g. `"/^background/"`), it is interpreted as a regular expression. This allows, for example, easy targeting of shorthands: `/^background/` will match `background`, `background-size`, `background-color`, etc. - -Given: - -``` -["display", "animation", "/^background/"] -``` - -The following patterns are considered violations: - - -```css -a { color: pink; } -``` - - -```css -a { - animation: my-animation 2s; - color: pink; -} -``` - - -```css -a { borkgrund: orange; } -``` - -The following patterns are _not_ considered violations: - - -```css -a { display: block; } -``` - - -```css -a { -webkit-animation: my-animation 2s; } -``` - - -```css -a { - animation: my-animation 2s; - -webkit-animation: my-animation 2s; - display: block; -} -``` - - -```css -a { background: pink; } -``` - - -```css -a { background-color: pink; } -``` diff --git a/lib/rules/property-whitelist/__tests__/index.js b/lib/rules/property-whitelist/__tests__/index.js deleted file mode 100644 index f66c7fea86..0000000000 --- a/lib/rules/property-whitelist/__tests__/index.js +++ /dev/null @@ -1,196 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: [], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'property-allowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - - config: [''], - - reject: [ - { - code: 'a { color: pink; }', - message: messages.rejected('color'), - line: 1, - column: 5, - }, - ], -}); - -testRule({ - ruleName, - - config: [[]], - - reject: [ - { - code: 'a { color: pink; }', - message: messages.rejected('color'), - line: 1, - column: 5, - }, - ], -}); - -testRule({ - ruleName, - - config: ['transform', 'background-size'], - - accept: [ - { - code: 'a { background-size: cover; }', - }, - { - code: 'a { transform: scale(1); }', - }, - { - code: 'a { -webkit-transform: scale(1); }', - }, - { - code: 'a { transform: scale(1); background-size: cover; }', - }, - { - code: 'a { transform: scale(1); -webkit-transform: scale(1); background-size: cover; }', - }, - { - code: 'a { $scss: 0; }', - }, - { - code: 'a { @less: 0; }', - }, - { - code: 'a { --custom-property: 0; }', - }, - ], - - reject: [ - { - code: 'a { background: pink; }', - message: messages.rejected('background'), - line: 1, - column: 5, - }, - { - code: 'a { color: pink; }', - message: messages.rejected('color'), - line: 1, - column: 5, - }, - { - code: 'a { overflow: hidden; background-size: cover; }', - message: messages.rejected('overflow'), - line: 1, - column: 5, - }, - { - code: 'a { color: orange; -webkit-transform: scale(1); }', - message: messages.rejected('color'), - line: 1, - column: 5, - }, - ], -}); - -testRule({ - ruleName, - - config: [['/^background/']], - - accept: [ - { - code: 'a { background: pink; }', - }, - { - code: 'a { background-color: pink; }', - }, - { - code: 'a { background-image: none; }', - }, - { - code: 'a { $scss: 0; }', - }, - { - code: 'a { @less: 0; }', - }, - { - code: 'a { --custom-property: 0; }', - }, - ], - - reject: [ - { - code: 'a { color: pink; }', - message: messages.rejected('color'), - line: 1, - column: 5, - }, - ], -}); - -testRule({ - ruleName, - - config: [[/^background/]], - - accept: [ - { - code: 'a { background-image: none; }', - }, - ], - - reject: [ - { - code: 'a { color: pink; }', - message: messages.rejected('color'), - line: 1, - column: 5, - }, - ], -}); - -testRule({ - ruleName, - - config: ['/margin/'], - - accept: [ - { - code: 'a { $padding: 0; }', - }, - { - code: 'a { @padding: 0; }', - }, - { - code: 'a { --padding: 0; }', - }, - ], -}); diff --git a/lib/rules/property-whitelist/index.js b/lib/rules/property-whitelist/index.js deleted file mode 100644 index 65904a4664..0000000000 --- a/lib/rules/property-whitelist/index.js +++ /dev/null @@ -1,67 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const isCustomProperty = require('../../utils/isCustomProperty'); -const isStandardSyntaxProperty = require('../../utils/isStandardSyntaxProperty'); -const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); -const vendor = require('../../utils/vendor'); - -const ruleName = 'property-whitelist'; - -const messages = ruleMessages(ruleName, { - rejected: (property) => `Unexpected property "${property}"`, -}); - -function rule(list) { - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isString, _.isRegExp], - }); - - if (!validOptions) { - return; - } - - result.warn(`'${ruleName}' has been deprecated. Instead use 'property-allowed-list'.`, { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }); - - root.walkDecls((decl) => { - const prop = decl.prop; - - if (!isStandardSyntaxProperty(prop)) { - return; - } - - if (isCustomProperty(prop)) { - return; - } - - if (matchesStringOrRegExp(vendor.unprefixed(prop), list)) { - return; - } - - report({ - message: messages.rejected(prop), - node: decl, - result, - ruleName, - }); - }); - }; -} - -rule.primaryOptionArray = true; - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/selector-attribute-operator-blacklist/README.md b/lib/rules/selector-attribute-operator-blacklist/README.md deleted file mode 100644 index f3e54f4629..0000000000 --- a/lib/rules/selector-attribute-operator-blacklist/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# selector-attribute-operator-blacklist - -**_Deprecated: Instead use the [`selector-attribute-operator-disallowed-list`](../selector-attribute-operator-disallowed-list/README.md) rule._** - -Specify a list of disallowed attribute operators. - - -```css -[target="_blank"] {} -/** ↑ - * This operator */ -``` - -## Options - -`array|string`: `["array", "of", "operators"]|"operator"` - -Given: - -``` -["*="] -``` - -The following patterns are considered violations: - - -```css -[class*="test"] {} -``` - -The following patterns are _not_ considered violations: - - -```css -[target] {} -``` - - -```css -[target="_blank"] {} -``` - - -```css -[class|="top"] {} -``` diff --git a/lib/rules/selector-attribute-operator-blacklist/__tests__/index.js b/lib/rules/selector-attribute-operator-blacklist/__tests__/index.js deleted file mode 100644 index e36f2433a8..0000000000 --- a/lib/rules/selector-attribute-operator-blacklist/__tests__/index.js +++ /dev/null @@ -1,119 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: ['~='], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'selector-attribute-operator-disallowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - - config: ['*=', '~='], - - accept: [ - { - code: 'a[target] { }', - }, - { - code: 'a[target="_blank"] { }', - }, - { - code: '[class|="top"] { }', - }, - { - code: '[class^=top] { }', - }, - { - code: '[class$="test"] { }', - }, - { - code: ':root { --foo: 1px; }', - description: 'custom property in root', - }, - { - code: 'html { --foo: 1px; }', - description: 'custom property in selector', - }, - { - code: ':root { --custom-property-set: {} }', - description: 'custom property set in root', - }, - { - code: 'html { --custom-property-set: {} }', - description: 'custom property set in selector', - }, - ], - - reject: [ - { - code: '[title~="flower"] { }', - message: messages.rejected('~='), - line: 1, - column: 7, - }, - { - code: '[ title~="flower" ] { }', - message: messages.rejected('~='), - line: 1, - column: 8, - }, - { - code: '[title ~= "flower"] { }', - message: messages.rejected('~='), - line: 1, - column: 8, - }, - { - code: '[class*=te] { }', - message: messages.rejected('*='), - line: 1, - column: 7, - }, - ], -}); - -testRule({ - ruleName, - - config: ['*='], - - accept: [ - { - code: 'a[target="_blank"] { }', - }, - ], - - reject: [ - { - code: '[title*="foo"] { }', - message: messages.rejected('*='), - line: 1, - column: 7, - }, - ], -}); diff --git a/lib/rules/selector-attribute-operator-blacklist/index.js b/lib/rules/selector-attribute-operator-blacklist/index.js deleted file mode 100644 index 1caed2ff5f..0000000000 --- a/lib/rules/selector-attribute-operator-blacklist/index.js +++ /dev/null @@ -1,75 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); -const parseSelector = require('../../utils/parseSelector'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); - -const ruleName = 'selector-attribute-operator-blacklist'; - -const messages = ruleMessages(ruleName, { - rejected: (operator) => `Unexpected operator "${operator}"`, -}); - -function rule(listInput) { - const list = [].concat(listInput); - - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isString], - }); - - if (!validOptions) { - return; - } - - result.warn( - `'${ruleName}' has been deprecated. Instead use 'selector-attribute-operator-disallowed-list'.`, - { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }, - ); - - root.walkRules((ruleNode) => { - if (!isStandardSyntaxRule(ruleNode)) { - return; - } - - if (!ruleNode.selector.includes('[') || !ruleNode.selector.includes('=')) { - return; - } - - parseSelector(ruleNode.selector, result, ruleNode, (selectorTree) => { - selectorTree.walkAttributes((attributeNode) => { - const operator = attributeNode.operator; - - if (!operator || (operator && !list.includes(operator))) { - return; - } - - report({ - message: messages.rejected(operator), - node: ruleNode, - index: attributeNode.sourceIndex + attributeNode.offsetOf('operator'), - result, - ruleName, - }); - }); - }); - }); - }; -} - -rule.primaryOptionArray = true; - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/selector-attribute-operator-whitelist/README.md b/lib/rules/selector-attribute-operator-whitelist/README.md deleted file mode 100644 index 364d8266e6..0000000000 --- a/lib/rules/selector-attribute-operator-whitelist/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# selector-attribute-operator-whitelist - -**_Deprecated: Instead use the [`selector-attribute-operator-allowed-list`](../selector-attribute-operator-allowed-list/README.md) rule._** - -Specify a list of allowed attribute operators. - - -```css -[target="_blank"] {} -/** ↑ - * This operator */ -``` - -## Options - -`array|string`: `["array", "of", "operators"]|"operator"` - -Given: - -``` -["=", "|="] -``` - -The following patterns are considered violations: - - -```css -[class*="test"] {} -``` - - -```css -[title~="flower"] {} -``` - - -```css -[class^="top"] {} -``` - -The following patterns are _not_ considered violations: - - -```css -[target] {} -``` - - -```css -[target="_blank"] {} -``` - - -```css -[class|="top"] {} -``` diff --git a/lib/rules/selector-attribute-operator-whitelist/__tests__/index.js b/lib/rules/selector-attribute-operator-whitelist/__tests__/index.js deleted file mode 100644 index 671b57e3e7..0000000000 --- a/lib/rules/selector-attribute-operator-whitelist/__tests__/index.js +++ /dev/null @@ -1,125 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: ['='], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'selector-attribute-operator-allowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - - config: ['=', '|='], - - accept: [ - { - code: 'a[target] { }', - }, - { - code: 'a[target="_blank"] { }', - }, - { - code: '[class|="top"] { }', - }, - { - code: ':root { --foo: 1px; }', - description: 'custom property in root', - }, - { - code: 'html { --foo: 1px; }', - description: 'custom property in selector', - }, - { - code: ':root { --custom-property-set: {} }', - description: 'custom property set in root', - }, - { - code: 'html { --custom-property-set: {} }', - description: 'custom property set in selector', - }, - ], - - reject: [ - { - code: '[title~="flower"] { }', - message: messages.rejected('~='), - line: 1, - column: 7, - }, - { - code: '[ title~="flower" ] { }', - message: messages.rejected('~='), - line: 1, - column: 8, - }, - { - code: '[title ~= "flower"] { }', - message: messages.rejected('~='), - line: 1, - column: 8, - }, - { - code: '[class^=top] { }', - message: messages.rejected('^='), - line: 1, - column: 7, - }, - { - code: '[class$="test"] { }', - message: messages.rejected('$='), - line: 1, - column: 7, - }, - { - code: '[class*=te] { }', - message: messages.rejected('*='), - line: 1, - column: 7, - }, - ], -}); - -testRule({ - ruleName, - - config: ['='], - - accept: [ - { - code: 'a[target="_blank"] { }', - }, - ], - - reject: [ - { - code: '[title~="flower"] { }', - message: messages.rejected('~='), - line: 1, - column: 7, - }, - ], -}); diff --git a/lib/rules/selector-attribute-operator-whitelist/index.js b/lib/rules/selector-attribute-operator-whitelist/index.js deleted file mode 100644 index bd1c360832..0000000000 --- a/lib/rules/selector-attribute-operator-whitelist/index.js +++ /dev/null @@ -1,75 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); -const parseSelector = require('../../utils/parseSelector'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); - -const ruleName = 'selector-attribute-operator-whitelist'; - -const messages = ruleMessages(ruleName, { - rejected: (operator) => `Unexpected operator "${operator}"`, -}); - -function rule(listInput) { - const list = [].concat(listInput); - - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isString], - }); - - if (!validOptions) { - return; - } - - result.warn( - `'${ruleName}' has been deprecated. Instead use 'selector-attribute-operator-allowed-list'.`, - { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }, - ); - - root.walkRules((ruleNode) => { - if (!isStandardSyntaxRule(ruleNode)) { - return; - } - - if (!ruleNode.selector.includes('[') || !ruleNode.selector.includes('=')) { - return; - } - - parseSelector(ruleNode.selector, result, ruleNode, (selectorTree) => { - selectorTree.walkAttributes((attributeNode) => { - const operator = attributeNode.operator; - - if (!operator || (operator && list.includes(operator))) { - return; - } - - report({ - message: messages.rejected(operator), - node: ruleNode, - index: attributeNode.sourceIndex + attributeNode.offsetOf('operator'), - result, - ruleName, - }); - }); - }); - }); - }; -} - -rule.primaryOptionArray = true; - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/selector-combinator-blacklist/README.md b/lib/rules/selector-combinator-blacklist/README.md deleted file mode 100644 index cb64dfe82b..0000000000 --- a/lib/rules/selector-combinator-blacklist/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# selector-combinator-blacklist - -**_Deprecated: Instead use the [`selector-combinator-disallowed-list`](../selector-combinator-disallowed-list/README.md) rule._** - -Specify a list of disallowed combinators. - - -```css - a + b {} -/** ↑ - * This combinator */ -``` - -This rule normalizes the whitespace descendant combinator to be a single space. - -This rule ignores [reference combinators](https://www.w3.org/TR/selectors4/#idref-combinators) e.g. `/for/`. - -## Options - -`array|string`: `["array", "of", "combinators"]|"combinator"` - -Given: - -``` -[">", " "] -``` - -The following patterns are considered violations: - - -```css -a > b {} -``` - - -```css -a b {} -``` - - -```css -a -b {} -``` - -The following patterns are _not_ considered violations: - - -```css -a + b {} -``` - - -```css -a ~ b {} -``` diff --git a/lib/rules/selector-combinator-blacklist/__tests__/index.js b/lib/rules/selector-combinator-blacklist/__tests__/index.js deleted file mode 100644 index 7585ee6690..0000000000 --- a/lib/rules/selector-combinator-blacklist/__tests__/index.js +++ /dev/null @@ -1,94 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: ['>'], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'selector-combinator-disallowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - config: ['>', ' '], - skipBasicChecks: true, - - accept: [ - { - code: 'a {}', - }, - { - code: 'a, b {}', - }, - { - code: 'a /for/ b {}', - }, - { - code: 'a + b {}', - }, - { - code: 'a:not(b ~ c) {}', - }, - ], - - reject: [ - { - code: 'a b {}', - message: messages.rejected(' '), - line: 1, - column: 2, - }, - { - code: 'a\tb {}', - message: messages.rejected(' '), - line: 1, - column: 2, - }, - { - code: 'a\n\tb {}', - message: messages.rejected(' '), - line: 1, - column: 2, - }, - { - code: 'a,\nb c {}', - message: messages.rejected(' '), - line: 2, - column: 2, - }, - { - code: 'a:not(b > c) {}', - message: messages.rejected('>'), - line: 1, - column: 9, - }, - { - code: 'a > b {}', - message: messages.rejected('>'), - line: 1, - column: 3, - }, - ], -}); diff --git a/lib/rules/selector-combinator-blacklist/index.js b/lib/rules/selector-combinator-blacklist/index.js deleted file mode 100644 index c8b2e3023a..0000000000 --- a/lib/rules/selector-combinator-blacklist/index.js +++ /dev/null @@ -1,80 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const isStandardSyntaxCombinator = require('../../utils/isStandardSyntaxCombinator'); -const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); -const parseSelector = require('../../utils/parseSelector'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); - -const ruleName = 'selector-combinator-blacklist'; - -const messages = ruleMessages(ruleName, { - rejected: (combinator) => `Unexpected combinator "${combinator}"`, -}); - -function rule(list) { - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isString], - }); - - if (!validOptions) { - return; - } - - result.warn( - `'${ruleName}' has been deprecated. Instead use 'selector-combinator-disallowed-list'.`, - { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }, - ); - - root.walkRules((ruleNode) => { - if (!isStandardSyntaxRule(ruleNode)) { - return; - } - - const selector = ruleNode.selector; - - parseSelector(selector, result, ruleNode, (fullSelector) => { - fullSelector.walkCombinators((combinatorNode) => { - if (!isStandardSyntaxCombinator(combinatorNode)) { - return; - } - - const value = normalizeCombinator(combinatorNode.value); - - if (!list.includes(value)) { - return; - } - - report({ - result, - ruleName, - message: messages.rejected(value), - node: ruleNode, - index: combinatorNode.sourceIndex, - }); - }); - }); - }); - }; -} - -function normalizeCombinator(value) { - return value.replace(/\s+/g, ' '); -} - -rule.primaryOptionArray = true; - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/selector-combinator-whitelist/README.md b/lib/rules/selector-combinator-whitelist/README.md deleted file mode 100644 index 49454ca37a..0000000000 --- a/lib/rules/selector-combinator-whitelist/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# selector-combinator-whitelist - -**_Deprecated: Instead use the [`selector-combinator-allowed-list`](../selector-combinator-allowed-list/README.md) rule._** - -Specify a list of allowed combinators. - - -```css - a + b {} -/** ↑ - * This combinator */ -``` - -This rule normalizes the whitespace descendant combinator to be a single space. - -This rule ignores [reference combinators](https://www.w3.org/TR/selectors4/#idref-combinators) e.g. `/for/`. - -## Options - -`array|string`: `["array", "of", "combinators"]|"combinator"` - -Given: - -``` -[">", " "] -``` - -The following patterns are considered violations: - - -```css -a + b {} -``` - - -```css -a ~ b {} -``` - -The following patterns are _not_ considered violations: - - -```css -a > b {} -``` - - -```css -a b {} -``` - - -```css -a -b {} -``` diff --git a/lib/rules/selector-combinator-whitelist/__tests__/index.js b/lib/rules/selector-combinator-whitelist/__tests__/index.js deleted file mode 100644 index cbfa4b6a5c..0000000000 --- a/lib/rules/selector-combinator-whitelist/__tests__/index.js +++ /dev/null @@ -1,118 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: ['>'], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'selector-combinator-allowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - config: ['>', ' '], - skipBasicChecks: true, - - accept: [ - { - code: 'a {}', - }, - { - code: 'a, b {}', - }, - { - code: 'a /for/ b {}', - }, - { - code: 'a > b {}', - }, - { - code: 'a:not(b > c) {}', - }, - { - code: 'a b {}', - }, - { - code: 'a\tb {}', - }, - { - code: 'a\nb {}', - }, - ], - - reject: [ - { - code: 'a ~ b {}', - message: messages.rejected('~'), - line: 1, - column: 3, - }, - { - code: 'a:not(b ~ c) {}', - message: messages.rejected('~'), - line: 1, - column: 9, - }, - { - code: 'a,\nb + c {}', - message: messages.rejected('+'), - line: 2, - column: 3, - }, - ], -}); - -testRule({ - ruleName, - config: ['~'], - skipBasicChecks: true, - - accept: [ - { - code: 'a ~ b {}', - }, - ], - - reject: [ - { - code: 'a b {}', - message: messages.rejected(' '), - line: 1, - column: 2, - }, - { - code: 'a\tb {}', - message: messages.rejected(' '), - line: 1, - column: 2, - }, - { - code: 'a\n\tb {}', - message: messages.rejected(' '), - line: 1, - column: 2, - }, - ], -}); diff --git a/lib/rules/selector-combinator-whitelist/index.js b/lib/rules/selector-combinator-whitelist/index.js deleted file mode 100644 index 7635e3ebd6..0000000000 --- a/lib/rules/selector-combinator-whitelist/index.js +++ /dev/null @@ -1,80 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const isStandardSyntaxCombinator = require('../../utils/isStandardSyntaxCombinator'); -const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); -const parseSelector = require('../../utils/parseSelector'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); - -const ruleName = 'selector-combinator-whitelist'; - -const messages = ruleMessages(ruleName, { - rejected: (combinator) => `Unexpected combinator "${combinator}"`, -}); - -function rule(list) { - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isString], - }); - - if (!validOptions) { - return; - } - - result.warn( - `'${ruleName}' has been deprecated. Instead use 'selector-combinator-allowed-list'.`, - { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }, - ); - - root.walkRules((ruleNode) => { - if (!isStandardSyntaxRule(ruleNode)) { - return; - } - - const selector = ruleNode.selector; - - parseSelector(selector, result, ruleNode, (fullSelector) => { - fullSelector.walkCombinators((combinatorNode) => { - if (!isStandardSyntaxCombinator(combinatorNode)) { - return; - } - - const value = normalizeCombinator(combinatorNode.value); - - if (list.includes(value)) { - return; - } - - report({ - result, - ruleName, - message: messages.rejected(value), - node: ruleNode, - index: combinatorNode.sourceIndex, - }); - }); - }); - }); - }; -} - -function normalizeCombinator(value) { - return value.replace(/\s+/g, ' '); -} - -rule.primaryOptionArray = true; - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/selector-pseudo-class-blacklist/README.md b/lib/rules/selector-pseudo-class-blacklist/README.md deleted file mode 100644 index be91d9a071..0000000000 --- a/lib/rules/selector-pseudo-class-blacklist/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# selector-pseudo-class-blacklist - -**_Deprecated: Instead use the [`selector-pseudo-class-disallowed-list`](../selector-pseudo-class-disallowed-list/README.md) rule._** - -Specify a list of disallowed pseudo-class selectors. - - -```css - a:hover {} -/** ↑ - * This pseudo-class selector */ -``` - -This rule ignores selectors that use variable interpolation e.g. `:#{$variable} {}`. - -## Options - -`array|string|regex`: `["array", "of", "unprefixed", /pseudo-classes/ or "/regex/"]|"pseudo-class"|/regex/` - -If a string is surrounded with `"/"` (e.g. `"/^nth-/"`), it is interpreted as a regular expression. This allows, for example, easy targeting of shorthands: `/^nth-/` will match `nth-child`, `nth-last-child`, `nth-of-type`, etc. - -Given: - -``` -["hover", "/^nth-/"] -``` - -The following patterns are considered violations: - - -```css -a:hover {} -``` - - -```css -a:nth-of-type(5) {} -``` - - -```css -a:nth-child(2) {} -``` - -The following patterns are _not_ considered violations: - - -```css -a:focus {} -``` - - -```css -a:first-of-type {} -``` diff --git a/lib/rules/selector-pseudo-class-blacklist/__tests__/index.js b/lib/rules/selector-pseudo-class-blacklist/__tests__/index.js deleted file mode 100644 index 74a37f09a0..0000000000 --- a/lib/rules/selector-pseudo-class-blacklist/__tests__/index.js +++ /dev/null @@ -1,252 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: ['focus'], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'selector-pseudo-class-disallowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - config: ['focus', 'global', 'input-placeholder', 'not', 'nth-last-child', 'has'], - skipBasicChecks: true, - - accept: [ - { - code: 'a {}', - }, - { - code: 'a:hover {}', - }, - { - code: 'a:nth-child(5) {}', - }, - { - code: 'div:nth-LAST-child {}', - }, - { - code: 'input:-Ms-INPUT-placeholder {}', - }, - { - code: ':root {}', - }, - { - code: 'a:HOVER {}', - }, - { - code: 'a:hover, a:nth-child(5) {}', - }, - { - code: 'a::before {}', - }, - { - code: 'a:nth-child(5)::before {}', - }, - { - code: 'a:-moz-placeholder {}', - }, - { - code: 'a:-MOZ-PLACEholder {}', - }, - { - code: ':root { --foo: 1px; }', - description: 'custom property in root', - }, - { - code: 'html { --foo: 1px; }', - description: 'custom property in selector', - }, - { - code: ':root { --custom-property-set: {} }', - description: 'custom property set in root', - }, - { - code: 'html { --custom-property-set: {} }', - description: 'custom property set in selector', - }, - ], - - reject: [ - { - code: 'a:focus {}', - message: messages.rejected('focus'), - line: 1, - column: 2, - }, - { - code: 'a,\n:global {}', - message: messages.rejected('global'), - line: 2, - column: 1, - }, - { - code: 'input:-ms-input-placeholder {}', - message: messages.rejected('-ms-input-placeholder'), - line: 1, - column: 6, - }, - { - code: 'a:not(::selection) {}', - message: messages.rejected('not'), - line: 1, - column: 2, - }, - { - code: 'a:has(> img) {}', - message: messages.rejected('has'), - line: 1, - column: 2, - }, - ], -}); - -testRule({ - ruleName, - config: [['/^last/']], - skipBasicChecks: true, - - accept: [ - { - code: 'a {}', - }, - { - code: 'a:first-child() {}', - }, - { - code: 'a:nth-LAST-child(5) {}', - }, - ], - - reject: [ - { - code: 'a:last-child {}', - message: messages.rejected('last-child'), - line: 1, - column: 2, - }, - { - code: 'a:last-of-child {}', - message: messages.rejected('last-of-child'), - line: 1, - column: 2, - }, - ], -}); - -testRule({ - ruleName, - config: [[/^last/]], - skipBasicChecks: true, - - accept: [ - { - code: 'a {}', - }, - ], - - reject: [ - { - code: 'a:last-child {}', - message: messages.rejected('last-child'), - line: 1, - column: 2, - }, - ], -}); - -testRule({ - ruleName, - config: [[/(not|matches|has)/]], - skipBasicChecks: true, - - accept: [ - { - code: 'a:focus {}', - }, - ], - - reject: [ - { - code: 'a:not() {}', - message: messages.rejected('not'), - line: 1, - column: 2, - }, - { - code: 'body:not(div):has(span) {}', - warnings: [ - { - message: messages.rejected('not'), - line: 1, - column: 5, - }, - { - message: messages.rejected('has'), - line: 1, - column: 14, - }, - ], - }, - { - code: 'body:nt(div):not(span) {}', - message: messages.rejected('not'), - line: 1, - column: 13, - }, - { - code: 'a:has() {}', - message: messages.rejected('has'), - line: 1, - column: 2, - }, - { - code: 'a:matches() {}', - message: messages.rejected('matches'), - line: 1, - column: 2, - }, - ], -}); - -testRule({ - ruleName, - config: ['variable'], - skipBasicChecks: true, - syntax: 'scss', - - accept: [ - { - code: ':#{$variable} {}', - }, - { - code: ':#{$VARIABLE} {}', - }, - { - code: 'a:#{$variable} {}', - }, - ], -}); diff --git a/lib/rules/selector-pseudo-class-blacklist/index.js b/lib/rules/selector-pseudo-class-blacklist/index.js deleted file mode 100644 index 0c0ce9f5cd..0000000000 --- a/lib/rules/selector-pseudo-class-blacklist/index.js +++ /dev/null @@ -1,85 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); -const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); -const parseSelector = require('../../utils/parseSelector'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); -const vendor = require('../../utils/vendor'); - -const ruleName = 'selector-pseudo-class-blacklist'; - -const messages = ruleMessages(ruleName, { - rejected: (selector) => `Unexpected pseudo-class "${selector}"`, -}); - -function rule(list) { - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isString, _.isRegExp], - }); - - if (!validOptions) { - return; - } - - result.warn( - `'${ruleName}' has been deprecated. Instead use 'selector-pseudo-class-disallowed-list'.`, - { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }, - ); - - root.walkRules((ruleNode) => { - if (!isStandardSyntaxRule(ruleNode)) { - return; - } - - const selector = ruleNode.selector; - - if (!selector.includes(':')) { - return; - } - - parseSelector(selector, result, ruleNode, (selectorTree) => { - selectorTree.walkPseudos((pseudoNode) => { - const value = pseudoNode.value; - - // Ignore pseudo-elements - - if (value.slice(0, 2) === '::') { - return; - } - - const name = value.slice(1); - - if (!matchesStringOrRegExp(vendor.unprefixed(name), list)) { - return; - } - - report({ - index: pseudoNode.sourceIndex, - message: messages.rejected(name), - node: ruleNode, - result, - ruleName, - }); - }); - }); - }); - }; -} - -rule.primaryOptionArray = true; - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/selector-pseudo-class-whitelist/README.md b/lib/rules/selector-pseudo-class-whitelist/README.md deleted file mode 100644 index 294f80300a..0000000000 --- a/lib/rules/selector-pseudo-class-whitelist/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# selector-pseudo-class-whitelist - -**_Deprecated: Instead use the [`selector-pseudo-class-allowed-list`](../selector-pseudo-class-allowed-list/README.md) rule._** - -Specify a list of allowed pseudo-class selectors. - - -```css - a:hover {} -/** ↑ - * This pseudo-class selector */ -``` - -This rule ignores selectors that use variable interpolation e.g. `:#{$variable} {}`. - -## Options - -`array|string|regex`: `["array", "of", "unprefixed", /pseudo-classes/ or "/regex/"]|"pseudo-class"|/regex/` - -If a string is surrounded with `"/"` (e.g. `"/^nth-/"`), it is interpreted as a regular expression. This allows, for example, easy targeting of shorthands: `/^nth-/` will match `nth-child`, `nth-last-child`, `nth-of-type`, etc. - -Given: - -``` -["hover", "/^nth-/"] -``` - -The following patterns are considered violations: - - -```css -a:focus {} -``` - - -```css -a:first-of-type {} -``` - -The following patterns are _not_ considered violations: - - -```css -a:hover {} -``` - - -```css -a:nth-of-type(5) {} -``` - - -```css -a:nth-child(2) {} -``` diff --git a/lib/rules/selector-pseudo-class-whitelist/__tests__/index.js b/lib/rules/selector-pseudo-class-whitelist/__tests__/index.js deleted file mode 100644 index 46ca294a12..0000000000 --- a/lib/rules/selector-pseudo-class-whitelist/__tests__/index.js +++ /dev/null @@ -1,201 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: ['hover'], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'selector-pseudo-class-allowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - config: ['hover', 'nth-child', 'root', 'placeholder', 'has'], - skipBasicChecks: true, - - accept: [ - { - code: 'a {}', - }, - { - code: 'a:hover {}', - }, - { - code: 'a:nth-child(5) {}', - }, - { - code: ':root {}', - }, - { - code: 'a:has(#id) {}', - }, - { - code: 'a:hover, a:nth-child(5) {}', - }, - { - code: 'a::before {}', - }, - { - code: 'a:nth-child(5)::before {}', - }, - { - code: 'a:-moz-placeholder {}', - }, - { - code: ':root { --foo: 1px; }', - description: 'custom property in root', - }, - { - code: 'html { --foo: 1px; }', - description: 'custom property in selector', - }, - { - code: ':root { --custom-property-set: {} }', - description: 'custom property set in root', - }, - { - code: 'html { --custom-property-set: {} }', - description: 'custom property set in selector', - }, - ], - - reject: [ - { - code: 'a:HOVER {}', - message: messages.rejected('HOVER'), - line: 1, - column: 2, - }, - { - code: 'a:-MOZ-PLACEholder {}', - message: messages.rejected('-MOZ-PLACEholder'), - line: 1, - column: 2, - }, - { - code: 'a:focus {}', - message: messages.rejected('focus'), - line: 1, - column: 2, - }, - { - code: 'div:nth-LAST-child {}', - message: messages.rejected('nth-LAST-child'), - line: 1, - column: 4, - }, - { - code: 'a,\n:global {}', - message: messages.rejected('global'), - line: 2, - column: 1, - }, - { - code: 'input:-ms-input-placeholder {}', - message: messages.rejected('-ms-input-placeholder'), - line: 1, - column: 6, - }, - { - code: 'input:-Ms-INPUT-placeholder {}', - message: messages.rejected('-Ms-INPUT-placeholder'), - line: 1, - column: 6, - }, - { - code: 'a:not(::selection) {}', - message: messages.rejected('not'), - line: 1, - column: 2, - }, - ], -}); - -testRule({ - ruleName, - config: [['/^nth/']], - skipBasicChecks: true, - - accept: [ - { - code: 'a {}', - }, - { - code: 'a:nth-child(5) {}', - }, - { - code: 'a:nth-LAST-child {}', - }, - ], - - reject: [ - { - code: 'a:hover {}', - message: messages.rejected('hover'), - line: 1, - column: 2, - }, - ], -}); - -testRule({ - ruleName, - config: [[/^nth/]], - skipBasicChecks: true, - - accept: [ - { - code: 'a {}', - }, - ], - - reject: [ - { - code: 'a:hover {}', - message: messages.rejected('hover'), - line: 1, - column: 2, - }, - ], -}); - -testRule({ - ruleName, - config: ['hover'], - skipBasicChecks: true, - syntax: 'scss', - - accept: [ - { - code: ':#{$variable} {}', - }, - { - code: ':#{$VARIABLE} {}', - }, - { - code: 'a:#{$variable} {}', - }, - ], -}); diff --git a/lib/rules/selector-pseudo-class-whitelist/index.js b/lib/rules/selector-pseudo-class-whitelist/index.js deleted file mode 100644 index 0afef48632..0000000000 --- a/lib/rules/selector-pseudo-class-whitelist/index.js +++ /dev/null @@ -1,84 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); -const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); -const parseSelector = require('../../utils/parseSelector'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); -const vendor = require('../../utils/vendor'); - -const ruleName = 'selector-pseudo-class-whitelist'; - -const messages = ruleMessages(ruleName, { - rejected: (selector) => `Unexpected pseudo-class "${selector}"`, -}); - -function rule(list) { - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isString, _.isRegExp], - }); - - if (!validOptions) { - return; - } - - result.warn( - `'${ruleName}' has been deprecated. Instead use 'selector-pseudo-class-allowed-list'.`, - { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }, - ); - - root.walkRules((ruleNode) => { - if (!isStandardSyntaxRule(ruleNode)) { - return; - } - - const selector = ruleNode.selector; - - if (!selector.includes(':')) { - return; - } - - parseSelector(selector, result, ruleNode, (selectorTree) => { - selectorTree.walkPseudos((pseudoNode) => { - const value = pseudoNode.value; - - // Ignore pseudo-elements - if (value.slice(0, 2) === '::') { - return; - } - - const name = value.slice(1); - - if (matchesStringOrRegExp(vendor.unprefixed(name), list)) { - return; - } - - report({ - index: pseudoNode.sourceIndex, - message: messages.rejected(name), - node: ruleNode, - result, - ruleName, - }); - }); - }); - }); - }; -} - -rule.primaryOptionArray = true; - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/selector-pseudo-element-blacklist/README.md b/lib/rules/selector-pseudo-element-blacklist/README.md deleted file mode 100644 index bcb9cf2908..0000000000 --- a/lib/rules/selector-pseudo-element-blacklist/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# selector-pseudo-element-blacklist - -**_Deprecated: Instead use the [`selector-pseudo-element-disallowed-list`](../selector-pseudo-element-disallowed-list/README.md) rule._** - -Specify a list of disallowed pseudo-element selectors. - - -```css - a::before {} -/** ↑ - * This pseudo-element selector */ -``` - -This rule ignores: - -- CSS2 pseudo-elements i.e. those prefixed with a single colon -- selectors that use variable interpolation e.g. `::#{$variable} {}` - -## Options - -`array|string|regex`: `["array", "of", "unprefixed", "pseudo-elements" or "regex"]|"pseudo-element"|/regex/` - -Given: - -``` -["before", "/^my-/i"] -``` - -The following patterns are considered violations: - - -```css -a::before {} -``` - - -```css -a::my-pseudo-element {} -``` - - -```css -a::MY-OTHER-pseudo-element {} -``` - -The following patterns are _not_ considered violations: - - -```css -a::after {} -``` - - -```css -a::not-my-pseudo-element {} -``` diff --git a/lib/rules/selector-pseudo-element-blacklist/__tests__/index.js b/lib/rules/selector-pseudo-element-blacklist/__tests__/index.js deleted file mode 100644 index ad20bc0bcd..0000000000 --- a/lib/rules/selector-pseudo-element-blacklist/__tests__/index.js +++ /dev/null @@ -1,131 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: ['before'], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'selector-pseudo-element-disallowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - config: ['before', 'selection', /^my/i], - skipBasicChecks: true, - - accept: [ - { - code: 'a {}', - }, - { - code: 'a:hover {}', - }, - { - code: 'a::BEFORE {}', - }, - { - code: 'a::after {}', - }, - { - code: '::first-line {}', - }, - { - code: '::-webkit-first-line {}', - }, - { - code: 'a:not(::first-line) {}', - }, - { - code: 'a::their-pseudo-element {}', - }, - { - code: 'a::THEIR-other-pseudo-element {}', - }, - ], - - reject: [ - { - code: 'a::before {}', - message: messages.rejected('before'), - line: 1, - column: 2, - }, - { - code: 'a,\nb::before {}', - message: messages.rejected('before'), - line: 2, - column: 2, - }, - { - code: '::selection {}', - message: messages.rejected('selection'), - line: 1, - column: 1, - }, - { - code: '::-webkit-selection {}', - message: messages.rejected('-webkit-selection'), - line: 1, - column: 1, - }, - { - code: 'a:not(::selection) {}', - message: messages.rejected('selection'), - line: 1, - column: 7, - }, - { - code: 'a::my-pseudo-element {}', - message: messages.rejected('my-pseudo-element'), - line: 1, - column: 2, - }, - { - code: 'a::MY-OTHER-pseudo-element {}', - message: messages.rejected('MY-OTHER-pseudo-element'), - line: 1, - column: 2, - }, - ], -}); - -testRule({ - ruleName, - config: ['before'], - skipBasicChecks: true, - syntax: 'scss', - - accept: [ - { - code: '::#{$variable} {}', - }, - { - code: '::#{$VARIABLE} {}', - }, - { - code: 'a::#{$variable} {}', - }, - ], -}); diff --git a/lib/rules/selector-pseudo-element-blacklist/index.js b/lib/rules/selector-pseudo-element-blacklist/index.js deleted file mode 100644 index b407dd358b..0000000000 --- a/lib/rules/selector-pseudo-element-blacklist/index.js +++ /dev/null @@ -1,84 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); -const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); -const parseSelector = require('../../utils/parseSelector'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); -const vendor = require('../../utils/vendor'); - -const ruleName = 'selector-pseudo-element-blacklist'; - -const messages = ruleMessages(ruleName, { - rejected: (selector) => `Unexpected pseudo-element "${selector}"`, -}); - -function rule(list) { - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isString, _.isRegExp], - }); - - if (!validOptions) { - return; - } - - result.warn( - `'${ruleName}' has been deprecated. Instead use 'selector-pseudo-element-disallowed-list'.`, - { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }, - ); - - root.walkRules((ruleNode) => { - if (!isStandardSyntaxRule(ruleNode)) { - return; - } - - const selector = ruleNode.selector; - - if (!selector.includes('::')) { - return; - } - - parseSelector(selector, result, ruleNode, (selectorTree) => { - selectorTree.walkPseudos((pseudoNode) => { - const value = pseudoNode.value; - - // Ignore pseudo-classes - if (value[1] !== ':') { - return; - } - - const name = value.slice(2); - - if (!matchesStringOrRegExp(vendor.unprefixed(name), list)) { - return; - } - - report({ - index: pseudoNode.sourceIndex, - message: messages.rejected(name), - node: ruleNode, - result, - ruleName, - }); - }); - }); - }); - }; -} - -rule.primaryOptionArray = true; - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/selector-pseudo-element-whitelist/README.md b/lib/rules/selector-pseudo-element-whitelist/README.md deleted file mode 100644 index 2a24022cb0..0000000000 --- a/lib/rules/selector-pseudo-element-whitelist/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# selector-pseudo-element-whitelist - -**_Deprecated: Instead use the [`selector-pseudo-element-allowed-list`](../selector-pseudo-element-allowed-list/README.md) rule._** - -Specify a list of allowed pseudo-element selectors. - - -```css - a::before {} -/** ↑ - * This pseudo-element selector */ -``` - -This rule ignores: - -- CSS2 pseudo-elements i.e. those prefixed with a single colon -- selectors that use variable interpolation e.g. `::#{$variable} {}` - -## Options - -`array|string|regex`: `["array", "of", "unprefixed", "pseudo-elements" or "regex"]|"pseudo-element"|/regex/` - -Given: - -``` -["before", "/^my-/i"] -``` - -The following patterns are considered violations: - - -```css -a::after {} -``` - - -```css -a::not-my-pseudo-element {} -``` - -The following patterns are _not_ considered violations: - - -```css -a::before {} -``` - - -```css -a::my-pseudo-element {} -``` - - -```css -a::MY-OTHER-pseudo-element {} -``` diff --git a/lib/rules/selector-pseudo-element-whitelist/__tests__/index.js b/lib/rules/selector-pseudo-element-whitelist/__tests__/index.js deleted file mode 100644 index 95a1944a54..0000000000 --- a/lib/rules/selector-pseudo-element-whitelist/__tests__/index.js +++ /dev/null @@ -1,153 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: ['before'], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'selector-pseudo-element-allowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - config: ['before', 'selection', /^my/i], - skipBasicChecks: true, - - accept: [ - { - code: 'a {}', - }, - { - code: 'a:hover {}', - }, - { - code: 'a::before {}', - }, - { - code: '::selection {}', - }, - { - code: '::-webkit-selection {}', - }, - { - code: 'a:not(::selection) {}', - }, - { - code: 'a::my-pseudo-element {}', - }, - { - code: 'a::MY-other-pseudo-element {}', - }, - ], - - reject: [ - { - code: 'a::BEFORE {}', - message: messages.rejected('BEFORE'), - line: 1, - column: 2, - }, - { - code: 'a::after {}', - message: messages.rejected('after'), - line: 1, - column: 2, - }, - { - code: 'a::AFTER {}', - message: messages.rejected('AFTER'), - line: 1, - column: 2, - }, - { - code: 'a,\nb::after {}', - message: messages.rejected('after'), - line: 2, - column: 2, - }, - { - code: 'a::not-my-pseudo-element {}', - message: messages.rejected('not-my-pseudo-element'), - line: 1, - column: 2, - }, - ], -}); - -testRule({ - ruleName, - config: /^before/, - skipBasicChecks: true, - - accept: [ - { - code: '::before {}', - }, - { - code: '::before-custom {}', - }, - ], - reject: [ - { - code: 'a::after {}', - message: messages.rejected('after'), - line: 1, - column: 2, - }, - { - code: 'a::not-before {}', - message: messages.rejected('not-before'), - line: 1, - column: 2, - }, - ], -}); - -testRule({ - ruleName, - config: ['before'], - skipBasicChecks: true, - syntax: 'scss', - - accept: [ - { - code: '::#{$variable} {}', - }, - { - code: '::#{$VARIABLE} {}', - }, - { - code: 'a::#{$variable} {}', - }, - ], - reject: [ - { - code: 'a::after {}', - message: messages.rejected('after'), - line: 1, - column: 2, - }, - ], -}); diff --git a/lib/rules/selector-pseudo-element-whitelist/index.js b/lib/rules/selector-pseudo-element-whitelist/index.js deleted file mode 100644 index d7304a6c0d..0000000000 --- a/lib/rules/selector-pseudo-element-whitelist/index.js +++ /dev/null @@ -1,84 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); -const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); -const parseSelector = require('../../utils/parseSelector'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); -const vendor = require('../../utils/vendor'); - -const ruleName = 'selector-pseudo-element-whitelist'; - -const messages = ruleMessages(ruleName, { - rejected: (selector) => `Unexpected pseudo-element "${selector}"`, -}); - -function rule(list) { - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual: list, - possible: [_.isString, _.isRegExp], - }); - - if (!validOptions) { - return; - } - - result.warn( - `'${ruleName}' has been deprecated. Instead use 'selector-pseudo-element-allowed-list'.`, - { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }, - ); - - root.walkRules((ruleNode) => { - if (!isStandardSyntaxRule(ruleNode)) { - return; - } - - const selector = ruleNode.selector; - - if (!selector.includes('::')) { - return; - } - - parseSelector(selector, result, ruleNode, (selectorTree) => { - selectorTree.walkPseudos((pseudoNode) => { - const value = pseudoNode.value; - - // Ignore pseudo-classes - if (value[1] !== ':') { - return; - } - - const name = value.slice(2); - - if (matchesStringOrRegExp(vendor.unprefixed(name), list)) { - return; - } - - report({ - index: pseudoNode.sourceIndex, - message: messages.rejected(name), - node: ruleNode, - result, - ruleName, - }); - }); - }); - }); - }; -} - -rule.primaryOptionArray = true; - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/unit-blacklist/README.md b/lib/rules/unit-blacklist/README.md deleted file mode 100644 index bcfa8710b3..0000000000 --- a/lib/rules/unit-blacklist/README.md +++ /dev/null @@ -1,161 +0,0 @@ -# unit-blacklist - -**_Deprecated: Instead use the [`unit-disallowed-list`](../unit-disallowed-list/README.md) rule._** - -Specify a list of disallowed units. - - -```css -a { width: 100px; } -/** ↑ - * These units */ -``` - -## Options - -`array|string`: `["array", "of", "units"]|"unit"` - -Given: - -``` -["px", "em", "deg"] -``` - -The following patterns are considered violations: - - -```css -a { width: 100px; } -``` - - -```css -a { font-size: 10em; } -``` - - -```css -a { transform: rotate(30deg); } -``` - -The following patterns are _not_ considered violations: - - -```css -a { font-size: 1.2rem; } -``` - - -```css -a { line-height: 1.2; } -``` - - -```css -a { height: 100vmin; } -``` - - -```css -a { animation: animation-name 5s ease; } -``` - -## Optional secondary options - -### `ignoreProperties: { unit: ["property", "/regex/", /regex/] }` - -Ignore units in the values of declarations with the specified properties. - -For example, with `["px", "vmin"]`. - -Given: - -``` -{ - "px": [ "font-size", "/^border/" ], - "vmin": [ "width" ] -} -``` - -The following patterns are _not_ considered violations: - - -```css -a { font-size: 13px; } -``` - - -```css -a { border-bottom-width: 6px; } -``` - - -```css -a { width: 100vmin; } -``` - -The following patterns are considered violations: - - -```css -a { line-height: 12px; } -``` - - -```css -a { -moz-border-radius-topright: 40px; } -``` - - -```css -a { height: 100vmin; } -``` - -### `ignoreMediaFeatureNames: { unit: ["property", "/regex/", /regex/] }` - -Ignore units for specific feature names. - -For example, with `["px", "dpi"]`. - -Given: - -``` -{ - "px": [ "min-width", "/height$/" ], - "dpi": [ "resolution" ] -} -``` - -The following patterns are _not_ considered violations: - - -```css -@media (min-width: 960px) {} -``` - - -```css -@media (max-height: 280px) {} -``` - - -```css -@media not (resolution: 300dpi) {} -``` - -The following patterns are considered violations: - - -```css -@media screen and (max-device-width: 500px) {} -``` - - -```css -@media all and (min-width: 500px) and (max-width: 200px) {} -``` - - -```css -@media print and (max-resolution: 100dpi) {} -``` diff --git a/lib/rules/unit-blacklist/__tests__/index.js b/lib/rules/unit-blacklist/__tests__/index.js deleted file mode 100644 index 20cb4bee23..0000000000 --- a/lib/rules/unit-blacklist/__tests__/index.js +++ /dev/null @@ -1,568 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: ['px'], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'unit-disallowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - - config: ['px', 'vmin'], - - accept: [ - { - code: 'a { line-height: 1; }', - }, - { - code: 'a { color: #000; }', - }, - { - code: 'a { top: 0; left: 0; }', - }, - { - code: 'a { font-size: 100%; }', - }, - { - code: 'a { line-height: 1.2rem; }', - }, - { - code: 'a { line-height: 1.2rEm; }', - }, - { - code: 'a { line-height: 1.2REM; }', - }, - { - code: 'a { font-size: .5rem; }', - }, - { - code: 'a { font-size: 0.5rem; }', - }, - { - code: 'a { margin: 0 10em 5rem 2in; }', - }, - { - code: 'a { background-position: top right, 1em 5vh; }', - }, - { - code: 'a { top: calc(10em - 3em); }', - }, - { - code: 'a { top: calc(10em*2rem); }', - }, - { - code: 'a { background-image: linear-gradient(to right, white calc(100% - 50em), silver); }', - }, - { - code: 'a { width: /* 100px */ 1em; }', - description: 'ignore unit within comments', - }, - { - code: 'a::before { content: "10px"}', - description: 'ignore unit within quotes', - }, - { - code: 'a { font-size: $fs10px; }', - description: 'ignore preprocessor variable includes unit', - }, - { - code: 'a { font-size: --some-fs-10px; }', - description: 'ignore css variable includes unit', - }, - { - code: 'a { background-url: url(10vmin); }', - description: 'ignore url function', - }, - { - code: 'a { background-url: uRl(10vmin); }', - description: 'ignore url function', - }, - { - code: 'a { background-url: URL(10vmin); }', - description: 'ignore url function', - }, - { - code: 'a { margin10px: 10em; }', - description: 'ignore property include wrong unit', - }, - { - code: 'a10px { margin: 10em; }', - description: 'ignore type selector include wrong unit', - }, - { - code: '#a10px { margin: 10em; }', - description: 'ignore class selector include wrong unit', - }, - { - code: '.a10px { margin: 10em; }', - description: 'ignore class selector include wrong unit', - }, - { - code: 'input[type=10px] { margin: 10em; }', - description: 'ignore class selector include wrong unit', - }, - { - code: 'a:hover10px { margin: 10em; }', - description: 'ignore pseudo-class include wrong unit', - }, - { - code: 'a::before10px { margin: 10em; }', - description: 'ignore pseudo-class include wrong unit', - }, - { - code: 'a { margin: calc(100% - #{margin * 2}); }', - description: 'work with interpolation', - }, - { - code: '@media (min-width: 10em) {}', - description: '@media', - }, - { - code: '@media (min-width: 10em)\n and (max-width: 20em) {}', - description: 'complex @media', - }, - ], - - reject: [ - { - code: 'a { font-size: 13px; }', - message: messages.rejected('px'), - line: 1, - column: 16, - }, - { - code: 'a { font-size: 13pX; }', - message: messages.rejected('pX'), - line: 1, - column: 16, - }, - { - code: 'a { font-size: 13PX; }', - message: messages.rejected('PX'), - line: 1, - column: 16, - }, - { - code: 'a { width: 100vmin; }', - message: messages.rejected('vmin'), - line: 1, - column: 12, - }, - { - code: 'a { line-height: .1px; }', - message: messages.rejected('px'), - line: 1, - column: 18, - }, - { - code: 'a { line-height: 0.1px; }', - message: messages.rejected('px'), - line: 1, - column: 18, - }, - { - code: 'a { border-left: 1px solid #ccc; }', - message: messages.rejected('px'), - line: 1, - column: 18, - }, - { - code: 'a { margin: 0 20px; }', - message: messages.rejected('px'), - line: 1, - column: 15, - }, - { - code: 'a { margin: 0 0 0 20px; }', - message: messages.rejected('px'), - line: 1, - column: 19, - }, - { - code: 'a { background-position: top right, 1em 5px; }', - message: messages.rejected('px'), - line: 1, - column: 41, - }, - { - code: 'a { top: calc(100px - 30vh); }', - message: messages.rejected('px'), - line: 1, - column: 15, - }, - { - code: 'a { top: calc(100px*2); }', - message: messages.rejected('px'), - line: 1, - column: 15, - }, - { - code: 'a { background-image: linear-gradient(to right, white calc(100vh - 5vmin), silver); }', - message: messages.rejected('vmin'), - line: 1, - column: 68, - }, - { - code: 'a { margin: calc(100% - #{$margin * 2px}); }', - message: messages.rejected('px'), - line: 1, - column: 37, - }, - { - code: '@media (min-width: 13px) {}', - message: messages.rejected('px'), - description: '@media', - line: 1, - column: 20, - }, - { - code: '@media (min-width: 10em)\n and (max-width: 20px) {}', - message: messages.rejected('px'), - description: 'complex @media', - line: 2, - column: 19, - }, - { - code: '@media (width < 10.01px) {}', - message: messages.rejected('px'), - description: 'media feature range', - line: 1, - column: 17, - }, - ], -}); - -testRule({ - ruleName, - - config: ['px'], - - accept: [ - { - code: 'a { line-height: 1em; }', - }, - ], - - reject: [ - { - code: 'a { line-height: 1px; }', - message: messages.rejected('px'), - line: 1, - column: 18, - }, - ], -}); - -testRule({ - ruleName, - - config: [ - ['px', 'vmin'], - { - ignoreProperties: { - px: ['font-size', 'margin', '/^border/'], - vmin: ['width', 'height'], - }, - }, - ], - - accept: [ - { - code: 'a { font-size: 13px; }', - }, - { - code: 'a { font-size: 13pX; }', - }, - { - code: 'a { margin: 0 20px; }', - }, - { - code: 'a { margin: 0 0 0 20Px; }', - }, - { - code: 'a { width: 100vmin; }', - }, - { - code: 'a { height: 99vmIn; }', - }, - { - code: 'a { border: 1px solid purple; }', - }, - { - code: 'a { border-bottom-width: 6px; }', - }, - ], - - reject: [ - { - code: 'a { line-height: .1px; }', - message: messages.rejected('px'), - line: 1, - column: 18, - }, - { - code: 'a { background-image: linear-gradient(to right, white calc(100vh - 5vmin), silver); }', - message: messages.rejected('vmin'), - line: 1, - column: 68, - }, - { - code: 'a { -moz-border-radius-topright: 40px; }', - message: messages.rejected('px'), - line: 1, - column: 34, - }, - ], -}); - -testRule({ - ruleName, - - config: [ - ['px', 'vmin'], - { - ignoreProperties: { - px: ['font-size', 'margin', /^border/], - vmin: ['width', 'height'], - }, - }, - ], - - accept: [ - { - code: 'a { border: 1px solid purple; }', - }, - { - code: 'a { border-bottom-width: 6px; }', - }, - ], - - reject: [ - { - code: 'a { line-height: .1px; }', - message: messages.rejected('px'), - line: 1, - column: 18, - }, - ], -}); - -testRule({ - ruleName, - - config: [ - ['px', 'dpi', '%'], - { - ignoreMediaFeatureNames: { - px: ['min-width', 'height'], - dpi: ['min-resolution', 'resolution'], - '%': ['width', '/^min/'], - }, - }, - ], - - accept: [ - { - code: '@media (min-width: 960px) { body { font-size: 13em } }', - }, - { - code: '@media (width: 960%) { /* body { font-size: 13em } */ }', - }, - { - code: '@media (min-width: 960%) { /* body { font-size: 13em } */ }', - }, - { - code: 'a { @media (min-width: 960px) { body { font-size: 13em } } }', - }, - { - code: '@media print and (min-resolution: 300dpi) { body { font-size: 13em } }', - }, - { - code: '@media print { body { font-size: 40pt } }', - }, - { - code: '@media screen, print { body { line-height: 1.2 } }', - }, - { - code: '@MEDIA (min-width: 960px) { body { font-size: 13em } }', - }, - { - code: '@media (MIN-WIDTH: 960px) { body { font-size: 13em } }', - }, - { - code: '@media (height > -100px) { body { background: green; } }', - }, - { - code: '@media not (resolution: -300dpi) { body { background: green; } }', - }, - { - code: '@media only screen and (min-width: 500px) { }', - }, - { - code: '@media only speech and (width > 20%) { }', - }, - { - code: '@media speech and (device-aspect-ratio: 16/9) { }', - }, - { - code: - '@media only screen and (min-width: 320px) and (height: 480px) and (-webkit-min-device-pixel-ratio: 2) { body { line-height: 1.4 } }', - }, - { - code: '@media screen, print { }', - }, - { - code: '@media speech and (aspect-ratio: 11/5) { }', - }, - { - code: '@media (min-width: 700px), handheld and (orientation: landscape) { }', - }, - ], - - reject: [ - { - code: '@media screen and (max-width: 500px) { }', - message: messages.rejected('px'), - line: 1, - column: 31, - }, - { - code: '@media (width: 960px) { /* body { font-size: 13em } */ }', - message: messages.rejected('px'), - line: 1, - column: 16, - }, - { - code: '@media (min-height: 960px) { /* body { font-size: 13em } */ }', - message: messages.rejected('px'), - line: 1, - column: 21, - }, - { - code: 'a { @media screen and (max-width: 500px) { } }', - message: messages.rejected('px'), - line: 1, - column: 35, - }, - { - code: '@media all and (min-width: 500px) and (max-width: 200px) { }', - message: messages.rejected('px'), - line: 1, - column: 51, - }, - { - code: '@MEDIA print { body { font-size: 60dpi } }', - message: messages.rejected('dpi'), - line: 1, - column: 34, - }, - { - code: '@media (MAX-WIDTH: 10px) { }', - message: messages.rejected('px'), - line: 1, - column: 20, - }, - { - code: '@media (min-width: 10em)\n and (max-width: 20px) { }', - message: messages.rejected('px'), - line: 2, - column: 19, - }, - { - code: '@media (width < 10.01px) {}', - message: messages.rejected('px'), - line: 1, - column: 17, - }, - { - code: '@media only speech and (max-device-width > 20%) { }', - message: messages.rejected('%'), - line: 1, - column: 44, - }, - { - code: '@media not (max-resolution: -300dpi) { body { background: green; } }', - message: messages.rejected('dpi'), - line: 1, - column: 29, - }, - { - code: - '@media only screen and (min-width: 320px) and (height: 480px) and (-webkit-min-device-pixel-ratio: 2) { body { line-height: 1.4px } }', - message: messages.rejected('px'), - line: 1, - column: 125, - }, - { - code: - '@media only screen and (min-width: 320px) and (height: 480px) and (-webkit-min-device-pixel-ratio: 2px) { body { line-height: 1.4 } }', - message: messages.rejected('px'), - line: 1, - column: 100, - }, - { - code: '@media screen and (min-width: 699px) and (min-width: 520px), (max-width: 1151px)', - message: messages.rejected('px'), - line: 1, - column: 74, - }, - ], -}); - -testRule({ - ruleName, - - config: [ - ['px', 'dpi', '%'], - { - ignoreMediaFeatureNames: { - px: ['min-width', 'height'], - dpi: ['min-resolution', 'resolution'], - '%': ['width', /^min/], - }, - }, - ], - - accept: [ - { - code: '@media (width: 960%) { /* body { font-size: 13em } */ }', - }, - { - code: '@media (min-width: 960%) { /* body { font-size: 13em } */ }', - }, - ], - - reject: [ - { - code: '@media screen and (max-width: 500px) { }', - message: messages.rejected('px'), - line: 1, - column: 31, - }, - ], -}); diff --git a/lib/rules/unit-blacklist/index.js b/lib/rules/unit-blacklist/index.js deleted file mode 100644 index dc8abc6465..0000000000 --- a/lib/rules/unit-blacklist/index.js +++ /dev/null @@ -1,132 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const atRuleParamIndex = require('../../utils/atRuleParamIndex'); -const declarationValueIndex = require('../../utils/declarationValueIndex'); -const getUnitFromValueNode = require('../../utils/getUnitFromValueNode'); -const mediaParser = require('postcss-media-query-parser').default; -const optionsMatches = require('../../utils/optionsMatches'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateObjectWithArrayProps = require('../../utils/validateObjectWithArrayProps'); -const validateOptions = require('../../utils/validateOptions'); -const valueParser = require('postcss-value-parser'); - -const ruleName = 'unit-blacklist'; - -const messages = ruleMessages(ruleName, { - rejected: (unit) => `Unexpected unit "${unit}"`, -}); - -// a function to retrieve only the media feature name -// could be externalized in an utils function if needed in other code -const getMediaFeatureName = (mediaFeatureNode) => { - const value = mediaFeatureNode.value.toLowerCase(); - - return /((-?\w*)*)/i.exec(value)[1]; -}; - -function rule(listInput, options) { - const list = [].concat(listInput); - - return (root, result) => { - const validOptions = validateOptions( - result, - ruleName, - { - actual: list, - possible: [_.isString], - }, - { - optional: true, - actual: options, - possible: { - ignoreProperties: validateObjectWithArrayProps([_.isString, _.isRegExp]), - ignoreMediaFeatureNames: validateObjectWithArrayProps([_.isString, _.isRegExp]), - }, - }, - ); - - if (!validOptions) { - return; - } - - result.warn(`'${ruleName}' has been deprecated. Instead use 'unit-disallowed-list'.`, { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }); - - function check(node, nodeIndex, valueNode, input, option) { - const unit = getUnitFromValueNode(valueNode); - - // There is not unit or it is not configured as a violation - if (!unit || (unit && !list.includes(unit.toLowerCase()))) { - return; - } - - // The unit has an ignore option for the specific input - if (optionsMatches(option, unit.toLowerCase(), input)) { - return; - } - - report({ - index: nodeIndex + valueNode.sourceIndex, - message: messages.rejected(unit), - node, - result, - ruleName, - }); - } - - function checkMedia(node, value, getIndex) { - mediaParser(node.params).walk(/^media-feature$/i, (mediaFeatureNode) => { - const mediaName = getMediaFeatureName(mediaFeatureNode); - const parentValue = mediaFeatureNode.parent.value; - - valueParser(value).walk((valueNode) => { - // Ignore all non-word valueNode and - // the values not included in the parentValue string - if (valueNode.type !== 'word' || !parentValue.includes(valueNode.value)) { - return; - } - - check( - node, - getIndex(node), - valueNode, - mediaName, - options ? options.ignoreMediaFeatureNames : {}, - ); - }); - }); - } - - function checkDecl(node, value, getIndex) { - // make sure multiplication operations (*) are divided - not handled - // by postcss-value-parser - value = value.replace(/\*/g, ','); - - valueParser(value).walk((valueNode) => { - // Ignore wrong units within `url` function - if (valueNode.type === 'function' && valueNode.value.toLowerCase() === 'url') { - return false; - } - - check(node, getIndex(node), valueNode, node.prop, options ? options.ignoreProperties : {}); - }); - } - - root.walkAtRules(/^media$/i, (atRule) => checkMedia(atRule, atRule.params, atRuleParamIndex)); - root.walkDecls((decl) => checkDecl(decl, decl.value, declarationValueIndex)); - }; -} - -rule.primaryOptionArray = true; - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; diff --git a/lib/rules/unit-whitelist/README.md b/lib/rules/unit-whitelist/README.md deleted file mode 100644 index c32c1333d7..0000000000 --- a/lib/rules/unit-whitelist/README.md +++ /dev/null @@ -1,117 +0,0 @@ -# unit-whitelist - -**_Deprecated: Instead use the [`unit-allowed-list`](../unit-allowed-list/README.md) rule._** - -Specify a list of allowed units. - - -```css -a { width: 100px; } -/** ↑ - * These units */ -``` - -## Options - -`array|string`: `["array", "of", "units"]|"unit"` - -Given: - -``` -["px", "em", "deg"] -``` - -The following patterns are considered violations: - - -```css -a { width: 100%; } -``` - - -```css -a { font-size: 10rem; } -``` - - -```css -a { animation: animation-name 5s ease; } -``` - -The following patterns are _not_ considered violations: - - -```css -a { font-size: 1.2em; } -``` - - -```css -a { line-height: 1.2; } -``` - - -```css -a { height: 100px; } -``` - - -```css -a { height: 100PX; } -``` - - -```css -a { transform: rotate(30deg); } -``` - -## Optional secondary options - -### `ignoreProperties: { unit: ["property", "/regex/", /regex/] }` - -Ignore units in the values of declarations with the specified properties. - -For example, with `["px", "em"]`. - -Given: - -``` -{ - "rem": [ "line-height", "/^border/" ], - "%": [ "width" ] -} -``` - -The following patterns are _not_ considered violations: - - -```css -a { line-height: 0.1rem; } -``` - - -```css -a { border-bottom-width: 6rem; } -``` - - -```css -a { width: 100%; } -``` - -The following patterns are considered violations: - - -```css -a { margin: 0 20rem; } -``` - - -```css -a { -moz-border-radius-topright: 20rem; } -``` - - -```css -a { height: 100%; } -``` diff --git a/lib/rules/unit-whitelist/__tests__/index.js b/lib/rules/unit-whitelist/__tests__/index.js deleted file mode 100644 index 9c5f3f79d2..0000000000 --- a/lib/rules/unit-whitelist/__tests__/index.js +++ /dev/null @@ -1,370 +0,0 @@ -'use strict'; - -const standalone = require('../../../standalone'); -const { messages, ruleName, meta } = require('..'); - -it('warns that the rule is deprecated', () => { - const config = { - rules: { - [ruleName]: ['px'], - }, - }; - - const code = ''; - - return standalone({ code, config }).then((output) => { - const result = output.results[0]; - - expect(result.deprecations).toHaveLength(1); - expect(result.deprecations[0].text).toEqual( - `'${ruleName}' has been deprecated. Instead use 'unit-allowed-list'.`, - ); - expect(result.deprecations[0].reference).toEqual( - `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - ); - }); -}); - -it('also warns that the rule is deprecated via a meta', () => { - expect(meta).not.toBeUndefined(); - expect(meta).toHaveProperty('deprecated', true); -}); - -testRule({ - ruleName, - - config: ['px', 'em'], - - accept: [ - { - code: 'a { line-height: 1; }', - }, - { - code: 'a { color: #000; }', - }, - { - code: 'a { font-size: 14px; }', - }, - { - code: 'a { font-size: 14pX; }', - }, - { - code: 'a { font-size: 14PX; }', - }, - { - code: 'a { font-size: 1.2em; }', - }, - { - code: 'a { font-size: .5em; }', - }, - { - code: 'a { font-size: 0.5em; }', - }, - { - code: 'a { margin: 0 10em 5em 2px; }', - }, - { - code: 'a { background-position: top right, 10px 20px; }', - }, - { - code: 'a { top: calc(10em - 3em); }', - }, - { - code: 'a { top: calc(10em*3); }', - }, - { - code: 'a { background-image: linear-gradient(to right, white calc(100px - 50em), silver); }', - }, - { - code: 'a { width: /* 100pc */ 1em; }', - description: 'ignore unit within comments', - }, - { - code: 'a::before { content: "10%"}', - description: 'ignore unit within quotes', - }, - { - code: 'a { font-size: $fs10%; }', - description: 'ignore preprocessor variable includes unit', - }, - { - code: 'a { font-size: --some-fs-10rem; }', - description: 'ignore css variable includes unit', - }, - { - code: 'a { background-url: url(10vmin); }', - description: 'ignore url function', - }, - { - code: 'a { background-url: uRl(10vmin); }', - description: 'ignore url function', - }, - { - code: 'a { background-url: URL(10vmin); }', - description: 'ignore url function', - }, - { - code: 'a { margin10rem: 10em; }', - description: 'ignore property include wrong unit', - }, - { - code: 'a10rem { margin: 10em; }', - description: 'ignore type selector include wrong unit', - }, - { - code: '#a10rem { margin: 10em; }', - description: 'ignore class selector include wrong unit', - }, - { - code: '.a10rem { margin: 10em; }', - description: 'ignore class selector include wrong unit', - }, - { - code: 'input[type=10rem] { margin: 10em; }', - description: 'ignore class selector include wrong unit', - }, - { - code: 'a:hover10rem { margin: 10em; }', - description: 'ignore pseudo-class include wrong unit', - }, - { - code: 'a::before10rem { margin: 10em; }', - description: 'ignore pseudo-class include wrong unit', - }, - { - code: 'a { margin: calc(100px - #{margin * 2}); }', - description: 'work with interpolation', - }, - { - code: '@media (min-width: 10em) {}', - description: '@media', - }, - { - code: '@media (min-width: 10px)\n and (max-width: 20em) {}', - description: 'complex @media', - }, - ], - - reject: [ - { - code: 'a { font-size: 80%; }', - message: messages.rejected('%'), - line: 1, - column: 16, - }, - { - code: 'a { width: 100vmin; }', - message: messages.rejected('vmin'), - line: 1, - column: 12, - }, - { - code: 'a { width: 100vMiN; }', - message: messages.rejected('vMiN'), - line: 1, - column: 12, - }, - { - code: 'a { width: 100VMIN; }', - message: messages.rejected('VMIN'), - line: 1, - column: 12, - }, - { - code: 'a { line-height: .1rem; }', - message: messages.rejected('rem'), - line: 1, - column: 18, - }, - { - code: 'a { line-height: 0.1rem; }', - message: messages.rejected('rem'), - line: 1, - column: 18, - }, - { - code: 'a { border-left: 1rem solid #ccc; }', - message: messages.rejected('rem'), - line: 1, - column: 18, - }, - { - code: 'a { margin: 0 20%; }', - message: messages.rejected('%'), - line: 1, - column: 15, - }, - { - code: 'a { margin: 0 0 0 20rem; }', - message: messages.rejected('rem'), - line: 1, - column: 19, - }, - { - code: 'a { background-position: top right, 1em 5rem; }', - message: messages.rejected('rem'), - line: 1, - column: 41, - }, - { - code: 'a { top: calc(2vh*3); }', - message: messages.rejected('vh'), - line: 1, - column: 15, - }, - { - code: 'a { top: calc(100px - 30vh); }', - message: messages.rejected('vh'), - line: 1, - column: 23, - }, - { - code: 'a { background-image: linear-gradient(to right, white calc(100px - 5vmin), silver); }', - message: messages.rejected('vmin'), - line: 1, - column: 68, - }, - { - code: 'a { margin: calc(100px - #{$margin * 2rem}); }', - message: messages.rejected('rem'), - line: 1, - column: 38, - }, - { - code: '@media (min-width: 13rem) {}', - message: messages.rejected('rem'), - description: '@media', - line: 1, - column: 20, - }, - { - code: '@media (min-width: 10em)\n and (max-width: 20rem) {}', - message: messages.rejected('rem'), - description: 'complex @media', - line: 2, - column: 19, - }, - { - code: '@media (width < 10.01REM) {}', - message: messages.rejected('REM'), - description: 'media feature range', - line: 1, - column: 17, - }, - ], -}); - -testRule({ - ruleName, - - config: ['px'], - - accept: [ - { - code: 'a { line-height: 1px; }', - }, - ], - - reject: [ - { - code: 'a { line-height: 1em; }', - message: messages.rejected('em'), - line: 1, - column: 18, - }, - ], -}); - -testRule({ - ruleName, - - config: [ - ['px', 'em'], - { - ignoreProperties: { - rem: ['line-height', 'margin', '/^border/'], - '%': ['width', 'height'], - }, - }, - ], - - accept: [ - { - code: 'a { line-height: 0.1rem; }', - }, - { - code: 'a { line-height: 0.1rEm; }', - }, - { - code: 'a { margin: 0 20rem; }', - }, - { - code: 'a { margin: 0 0 0 20reM; }', - }, - { - code: 'a { width: 100%; }', - }, - { - code: 'a { height: 50%; }', - }, - { - code: 'a { border: 1rem solid purple; }', - }, - { - code: 'a { border-bottom-width: 6rem; }', - }, - ], - - reject: [ - { - code: 'a { font-size: 80%; }', - message: messages.rejected('%'), - line: 1, - column: 16, - }, - { - code: 'a { background-image: linear-gradient(to right, white calc(100px - 5rem), silver); }', - message: messages.rejected('rem'), - line: 1, - column: 68, - }, - { - code: 'a { -moz-border-radius-topright: 40rem; }', - message: messages.rejected('rem'), - line: 1, - column: 34, - }, - ], -}); - -testRule({ - ruleName, - - config: [ - ['px', 'em'], - { - ignoreProperties: { - rem: ['line-height', 'margin', /^border/], - '%': ['width', 'height'], - }, - }, - ], - - accept: [ - { - code: 'a { border: 1rem solid purple; }', - }, - { - code: 'a { border-bottom-width: 6rem; }', - }, - ], - - reject: [ - { - code: 'a { font-size: 80%; }', - message: messages.rejected('%'), - line: 1, - column: 16, - }, - ], -}); diff --git a/lib/rules/unit-whitelist/index.js b/lib/rules/unit-whitelist/index.js deleted file mode 100644 index 86eea330e9..0000000000 --- a/lib/rules/unit-whitelist/index.js +++ /dev/null @@ -1,92 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const _ = require('lodash'); -const atRuleParamIndex = require('../../utils/atRuleParamIndex'); -const declarationValueIndex = require('../../utils/declarationValueIndex'); -const getUnitFromValueNode = require('../../utils/getUnitFromValueNode'); -const optionsMatches = require('../../utils/optionsMatches'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateObjectWithArrayProps = require('../../utils/validateObjectWithArrayProps'); -const validateOptions = require('../../utils/validateOptions'); -const valueParser = require('postcss-value-parser'); - -const ruleName = 'unit-whitelist'; - -const messages = ruleMessages(ruleName, { - rejected: (unit) => `Unexpected unit "${unit}"`, -}); - -function rule(listInput, options) { - const list = [].concat(listInput); - - return (root, result) => { - const validOptions = validateOptions( - result, - ruleName, - { - actual: list, - possible: [_.isString], - }, - { - optional: true, - actual: options, - possible: { - ignoreProperties: validateObjectWithArrayProps([_.isString, _.isRegExp]), - }, - }, - ); - - if (!validOptions) { - return; - } - - result.warn(`'${ruleName}' has been deprecated. Instead use 'unit-allowed-list'.`, { - stylelintType: 'deprecation', - stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`, - }); - - function check(node, value, getIndex) { - // make sure multiplication operations (*) are divided - not handled - // by postcss-value-parser - value = value.replace(/\*/g, ','); - valueParser(value).walk((valueNode) => { - // Ignore wrong units within `url` function - if (valueNode.type === 'function' && valueNode.value.toLowerCase() === 'url') { - return false; - } - - const unit = getUnitFromValueNode(valueNode); - - if (!unit || (unit && list.includes(unit.toLowerCase()))) { - return; - } - - if (options && optionsMatches(options.ignoreProperties, unit.toLowerCase(), node.prop)) { - return; - } - - report({ - index: getIndex(node) + valueNode.sourceIndex, - message: messages.rejected(unit), - node, - result, - ruleName, - }); - }); - } - - root.walkAtRules(/^media$/i, (atRule) => check(atRule, atRule.params, atRuleParamIndex)); - root.walkDecls((decl) => check(decl, decl.value, declarationValueIndex)); - }; -} - -rule.primaryOptionArray = true; - -rule.ruleName = ruleName; -rule.messages = messages; -rule.meta = { deprecated: true }; - -module.exports = rule; From 2f01778410525c42a5922345621109dfa69e95c0 Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Fri, 14 May 2021 07:18:17 +0100 Subject: [PATCH 002/194] Update CHANGELOG.md --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c3f6de952..82752097ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ All notable changes to this project are documented in this file. +## Head + +- Removed: rules deprecated in 13.7.0 ([#5295](https://github.com/stylelint/stylelint/pull/5295)). + ## 13.13.1 - Fixed: invalid JSON for `max-warnings` option ([#5267](https://github.com/stylelint/stylelint/pull/5267)). From 4b82c241e66973dd08601ba0068dfa75cce89003 Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Fri, 14 May 2021 07:31:44 +0100 Subject: [PATCH 003/194] Remove function-calc-no-invalid (#5296) * Remove function-calc-no-invalid * Remove calc parser * Remove ignoring of calc parser --- .eslintignore | 1 - .prettierignore | 1 - docs/user-guide/rules/list.md | 1 - lib/rules/function-calc-no-invalid/README.md | 96 - .../__tests__/index.js | 428 -- lib/rules/function-calc-no-invalid/index.js | 259 -- lib/rules/index.js | 1 - lib/rules/length-zero-no-unit/README.md | 2 +- .../__tests__/parseCalcExpression.test.js | 777 ---- lib/utils/parseCalcExpression/index.js | 15 - lib/utils/parseCalcExpression/parser.jison | 172 - lib/utils/parseCalcExpression/parser.js | 3929 ----------------- package.json | 3 +- 13 files changed, 2 insertions(+), 5683 deletions(-) delete mode 100644 lib/rules/function-calc-no-invalid/README.md delete mode 100644 lib/rules/function-calc-no-invalid/__tests__/index.js delete mode 100644 lib/rules/function-calc-no-invalid/index.js delete mode 100644 lib/utils/parseCalcExpression/__tests__/parseCalcExpression.test.js delete mode 100644 lib/utils/parseCalcExpression/index.js delete mode 100644 lib/utils/parseCalcExpression/parser.jison delete mode 100644 lib/utils/parseCalcExpression/parser.js diff --git a/.eslintignore b/.eslintignore index c2cda1d4c4..14d487e26a 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,6 +1,5 @@ .coverage lib/vendor -lib/utils/parseCalcExpression/parser.js # Unignore config files like .prettierrc.js, because they're ignored by default !.*rc.js diff --git a/.prettierignore b/.prettierignore index b05949d642..d900ca92ac 100644 --- a/.prettierignore +++ b/.prettierignore @@ -10,7 +10,6 @@ **/fixtures/**/*.vue **/fixtures/**/*.html **/fixtures/**/*.markdown -lib/utils/parseCalcExpression/parser.js scripts/**/*.css system-tests/**/*.css system-tests/**/*.scss diff --git a/docs/user-guide/rules/list.md b/docs/user-guide/rules/list.md index af7025223f..8a841475b9 100644 --- a/docs/user-guide/rules/list.md +++ b/docs/user-guide/rules/list.md @@ -23,7 +23,6 @@ Grouped first by the following categories and then by the [_thing_](http://apps. ### Function -- [`function-calc-no-invalid`](../../../lib/rules/function-calc-no-invalid/README.md): Disallow an invalid expression within `calc` functions. - [`function-calc-no-unspaced-operator`](../../../lib/rules/function-calc-no-unspaced-operator/README.md): Disallow an unspaced operator within `calc` functions. - [`function-linear-gradient-no-nonstandard-direction`](../../../lib/rules/function-linear-gradient-no-nonstandard-direction/README.md): Disallow direction values in `linear-gradient()` calls that are not valid according to the [standard syntax](https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient#Syntax). diff --git a/lib/rules/function-calc-no-invalid/README.md b/lib/rules/function-calc-no-invalid/README.md deleted file mode 100644 index 2bf94bac6a..0000000000 --- a/lib/rules/function-calc-no-invalid/README.md +++ /dev/null @@ -1,96 +0,0 @@ -# function-calc-no-invalid - -Disallow an invalid expression within `calc` functions. - - -```css -.foo {width: calc();} -/** ↑ - * empty expression */ -.foo {width: calc(100% 80px);} -/** ↑ -/* missing operator */ -.foo {width: calc(100% -80px);} -/** ↑ -/* missing operator */ -.foo {width: calc(100% - - 80px);} -/** ↑ -/* unexpected operator */ -.foo {width: calc(100% -);} -/** ↑ -/* unexpected operator */ -.foo {width: calc(- 100%);} -/** ↑ -/* unexpected operator */ -.foo {width: calc(100% / 0);} -/** ↑ ↑ -/* division by zero */ -.foo {width: calc(100px + 80);} -/** ↑ ↑ ↑ -/* the `resolved type` is invalid */ -.foo {width: calc(100% + 80);} -/** ↑ ↑ ↑ -/* the `resolved type` is invalid */ -.foo {width: calc(100px - 80);} -/** ↑ ↑ ↑ -/* the `resolved type` is invalid */ -.foo {width: calc(100px * 80px);} -/** ↑ ↑ ↑ -/* the `resolved type` is invalid */ -.foo {width: calc(100 / 80%);} -/** ↑ ↑ ↑ -/* the `resolved type` is invalid */ -``` - -- `calc()` must have an expression. -- `calc()` must have an operator between the arguments. -- `calc()` must not be division by zero. -- [The resolved type](https://www.w3.org/TR/css-values-3/#calc-type-checking) must be valid for where the expression is placed. - -## Options - -### `true` - -The following patterns are considered violations: - - -```css -.foo {width: calc();} -``` - - -```css -.foo {width: calc(100% 80px);} -``` - - -```css -.foo {width: calc(100% - - 80px);} -``` - - -```css -.foo {width: calc(100% / 0);} -``` - - -```css -.foo {width: calc(100px + 80);} -``` - -The following patterns are _not_ considered violations: - - -```css -.foo {width: calc(100% - 80px);} -``` - - -```css -.foo {width: calc(100% - var(--bar));} -``` - - -```css -.foo {width: calc(var(--bar) - var(--baz));} -``` diff --git a/lib/rules/function-calc-no-invalid/__tests__/index.js b/lib/rules/function-calc-no-invalid/__tests__/index.js deleted file mode 100644 index 9c1fb3d271..0000000000 --- a/lib/rules/function-calc-no-invalid/__tests__/index.js +++ /dev/null @@ -1,428 +0,0 @@ -'use strict'; - -const { messages, ruleName } = require('..'); - -testRule({ - ruleName, - config: [true], - - accept: [ - { - code: '.foo {width: calc(100% - 80px);}', - }, - { - code: '.foo {width: calc(100% + 80px);}', - }, - { - code: '.foo {width: calc(100px + 80%);}', - }, - { - code: '.foo {width: calc(100px * 80);}', - }, - { - code: '.foo {width: calc(100 * 80px);}', - }, - { - code: '.foo {width: calc(100px / 80);}', - }, - { - code: '.foo {width: calc(100% - var(--bar));}', - }, - { - code: '.foo {width: calc(100px / var(--bar));}', - }, - { - code: '.foo {width: calc(var(--bar) - var(--baz));}', - }, - { - code: '.foo {width: calc((100% - 80px) / 2);}', - }, - { - code: '.foo {width: calc(100px / (2 * var(--bar)));}', - }, - { - code: '.foo {width: calc(100px / (var(--bar) * 2));}', - }, - { - code: '.foo {width: fn(100% 80px);}', - }, - { - code: '.foo {width: calc(100px - calc(80px * 2));}', - }, - { - code: 'a { margin-left: calc(-6 * 20px); }', - }, - { - code: 'a { margin-left: calc(+6 * 20px); }', - }, - { - code: 'a { margin-left: calc(-6 * -20px); }', - }, - { - code: 'a { margin-left: calc(+6 * +20px); }', - }, - ], - - reject: [ - { - code: '.foo {width: calc();}', - description: 'empty', - message: messages.expectedExpression(), - line: 1, - column: 19, - }, - { - code: '.foo {width: calc(100% + ());}', - description: 'empty parentheses', - message: messages.expectedExpression(), - line: 1, - column: 27, - }, - { - code: '.foo {width: calc(- 80px);}', - description: 'invalid', - message: messages.expectedExpression(), - line: 1, - column: 21, - }, - { - code: '.foo {width: calc(100% - - 80px);}', - description: 'invalid', - message: messages.expectedExpression(), - line: 1, - column: 28, - }, - { - code: '.foo {width: calc(100% -);}', - description: 'invalid', - message: messages.expectedExpression(), - line: 1, - column: 25, - }, - { - code: '.foo {width: calc(100% 80px);}', - description: 'missing operator', - message: messages.expectedExpression(), - line: 1, - column: 24, - }, - { - code: '.foo {width: calc(100% -80px);}', - description: 'expected space after', - message: messages.expectedSpaceAfterOperator('-'), - line: 1, - column: 25, - }, - { - code: '.foo {width: calc(100% +80px);}', - description: 'expected space after', - message: messages.expectedSpaceAfterOperator('+'), - line: 1, - column: 25, - }, - { - code: '.foo {width: calc(100%- 80px);}', - description: 'expected space before', - message: messages.expectedSpaceBeforeOperator('-'), - line: 1, - column: 23, - }, - { - code: '.foo {width: calc(100%+ 80px);}', - description: 'expected space before', - message: messages.expectedSpaceBeforeOperator('+'), - line: 1, - column: 23, - }, - { - code: '.foo {width: calc(100px -calc(80px * 2));}', - description: 'expected space after', - message: messages.expectedSpaceAfterOperator('-'), - line: 1, - column: 26, - }, - { - code: '.foo {width: calc(100% / 0);}', - description: 'division by zero', - message: messages.rejectedDivisionByZero(), - line: 1, - column: 25, - }, - { - code: '.foo {width: calc(80px * (10 / 0));}', - message: messages.rejectedDivisionByZero(), - line: 1, - column: 31, - }, - { - code: '.foo {width: calc(80px / ((10 + 20 * 3 - 70) / 4));}', - message: messages.rejectedDivisionByZero(), - line: 1, - column: 25, - }, - { - code: '.foo {width: calc(100px + 80);}', - description: 'the `resolved type` is invalid', - message: messages.expectedValidResolvedType('+'), - line: 1, - column: 25, - }, - { - code: '.foo {width: calc(100% + 80);}', - description: 'the `resolved type` is invalid', - message: messages.expectedValidResolvedType('+'), - line: 1, - column: 24, - }, - { - code: '.foo {width: calc(100px + 80s);}', - description: 'the `resolved type` is invalid', - message: messages.expectedValidResolvedType('+'), - line: 1, - column: 25, - }, - { - code: '.foo {width: calc(100px - 80);}', - description: 'the `resolved type` is invalid', - message: messages.expectedValidResolvedType('-'), - line: 1, - column: 25, - }, - { - code: '.foo {width: calc(100px * 80px);}', - description: 'the `resolved type` is invalid', - message: messages.expectedValidResolvedType('*'), - line: 1, - column: 25, - }, - { - code: '.foo {width: calc(100px / 80px);}', - description: 'the `resolved type` is invalid', - message: messages.expectedValidResolvedType('/'), - line: 1, - column: 25, - }, - { - code: '.foo {width: calc(100 / 80px);}', - description: 'the `resolved type` is invalid', - message: messages.expectedValidResolvedType('/'), - line: 1, - column: 23, - }, - { - code: '.foo {width: calc((10 * 10) / 80px);}', - message: messages.expectedValidResolvedType('/'), - line: 1, - column: 29, - }, - { - code: '.foo {width: calc(80px * (10px * 10px));}', - message: messages.expectedValidResolvedType('*'), - line: 1, - column: 32, - }, - { - code: '.foo {width: calc( calc(100px * 100px) / 2);}', - message: messages.expectedValidResolvedType('*'), - line: 1, - column: 31, - }, - { - code: '.foo {width: calc( calc(100px * 100) / 20px);}', - message: messages.expectedValidResolvedType('/'), - line: 1, - column: 38, - }, - { - code: '.foo {width: calc( fn(calc(100px * 100px)) + 30px);}', - warnings: [ - { - message: messages.expectedValidResolvedType('*'), - line: 1, - column: 34, - }, - ], - }, - { - code: '.foo {width: calc( fn(calc(100px * 100px)) / 30px);}', - warnings: [ - { - message: messages.expectedValidResolvedType('/'), - line: 1, - column: 44, - }, - { - message: messages.expectedValidResolvedType('*'), - line: 1, - column: 34, - }, - ], - }, - ], -}); - -testRule({ - ruleName, - config: [true], - syntax: 'scss', - - accept: [ - { - code: 'a { top: calc(100% - #{$foo}); }', - }, - { - code: 'a { top: calc(100% * #{$foo}); }', - }, - { - code: 'a { top: calc(100% *#{$foo}); }', - }, - { - code: 'a { top: calc(100% - $foo); }', - }, - { - code: 'a { top: calc(100% - foo()); }', - }, - { - code: ` - a { - width: calc( - #{$min-value} + - #{strip-unit($max-value - $min-value)} * - (100vw - #{$min-vw}) - ); - } - `, - }, - { - code: ` - a { - width: calc(#{$min-value} + #{$max-value}*(100vw - #{$min-vw})); - } - `, - }, - { - code: 'a { top: calc(100% -#{$foo}); }', - }, - { - code: 'a { top: calc(100% -$foo); }', - }, - { - code: '.foo {width: calc(100% - -#{$foo});}', - }, - { - code: '.foo {width: calc(-#{$foo});}', - }, - { - code: '.foo {width: calc(100% - - -#{$foo});}', - }, - { - code: ` - a { - width: calc(#{$min-value} + #{$max-value}*(100vw -#{$min-vw})); - } - `, - }, - ], - - reject: [ - { - code: 'a { top: calc(100% -foo()); }', - message: messages.expectedSpaceAfterOperator('-'), - line: 1, - column: 21, - }, - ], -}); - -testRule({ - ruleName, - config: [true], - syntax: 'less', - - accept: [ - { - code: 'a { top: calc(100% - @foo); }', - }, - { - code: 'a { top: calc(100% * @foo); }', - }, - { - code: 'a { top: calc(100% *@foo); }', - }, - { - code: 'a { top: calc(100% - @foo[bar]); }', - }, - { - code: 'a { top: calc(100% - foo()); }', - }, - { - code: ` - a { - width: calc(@min-value + @max-value*100vw - @min-vw)); - } - `, - }, - { - code: 'a { top: calc(100% -@foo); }', - }, - { - code: 'a { top: calc(100% -@foo[bar]); }', - }, - { - code: '.foo {width: calc(100% - -@foo);}', - }, - { - code: '.foo {width: calc(-@foo);}', - }, - { - code: '.foo {width: calc(100% - - -@foo);}', - }, - { - code: ` - a { - width: calc(@min-value + @max-value*(100vw -@min-vw)); - } - `, - }, - ], - - reject: [ - { - code: 'a { top: calc(100% -foo()); }', - message: messages.expectedSpaceAfterOperator('-'), - line: 1, - column: 21, - }, - ], -}); - -testRule({ - ruleName, - config: [true], - skipBasicChecks: true, - syntax: 'css-in-js', - - accept: [ - { - code: "export default ;", - }, - { - code: "export default ;", - }, - ], - - reject: [ - { - code: "export default ;", - message: messages.expectedSpaceAfterOperator('-'), - line: 1, - column: 46, - }, - { - code: "export default ;", - message: messages.expectedExpression(), - line: 1, - column: 49, - }, - ], -}); diff --git a/lib/rules/function-calc-no-invalid/index.js b/lib/rules/function-calc-no-invalid/index.js deleted file mode 100644 index 436f45412a..0000000000 --- a/lib/rules/function-calc-no-invalid/index.js +++ /dev/null @@ -1,259 +0,0 @@ -// @ts-nocheck - -'use strict'; - -const declarationValueIndex = require('../../utils/declarationValueIndex'); -const isStandardSyntaxMathFunction = require('../../utils/isStandardSyntaxMathFunction'); -const parseCalcExpression = require('../../utils/parseCalcExpression'); -const report = require('../../utils/report'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); -const valueParser = require('postcss-value-parser'); - -const ruleName = 'function-calc-no-invalid'; - -const messages = ruleMessages(ruleName, { - expectedExpression: () => 'Expected a valid expression', - expectedSpaceBeforeOperator: (operator) => `Expected space before "${operator}" operator`, - expectedSpaceAfterOperator: (operator) => `Expected space after "${operator}" operator`, - rejectedDivisionByZero: () => 'Unexpected division by zero', - expectedValidResolvedType: (operator) => - `Expected to be compatible with the left and right argument types of "${operator}" operation.`, -}); - -function rule(actual) { - return (root, result) => { - const validOptions = validateOptions(result, ruleName, { actual }); - - if (!validOptions) { - return; - } - - root.walkDecls((decl) => { - const checked = []; - - valueParser(decl.value).walk((node) => { - if (node.type !== 'function' || node.value.toLowerCase() !== 'calc') { - return; - } - - const mathFunction = valueParser.stringify(node); - - if (!isStandardSyntaxMathFunction(mathFunction)) { - return; - } - - if (checked.includes(node)) { - return; - } - - checked.push(...getCalcNodes(node)); - - checked.push(...node.nodes); - - let ast; - - try { - ast = parseCalcExpression(mathFunction); - } catch (e) { - if (e.hash && e.hash.loc) { - complain(messages.expectedExpression(), node.sourceIndex + e.hash.loc.range[0]); - - return; - } - - throw e; - } - - verifyMathExpressions(ast, node); - }); - - function complain(message, valueIndex) { - report({ - message, - node: decl, - index: declarationValueIndex(decl) + valueIndex, - result, - ruleName, - }); - } - - /** - * Verify that each operation expression is valid. - * Reports when a invalid operation expression is found. - * @param {object} expression expression node. - * @param {object} node calc function node. - * @returns {void} - */ - function verifyMathExpressions(expression, node) { - if (expression.type === 'MathExpression') { - const { operator, left, right } = expression; - - if (operator === '+' || operator === '-') { - if (expression.source.operator.end.index === right.source.start.index) { - complain( - messages.expectedSpaceAfterOperator(operator), - node.sourceIndex + expression.source.operator.end.index, - ); - } - - if (expression.source.operator.start.index === left.source.end.index) { - complain( - messages.expectedSpaceBeforeOperator(operator), - node.sourceIndex + expression.source.operator.start.index, - ); - } - } else if (operator === '/') { - if ( - (right.type === 'Value' && right.value === 0) || - (right.type === 'MathExpression' && getNumber(right) === 0) - ) { - complain( - messages.rejectedDivisionByZero(), - node.sourceIndex + expression.source.operator.end.index, - ); - } - } - - if (getResolvedType(expression) === 'invalid') { - complain( - messages.expectedValidResolvedType(operator), - node.sourceIndex + expression.source.operator.start.index, - ); - } - - verifyMathExpressions(expression.left, node); - verifyMathExpressions(expression.right, node); - } - } - }); - }; -} - -function getCalcNodes(node) { - if (node.type !== 'function') { - return []; - } - - const functionName = node.value.toLowerCase(); - const result = []; - - if (functionName === 'calc') { - result.push(node); - } - - if (!functionName || functionName === 'calc') { - // find nested calc - for (const c of node.nodes) { - result.push(...getCalcNodes(c)); - } - } - - return result; -} - -function getNumber(mathExpression) { - const { left, right } = mathExpression; - - const leftValue = - left.type === 'Value' ? left.value : left.type === 'MathExpression' ? getNumber(left) : null; - const rightValue = - right.type === 'Value' - ? right.value - : right.type === 'MathExpression' - ? getNumber(right) - : null; - - if (leftValue == null || rightValue == null) { - return null; - } - - switch (mathExpression.operator) { - case '+': - return leftValue + rightValue; - case '-': - return leftValue - rightValue; - case '*': - return leftValue * rightValue; - case '/': - return leftValue / rightValue; - } - - return null; -} - -function getResolvedType(mathExpression) { - const { left: leftExpression, operator, right: rightExpression } = mathExpression; - let left = - leftExpression.type === 'MathExpression' - ? getResolvedType(leftExpression) - : leftExpression.type; - let right = - rightExpression.type === 'MathExpression' - ? getResolvedType(rightExpression) - : rightExpression.type; - - if (left === 'Function' || left === 'invalid') { - left = 'UnknownValue'; - } - - if (right === 'Function' || right === 'invalid') { - right = 'UnknownValue'; - } - - switch (operator) { - case '+': - case '-': - if (left === 'UnknownValue' || right === 'UnknownValue') { - return 'UnknownValue'; - } - - if (left === right) { - return left; - } - - if (left === 'Value' || right === 'Value') { - return 'invalid'; - } - - if (left === 'PercentageValue') { - return right; - } - - if (right === 'PercentageValue') { - return left; - } - - return 'invalid'; - case '*': - if (left === 'UnknownValue' || right === 'UnknownValue') { - return 'UnknownValue'; - } - - if (left === 'Value') { - return right; - } - - if (right === 'Value') { - return left; - } - - return 'invalid'; - case '/': - if (right === 'UnknownValue') { - return 'UnknownValue'; - } - - if (right === 'Value') { - return left; - } - - return 'invalid'; - } - - return 'UnknownValue'; -} - -rule.ruleName = ruleName; -rule.messages = messages; -module.exports = rule; diff --git a/lib/rules/index.js b/lib/rules/index.js index 4b1ef3e657..a18a2d4fcb 100644 --- a/lib/rules/index.js +++ b/lib/rules/index.js @@ -124,7 +124,6 @@ const rules = { 'font-family-no-duplicate-names': importLazy(() => require('./font-family-no-duplicate-names'))(), 'font-weight-notation': importLazy(() => require('./font-weight-notation'))(), 'function-allowed-list': importLazy(() => require('./function-allowed-list'))(), - 'function-calc-no-invalid': importLazy(() => require('./function-calc-no-invalid'))(), 'function-calc-no-unspaced-operator': importLazy(() => require('./function-calc-no-unspaced-operator'), )(), diff --git a/lib/rules/length-zero-no-unit/README.md b/lib/rules/length-zero-no-unit/README.md index bbf521775d..0b3591f7fc 100644 --- a/lib/rules/length-zero-no-unit/README.md +++ b/lib/rules/length-zero-no-unit/README.md @@ -11,7 +11,7 @@ a { top: 0px; } _Lengths_ refer to distance measurements. A length is a _dimension_, which is a _number_ immediately followed by a _unit identifier_. However, for zero lengths the unit identifier is optional. The length units are: `em`, `ex`, `ch`, `vw`, `vh`, `cm`, `mm`, `in`, `pt`, `pc`, `px`, `rem`, `vmin`, and `vmax`. -This rule ignores lengths within math functions (e.g. `calc`) in favor of the [`function-calc-no-invalid`](../function-calc-no-invalid/README.md) rule. +This rule ignores lengths within math functions (e.g. `calc`). The [`fix` option](../../../docs/user-guide/usage/options.md#fix) can automatically fix all of the problems reported by this rule. diff --git a/lib/utils/parseCalcExpression/__tests__/parseCalcExpression.test.js b/lib/utils/parseCalcExpression/__tests__/parseCalcExpression.test.js deleted file mode 100644 index d1be066b4e..0000000000 --- a/lib/utils/parseCalcExpression/__tests__/parseCalcExpression.test.js +++ /dev/null @@ -1,777 +0,0 @@ -'use strict'; - -const parse = require('..'); - -it('parseCalcExpression parse to ast', () => { - expect(parse('calc(100% - 80px)')).toEqual({ - left: { - source: { end: { index: 9 }, start: { index: 5 } }, - type: 'PercentageValue', - unit: '%', - value: 100, - }, - operator: '-', - right: { - source: { end: { index: 16 }, start: { index: 12 } }, - type: 'LengthValue', - unit: 'px', - value: 80, - }, - source: { - end: { index: 17 }, - operator: { end: { index: 11 }, start: { index: 10 } }, - start: { index: 0 }, - }, - type: 'MathExpression', - }); - expect(parse('calc(100% - 80px / 2)')).toEqual({ - left: { - source: { end: { index: 9 }, start: { index: 5 } }, - type: 'PercentageValue', - unit: '%', - value: 100, - }, - operator: '-', - right: { - left: { - source: { end: { index: 16 }, start: { index: 12 } }, - type: 'LengthValue', - unit: 'px', - value: 80, - }, - operator: '/', - right: { - source: { end: { index: 20 }, start: { index: 19 } }, - type: 'Value', - value: 2, - }, - source: { - end: { index: 20 }, - operator: { end: { index: 18 }, start: { index: 17 } }, - start: { index: 12 }, - }, - type: 'MathExpression', - }, - source: { - end: { index: 21 }, - operator: { end: { index: 11 }, start: { index: 10 } }, - start: { index: 0 }, - }, - type: 'MathExpression', - }); - - expect(parse('calc(80px)')).toEqual({ - source: { end: { index: 10 }, start: { index: 0 } }, - type: 'LengthValue', - unit: 'px', - value: 80, - }); - expect(parse('calc(-100 * -80px)')).toEqual({ - left: { - source: { end: { index: 9 }, start: { index: 5 } }, - type: 'Value', - sign: '-', - value: -100, - }, - operator: '*', - right: { - source: { end: { index: 17 }, start: { index: 12 } }, - type: 'LengthValue', - unit: 'px', - sign: '-', - value: -80, - }, - source: { - end: { index: 18 }, - operator: { end: { index: 11 }, start: { index: 10 } }, - start: { index: 0 }, - }, - type: 'MathExpression', - }); - expect(parse('calc(-100px * -2)')).toEqual({ - left: { - source: { end: { index: 11 }, start: { index: 5 } }, - type: 'LengthValue', - unit: 'px', - sign: '-', - value: -100, - }, - operator: '*', - right: { - source: { end: { index: 16 }, start: { index: 14 } }, - type: 'Value', - sign: '-', - value: -2, - }, - source: { - end: { index: 17 }, - operator: { end: { index: 13 }, start: { index: 12 } }, - start: { index: 0 }, - }, - type: 'MathExpression', - }); - expect(parse('calc(+100 * +80px)')).toEqual({ - left: { - source: { end: { index: 9 }, start: { index: 5 } }, - type: 'Value', - sign: '+', - value: 100, - }, - operator: '*', - right: { - source: { end: { index: 17 }, start: { index: 12 } }, - type: 'LengthValue', - unit: 'px', - sign: '+', - value: 80, - }, - source: { - end: { index: 18 }, - operator: { end: { index: 11 }, start: { index: 10 } }, - start: { index: 0 }, - }, - type: 'MathExpression', - }); - expect(parse('calc(+100px * +2)')).toEqual({ - left: { - source: { end: { index: 11 }, start: { index: 5 } }, - type: 'LengthValue', - unit: 'px', - sign: '+', - value: 100, - }, - operator: '*', - right: { - source: { end: { index: 16 }, start: { index: 14 } }, - type: 'Value', - sign: '+', - value: 2, - }, - source: { - end: { index: 17 }, - operator: { end: { index: 13 }, start: { index: 12 } }, - start: { index: 0 }, - }, - type: 'MathExpression', - }); -}); - -it('parseCalcExpression case insensitive', () => { - expect(parse('CALC(100% - 80PX + VAR(--FOO))')).toEqual({ - left: { - left: { - source: { end: { index: 9 }, start: { index: 5 } }, - type: 'PercentageValue', - unit: '%', - value: 100, - }, - operator: '-', - right: { - source: { end: { index: 16 }, start: { index: 12 } }, - type: 'LengthValue', - unit: 'PX', - value: 80, - }, - source: { - end: { index: 16 }, - operator: { end: { index: 11 }, start: { index: 10 } }, - start: { index: 5 }, - }, - type: 'MathExpression', - }, - operator: '+', - right: { - source: { end: { index: 29 }, start: { index: 19 } }, - type: 'Function', - value: 'VAR(--FOO)', - }, - source: { - end: { index: 30 }, - operator: { end: { index: 18 }, start: { index: 17 } }, - start: { index: 0 }, - }, - type: 'MathExpression', - }); -}); - -it('parseCalcExpression parse to ast (no spaces)', () => { - expect(parse('calc(80px/2)')).toEqual({ - left: { - source: { end: { index: 9 }, start: { index: 5 } }, - type: 'LengthValue', - unit: 'px', - value: 80, - }, - operator: '/', - right: { - source: { end: { index: 11 }, start: { index: 10 } }, - type: 'Value', - value: 2, - }, - source: { - end: { index: 12 }, - operator: { end: { index: 10 }, start: { index: 9 } }, - start: { index: 0 }, - }, - type: 'MathExpression', - }); - - expect(parse('calc(80px*2)')).toEqual({ - left: { - source: { end: { index: 9 }, start: { index: 5 } }, - type: 'LengthValue', - unit: 'px', - value: 80, - }, - operator: '*', - right: { - source: { end: { index: 11 }, start: { index: 10 } }, - type: 'Value', - value: 2, - }, - source: { - end: { index: 12 }, - operator: { end: { index: 10 }, start: { index: 9 } }, - start: { index: 0 }, - }, - type: 'MathExpression', - }); -}); - -it('parseCalcExpression precedence', () => { - expect(parse('calc(100% + 80px - 70px)')).toMatchObject({ - left: { - left: { - type: 'PercentageValue', - unit: '%', - value: 100, - }, - operator: '+', - right: { - type: 'LengthValue', - unit: 'px', - value: 80, - }, - type: 'MathExpression', - }, - operator: '-', - right: { - type: 'LengthValue', - unit: 'px', - value: 70, - }, - type: 'MathExpression', - }); - expect(parse('calc(100% + 80px * 2)')).toMatchObject({ - left: { - type: 'PercentageValue', - unit: '%', - value: 100, - }, - operator: '+', - right: { - left: { - type: 'LengthValue', - unit: 'px', - value: 80, - }, - operator: '*', - right: { - type: 'Value', - value: 2, - }, - type: 'MathExpression', - }, - type: 'MathExpression', - }); - expect(parse('calc(100% + 80px * 2 / 4)')).toMatchObject({ - left: { - type: 'PercentageValue', - unit: '%', - value: 100, - }, - operator: '+', - right: { - left: { - left: { - type: 'LengthValue', - unit: 'px', - value: 80, - }, - operator: '*', - right: { - type: 'Value', - value: 2, - }, - type: 'MathExpression', - }, - operator: '/', - right: { - type: 'Value', - value: 4, - }, - type: 'MathExpression', - }, - type: 'MathExpression', - }); - - expect(parse('calc(100% + (80px - 70px))')).toMatchObject({ - left: { - type: 'PercentageValue', - unit: '%', - value: 100, - }, - operator: '+', - right: { - left: { - type: 'LengthValue', - unit: 'px', - value: 80, - }, - operator: '-', - right: { - type: 'LengthValue', - unit: 'px', - value: 70, - }, - type: 'MathExpression', - }, - type: 'MathExpression', - }); - expect(parse('calc((100% + 80px) * 2)')).toMatchObject({ - left: { - left: { - type: 'PercentageValue', - unit: '%', - value: 100, - }, - operator: '+', - right: { - type: 'LengthValue', - unit: 'px', - value: 80, - }, - type: 'MathExpression', - }, - operator: '*', - right: { - type: 'Value', - value: 2, - }, - type: 'MathExpression', - }); -}); -it('parseCalcExpression type length', () => { - // Relative length units - expect(parse('80em').type).toBe('LengthValue'); - expect(parse('80ex').type).toBe('LengthValue'); - expect(parse('80ch').type).toBe('LengthValue'); - expect(parse('80rem').type).toBe('LengthValue'); - // Viewport-percentage lengths - expect(parse('80vh').type).toBe('LengthValue'); - expect(parse('80vw').type).toBe('LengthValue'); - expect(parse('80vmin').type).toBe('LengthValue'); - expect(parse('80vmax').type).toBe('LengthValue'); - expect(parse('80vm').type).toBe('LengthValue'); - // Absolute length units - expect(parse('80px').type).toBe('LengthValue'); - expect(parse('80mm').type).toBe('LengthValue'); - expect(parse('80cm').type).toBe('LengthValue'); - expect(parse('80in').type).toBe('LengthValue'); - expect(parse('80pt').type).toBe('LengthValue'); - expect(parse('80pc').type).toBe('LengthValue'); - expect(parse('80q').type).toBe('LengthValue'); - // Flexible length units - expect(parse('80fr').type).toBe('LengthValue'); - - // Relative length units - expect(parse('80EM').type).toBe('LengthValue'); - expect(parse('80EX').type).toBe('LengthValue'); - expect(parse('80CH').type).toBe('LengthValue'); - expect(parse('80REM').type).toBe('LengthValue'); - // Viewport-percentage lengths - expect(parse('80VH').type).toBe('LengthValue'); - expect(parse('80VW').type).toBe('LengthValue'); - expect(parse('80VMIN').type).toBe('LengthValue'); - expect(parse('80VMAX').type).toBe('LengthValue'); - expect(parse('80VM').type).toBe('LengthValue'); - // Absolute length units - expect(parse('80PX').type).toBe('LengthValue'); - expect(parse('80MM').type).toBe('LengthValue'); - expect(parse('80CM').type).toBe('LengthValue'); - expect(parse('80IN').type).toBe('LengthValue'); - expect(parse('80PT').type).toBe('LengthValue'); - expect(parse('80PC').type).toBe('LengthValue'); - expect(parse('80Q').type).toBe('LengthValue'); - // Flexible length units - expect(parse('80FR').type).toBe('LengthValue'); -}); -it('parseCalcExpression type angle', () => { - expect(parse('80deg').type).toBe('AngleValue'); - expect(parse('80grad').type).toBe('AngleValue'); - expect(parse('80turn').type).toBe('AngleValue'); - expect(parse('80rad').type).toBe('AngleValue'); - - expect(parse('80DEG').type).toBe('AngleValue'); - expect(parse('80GRAD').type).toBe('AngleValue'); - expect(parse('80TURN').type).toBe('AngleValue'); - expect(parse('80RAD').type).toBe('AngleValue'); -}); -it('parseCalcExpression type time', () => { - expect(parse('80s').type).toBe('TimeValue'); - expect(parse('80ms').type).toBe('TimeValue'); - - expect(parse('80S').type).toBe('TimeValue'); - expect(parse('80MS').type).toBe('TimeValue'); -}); -it('parseCalcExpression type frequency', () => { - expect(parse('80Hz').type).toBe('FrequencyValue'); - expect(parse('80kHz').type).toBe('FrequencyValue'); - - expect(parse('80hz').type).toBe('FrequencyValue'); - expect(parse('80khz').type).toBe('FrequencyValue'); - - expect(parse('80HZ').type).toBe('FrequencyValue'); - expect(parse('80KHZ').type).toBe('FrequencyValue'); -}); -it('parseCalcExpression type resolution', () => { - expect(parse('80dpi').type).toBe('ResolutionValue'); - expect(parse('80dpcm').type).toBe('ResolutionValue'); - expect(parse('80dppx').type).toBe('ResolutionValue'); - - expect(parse('80DPI').type).toBe('ResolutionValue'); - expect(parse('80DPCM').type).toBe('ResolutionValue'); - expect(parse('80DPPX').type).toBe('ResolutionValue'); -}); -it('parseCalcExpression type percentage', () => { - expect(parse('80%').type).toBe('PercentageValue'); -}); -it('parseCalcExpression type unknown', () => { - expect(parse('80un').type).toBe('UnknownValue'); -}); -it('parseCalcExpression type function', () => { - expect(parse('var(--bar)').type).toBe('Function'); - - expect(parse('var(--BAR)').type).toBe('Function'); - - expect(parse('VAR(--bar)').type).toBe('Function'); -}); -it('parseCalcExpression type value', () => { - expect(parse('80').type).toBe('Value'); -}); - -it('parseCalcExpression scss', () => { - expect(parse('calc(100% - #{$foo} + #{$bar} * #{$baz})')).toEqual({ - left: { - left: { - source: { end: { index: 9 }, start: { index: 5 } }, - type: 'PercentageValue', - unit: '%', - value: 100, - }, - operator: '-', - right: { - source: { end: { index: 19 }, start: { index: 12 } }, - type: 'UnknownValue', - unit: '', - value: '#{$foo}', - }, - source: { - end: { index: 19 }, - operator: { end: { index: 11 }, start: { index: 10 } }, - start: { index: 5 }, - }, - type: 'MathExpression', - }, - operator: '+', - right: { - left: { - source: { end: { index: 29 }, start: { index: 22 } }, - type: 'UnknownValue', - unit: '', - value: '#{$bar}', - }, - operator: '*', - right: { - source: { end: { index: 39 }, start: { index: 32 } }, - type: 'UnknownValue', - unit: '', - value: '#{$baz}', - }, - source: { - end: { index: 39 }, - operator: { end: { index: 31 }, start: { index: 30 } }, - start: { index: 22 }, - }, - type: 'MathExpression', - }, - source: { - end: { index: 40 }, - operator: { end: { index: 21 }, start: { index: 20 } }, - start: { index: 0 }, - }, - type: 'MathExpression', - }); - expect(parse('calc(100% - $foo + $bar * baz())')).toEqual({ - left: { - left: { - source: { end: { index: 9 }, start: { index: 5 } }, - type: 'PercentageValue', - unit: '%', - value: 100, - }, - operator: '-', - right: { - source: { end: { index: 16 }, start: { index: 12 } }, - type: 'UnknownValue', - unit: '', - value: '$foo', - }, - source: { - end: { index: 16 }, - operator: { end: { index: 11 }, start: { index: 10 } }, - start: { index: 5 }, - }, - type: 'MathExpression', - }, - operator: '+', - right: { - left: { - source: { end: { index: 23 }, start: { index: 19 } }, - type: 'UnknownValue', - unit: '', - value: '$bar', - }, - operator: '*', - right: { - source: { end: { index: 31 }, start: { index: 26 } }, - type: 'Function', - value: 'baz()', - }, - source: { - end: { index: 31 }, - operator: { end: { index: 25 }, start: { index: 24 } }, - start: { index: 19 }, - }, - type: 'MathExpression', - }, - source: { - end: { index: 32 }, - operator: { end: { index: 18 }, start: { index: 17 } }, - start: { index: 0 }, - }, - type: 'MathExpression', - }); - expect(parse('calc(foo($bar, $baz))')).toEqual({ - source: { end: { index: 21 }, start: { index: 0 } }, - type: 'Function', - value: 'foo($bar, $baz)', - }); -}); - -it('parseCalcExpression less', () => { - expect(parse('calc(100% - @foo + @bar[key] * baz())')).toEqual({ - left: { - left: { - source: { end: { index: 9 }, start: { index: 5 } }, - type: 'PercentageValue', - unit: '%', - value: 100, - }, - operator: '-', - right: { - source: { end: { index: 16 }, start: { index: 12 } }, - type: 'UnknownValue', - unit: '', - value: '@foo', - }, - source: { - end: { index: 16 }, - operator: { end: { index: 11 }, start: { index: 10 } }, - start: { index: 5 }, - }, - type: 'MathExpression', - }, - operator: '+', - right: { - left: { - source: { end: { index: 28 }, start: { index: 19 } }, - type: 'UnknownValue', - unit: '', - value: '@bar[key]', - }, - operator: '*', - right: { - source: { end: { index: 36 }, start: { index: 31 } }, - type: 'Function', - value: 'baz()', - }, - source: { - end: { index: 36 }, - operator: { end: { index: 30 }, start: { index: 29 } }, - start: { index: 19 }, - }, - type: 'MathExpression', - }, - source: { - end: { index: 37 }, - operator: { end: { index: 18 }, start: { index: 17 } }, - start: { index: 0 }, - }, - type: 'MathExpression', - }); - expect(parse('calc(foo(@bar, @baz))')).toEqual({ - source: { end: { index: 21 }, start: { index: 0 } }, - type: 'Function', - value: 'foo(@bar, @baz)', - }); -}); - -it('parseCalcExpression nested calc', () => { - expect(parse('calc(100px - calc(80px * 2))')).toEqual({ - left: { - source: { end: { index: 10 }, start: { index: 5 } }, - type: 'LengthValue', - unit: 'px', - value: 100, - }, - operator: '-', - right: { - left: { - source: { end: { index: 22 }, start: { index: 18 } }, - type: 'LengthValue', - unit: 'px', - value: 80, - }, - operator: '*', - right: { - source: { end: { index: 26 }, start: { index: 25 } }, - type: 'Value', - value: 2, - }, - source: { - end: { index: 27 }, - operator: { end: { index: 24 }, start: { index: 23 } }, - start: { index: 13 }, - }, - type: 'MathExpression', - }, - source: { - end: { index: 28 }, - operator: { end: { index: 12 }, start: { index: 11 } }, - start: { index: 0 }, - }, - type: 'MathExpression', - }); - expect(parse('calc(100px - (80px + calc(80px * 2)))')).toEqual({ - left: { - source: { end: { index: 10 }, start: { index: 5 } }, - type: 'LengthValue', - unit: 'px', - value: 100, - }, - operator: '-', - right: { - left: { - source: { end: { index: 18 }, start: { index: 14 } }, - type: 'LengthValue', - unit: 'px', - value: 80, - }, - operator: '+', - right: { - left: { - source: { end: { index: 30 }, start: { index: 26 } }, - type: 'LengthValue', - unit: 'px', - value: 80, - }, - operator: '*', - right: { - source: { end: { index: 34 }, start: { index: 33 } }, - type: 'Value', - value: 2, - }, - source: { - end: { index: 35 }, - operator: { end: { index: 32 }, start: { index: 31 } }, - start: { index: 21 }, - }, - type: 'MathExpression', - }, - source: { - end: { index: 36 }, - operator: { end: { index: 20 }, start: { index: 19 } }, - start: { index: 13 }, - }, - type: 'MathExpression', - }, - source: { - end: { index: 37 }, - operator: { end: { index: 12 }, start: { index: 11 } }, - start: { index: 0 }, - }, - type: 'MathExpression', - }); - expect(parse('calc(100px - (80px + fn(calc(80px * 2))))')).toEqual({ - left: { - source: { end: { index: 10 }, start: { index: 5 } }, - type: 'LengthValue', - unit: 'px', - value: 100, - }, - operator: '-', - right: { - left: { - source: { end: { index: 18 }, start: { index: 14 } }, - type: 'LengthValue', - unit: 'px', - value: 80, - }, - operator: '+', - right: { - source: { end: { index: 39 }, start: { index: 21 } }, - type: 'Function', - value: 'fn(calc(80px * 2))', - }, - source: { - end: { index: 40 }, - operator: { end: { index: 20 }, start: { index: 19 } }, - start: { index: 13 }, - }, - type: 'MathExpression', - }, - source: { - end: { index: 41 }, - operator: { end: { index: 12 }, start: { index: 11 } }, - start: { index: 0 }, - }, - type: 'MathExpression', - }); -}); - -it('parseCalcExpression syntax error', () => { - expect(() => parse('calc()')).toThrow(); - - // expect(() => parse("calc(100% -80px)")).toThrow(); - expect(() => parse('calc(100% 80px)')).toThrow(); - expect(() => parse('calc(100% 80px 20px)')).toThrow(); - expect(() => parse('calc(- 100%)')).toThrow(); - expect(() => parse('calc(100% -)')).toThrow(); - expect(() => parse('calc(100% - - 80px)')).toThrow(); - expect(() => parse('calc(100% - -)')).toThrow(); - expect(() => parse('calc(- - -)')).toThrow(); - expect(() => parse('calc(- 100% 80px)')).toThrow(); - - expect(() => parse('calc(100% - () - 80px)')).toThrow(); - - expect(() => parse('calc(100% - - -#{$foo})')).toThrow(); - expect(() => parse('calc(100% - - -@foo)')).toThrow(); - expect(() => parse('calc(100% - -foo())')).toThrow(); - expect(() => parse('calc(100% - -foo(bar, baz))')).toThrow(); - expect(() => parse('calc(--100)')).toThrow(); - expect(() => parse('calc(++100)')).toThrow(); - expect(() => parse('calc(+-100)')).toThrow(); - expect(() => parse('calc(-+100)')).toThrow(); - expect(() => parse('calc(+var(foo))')).toThrow(); -}); diff --git a/lib/utils/parseCalcExpression/index.js b/lib/utils/parseCalcExpression/index.js deleted file mode 100644 index c4d116a0eb..0000000000 --- a/lib/utils/parseCalcExpression/index.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -// To generate parser.js run the following command in the current directory: -// -// npx jison-gho parser.jison -o parser.js - -const parse = require('./parser').parse; - -/** - * @param {string} exp - * @returns {object} - */ -module.exports = function parseCalcExpression(exp) { - return parse(exp); -}; diff --git a/lib/utils/parseCalcExpression/parser.jison b/lib/utils/parseCalcExpression/parser.jison deleted file mode 100644 index 239ea5b2f7..0000000000 --- a/lib/utils/parseCalcExpression/parser.jison +++ /dev/null @@ -1,172 +0,0 @@ -/* description: Parses expressions. */ - -%options case-insensitive - -/* lexical grammar */ -%lex -%% -\s+ /* skip whitespace */ - -(\-(webkit|moz)\-)?calc\b return 'CALC'; - -[a-z][a-z0-9-]*\s*\((?:(?:\"(?:\\.|[^\"\\])*\"|\'(?:\\.|[^\'\\])*\')|\([^)]*\)|[^\(\)]*)*\) return 'FUNCTION'; - -"*" return 'MUL'; -"/" return 'DIV'; -"+" return 'ADD'; -"-" return 'SUB'; - -([0-9]+("."[0-9]+)?|"."[0-9]+)em\b return 'LENGTH'; // em -([0-9]+("."[0-9]+)?|"."[0-9]+)ex\b return 'LENGTH'; // ex -([0-9]+("."[0-9]+)?|"."[0-9]+)ch\b return 'LENGTH'; // ch -([0-9]+("."[0-9]+)?|"."[0-9]+)rem\b return 'LENGTH'; // rem -([0-9]+("."[0-9]+)?|"."[0-9]+)vw\b return 'LENGTH'; // vw -([0-9]+("."[0-9]+)?|"."[0-9]+)vh\b return 'LENGTH'; // vh -([0-9]+("."[0-9]+)?|"."[0-9]+)vmin\b return 'LENGTH'; // vmin -([0-9]+("."[0-9]+)?|"."[0-9]+)vmax\b return 'LENGTH'; // vmax -([0-9]+("."[0-9]+)?|"."[0-9]+)vm\b return 'LENGTH'; // vm (non-standard name) -([0-9]+("."[0-9]+)?|"."[0-9]+)px\b return 'LENGTH'; // px -([0-9]+("."[0-9]+)?|"."[0-9]+)mm\b return 'LENGTH'; // mm -([0-9]+("."[0-9]+)?|"."[0-9]+)cm\b return 'LENGTH'; // cm -([0-9]+("."[0-9]+)?|"."[0-9]+)in\b return 'LENGTH'; // in -([0-9]+("."[0-9]+)?|"."[0-9]+)pt\b return 'LENGTH'; // pt -([0-9]+("."[0-9]+)?|"."[0-9]+)pc\b return 'LENGTH'; // pc -([0-9]+("."[0-9]+)?|"."[0-9]+)Q\b return 'LENGTH'; // Q -([0-9]+("."[0-9]+)?|"."[0-9]+)fr\b return 'LENGTH'; // fr -([0-9]+("."[0-9]+)?|"."[0-9]+)deg\b return 'ANGLE'; // deg -([0-9]+("."[0-9]+)?|"."[0-9]+)grad\b return 'ANGLE'; // grad -([0-9]+("."[0-9]+)?|"."[0-9]+)turn\b return 'ANGLE'; // turn -([0-9]+("."[0-9]+)?|"."[0-9]+)rad\b return 'ANGLE'; // rad -([0-9]+("."[0-9]+)?|"."[0-9]+)s\b return 'TIME'; // s -([0-9]+("."[0-9]+)?|"."[0-9]+)ms\b return 'TIME'; // ms -([0-9]+("."[0-9]+)?|"."[0-9]+)Hz\b return 'FREQ'; // Hz -([0-9]+("."[0-9]+)?|"."[0-9]+)kHz\b return 'FREQ'; // kHz -([0-9]+("."[0-9]+)?|"."[0-9]+)dpi\b return 'RES'; // dpi -([0-9]+("."[0-9]+)?|"."[0-9]+)dpcm\b return 'RES'; // dpcm -([0-9]+("."[0-9]+)?|"."[0-9]+)dppx\b return 'RES'; // dppm -([0-9]+("."[0-9]+)?|"."[0-9]+)\% return 'PERCENTAGE'; -([0-9]+("."[0-9]+)?|"."[0-9]+)\b return 'NUMBER'; - -"(" return 'LPAREN'; -")" return 'RPAREN'; - -#\{([\s\S]*?)\} return 'UNKNOWN'; // scss interpolation -@\{([\s\S]*?)\} return 'UNKNOWN'; // less interpolation - -\S[^\s()*/+-]* return 'UNKNOWN'; - -<> return 'EOF'; - -/lex - -%left ADD SUB -%left MUL DIV -%left UPREC - - -%start expression - -%% - -expression - : math_expression EOF { return $1; } - ; - - math_expression - : CALC LPAREN math_expression RPAREN { - $$ = $3; - $$.source.start = { index: @1.range[0] }; - $$.source.end = { index: @4.range[1] }; - } - | math_expression ADD math_expression { - $$ = { - type: 'MathExpression', operator: $2, left: $1, right: $3, - source: { - start: $1.source.start, end: $3.source.end, - operator: { start: { index: @2.range[0] }, end: { index: @2.range[1] } } - } - }; - } - | math_expression SUB math_expression { - $$ = { - type: 'MathExpression', operator: $2, left: $1, right: $3, - source: { - start: $1.source.start, end: $3.source.end, - operator: { start: { index: @2.range[0] }, end: { index: @2.range[1] } } - } - }; - } - | math_expression MUL math_expression { - $$ = { - type: 'MathExpression', operator: $2, left: $1, right: $3, - source: { - start: $1.source.start, end: $3.source.end, - operator: { start: { index: @2.range[0] }, end: { index: @2.range[1] } } - } - }; - } - | math_expression DIV math_expression { - $$ = { - type: 'MathExpression', operator: $2, left: $1, right: $3, - source: { - start: $1.source.start, end: $3.source.end, - operator: { start: { index: @2.range[0] }, end: { index: @2.range[1] } } - } - }; - } - | SUB math_expression %prec UPREC { - if (@1.range[1] !== $2.source.start.index) { - throw new Error('Unexpected spaces was found between sign and value'); - } - if (typeof $2.value !== 'number') { - throw new Error('Unexpected sign'); - } - if ($2.sign) { - throw new Error('Unexpected continuous sign'); - } - $$ = $2; - $$.sign = '-' - $$.value = -$2.value; - $$.source.start.index = @1.range[0]; - } - | ADD math_expression %prec UPREC { - if (@1.range[1] !== $2.source.start.index) { - throw new Error('Unexpected spaces was found between sign and value'); - } - if (typeof $2.value !== 'number') { - throw new Error('Unexpected sign'); - } - if ($2.sign) { - throw new Error('Unexpected continuous sign'); - } - $$ = $2; - $$.sign = '+' - $$.source.start.index = @1.range[0]; - } - | LPAREN math_expression RPAREN { - $$ = $2; - $$.source.start = { index: @1.range[0] }; - $$.source.end = { index: @3.range[1] }; - } - | function { $$ = $1; } - | css_value { $$ = $1; } - | value { $$ = $1; } - ; - - value - : NUMBER { $$ = { type: 'Value', value: parseFloat($1), source: { start: { index: @1.range[0] }, end: { index: @1.range[1] } } }; } - ; - - function - : FUNCTION { $$ = { type: 'Function', value: $1, source: { start: { index: @1.range[0] }, end: { index: @1.range[1] } } }; } - ; - - css_value - : LENGTH { $$ = { type: 'LengthValue', value: parseFloat($1), unit: /[a-z]+/i.exec($1)[0], source: { start: { index: @1.range[0] }, end: { index: @1.range[1] } } }; } - | ANGLE { $$ = { type: 'AngleValue', value: parseFloat($1), unit: /[a-z]+/i.exec($1)[0], source: { start: { index: @1.range[0] }, end: { index: @1.range[1] } } }; } - | TIME { $$ = { type: 'TimeValue', value: parseFloat($1), unit: /[a-z]+/i.exec($1)[0], source: { start: { index: @1.range[0] }, end: { index: @1.range[1] } } }; } - | FREQ { $$ = { type: 'FrequencyValue', value: parseFloat($1), unit: /[a-z]+/i.exec($1)[0], source: { start: { index: @1.range[0] }, end: { index: @1.range[1] } } }; } - | RES { $$ = { type: 'ResolutionValue', value: parseFloat($1), unit: /[a-z]+/i.exec($1)[0], source: { start: { index: @1.range[0] }, end: { index: @1.range[1] } } }; } - | PERCENTAGE { $$ = { type: 'PercentageValue', value: parseFloat($1), unit: '%', source: { start: { index: @1.range[0] }, end: { index: @1.range[1] } } }; } - | UNKNOWN { $$ = { type: 'UnknownValue', value: $1, unit: '', source: { start: { index: @1.range[0] }, end: { index: @1.range[1] } } }; } - ; diff --git a/lib/utils/parseCalcExpression/parser.js b/lib/utils/parseCalcExpression/parser.js deleted file mode 100644 index e81eea518d..0000000000 --- a/lib/utils/parseCalcExpression/parser.js +++ /dev/null @@ -1,3929 +0,0 @@ - -// @ts-nocheck - -/* parser generated by jison 0.6.1-215 */ - -/* - * Returns a Parser object of the following structure: - * - * Parser: { - * yy: {} The so-called "shared state" or rather the *source* of it; - * the real "shared state" `yy` passed around to - * the rule actions, etc. is a derivative/copy of this one, - * not a direct reference! - * } - * - * Parser.prototype: { - * yy: {}, - * EOF: 1, - * TERROR: 2, - * - * trace: function(errorMessage, ...), - * - * JisonParserError: function(msg, hash), - * - * quoteName: function(name), - * Helper function which can be overridden by user code later on: put suitable - * quotes around literal IDs in a description string. - * - * originalQuoteName: function(name), - * The basic quoteName handler provided by JISON. - * `cleanupAfterParse()` will clean up and reset `quoteName()` to reference this function - * at the end of the `parse()`. - * - * describeSymbol: function(symbol), - * Return a more-or-less human-readable description of the given symbol, when - * available, or the symbol itself, serving as its own 'description' for lack - * of something better to serve up. - * - * Return NULL when the symbol is unknown to the parser. - * - * symbols_: {associative list: name ==> number}, - * terminals_: {associative list: number ==> name}, - * nonterminals: {associative list: rule-name ==> {associative list: number ==> rule-alt}}, - * terminal_descriptions_: (if there are any) {associative list: number ==> description}, - * productions_: [...], - * - * performAction: function parser__performAction(yytext, yyleng, yylineno, yyloc, yystate, yysp, yyvstack, yylstack, yystack, yysstack), - * - * The function parameters and `this` have the following value/meaning: - * - `this` : reference to the `yyval` internal object, which has members (`$` and `_$`) - * to store/reference the rule value `$$` and location info `@$`. - * - * One important thing to note about `this` a.k.a. `yyval`: every *reduce* action gets - * to see the same object via the `this` reference, i.e. if you wish to carry custom - * data from one reduce action through to the next within a single parse run, then you - * may get nasty and use `yyval` a.k.a. `this` for storing you own semi-permanent data. - * - * `this.yy` is a direct reference to the `yy` shared state object. - * - * `%parse-param`-specified additional `parse()` arguments have been added to this `yy` - * object at `parse()` start and are therefore available to the action code via the - * same named `yy.xxxx` attributes (where `xxxx` represents a identifier name from - * the %parse-param` list. - * - * - `yytext` : reference to the lexer value which belongs to the last lexer token used - * to match this rule. This is *not* the look-ahead token, but the last token - * that's actually part of this rule. - * - * Formulated another way, `yytext` is the value of the token immediately preceeding - * the current look-ahead token. - * Caveats apply for rules which don't require look-ahead, such as epsilon rules. - * - * - `yyleng` : ditto as `yytext`, only now for the lexer.yyleng value. - * - * - `yylineno`: ditto as `yytext`, only now for the lexer.yylineno value. - * - * - `yyloc` : ditto as `yytext`, only now for the lexer.yylloc lexer token location info. - * - * WARNING: since jison 0.4.18-186 this entry may be NULL/UNDEFINED instead - * of an empty object when no suitable location info can be provided. - * - * - `yystate` : the current parser state number, used internally for dispatching and - * executing the action code chunk matching the rule currently being reduced. - * - * - `yysp` : the current state stack position (a.k.a. 'stack pointer') - * - * This one comes in handy when you are going to do advanced things to the parser - * stacks, all of which are accessible from your action code (see the next entries below). - * - * Also note that you can access this and other stack index values using the new double-hash - * syntax, i.e. `##$ === ##0 === yysp`, while `##1` is the stack index for all things - * related to the first rule term, just like you have `$1`, `@1` and `#1`. - * This is made available to write very advanced grammar action rules, e.g. when you want - * to investigate the parse state stack in your action code, which would, for example, - * be relevant when you wish to implement error diagnostics and reporting schemes similar - * to the work described here: - * - * + Pottier, F., 2016. Reachability and error diagnosis in LR(1) automata. - * In Journées Francophones des Languages Applicatifs. - * - * + Jeffery, C.L., 2003. Generating LR syntax error messages from examples. - * ACM Transactions on Programming Languages and Systems (TOPLAS), 25(5), pp.631–640. - * - * - `yyrulelength`: the current rule's term count, i.e. the number of entries occupied on the stack. - * - * This one comes in handy when you are going to do advanced things to the parser - * stacks, all of which are accessible from your action code (see the next entries below). - * - * - `yyvstack`: reference to the parser value stack. Also accessed via the `$1` etc. - * constructs. - * - * - `yylstack`: reference to the parser token location stack. Also accessed via - * the `@1` etc. constructs. - * - * WARNING: since jison 0.4.18-186 this array MAY contain slots which are - * UNDEFINED rather than an empty (location) object, when the lexer/parser - * action code did not provide a suitable location info object when such a - * slot was filled! - * - * - `yystack` : reference to the parser token id stack. Also accessed via the - * `#1` etc. constructs. - * - * Note: this is a bit of a **white lie** as we can statically decode any `#n` reference to - * its numeric token id value, hence that code wouldn't need the `yystack` but *you* might - * want access this array for your own purposes, such as error analysis as mentioned above! - * - * Note that this stack stores the current stack of *tokens*, that is the sequence of - * already parsed=reduced *nonterminals* (tokens representing rules) and *terminals* - * (lexer tokens *shifted* onto the stack until the rule they belong to is found and - * *reduced*. - * - * - `yysstack`: reference to the parser state stack. This one carries the internal parser - * *states* such as the one in `yystate`, which are used to represent - * the parser state machine in the *parse table*. *Very* *internal* stuff, - * what can I say? If you access this one, you're clearly doing wicked things - * - * - `...` : the extra arguments you specified in the `%parse-param` statement in your - * grammar definition file. - * - * table: [...], - * State transition table - * ---------------------- - * - * index levels are: - * - `state` --> hash table - * - `symbol` --> action (number or array) - * - * If the `action` is an array, these are the elements' meaning: - * - index [0]: 1 = shift, 2 = reduce, 3 = accept - * - index [1]: GOTO `state` - * - * If the `action` is a number, it is the GOTO `state` - * - * defaultActions: {...}, - * - * parseError: function(str, hash, ExceptionClass), - * yyError: function(str, ...), - * yyRecovering: function(), - * yyErrOk: function(), - * yyClearIn: function(), - * - * constructParseErrorInfo: function(error_message, exception_object, expected_token_set, is_recoverable), - * Helper function **which will be set up during the first invocation of the `parse()` method**. - * Produces a new errorInfo 'hash object' which can be passed into `parseError()`. - * See it's use in this parser kernel in many places; example usage: - * - * var infoObj = parser.constructParseErrorInfo('fail!', null, - * parser.collect_expected_token_set(state), true); - * var retVal = parser.parseError(infoObj.errStr, infoObj, parser.JisonParserError); - * - * originalParseError: function(str, hash, ExceptionClass), - * The basic `parseError` handler provided by JISON. - * `cleanupAfterParse()` will clean up and reset `parseError()` to reference this function - * at the end of the `parse()`. - * - * options: { ... parser %options ... }, - * - * parse: function(input[, args...]), - * Parse the given `input` and return the parsed value (or `true` when none was provided by - * the root action, in which case the parser is acting as a *matcher*). - * You MAY use the additional `args...` parameters as per `%parse-param` spec of this grammar: - * these extra `args...` are added verbatim to the `yy` object reference as member variables. - * - * WARNING: - * Parser's additional `args...` parameters (via `%parse-param`) MAY conflict with - * any attributes already added to `yy` by the jison run-time; - * when such a collision is detected an exception is thrown to prevent the generated run-time - * from silently accepting this confusing and potentially hazardous situation! - * - * The lexer MAY add its own set of additional parameters (via the `%parse-param` line in - * the lexer section of the grammar spec): these will be inserted in the `yy` shared state - * object and any collision with those will be reported by the lexer via a thrown exception. - * - * cleanupAfterParse: function(resultValue, invoke_post_methods, do_not_nuke_errorinfos), - * Helper function **which will be set up during the first invocation of the `parse()` method**. - * This helper API is invoked at the end of the `parse()` call, unless an exception was thrown - * and `%options no-try-catch` has been defined for this grammar: in that case this helper MAY - * be invoked by calling user code to ensure the `post_parse` callbacks are invoked and - * the internal parser gets properly garbage collected under these particular circumstances. - * - * yyMergeLocationInfo: function(first_index, last_index, first_yylloc, last_yylloc, dont_look_back), - * Helper function **which will be set up during the first invocation of the `parse()` method**. - * This helper API can be invoked to calculate a spanning `yylloc` location info object. - * - * Note: %epsilon rules MAY specify no `first_index` and `first_yylloc`, in which case - * this function will attempt to obtain a suitable location marker by inspecting the location stack - * backwards. - * - * For more info see the documentation comment further below, immediately above this function's - * implementation. - * - * lexer: { - * yy: {...}, A reference to the so-called "shared state" `yy` once - * received via a call to the `.setInput(input, yy)` lexer API. - * EOF: 1, - * ERROR: 2, - * JisonLexerError: function(msg, hash), - * parseError: function(str, hash, ExceptionClass), - * setInput: function(input, [yy]), - * input: function(), - * unput: function(str), - * more: function(), - * reject: function(), - * less: function(n), - * pastInput: function(n), - * upcomingInput: function(n), - * showPosition: function(), - * test_match: function(regex_match_array, rule_index, ...), - * next: function(...), - * lex: function(...), - * begin: function(condition), - * pushState: function(condition), - * popState: function(), - * topState: function(), - * _currentRules: function(), - * stateStackSize: function(), - * cleanupAfterLex: function() - * - * options: { ... lexer %options ... }, - * - * performAction: function(yy, yy_, $avoiding_name_collisions, YY_START, ...), - * rules: [...], - * conditions: {associative list: name ==> set}, - * } - * } - * - * - * token location info (@$, _$, etc.): { - * first_line: n, - * last_line: n, - * first_column: n, - * last_column: n, - * range: [start_number, end_number] - * (where the numbers are indexes into the input string, zero-based) - * } - * - * --- - * - * The `parseError` function receives a 'hash' object with these members for lexer and - * parser errors: - * - * { - * text: (matched text) - * token: (the produced terminal token, if any) - * token_id: (the produced terminal token numeric ID, if any) - * line: (yylineno) - * loc: (yylloc) - * } - * - * parser (grammar) errors will also provide these additional members: - * - * { - * expected: (array describing the set of expected tokens; - * may be UNDEFINED when we cannot easily produce such a set) - * state: (integer (or array when the table includes grammar collisions); - * represents the current internal state of the parser kernel. - * can, for example, be used to pass to the `collect_expected_token_set()` - * API to obtain the expected token set) - * action: (integer; represents the current internal action which will be executed) - * new_state: (integer; represents the next/planned internal state, once the current - * action has executed) - * recoverable: (boolean: TRUE when the parser MAY have an error recovery rule - * available for this particular error) - * state_stack: (array: the current parser LALR/LR internal state stack; this can be used, - * for instance, for advanced error analysis and reporting) - * value_stack: (array: the current parser LALR/LR internal `$$` value stack; this can be used, - * for instance, for advanced error analysis and reporting) - * location_stack: (array: the current parser LALR/LR internal location stack; this can be used, - * for instance, for advanced error analysis and reporting) - * yy: (object: the current parser internal "shared state" `yy` - * as is also available in the rule actions; this can be used, - * for instance, for advanced error analysis and reporting) - * lexer: (reference to the current lexer instance used by the parser) - * parser: (reference to the current parser instance) - * } - * - * while `this` will reference the current parser instance. - * - * When `parseError` is invoked by the lexer, `this` will still reference the related *parser* - * instance, while these additional `hash` fields will also be provided: - * - * { - * lexer: (reference to the current lexer instance which reported the error) - * } - * - * When `parseError` is invoked by the parser due to a **JavaScript exception** being fired - * from either the parser or lexer, `this` will still reference the related *parser* - * instance, while these additional `hash` fields will also be provided: - * - * { - * exception: (reference to the exception thrown) - * } - * - * Please do note that in the latter situation, the `expected` field will be omitted as - * this type of failure is assumed not to be due to *parse errors* but rather due to user - * action code in either parser or lexer failing unexpectedly. - * - * --- - * - * You can specify parser options by setting / modifying the `.yy` object of your Parser instance. - * These options are available: - * - * ### options which are global for all parser instances - * - * Parser.pre_parse: function(yy) - * optional: you can specify a pre_parse() function in the chunk following - * the grammar, i.e. after the last `%%`. - * Parser.post_parse: function(yy, retval, parseInfo) { return retval; } - * optional: you can specify a post_parse() function in the chunk following - * the grammar, i.e. after the last `%%`. When it does not return any value, - * the parser will return the original `retval`. - * - * ### options which can be set up per parser instance - * - * yy: { - * pre_parse: function(yy) - * optional: is invoked before the parse cycle starts (and before the first - * invocation of `lex()`) but immediately after the invocation of - * `parser.pre_parse()`). - * post_parse: function(yy, retval, parseInfo) { return retval; } - * optional: is invoked when the parse terminates due to success ('accept') - * or failure (even when exceptions are thrown). - * `retval` contains the return value to be produced by `Parser.parse()`; - * this function can override the return value by returning another. - * When it does not return any value, the parser will return the original - * `retval`. - * This function is invoked immediately before `parser.post_parse()`. - * - * parseError: function(str, hash, ExceptionClass) - * optional: overrides the default `parseError` function. - * quoteName: function(name), - * optional: overrides the default `quoteName` function. - * } - * - * parser.lexer.options: { - * pre_lex: function() - * optional: is invoked before the lexer is invoked to produce another token. - * `this` refers to the Lexer object. - * post_lex: function(token) { return token; } - * optional: is invoked when the lexer has produced a token `token`; - * this function can override the returned token value by returning another. - * When it does not return any (truthy) value, the lexer will return - * the original `token`. - * `this` refers to the Lexer object. - * - * ranges: boolean - * optional: `true` ==> token location info will include a .range[] member. - * flex: boolean - * optional: `true` ==> flex-like lexing behaviour where the rules are tested - * exhaustively to find the longest match. - * backtrack_lexer: boolean - * optional: `true` ==> lexer regexes are tested in order and for invoked; - * the lexer terminates the scan when a token is returned by the action code. - * xregexp: boolean - * optional: `true` ==> lexer rule regexes are "extended regex format" requiring the - * `XRegExp` library. When this `%option` has not been specified at compile time, all lexer - * rule regexes have been written as standard JavaScript RegExp expressions. - * } - */ - - - - var parser = (function () { - - -// See also: -// http://stackoverflow.com/questions/1382107/whats-a-good-way-to-extend-error-in-javascript/#35881508 -// but we keep the prototype.constructor and prototype.name assignment lines too for compatibility -// with userland code which might access the derived class in a 'classic' way. -function JisonParserError(msg, hash) { - Object.defineProperty(this, 'name', { - enumerable: false, - writable: false, - value: 'JisonParserError' - }); - - if (msg == null) msg = '???'; - - Object.defineProperty(this, 'message', { - enumerable: false, - writable: true, - value: msg - }); - - this.hash = hash; - - var stacktrace; - if (hash && hash.exception instanceof Error) { - var ex2 = hash.exception; - this.message = ex2.message || msg; - stacktrace = ex2.stack; - } - if (!stacktrace) { - if (Error.hasOwnProperty('captureStackTrace')) { // V8/Chrome engine - Error.captureStackTrace(this, this.constructor); - } else { - stacktrace = (new Error(msg)).stack; - } - } - if (stacktrace) { - Object.defineProperty(this, 'stack', { - enumerable: false, - writable: false, - value: stacktrace - }); - } -} - -if (typeof Object.setPrototypeOf === 'function') { - Object.setPrototypeOf(JisonParserError.prototype, Error.prototype); -} else { - JisonParserError.prototype = Object.create(Error.prototype); -} -JisonParserError.prototype.constructor = JisonParserError; -JisonParserError.prototype.name = 'JisonParserError'; - - - - - // helper: reconstruct the productions[] table - function bp(s) { - var rv = []; - var p = s.pop; - var r = s.rule; - for (var i = 0, l = p.length; i < l; i++) { - rv.push([ - p[i], - r[i] - ]); - } - return rv; - } - - - - // helper: reconstruct the defaultActions[] table - function bda(s) { - var rv = {}; - var d = s.idx; - var g = s.goto; - for (var i = 0, l = d.length; i < l; i++) { - var j = d[i]; - rv[j] = g[i]; - } - return rv; - } - - - - // helper: reconstruct the 'goto' table - function bt(s) { - var rv = []; - var d = s.len; - var y = s.symbol; - var t = s.type; - var a = s.state; - var m = s.mode; - var g = s.goto; - for (var i = 0, l = d.length; i < l; i++) { - var n = d[i]; - var q = {}; - for (var j = 0; j < n; j++) { - var z = y.shift(); - switch (t.shift()) { - case 2: - q[z] = [ - m.shift(), - g.shift() - ]; - break; - - case 0: - q[z] = a.shift(); - break; - - default: - // type === 1: accept - q[z] = [ - 3 - ]; - } - } - rv.push(q); - } - return rv; - } - - - - // helper: runlength encoding with increment step: code, length: step (default step = 0) - // `this` references an array - function s(c, l, a) { - a = a || 0; - for (var i = 0; i < l; i++) { - this.push(c); - c += a; - } - } - - // helper: duplicate sequence from *relative* offset and length. - // `this` references an array - function c(i, l) { - i = this.length - i; - for (l += i; i < l; i++) { - this.push(this[i]); - } - } - - // helper: unpack an array using helpers and data, all passed in an array argument 'a'. - function u(a) { - var rv = []; - for (var i = 0, l = a.length; i < l; i++) { - var e = a[i]; - // Is this entry a helper function? - if (typeof e === 'function') { - i++; - e.apply(rv, a[i]); - } else { - rv.push(e); - } - } - return rv; - } - - -var parser = { - // Code Generator Information Report - // --------------------------------- - // - // Options: - // - // default action mode: ............. ["classic","merge"] - // test-compile action mode: ........ "parser:*,lexer:*" - // try..catch: ...................... true - // default resolve on conflict: ..... true - // on-demand look-ahead: ............ false - // error recovery token skip maximum: 3 - // yyerror in parse actions is: ..... NOT recoverable, - // yyerror in lexer actions and other non-fatal lexer are: - // .................................. NOT recoverable, - // debug grammar/output: ............ false - // has partial LR conflict upgrade: true - // rudimentary token-stack support: false - // parser table compression mode: ... 2 - // export debug tables: ............. false - // export *all* tables: ............. false - // module type: ..................... commonjs - // parser engine type: .............. lalr - // output main() in the module: ..... true - // has user-specified main(): ....... false - // has user-specified require()/import modules for main(): - // .................................. false - // number of expected conflicts: .... 0 - // - // - // Parser Analysis flags: - // - // no significant actions (parser is a language matcher only): - // .................................. false - // uses yyleng: ..................... false - // uses yylineno: ................... false - // uses yytext: ..................... false - // uses yylloc: ..................... false - // uses ParseError API: ............. false - // uses YYERROR: .................... false - // uses YYRECOVERING: ............... false - // uses YYERROK: .................... false - // uses YYCLEARIN: .................. false - // tracks rule values: .............. true - // assigns rule values: ............. true - // uses location tracking: .......... true - // assigns location: ................ true - // uses yystack: .................... false - // uses yysstack: ................... false - // uses yysp: ....................... true - // uses yyrulelength: ............... false - // uses yyMergeLocationInfo API: .... true - // has error recovery: .............. false - // has error reporting: ............. false - // - // --------- END OF REPORT ----------- - -trace: function no_op_trace() { }, -JisonParserError: JisonParserError, -yy: {}, -options: { - type: "lalr", - hasPartialLrUpgradeOnConflict: true, - errorRecoveryTokenDiscardCount: 3, - caseInsensitive: true -}, -symbols_: { - "$accept": 0, - "$end": 1, - "ADD": 6, - "ANGLE": 13, - "CALC": 3, - "DIV": 9, - "EOF": 1, - "FREQ": 15, - "FUNCTION": 11, - "LENGTH": 12, - "LPAREN": 4, - "MUL": 8, - "NUMBER": 10, - "PERCENTAGE": 17, - "RES": 16, - "RPAREN": 5, - "SUB": 7, - "TIME": 14, - "UNKNOWN": 18, - "css_value": 23, - "error": 2, - "expression": 19, - "function": 22, - "math_expression": 20, - "value": 21 -}, -terminals_: { - 1: "EOF", - 2: "error", - 3: "CALC", - 4: "LPAREN", - 5: "RPAREN", - 6: "ADD", - 7: "SUB", - 8: "MUL", - 9: "DIV", - 10: "NUMBER", - 11: "FUNCTION", - 12: "LENGTH", - 13: "ANGLE", - 14: "TIME", - 15: "FREQ", - 16: "RES", - 17: "PERCENTAGE", - 18: "UNKNOWN" -}, -TERROR: 2, - EOF: 1, - - // internals: defined here so the object *structure* doesn't get modified by parse() et al, - // thus helping JIT compilers like Chrome V8. - originalQuoteName: null, - originalParseError: null, - cleanupAfterParse: null, - constructParseErrorInfo: null, - yyMergeLocationInfo: null, - - __reentrant_call_depth: 0, // INTERNAL USE ONLY - __error_infos: [], // INTERNAL USE ONLY: the set of parseErrorInfo objects created since the last cleanup - __error_recovery_infos: [], // INTERNAL USE ONLY: the set of parseErrorInfo objects created since the last cleanup - - // APIs which will be set up depending on user action code analysis: - //yyRecovering: 0, - //yyErrOk: 0, - //yyClearIn: 0, - - // Helper APIs - // ----------- - - // Helper function which can be overridden by user code later on: put suitable quotes around - // literal IDs in a description string. - quoteName: function parser_quoteName(id_str) { - return '"' + id_str + '"'; - }, - - // Return the name of the given symbol (terminal or non-terminal) as a string, when available. - // - // Return NULL when the symbol is unknown to the parser. - getSymbolName: function parser_getSymbolName(symbol) { - if (this.terminals_[symbol]) { - return this.terminals_[symbol]; - } - - // Otherwise... this might refer to a RULE token i.e. a non-terminal: see if we can dig that one up. - // - // An example of this may be where a rule's action code contains a call like this: - // - // parser.getSymbolName(#$) - // - // to obtain a human-readable name of the current grammar rule. - var s = this.symbols_; - for (var key in s) { - if (s[key] === symbol) { - return key; - } - } - return null; - }, - - // Return a more-or-less human-readable description of the given symbol, when available, - // or the symbol itself, serving as its own 'description' for lack of something better to serve up. - // - // Return NULL when the symbol is unknown to the parser. - describeSymbol: function parser_describeSymbol(symbol) { - if (symbol !== this.EOF && this.terminal_descriptions_ && this.terminal_descriptions_[symbol]) { - return this.terminal_descriptions_[symbol]; - } - else if (symbol === this.EOF) { - return 'end of input'; - } - var id = this.getSymbolName(symbol); - if (id) { - return this.quoteName(id); - } - return null; - }, - - // Produce a (more or less) human-readable list of expected tokens at the point of failure. - // - // The produced list may contain token or token set descriptions instead of the tokens - // themselves to help turning this output into something that easier to read by humans - // unless `do_not_describe` parameter is set, in which case a list of the raw, *numeric*, - // expected terminals and nonterminals is produced. - // - // The returned list (array) will not contain any duplicate entries. - collect_expected_token_set: function parser_collect_expected_token_set(state, do_not_describe) { - var TERROR = this.TERROR; - var tokenset = []; - var check = {}; - // Has this (error?) state been outfitted with a custom expectations description text for human consumption? - // If so, use that one instead of the less palatable token set. - if (!do_not_describe && this.state_descriptions_ && this.state_descriptions_[state]) { - return [ - this.state_descriptions_[state] - ]; - } - for (var p in this.table[state]) { - p = +p; - if (p !== TERROR) { - var d = do_not_describe ? p : this.describeSymbol(p); - if (d && !check[d]) { - tokenset.push(d); - check[d] = true; // Mark this token description as already mentioned to prevent outputting duplicate entries. - } - } - } - return tokenset; - }, -productions_: bp({ - pop: u([ - 19, - s, - [20, 11], - 21, - 22, - s, - [23, 7] -]), - rule: u([ - 2, - 4, - s, - [3, 4], - 2, - 2, - 3, - s, - [1, 12] -]) -}), -performAction: function parser__PerformAction(yyloc, yystate /* action[1] */, yysp, yyvstack, yylstack) { - - /* this == yyval */ - - // the JS engine itself can go and remove these statements when `yy` turns out to be unused in any action code! - var yy = this.yy; - var yyparser = yy.parser; - var yylexer = yy.lexer; - - - - switch (yystate) { -case 0: - /*! Production:: $accept : expression $end */ - - // default action (generated by JISON mode classic/merge :: 1,VT,VA,-,-,LT,LA,-,-): - this.$ = yyvstack[yysp - 1]; - this._$ = yylstack[yysp - 1]; - // END of default action (generated by JISON mode classic/merge :: 1,VT,VA,-,-,LT,LA,-,-) - break; - -case 1: - /*! Production:: expression : math_expression EOF */ - - // default action (generated by JISON mode classic/merge :: 2,VT,VA,-,-,LT,LA,-,-): - this.$ = yyvstack[yysp - 1]; - this._$ = yyparser.yyMergeLocationInfo(yysp - 1, yysp); - // END of default action (generated by JISON mode classic/merge :: 2,VT,VA,-,-,LT,LA,-,-) - - - return yyvstack[yysp - 1]; - break; - -case 2: - /*! Production:: math_expression : CALC LPAREN math_expression RPAREN */ - - // default action (generated by JISON mode classic/merge :: 4,VT,VA,VU,-,LT,LA,-,-): - this._$ = yyparser.yyMergeLocationInfo(yysp - 3, yysp); - // END of default action (generated by JISON mode classic/merge :: 4,VT,VA,VU,-,LT,LA,-,-) - - - this.$ = yyvstack[yysp - 1]; - this.$.source.start = { index: yylstack[yysp - 3].range[0] }; - this.$.source.end = { index: yylstack[yysp].range[1] }; - break; - -case 3: - /*! Production:: math_expression : math_expression ADD math_expression */ -case 4: - /*! Production:: math_expression : math_expression SUB math_expression */ -case 5: - /*! Production:: math_expression : math_expression MUL math_expression */ -case 6: - /*! Production:: math_expression : math_expression DIV math_expression */ - - // default action (generated by JISON mode classic/merge :: 3,VT,VA,VU,-,LT,LA,-,-): - this._$ = yyparser.yyMergeLocationInfo(yysp - 2, yysp); - // END of default action (generated by JISON mode classic/merge :: 3,VT,VA,VU,-,LT,LA,-,-) - - - this.$ = { - type: 'MathExpression', operator: yyvstack[yysp - 1], left: yyvstack[yysp - 2], right: yyvstack[yysp], - source: { - start: yyvstack[yysp - 2].source.start, end: yyvstack[yysp].source.end, - operator: { start: { index: yylstack[yysp - 1].range[0] }, end: { index: yylstack[yysp - 1].range[1] } } - } - }; - break; - -case 7: - /*! Production:: math_expression : SUB math_expression */ - - // default action (generated by JISON mode classic/merge :: 2,VT,VA,VU,-,LT,LA,-,-): - this._$ = yyparser.yyMergeLocationInfo(yysp - 1, yysp); - // END of default action (generated by JISON mode classic/merge :: 2,VT,VA,VU,-,LT,LA,-,-) - - - if (yylstack[yysp - 1].range[1] !== yyvstack[yysp].source.start.index) { - throw new Error('Unexpected spaces was found between sign and value'); - } - if (typeof yyvstack[yysp].value !== 'number') { - throw new Error('Unexpected sign'); - } - if (yyvstack[yysp].sign) { - throw new Error('Unexpected continuous sign'); - } - this.$ = yyvstack[yysp]; - this.$.sign = '-' - this.$.value = -yyvstack[yysp].value; - this.$.source.start.index = yylstack[yysp - 1].range[0]; - break; - -case 8: - /*! Production:: math_expression : ADD math_expression */ - - // default action (generated by JISON mode classic/merge :: 2,VT,VA,VU,-,LT,LA,-,-): - this._$ = yyparser.yyMergeLocationInfo(yysp - 1, yysp); - // END of default action (generated by JISON mode classic/merge :: 2,VT,VA,VU,-,LT,LA,-,-) - - - if (yylstack[yysp - 1].range[1] !== yyvstack[yysp].source.start.index) { - throw new Error('Unexpected spaces was found between sign and value'); - } - if (typeof yyvstack[yysp].value !== 'number') { - throw new Error('Unexpected sign'); - } - if (yyvstack[yysp].sign) { - throw new Error('Unexpected continuous sign'); - } - this.$ = yyvstack[yysp]; - this.$.sign = '+' - this.$.source.start.index = yylstack[yysp - 1].range[0]; - break; - -case 9: - /*! Production:: math_expression : LPAREN math_expression RPAREN */ - - // default action (generated by JISON mode classic/merge :: 3,VT,VA,VU,-,LT,LA,-,-): - this._$ = yyparser.yyMergeLocationInfo(yysp - 2, yysp); - // END of default action (generated by JISON mode classic/merge :: 3,VT,VA,VU,-,LT,LA,-,-) - - - this.$ = yyvstack[yysp - 1]; - this.$.source.start = { index: yylstack[yysp - 2].range[0] }; - this.$.source.end = { index: yylstack[yysp].range[1] }; - break; - -case 10: - /*! Production:: math_expression : function */ -case 11: - /*! Production:: math_expression : css_value */ -case 12: - /*! Production:: math_expression : value */ - - // default action (generated by JISON mode classic/merge :: 1,VT,VA,VU,-,LT,LA,-,-): - this._$ = yylstack[yysp]; - // END of default action (generated by JISON mode classic/merge :: 1,VT,VA,VU,-,LT,LA,-,-) - - - this.$ = yyvstack[yysp]; - break; - -case 13: - /*! Production:: value : NUMBER */ - - // default action (generated by JISON mode classic/merge :: 1,VT,VA,VU,-,LT,LA,-,-): - this._$ = yylstack[yysp]; - // END of default action (generated by JISON mode classic/merge :: 1,VT,VA,VU,-,LT,LA,-,-) - - - this.$ = { type: 'Value', value: parseFloat(yyvstack[yysp]), source: { start: { index: yylstack[yysp].range[0] }, end: { index: yylstack[yysp].range[1] } } }; - break; - -case 14: - /*! Production:: function : FUNCTION */ - - // default action (generated by JISON mode classic/merge :: 1,VT,VA,VU,-,LT,LA,-,-): - this._$ = yylstack[yysp]; - // END of default action (generated by JISON mode classic/merge :: 1,VT,VA,VU,-,LT,LA,-,-) - - - this.$ = { type: 'Function', value: yyvstack[yysp], source: { start: { index: yylstack[yysp].range[0] }, end: { index: yylstack[yysp].range[1] } } }; - break; - -case 15: - /*! Production:: css_value : LENGTH */ - - // default action (generated by JISON mode classic/merge :: 1,VT,VA,VU,-,LT,LA,-,-): - this._$ = yylstack[yysp]; - // END of default action (generated by JISON mode classic/merge :: 1,VT,VA,VU,-,LT,LA,-,-) - - - this.$ = { type: 'LengthValue', value: parseFloat(yyvstack[yysp]), unit: /[a-z]+/i.exec(yyvstack[yysp])[0], source: { start: { index: yylstack[yysp].range[0] }, end: { index: yylstack[yysp].range[1] } } }; - break; - -case 16: - /*! Production:: css_value : ANGLE */ - - // default action (generated by JISON mode classic/merge :: 1,VT,VA,VU,-,LT,LA,-,-): - this._$ = yylstack[yysp]; - // END of default action (generated by JISON mode classic/merge :: 1,VT,VA,VU,-,LT,LA,-,-) - - - this.$ = { type: 'AngleValue', value: parseFloat(yyvstack[yysp]), unit: /[a-z]+/i.exec(yyvstack[yysp])[0], source: { start: { index: yylstack[yysp].range[0] }, end: { index: yylstack[yysp].range[1] } } }; - break; - -case 17: - /*! Production:: css_value : TIME */ - - // default action (generated by JISON mode classic/merge :: 1,VT,VA,VU,-,LT,LA,-,-): - this._$ = yylstack[yysp]; - // END of default action (generated by JISON mode classic/merge :: 1,VT,VA,VU,-,LT,LA,-,-) - - - this.$ = { type: 'TimeValue', value: parseFloat(yyvstack[yysp]), unit: /[a-z]+/i.exec(yyvstack[yysp])[0], source: { start: { index: yylstack[yysp].range[0] }, end: { index: yylstack[yysp].range[1] } } }; - break; - -case 18: - /*! Production:: css_value : FREQ */ - - // default action (generated by JISON mode classic/merge :: 1,VT,VA,VU,-,LT,LA,-,-): - this._$ = yylstack[yysp]; - // END of default action (generated by JISON mode classic/merge :: 1,VT,VA,VU,-,LT,LA,-,-) - - - this.$ = { type: 'FrequencyValue', value: parseFloat(yyvstack[yysp]), unit: /[a-z]+/i.exec(yyvstack[yysp])[0], source: { start: { index: yylstack[yysp].range[0] }, end: { index: yylstack[yysp].range[1] } } }; - break; - -case 19: - /*! Production:: css_value : RES */ - - // default action (generated by JISON mode classic/merge :: 1,VT,VA,VU,-,LT,LA,-,-): - this._$ = yylstack[yysp]; - // END of default action (generated by JISON mode classic/merge :: 1,VT,VA,VU,-,LT,LA,-,-) - - - this.$ = { type: 'ResolutionValue', value: parseFloat(yyvstack[yysp]), unit: /[a-z]+/i.exec(yyvstack[yysp])[0], source: { start: { index: yylstack[yysp].range[0] }, end: { index: yylstack[yysp].range[1] } } }; - break; - -case 20: - /*! Production:: css_value : PERCENTAGE */ - - // default action (generated by JISON mode classic/merge :: 1,VT,VA,VU,-,LT,LA,-,-): - this._$ = yylstack[yysp]; - // END of default action (generated by JISON mode classic/merge :: 1,VT,VA,VU,-,LT,LA,-,-) - - - this.$ = { type: 'PercentageValue', value: parseFloat(yyvstack[yysp]), unit: '%', source: { start: { index: yylstack[yysp].range[0] }, end: { index: yylstack[yysp].range[1] } } }; - break; - -case 21: - /*! Production:: css_value : UNKNOWN */ - - // default action (generated by JISON mode classic/merge :: 1,VT,VA,VU,-,LT,LA,-,-): - this._$ = yylstack[yysp]; - // END of default action (generated by JISON mode classic/merge :: 1,VT,VA,VU,-,LT,LA,-,-) - - - this.$ = { type: 'UnknownValue', value: yyvstack[yysp], unit: '', source: { start: { index: yylstack[yysp].range[0] }, end: { index: yylstack[yysp].range[1] } } }; - break; - -} -}, -table: bt({ - len: u([ - 18, - 1, - 5, - 1, - s, - [17, 3], - s, - [0, 13], - s, - [17, 5], - 0, - 0, - 5, - 6, - 6, - c, - [5, 3], - 0, - 0 -]), - symbol: u([ - 3, - 4, - 6, - 7, - s, - [10, 14, 1], - 1, - 1, - s, - [6, 4, 1], - 4, - c, - [25, 13], - c, - [24, 4], - c, - [17, 119], - s, - [5, 5, 1], - 1, - c, - [6, 11], - c, - [5, 5] -]), - type: u([ - s, - [2, 13], - s, - [0, 5], - 1, - s, - [2, 19], - s, - [0, 4], - c, - [17, 132], - s, - [2, 9] -]), - state: u([ - 1, - 2, - 9, - 7, - 8, - 25, - c, - [4, 3], - 26, - c, - [4, 3], - 27, - c, - [4, 3], - 28, - c, - [4, 3], - 29, - c, - [4, 3], - 30, - c, - [4, 3], - 31, - c, - [4, 3], - 32, - c, - [4, 3] -]), - mode: u([ - s, - [1, 128], - s, - [2, 4], - c, - [6, 8], - s, - [1, 5] -]), - goto: u([ - 3, - 6, - 5, - 4, - 18, - s, - [10, 8, 1], - s, - [19, 6, 1], - c, - [19, 13], - c, - [13, 91], - 33, - c, - [110, 4], - s, - [3, 4], - 22, - 23, - s, - [4, 4], - 22, - 23, - 34, - c, - [17, 4] -]) -}), -defaultActions: bda({ - idx: u([ - s, - [7, 13, 1], - 25, - 26, - 30, - 31, - 33, - 34 -]), - goto: u([ - 10, - 11, - 12, - s, - [14, 8, 1], - 13, - 1, - 7, - 8, - 5, - 6, - 9, - 2 -]) -}), -parseError: function parseError(str, hash, ExceptionClass) { - if (hash.recoverable) { - if (typeof this.trace === 'function') { - this.trace(str); - } - hash.destroy(); // destroy... well, *almost*! - } else { - if (typeof this.trace === 'function') { - this.trace(str); - } - if (!ExceptionClass) { - ExceptionClass = this.JisonParserError; - } - throw new ExceptionClass(str, hash); - } -}, -parse: function parse(input) { - var self = this; - var stack = new Array(128); // token stack: stores token which leads to state at the same index (column storage) - var sstack = new Array(128); // state stack: stores states (column storage) - - var vstack = new Array(128); // semantic value stack - var lstack = new Array(128); // location stack - var table = this.table; - var sp = 0; // 'stack pointer': index into the stacks - var yyloc; - - - - - var symbol = 0; - - - - var TERROR = this.TERROR; - var EOF = this.EOF; - var ERROR_RECOVERY_TOKEN_DISCARD_COUNT = (this.options.errorRecoveryTokenDiscardCount | 0) || 3; - var NO_ACTION = [0, 35 /* === table.length :: ensures that anyone using this new state will fail dramatically! */]; - - var lexer; - if (this.__lexer__) { - lexer = this.__lexer__; - } else { - lexer = this.__lexer__ = Object.create(this.lexer); - } - - var sharedState_yy = { - parseError: undefined, - quoteName: undefined, - lexer: undefined, - parser: undefined, - pre_parse: undefined, - post_parse: undefined, - pre_lex: undefined, - post_lex: undefined // WARNING: must be written this way for the code expanders to work correctly in both ES5 and ES6 modes! - }; - - var ASSERT; - if (typeof assert !== 'function') { - ASSERT = function JisonAssert(cond, msg) { - if (!cond) { - throw new Error('assertion failed: ' + (msg || '***')); - } - }; - } else { - ASSERT = assert; - } - - this.yyGetSharedState = function yyGetSharedState() { - return sharedState_yy; - }; - - - // shallow clone objects, straight copy of simple `src` values - // e.g. `lexer.yytext` MAY be a complex value object, - // rather than a simple string/value. - function shallow_copy(src) { - if (typeof src === 'object') { - var dst = {}; - for (var k in src) { - if (Object.prototype.hasOwnProperty.call(src, k)) { - dst[k] = src[k]; - } - } - return dst; - } - return src; - } - function shallow_copy_noclobber(dst, src) { - for (var k in src) { - if (typeof dst[k] === 'undefined' && Object.prototype.hasOwnProperty.call(src, k)) { - dst[k] = src[k]; - } - } - } - function copy_yylloc(loc) { - var rv = shallow_copy(loc); - if (rv && rv.range) { - rv.range = rv.range.slice(0); - } - return rv; - } - - // copy state - shallow_copy_noclobber(sharedState_yy, this.yy); - - sharedState_yy.lexer = lexer; - sharedState_yy.parser = this; - - - - - - - // Does the shared state override the default `parseError` that already comes with this instance? - if (typeof sharedState_yy.parseError === 'function') { - this.parseError = function parseErrorAlt(str, hash, ExceptionClass) { - if (!ExceptionClass) { - ExceptionClass = this.JisonParserError; - } - return sharedState_yy.parseError.call(this, str, hash, ExceptionClass); - }; - } else { - this.parseError = this.originalParseError; - } - - // Does the shared state override the default `quoteName` that already comes with this instance? - if (typeof sharedState_yy.quoteName === 'function') { - this.quoteName = function quoteNameAlt(id_str) { - return sharedState_yy.quoteName.call(this, id_str); - }; - } else { - this.quoteName = this.originalQuoteName; - } - - // set up the cleanup function; make it an API so that external code can re-use this one in case of - // calamities or when the `%options no-try-catch` option has been specified for the grammar, in which - // case this parse() API method doesn't come with a `finally { ... }` block any more! - // - // NOTE: as this API uses parse() as a closure, it MUST be set again on every parse() invocation, - // or else your `sharedState`, etc. references will be *wrong*! - this.cleanupAfterParse = function parser_cleanupAfterParse(resultValue, invoke_post_methods, do_not_nuke_errorinfos) { - var rv; - - if (invoke_post_methods) { - var hash; - - if (sharedState_yy.post_parse || this.post_parse) { - // create an error hash info instance: we re-use this API in a **non-error situation** - // as this one delivers all parser internals ready for access by userland code. - hash = this.constructParseErrorInfo(null /* no error! */, null /* no exception! */, null, false); - } - - if (sharedState_yy.post_parse) { - rv = sharedState_yy.post_parse.call(this, sharedState_yy, resultValue, hash); - if (typeof rv !== 'undefined') resultValue = rv; - } - if (this.post_parse) { - rv = this.post_parse.call(this, sharedState_yy, resultValue, hash); - if (typeof rv !== 'undefined') resultValue = rv; - } - - // cleanup: - if (hash && hash.destroy) { - hash.destroy(); - } - } - - if (this.__reentrant_call_depth > 1) return resultValue; // do not (yet) kill the sharedState when this is a reentrant run. - - // clean up the lingering lexer structures as well: - if (lexer.cleanupAfterLex) { - lexer.cleanupAfterLex(do_not_nuke_errorinfos); - } - - // prevent lingering circular references from causing memory leaks: - if (sharedState_yy) { - sharedState_yy.lexer = undefined; - sharedState_yy.parser = undefined; - if (lexer.yy === sharedState_yy) { - lexer.yy = undefined; - } - } - sharedState_yy = undefined; - this.parseError = this.originalParseError; - this.quoteName = this.originalQuoteName; - - // nuke the vstack[] array at least as that one will still reference obsoleted user values. - // To be safe, we nuke the other internal stack columns as well... - stack.length = 0; // fastest way to nuke an array without overly bothering the GC - sstack.length = 0; - lstack.length = 0; - vstack.length = 0; - sp = 0; - - // nuke the error hash info instances created during this run. - // Userland code must COPY any data/references - // in the error hash instance(s) it is more permanently interested in. - if (!do_not_nuke_errorinfos) { - for (var i = this.__error_infos.length - 1; i >= 0; i--) { - var el = this.__error_infos[i]; - if (el && typeof el.destroy === 'function') { - el.destroy(); - } - } - this.__error_infos.length = 0; - - - } - - return resultValue; - }; - - // merge yylloc info into a new yylloc instance. - // - // `first_index` and `last_index` MAY be UNDEFINED/NULL or these are indexes into the `lstack[]` location stack array. - // - // `first_yylloc` and `last_yylloc` MAY be UNDEFINED/NULL or explicit (custom or regular) `yylloc` instances, in which - // case these override the corresponding first/last indexes. - // - // `dont_look_back` is an optional flag (default: FALSE), which instructs this merge operation NOT to search - // through the parse location stack for a location, which would otherwise be used to construct the new (epsilon!) - // yylloc info. - // - // Note: epsilon rule's yylloc situation is detected by passing both `first_index` and `first_yylloc` as UNDEFINED/NULL. - this.yyMergeLocationInfo = function parser_yyMergeLocationInfo(first_index, last_index, first_yylloc, last_yylloc, dont_look_back) { - var i1 = first_index | 0, - i2 = last_index | 0; - var l1 = first_yylloc, - l2 = last_yylloc; - var rv; - - // rules: - // - first/last yylloc entries override first/last indexes - - if (!l1) { - if (first_index != null) { - for (var i = i1; i <= i2; i++) { - l1 = lstack[i]; - if (l1) { - break; - } - } - } - } - - if (!l2) { - if (last_index != null) { - for (var i = i2; i >= i1; i--) { - l2 = lstack[i]; - if (l2) { - break; - } - } - } - } - - // - detect if an epsilon rule is being processed and act accordingly: - if (!l1 && first_index == null) { - // epsilon rule span merger. With optional look-ahead in l2. - if (!dont_look_back) { - for (var i = (i1 || sp) - 1; i >= 0; i--) { - l1 = lstack[i]; - if (l1) { - break; - } - } - } - if (!l1) { - if (!l2) { - // when we still don't have any valid yylloc info, we're looking at an epsilon rule - // without look-ahead and no preceding terms and/or `dont_look_back` set: - // in that case we ca do nothing but return NULL/UNDEFINED: - return undefined; - } else { - // shallow-copy L2: after all, we MAY be looking - // at unconventional yylloc info objects... - rv = shallow_copy(l2); - if (rv.range) { - // shallow copy the yylloc ranges info to prevent us from modifying the original arguments' entries: - rv.range = rv.range.slice(0); - } - return rv; - } - } else { - // shallow-copy L1, then adjust first col/row 1 column past the end. - rv = shallow_copy(l1); - rv.first_line = rv.last_line; - rv.first_column = rv.last_column; - if (rv.range) { - // shallow copy the yylloc ranges info to prevent us from modifying the original arguments' entries: - rv.range = rv.range.slice(0); - rv.range[0] = rv.range[1]; - } - - if (l2) { - // shallow-mixin L2, then adjust last col/row accordingly. - shallow_copy_noclobber(rv, l2); - rv.last_line = l2.last_line; - rv.last_column = l2.last_column; - if (rv.range && l2.range) { - rv.range[1] = l2.range[1]; - } - } - return rv; - } - } - - if (!l1) { - l1 = l2; - l2 = null; - } - if (!l1) { - return undefined; - } - - // shallow-copy L1|L2, before we try to adjust the yylloc values: after all, we MAY be looking - // at unconventional yylloc info objects... - rv = shallow_copy(l1); - - // first_line: ..., - // first_column: ..., - // last_line: ..., - // last_column: ..., - if (rv.range) { - // shallow copy the yylloc ranges info to prevent us from modifying the original arguments' entries: - rv.range = rv.range.slice(0); - } - - if (l2) { - shallow_copy_noclobber(rv, l2); - rv.last_line = l2.last_line; - rv.last_column = l2.last_column; - if (rv.range && l2.range) { - rv.range[1] = l2.range[1]; - } - } - - return rv; - }; - - // NOTE: as this API uses parse() as a closure, it MUST be set again on every parse() invocation, - // or else your `lexer`, `sharedState`, etc. references will be *wrong*! - this.constructParseErrorInfo = function parser_constructParseErrorInfo(msg, ex, expected, recoverable) { - var pei = { - errStr: msg, - exception: ex, - text: lexer.match, - value: lexer.yytext, - token: this.describeSymbol(symbol) || symbol, - token_id: symbol, - line: lexer.yylineno, - loc: copy_yylloc(lexer.yylloc), - expected: expected, - recoverable: recoverable, - state: state, - action: action, - new_state: newState, - symbol_stack: stack, - state_stack: sstack, - value_stack: vstack, - location_stack: lstack, - stack_pointer: sp, - yy: sharedState_yy, - lexer: lexer, - parser: this, - - // and make sure the error info doesn't stay due to potential - // ref cycle via userland code manipulations. - // These would otherwise all be memory leak opportunities! - // - // Note that only array and object references are nuked as those - // constitute the set of elements which can produce a cyclic ref. - // The rest of the members is kept intact as they are harmless. - destroy: function destructParseErrorInfo() { - // remove cyclic references added to error info: - // info.yy = null; - // info.lexer = null; - // info.value = null; - // info.value_stack = null; - // ... - var rec = !!this.recoverable; - for (var key in this) { - if (this.hasOwnProperty(key) && typeof key === 'object') { - this[key] = undefined; - } - } - this.recoverable = rec; - } - }; - // track this instance so we can `destroy()` it once we deem it superfluous and ready for garbage collection! - this.__error_infos.push(pei); - return pei; - }; - - - - - - - - - - - - - - function getNonTerminalFromCode(symbol) { - var tokenName = self.getSymbolName(symbol); - if (!tokenName) { - tokenName = symbol; - } - return tokenName; - } - - - function stdLex() { - var token = lexer.lex(); - // if token isn't its numeric value, convert - if (typeof token !== 'number') { - token = self.symbols_[token] || token; - } - - return token || EOF; - } - - function fastLex() { - var token = lexer.fastLex(); - // if token isn't its numeric value, convert - if (typeof token !== 'number') { - token = self.symbols_[token] || token; - } - - return token || EOF; - } - - var lex = stdLex; - - - var state, action, r, t; - var yyval = { - $: true, - _$: undefined, - yy: sharedState_yy - }; - var p; - var yyrulelen; - var this_production; - var newState; - var retval = false; - - - try { - this.__reentrant_call_depth++; - - lexer.setInput(input, sharedState_yy); - - // NOTE: we *assume* no lexer pre/post handlers are set up *after* - // this initial `setInput()` call: hence we can now check and decide - // whether we'll go with the standard, slower, lex() API or the - // `fast_lex()` one: - if (typeof lexer.canIUse === 'function') { - var lexerInfo = lexer.canIUse(); - if (lexerInfo.fastLex && typeof fastLex === 'function') { - lex = fastLex; - } - } - - yyloc = lexer.yylloc; - lstack[sp] = yyloc; - vstack[sp] = null; - sstack[sp] = 0; - stack[sp] = 0; - ++sp; - - - - - - if (this.pre_parse) { - this.pre_parse.call(this, sharedState_yy); - } - if (sharedState_yy.pre_parse) { - sharedState_yy.pre_parse.call(this, sharedState_yy); - } - - newState = sstack[sp - 1]; - for (;;) { - // retrieve state number from top of stack - state = newState; // sstack[sp - 1]; - - // use default actions if available - if (this.defaultActions[state]) { - action = 2; - newState = this.defaultActions[state]; - } else { - // The single `==` condition below covers both these `===` comparisons in a single - // operation: - // - // if (symbol === null || typeof symbol === 'undefined') ... - if (!symbol) { - symbol = lex(); - } - // read action for current state and first input - t = (table[state] && table[state][symbol]) || NO_ACTION; - newState = t[1]; - action = t[0]; - - - - - - - - - - - - // handle parse error - if (!action) { - var errStr; - var errSymbolDescr = (this.describeSymbol(symbol) || symbol); - var expected = this.collect_expected_token_set(state); - - // Report error - if (typeof lexer.yylineno === 'number') { - errStr = 'Parse error on line ' + (lexer.yylineno + 1) + ': '; - } else { - errStr = 'Parse error: '; - } - if (typeof lexer.showPosition === 'function') { - errStr += '\n' + lexer.showPosition(79 - 10, 10) + '\n'; - } - if (expected.length) { - errStr += 'Expecting ' + expected.join(', ') + ', got unexpected ' + errSymbolDescr; - } else { - errStr += 'Unexpected ' + errSymbolDescr; - } - // we cannot recover from the error! - p = this.constructParseErrorInfo(errStr, null, expected, false); - r = this.parseError(p.errStr, p, this.JisonParserError); - if (typeof r !== 'undefined') { - retval = r; - } - break; - } - - - } - - - - - - - - - - - switch (action) { - // catch misc. parse failures: - default: - // this shouldn't happen, unless resolve defaults are off - if (action instanceof Array) { - p = this.constructParseErrorInfo('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol, null, null, false); - r = this.parseError(p.errStr, p, this.JisonParserError); - if (typeof r !== 'undefined') { - retval = r; - } - break; - } - // Another case of better safe than sorry: in case state transitions come out of another error recovery process - // or a buggy LUT (LookUp Table): - p = this.constructParseErrorInfo('Parsing halted. No viable error recovery approach available due to internal system failure.', null, null, false); - r = this.parseError(p.errStr, p, this.JisonParserError); - if (typeof r !== 'undefined') { - retval = r; - } - break; - - // shift: - case 1: - stack[sp] = symbol; - vstack[sp] = lexer.yytext; - lstack[sp] = copy_yylloc(lexer.yylloc); - sstack[sp] = newState; // push state - - ++sp; - symbol = 0; - - - - - // Pick up the lexer details for the current symbol as that one is not 'look-ahead' any more: - - - - yyloc = lexer.yylloc; - continue; - - // reduce: - case 2: - - - - this_production = this.productions_[newState - 1]; // `this.productions_[]` is zero-based indexed while states start from 1 upwards... - yyrulelen = this_production[1]; - - - - - - - - - - - r = this.performAction.call(yyval, yyloc, newState, sp - 1, vstack, lstack); - - if (typeof r !== 'undefined') { - retval = r; - break; - } - - // pop off stack - sp -= yyrulelen; - - // don't overwrite the `symbol` variable: use a local var to speed things up: - var ntsymbol = this_production[0]; // push nonterminal (reduce) - stack[sp] = ntsymbol; - vstack[sp] = yyval.$; - lstack[sp] = yyval._$; - // goto new state = table[STATE][NONTERMINAL] - newState = table[sstack[sp - 1]][ntsymbol]; - sstack[sp] = newState; - ++sp; - - - - - - - - - - continue; - - // accept: - case 3: - if (sp !== -2) { - retval = true; - // Return the `$accept` rule's `$$` result, if available. - // - // Also note that JISON always adds this top-most `$accept` rule (with implicit, - // default, action): - // - // $accept: $end - // %{ $$ = $1; @$ = @1; %} - // - // which, combined with the parse kernel's `$accept` state behaviour coded below, - // will produce the `$$` value output of the rule as the parse result, - // IFF that result is *not* `undefined`. (See also the parser kernel code.) - // - // In code: - // - // %{ - // @$ = @1; // if location tracking support is included - // if (typeof $1 !== 'undefined') - // return $1; - // else - // return true; // the default parse result if the rule actions don't produce anything - // %} - sp--; - if (typeof vstack[sp] !== 'undefined') { - retval = vstack[sp]; - } - } - break; - } - - // break out of loop: we accept or fail with error - break; - } - } catch (ex) { - // report exceptions through the parseError callback too, but keep the exception intact - // if it is a known parser or lexer error which has been thrown by parseError() already: - if (ex instanceof this.JisonParserError) { - throw ex; - } - else if (lexer && typeof lexer.JisonLexerError === 'function' && ex instanceof lexer.JisonLexerError) { - throw ex; - } - - p = this.constructParseErrorInfo('Parsing aborted due to exception.', ex, null, false); - retval = false; - r = this.parseError(p.errStr, p, this.JisonParserError); - if (typeof r !== 'undefined') { - retval = r; - } - } finally { - retval = this.cleanupAfterParse(retval, true, true); - this.__reentrant_call_depth--; - } // /finally - - return retval; -} -}; -parser.originalParseError = parser.parseError; -parser.originalQuoteName = parser.quoteName; -/* lexer generated by jison-lex 0.6.1-215 */ - -/* - * Returns a Lexer object of the following structure: - * - * Lexer: { - * yy: {} The so-called "shared state" or rather the *source* of it; - * the real "shared state" `yy` passed around to - * the rule actions, etc. is a direct reference! - * - * This "shared context" object was passed to the lexer by way of - * the `lexer.setInput(str, yy)` API before you may use it. - * - * This "shared context" object is passed to the lexer action code in `performAction()` - * so userland code in the lexer actions may communicate with the outside world - * and/or other lexer rules' actions in more or less complex ways. - * - * } - * - * Lexer.prototype: { - * EOF: 1, - * ERROR: 2, - * - * yy: The overall "shared context" object reference. - * - * JisonLexerError: function(msg, hash), - * - * performAction: function lexer__performAction(yy, yyrulenumber, YY_START), - * - * The function parameters and `this` have the following value/meaning: - * - `this` : reference to the `lexer` instance. - * `yy_` is an alias for `this` lexer instance reference used internally. - * - * - `yy` : a reference to the `yy` "shared state" object which was passed to the lexer - * by way of the `lexer.setInput(str, yy)` API before. - * - * Note: - * The extra arguments you specified in the `%parse-param` statement in your - * **parser** grammar definition file are passed to the lexer via this object - * reference as member variables. - * - * - `yyrulenumber` : index of the matched lexer rule (regex), used internally. - * - * - `YY_START`: the current lexer "start condition" state. - * - * parseError: function(str, hash, ExceptionClass), - * - * constructLexErrorInfo: function(error_message, is_recoverable), - * Helper function. - * Produces a new errorInfo 'hash object' which can be passed into `parseError()`. - * See it's use in this lexer kernel in many places; example usage: - * - * var infoObj = lexer.constructParseErrorInfo('fail!', true); - * var retVal = lexer.parseError(infoObj.errStr, infoObj, lexer.JisonLexerError); - * - * options: { ... lexer %options ... }, - * - * lex: function(), - * Produce one token of lexed input, which was passed in earlier via the `lexer.setInput()` API. - * You MAY use the additional `args...` parameters as per `%parse-param` spec of the **lexer** grammar: - * these extra `args...` are added verbatim to the `yy` object reference as member variables. - * - * WARNING: - * Lexer's additional `args...` parameters (via lexer's `%parse-param`) MAY conflict with - * any attributes already added to `yy` by the **parser** or the jison run-time; - * when such a collision is detected an exception is thrown to prevent the generated run-time - * from silently accepting this confusing and potentially hazardous situation! - * - * cleanupAfterLex: function(do_not_nuke_errorinfos), - * Helper function. - * - * This helper API is invoked when the **parse process** has completed: it is the responsibility - * of the **parser** (or the calling userland code) to invoke this method once cleanup is desired. - * - * This helper may be invoked by user code to ensure the internal lexer gets properly garbage collected. - * - * setInput: function(input, [yy]), - * - * - * input: function(), - * - * - * unput: function(str), - * - * - * more: function(), - * - * - * reject: function(), - * - * - * less: function(n), - * - * - * pastInput: function(n), - * - * - * upcomingInput: function(n), - * - * - * showPosition: function(), - * - * - * test_match: function(regex_match_array, rule_index), - * - * - * next: function(), - * - * - * begin: function(condition), - * - * - * pushState: function(condition), - * - * - * popState: function(), - * - * - * topState: function(), - * - * - * _currentRules: function(), - * - * - * stateStackSize: function(), - * - * - * performAction: function(yy, yy_, yyrulenumber, YY_START), - * - * - * rules: [...], - * - * - * conditions: {associative list: name ==> set}, - * } - * - * - * token location info (`yylloc`): { - * first_line: n, - * last_line: n, - * first_column: n, - * last_column: n, - * range: [start_number, end_number] - * (where the numbers are indexes into the input string, zero-based) - * } - * - * --- - * - * The `parseError` function receives a 'hash' object with these members for lexer errors: - * - * { - * text: (matched text) - * token: (the produced terminal token, if any) - * token_id: (the produced terminal token numeric ID, if any) - * line: (yylineno) - * loc: (yylloc) - * recoverable: (boolean: TRUE when the parser MAY have an error recovery rule - * available for this particular error) - * yy: (object: the current parser internal "shared state" `yy` - * as is also available in the rule actions; this can be used, - * for instance, for advanced error analysis and reporting) - * lexer: (reference to the current lexer instance used by the parser) - * } - * - * while `this` will reference the current lexer instance. - * - * When `parseError` is invoked by the lexer, the default implementation will - * attempt to invoke `yy.parser.parseError()`; when this callback is not provided - * it will try to invoke `yy.parseError()` instead. When that callback is also not - * provided, a `JisonLexerError` exception will be thrown containing the error - * message and `hash`, as constructed by the `constructLexErrorInfo()` API. - * - * Note that the lexer's `JisonLexerError` error class is passed via the - * `ExceptionClass` argument, which is invoked to construct the exception - * instance to be thrown, so technically `parseError` will throw the object - * produced by the `new ExceptionClass(str, hash)` JavaScript expression. - * - * --- - * - * You can specify lexer options by setting / modifying the `.options` object of your Lexer instance. - * These options are available: - * - * (Options are permanent.) - * - * yy: { - * parseError: function(str, hash, ExceptionClass) - * optional: overrides the default `parseError` function. - * } - * - * lexer.options: { - * pre_lex: function() - * optional: is invoked before the lexer is invoked to produce another token. - * `this` refers to the Lexer object. - * post_lex: function(token) { return token; } - * optional: is invoked when the lexer has produced a token `token`; - * this function can override the returned token value by returning another. - * When it does not return any (truthy) value, the lexer will return - * the original `token`. - * `this` refers to the Lexer object. - * - * WARNING: the next set of options are not meant to be changed. They echo the abilities of - * the lexer as per when it was compiled! - * - * ranges: boolean - * optional: `true` ==> token location info will include a .range[] member. - * flex: boolean - * optional: `true` ==> flex-like lexing behaviour where the rules are tested - * exhaustively to find the longest match. - * backtrack_lexer: boolean - * optional: `true` ==> lexer regexes are tested in order and for invoked; - * the lexer terminates the scan when a token is returned by the action code. - * xregexp: boolean - * optional: `true` ==> lexer rule regexes are "extended regex format" requiring the - * `XRegExp` library. When this %option has not been specified at compile time, all lexer - * rule regexes have been written as standard JavaScript RegExp expressions. - * } - */ - - -var lexer = function() { - /** - * See also: - * http://stackoverflow.com/questions/1382107/whats-a-good-way-to-extend-error-in-javascript/#35881508 - * but we keep the prototype.constructor and prototype.name assignment lines too for compatibility - * with userland code which might access the derived class in a 'classic' way. - * - * @public - * @constructor - * @nocollapse - */ - function JisonLexerError(msg, hash) { - Object.defineProperty(this, 'name', { - enumerable: false, - writable: false, - value: 'JisonLexerError' - }); - - if (msg == null) - msg = '???'; - - Object.defineProperty(this, 'message', { - enumerable: false, - writable: true, - value: msg - }); - - this.hash = hash; - var stacktrace; - - if (hash && hash.exception instanceof Error) { - var ex2 = hash.exception; - this.message = ex2.message || msg; - stacktrace = ex2.stack; - } - - if (!stacktrace) { - if (Error.hasOwnProperty('captureStackTrace')) { - // V8 - Error.captureStackTrace(this, this.constructor); - } else { - stacktrace = new Error(msg).stack; - } - } - - if (stacktrace) { - Object.defineProperty(this, 'stack', { - enumerable: false, - writable: false, - value: stacktrace - }); - } - } - - if (typeof Object.setPrototypeOf === 'function') { - Object.setPrototypeOf(JisonLexerError.prototype, Error.prototype); - } else { - JisonLexerError.prototype = Object.create(Error.prototype); - } - - JisonLexerError.prototype.constructor = JisonLexerError; - JisonLexerError.prototype.name = 'JisonLexerError'; - - var lexer = { - -// Code Generator Information Report -// --------------------------------- -// -// Options: -// -// backtracking: .................... false -// location.ranges: ................. false -// location line+column tracking: ... true -// -// -// Forwarded Parser Analysis flags: -// -// uses yyleng: ..................... false -// uses yylineno: ................... false -// uses yytext: ..................... false -// uses yylloc: ..................... false -// uses lexer values: ............... true / true -// location tracking: ............... true -// location assignment: ............. true -// -// -// Lexer Analysis flags: -// -// uses yyleng: ..................... ??? -// uses yylineno: ................... ??? -// uses yytext: ..................... ??? -// uses yylloc: ..................... ??? -// uses ParseError API: ............. ??? -// uses yyerror: .................... ??? -// uses location tracking & editing: ??? -// uses more() API: ................. ??? -// uses unput() API: ................ ??? -// uses reject() API: ............... ??? -// uses less() API: ................. ??? -// uses display APIs pastInput(), upcomingInput(), showPosition(): -// ............................. ??? -// uses describeYYLLOC() API: ....... ??? -// -// --------- END OF REPORT ----------- - -EOF: 1, - ERROR: 2, - - // JisonLexerError: JisonLexerError, /// <-- injected by the code generator - - // options: {}, /// <-- injected by the code generator - - // yy: ..., /// <-- injected by setInput() - - __currentRuleSet__: null, /// INTERNAL USE ONLY: internal rule set cache for the current lexer state - - __error_infos: [], /// INTERNAL USE ONLY: the set of lexErrorInfo objects created since the last cleanup - __decompressed: false, /// INTERNAL USE ONLY: mark whether the lexer instance has been 'unfolded' completely and is now ready for use - done: false, /// INTERNAL USE ONLY - _backtrack: false, /// INTERNAL USE ONLY - _input: '', /// INTERNAL USE ONLY - _more: false, /// INTERNAL USE ONLY - _signaled_error_token: false, /// INTERNAL USE ONLY - conditionStack: [], /// INTERNAL USE ONLY; managed via `pushState()`, `popState()`, `topState()` and `stateStackSize()` - match: '', /// READ-ONLY EXTERNAL ACCESS - ADVANCED USE ONLY: tracks input which has been matched so far for the lexer token under construction. `match` is identical to `yytext` except that this one still contains the matched input string after `lexer.performAction()` has been invoked, where userland code MAY have changed/replaced the `yytext` value entirely! - matched: '', /// READ-ONLY EXTERNAL ACCESS - ADVANCED USE ONLY: tracks entire input which has been matched so far - matches: false, /// READ-ONLY EXTERNAL ACCESS - ADVANCED USE ONLY: tracks RE match result for last (successful) match attempt - yytext: '', /// ADVANCED USE ONLY: tracks input which has been matched so far for the lexer token under construction; this value is transferred to the parser as the 'token value' when the parser consumes the lexer token produced through a call to the `lex()` API. - offset: 0, /// READ-ONLY EXTERNAL ACCESS - ADVANCED USE ONLY: tracks the 'cursor position' in the input string, i.e. the number of characters matched so far - yyleng: 0, /// READ-ONLY EXTERNAL ACCESS - ADVANCED USE ONLY: length of matched input for the token under construction (`yytext`) - yylineno: 0, /// READ-ONLY EXTERNAL ACCESS - ADVANCED USE ONLY: 'line number' at which the token under construction is located - yylloc: null, /// READ-ONLY EXTERNAL ACCESS - ADVANCED USE ONLY: tracks location info (lines + columns) for the token under construction - - /** - * INTERNAL USE: construct a suitable error info hash object instance for `parseError`. - * - * @public - * @this {RegExpLexer} - */ - constructLexErrorInfo: function lexer_constructLexErrorInfo(msg, recoverable, show_input_position) { - msg = '' + msg; - - // heuristic to determine if the error message already contains a (partial) source code dump - // as produced by either `showPosition()` or `prettyPrintRange()`: - if (show_input_position == undefined) { - show_input_position = !(msg.indexOf('\n') > 0 && msg.indexOf('^') > 0); - } - - if (this.yylloc && show_input_position) { - if (typeof this.prettyPrintRange === 'function') { - var pretty_src = this.prettyPrintRange(this.yylloc); - - if (!/\n\s*$/.test(msg)) { - msg += '\n'; - } - - msg += '\n Erroneous area:\n' + this.prettyPrintRange(this.yylloc); - } else if (typeof this.showPosition === 'function') { - var pos_str = this.showPosition(); - - if (pos_str) { - if (msg.length && msg[msg.length - 1] !== '\n' && pos_str[0] !== '\n') { - msg += '\n' + pos_str; - } else { - msg += pos_str; - } - } - } - } - - /** @constructor */ - var pei = { - errStr: msg, - recoverable: !!recoverable, - text: this.match, // This one MAY be empty; userland code should use the `upcomingInput` API to obtain more text which follows the 'lexer cursor position'... - token: null, - line: this.yylineno, - loc: this.yylloc, - yy: this.yy, - lexer: this, - - /** - * and make sure the error info doesn't stay due to potential - * ref cycle via userland code manipulations. - * These would otherwise all be memory leak opportunities! - * - * Note that only array and object references are nuked as those - * constitute the set of elements which can produce a cyclic ref. - * The rest of the members is kept intact as they are harmless. - * - * @public - * @this {LexErrorInfo} - */ - destroy: function destructLexErrorInfo() { - // remove cyclic references added to error info: - // info.yy = null; - // info.lexer = null; - // ... - var rec = !!this.recoverable; - - for (var key in this) { - if (this.hasOwnProperty(key) && typeof key === 'object') { - this[key] = undefined; - } - } - - this.recoverable = rec; - } - }; - - // track this instance so we can `destroy()` it once we deem it superfluous and ready for garbage collection! - this.__error_infos.push(pei); - - return pei; - }, - - /** - * handler which is invoked when a lexer error occurs. - * - * @public - * @this {RegExpLexer} - */ - parseError: function lexer_parseError(str, hash, ExceptionClass) { - if (!ExceptionClass) { - ExceptionClass = this.JisonLexerError; - } - - if (this.yy) { - if (this.yy.parser && typeof this.yy.parser.parseError === 'function') { - return this.yy.parser.parseError.call(this, str, hash, ExceptionClass) || this.ERROR; - } else if (typeof this.yy.parseError === 'function') { - return this.yy.parseError.call(this, str, hash, ExceptionClass) || this.ERROR; - } - } - - throw new ExceptionClass(str, hash); - }, - - /** - * method which implements `yyerror(str, ...args)` functionality for use inside lexer actions. - * - * @public - * @this {RegExpLexer} - */ - yyerror: function yyError(str /*, ...args */) { - var lineno_msg = ''; - - if (this.yylloc) { - lineno_msg = ' on line ' + (this.yylineno + 1); - } - - var p = this.constructLexErrorInfo( - 'Lexical error' + lineno_msg + ': ' + str, - this.options.lexerErrorsAreRecoverable - ); - - // Add any extra args to the hash under the name `extra_error_attributes`: - var args = Array.prototype.slice.call(arguments, 1); - - if (args.length) { - p.extra_error_attributes = args; - } - - return this.parseError(p.errStr, p, this.JisonLexerError) || this.ERROR; - }, - - /** - * final cleanup function for when we have completed lexing the input; - * make it an API so that external code can use this one once userland - * code has decided it's time to destroy any lingering lexer error - * hash object instances and the like: this function helps to clean - * up these constructs, which *may* carry cyclic references which would - * otherwise prevent the instances from being properly and timely - * garbage-collected, i.e. this function helps prevent memory leaks! - * - * @public - * @this {RegExpLexer} - */ - cleanupAfterLex: function lexer_cleanupAfterLex(do_not_nuke_errorinfos) { - // prevent lingering circular references from causing memory leaks: - this.setInput('', {}); - - // nuke the error hash info instances created during this run. - // Userland code must COPY any data/references - // in the error hash instance(s) it is more permanently interested in. - if (!do_not_nuke_errorinfos) { - for (var i = this.__error_infos.length - 1; i >= 0; i--) { - var el = this.__error_infos[i]; - - if (el && typeof el.destroy === 'function') { - el.destroy(); - } - } - - this.__error_infos.length = 0; - } - - return this; - }, - - /** - * clear the lexer token context; intended for internal use only - * - * @public - * @this {RegExpLexer} - */ - clear: function lexer_clear() { - this.yytext = ''; - this.yyleng = 0; - this.match = ''; - - // - DO NOT reset `this.matched` - this.matches = false; - - this._more = false; - this._backtrack = false; - var col = (this.yylloc ? this.yylloc.last_column : 0); - - this.yylloc = { - first_line: this.yylineno + 1, - first_column: col, - last_line: this.yylineno + 1, - last_column: col, - range: [this.offset, this.offset] - }; - }, - - /** - * resets the lexer, sets new input - * - * @public - * @this {RegExpLexer} - */ - setInput: function lexer_setInput(input, yy) { - this.yy = yy || this.yy || {}; - - // also check if we've fully initialized the lexer instance, - // including expansion work to be done to go from a loaded - // lexer to a usable lexer: - if (!this.__decompressed) { - // step 1: decompress the regex list: - var rules = this.rules; - - for (var i = 0, len = rules.length; i < len; i++) { - var rule_re = rules[i]; - - // compression: is the RE an xref to another RE slot in the rules[] table? - if (typeof rule_re === 'number') { - rules[i] = rules[rule_re]; - } - } - - // step 2: unfold the conditions[] set to make these ready for use: - var conditions = this.conditions; - - for (var k in conditions) { - var spec = conditions[k]; - var rule_ids = spec.rules; - var len = rule_ids.length; - var rule_regexes = new Array(len + 1); // slot 0 is unused; we use a 1-based index approach here to keep the hottest code in `lexer_next()` fast and simple! - var rule_new_ids = new Array(len + 1); - - for (var i = 0; i < len; i++) { - var idx = rule_ids[i]; - var rule_re = rules[idx]; - rule_regexes[i + 1] = rule_re; - rule_new_ids[i + 1] = idx; - } - - spec.rules = rule_new_ids; - spec.__rule_regexes = rule_regexes; - spec.__rule_count = len; - } - - this.__decompressed = true; - } - - this._input = input || ''; - this.clear(); - this._signaled_error_token = false; - this.done = false; - this.yylineno = 0; - this.matched = ''; - this.conditionStack = ['INITIAL']; - this.__currentRuleSet__ = null; - - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0, - range: [0, 0] - }; - - this.offset = 0; - return this; - }, - - /** - * edit the remaining input via user-specified callback. - * This can be used to forward-adjust the input-to-parse, - * e.g. inserting macro expansions and alike in the - * input which has yet to be lexed. - * The behaviour of this API contrasts the `unput()` et al - * APIs as those act on the *consumed* input, while this - * one allows one to manipulate the future, without impacting - * the current `yyloc` cursor location or any history. - * - * Use this API to help implement C-preprocessor-like - * `#include` statements, etc. - * - * The provided callback must be synchronous and is - * expected to return the edited input (string). - * - * The `cpsArg` argument value is passed to the callback - * as-is. - * - * `callback` interface: - * `function callback(input, cpsArg)` - * - * - `input` will carry the remaining-input-to-lex string - * from the lexer. - * - `cpsArg` is `cpsArg` passed into this API. - * - * The `this` reference for the callback will be set to - * reference this lexer instance so that userland code - * in the callback can easily and quickly access any lexer - * API. - * - * When the callback returns a non-string-type falsey value, - * we assume the callback did not edit the input and we - * will using the input as-is. - * - * When the callback returns a non-string-type value, it - * is converted to a string for lexing via the `"" + retval` - * operation. (See also why: http://2ality.com/2012/03/converting-to-string.html - * -- that way any returned object's `toValue()` and `toString()` - * methods will be invoked in a proper/desirable order.) - * - * @public - * @this {RegExpLexer} - */ - editRemainingInput: function lexer_editRemainingInput(callback, cpsArg) { - var rv = callback.call(this, this._input, cpsArg); - - if (typeof rv !== 'string') { - if (rv) { - this._input = '' + rv; - } - // else: keep `this._input` as is. - } else { - this._input = rv; - } - - return this; - }, - - /** - * consumes and returns one char from the input - * - * @public - * @this {RegExpLexer} - */ - input: function lexer_input() { - if (!this._input) { - //this.done = true; -- don't set `done` as we want the lex()/next() API to be able to produce one custom EOF token match after this anyhow. (lexer can match special <> tokens and perform user action code for a <> match, but only does so *once*) - return null; - } - - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - - // Count the linenumber up when we hit the LF (or a stand-alone CR). - // On CRLF, the linenumber is incremented when you fetch the CR or the CRLF combo - // and we advance immediately past the LF as well, returning both together as if - // it was all a single 'character' only. - var slice_len = 1; - - var lines = false; - - if (ch === '\n') { - lines = true; - } else if (ch === '\r') { - lines = true; - var ch2 = this._input[1]; - - if (ch2 === '\n') { - slice_len++; - ch += ch2; - this.yytext += ch2; - this.yyleng++; - this.offset++; - this.match += ch2; - this.matched += ch2; - this.yylloc.range[1]++; - } - } - - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - this.yylloc.last_column = 0; - } else { - this.yylloc.last_column++; - } - - this.yylloc.range[1]++; - this._input = this._input.slice(slice_len); - return ch; - }, - - /** - * unshifts one char (or an entire string) into the input - * - * @public - * @this {RegExpLexer} - */ - unput: function lexer_unput(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - this.yyleng = this.yytext.length; - this.offset -= len; - this.match = this.match.substr(0, this.match.length - len); - this.matched = this.matched.substr(0, this.matched.length - len); - - if (lines.length > 1) { - this.yylineno -= lines.length - 1; - this.yylloc.last_line = this.yylineno + 1; - - // Get last entirely matched line into the `pre_lines[]` array's - // last index slot; we don't mind when other previously - // matched lines end up in the array too. - var pre = this.match; - - var pre_lines = pre.split(/(?:\r\n?|\n)/g); - - if (pre_lines.length === 1) { - pre = this.matched; - pre_lines = pre.split(/(?:\r\n?|\n)/g); - } - - this.yylloc.last_column = pre_lines[pre_lines.length - 1].length; - } else { - this.yylloc.last_column -= len; - } - - this.yylloc.range[1] = this.yylloc.range[0] + this.yyleng; - this.done = false; - return this; - }, - - /** - * cache matched text and append it on next action - * - * @public - * @this {RegExpLexer} - */ - more: function lexer_more() { - this._more = true; - return this; - }, - - /** - * signal the lexer that this rule fails to match the input, so the - * next matching rule (regex) should be tested instead. - * - * @public - * @this {RegExpLexer} - */ - reject: function lexer_reject() { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - // when the `parseError()` call returns, we MUST ensure that the error is registered. - // We accomplish this by signaling an 'error' token to be produced for the current - // `.lex()` run. - var lineno_msg = ''; - - if (this.yylloc) { - lineno_msg = ' on line ' + (this.yylineno + 1); - } - - var p = this.constructLexErrorInfo( - 'Lexical error' + lineno_msg + ': You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).', - false - ); - - this._signaled_error_token = this.parseError(p.errStr, p, this.JisonLexerError) || this.ERROR; - } - - return this; - }, - - /** - * retain first n characters of the match - * - * @public - * @this {RegExpLexer} - */ - less: function lexer_less(n) { - return this.unput(this.match.slice(n)); - }, - - /** - * return (part of the) already matched input, i.e. for error - * messages. - * - * Limit the returned string length to `maxSize` (default: 20). - * - * Limit the returned string to the `maxLines` number of lines of - * input (default: 1). - * - * Negative limit values equal *unlimited*. - * - * @public - * @this {RegExpLexer} - */ - pastInput: function lexer_pastInput(maxSize, maxLines) { - var past = this.matched.substring(0, this.matched.length - this.match.length); - - if (maxSize < 0) - maxSize = past.length; - else if (!maxSize) - maxSize = 20; - - if (maxLines < 0) - maxLines = past.length; // can't ever have more input lines than this! - else if (!maxLines) - maxLines = 1; - - // `substr` anticipation: treat \r\n as a single character and take a little - // more than necessary so that we can still properly check against maxSize - // after we've transformed and limited the newLines in here: - past = past.substr(-maxSize * 2 - 2); - - // now that we have a significantly reduced string to process, transform the newlines - // and chop them, then limit them: - var a = past.replace(/\r\n|\r/g, '\n').split('\n'); - - a = a.slice(-maxLines); - past = a.join('\n'); - - // When, after limiting to maxLines, we still have too much to return, - // do add an ellipsis prefix... - if (past.length > maxSize) { - past = '...' + past.substr(-maxSize); - } - - return past; - }, - - /** - * return (part of the) upcoming input, i.e. for error messages. - * - * Limit the returned string length to `maxSize` (default: 20). - * - * Limit the returned string to the `maxLines` number of lines of input (default: 1). - * - * Negative limit values equal *unlimited*. - * - * > ### NOTE ### - * > - * > *"upcoming input"* is defined as the whole of the both - * > the *currently lexed* input, together with any remaining input - * > following that. *"currently lexed"* input is the input - * > already recognized by the lexer but not yet returned with - * > the lexer token. This happens when you are invoking this API - * > from inside any lexer rule action code block. - * > - * - * @public - * @this {RegExpLexer} - */ - upcomingInput: function lexer_upcomingInput(maxSize, maxLines) { - var next = this.match; - - if (maxSize < 0) - maxSize = next.length + this._input.length; - else if (!maxSize) - maxSize = 20; - - if (maxLines < 0) - maxLines = maxSize; // can't ever have more input lines than this! - else if (!maxLines) - maxLines = 1; - - // `substring` anticipation: treat \r\n as a single character and take a little - // more than necessary so that we can still properly check against maxSize - // after we've transformed and limited the newLines in here: - if (next.length < maxSize * 2 + 2) { - next += this._input.substring(0, maxSize * 2 + 2); // substring is faster on Chrome/V8 - } - - // now that we have a significantly reduced string to process, transform the newlines - // and chop them, then limit them: - var a = next.replace(/\r\n|\r/g, '\n').split('\n'); - - a = a.slice(0, maxLines); - next = a.join('\n'); - - // When, after limiting to maxLines, we still have too much to return, - // do add an ellipsis postfix... - if (next.length > maxSize) { - next = next.substring(0, maxSize) + '...'; - } - - return next; - }, - - /** - * return a string which displays the character position where the - * lexing error occurred, i.e. for error messages - * - * @public - * @this {RegExpLexer} - */ - showPosition: function lexer_showPosition(maxPrefix, maxPostfix) { - var pre = this.pastInput(maxPrefix).replace(/\s/g, ' '); - var c = new Array(pre.length + 1).join('-'); - return pre + this.upcomingInput(maxPostfix).replace(/\s/g, ' ') + '\n' + c + '^'; - }, - - /** - * return an YYLLOC info object derived off the given context (actual, preceding, following, current). - * Use this method when the given `actual` location is not guaranteed to exist (i.e. when - * it MAY be NULL) and you MUST have a valid location info object anyway: - * then we take the given context of the `preceding` and `following` locations, IFF those are available, - * and reconstruct the `actual` location info from those. - * If this fails, the heuristic is to take the `current` location, IFF available. - * If this fails as well, we assume the sought location is at/around the current lexer position - * and then produce that one as a response. DO NOTE that these heuristic/derived location info - * values MAY be inaccurate! - * - * NOTE: `deriveLocationInfo()` ALWAYS produces a location info object *copy* of `actual`, not just - * a *reference* hence all input location objects can be assumed to be 'constant' (function has no side-effects). - * - * @public - * @this {RegExpLexer} - */ - deriveLocationInfo: function lexer_deriveYYLLOC(actual, preceding, following, current) { - var loc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0, - range: [0, 0] - }; - - if (actual) { - loc.first_line = actual.first_line | 0; - loc.last_line = actual.last_line | 0; - loc.first_column = actual.first_column | 0; - loc.last_column = actual.last_column | 0; - - if (actual.range) { - loc.range[0] = actual.range[0] | 0; - loc.range[1] = actual.range[1] | 0; - } - } - - if (loc.first_line <= 0 || loc.last_line < loc.first_line) { - // plan B: heuristic using preceding and following: - if (loc.first_line <= 0 && preceding) { - loc.first_line = preceding.last_line | 0; - loc.first_column = preceding.last_column | 0; - - if (preceding.range) { - loc.range[0] = actual.range[1] | 0; - } - } - - if ((loc.last_line <= 0 || loc.last_line < loc.first_line) && following) { - loc.last_line = following.first_line | 0; - loc.last_column = following.first_column | 0; - - if (following.range) { - loc.range[1] = actual.range[0] | 0; - } - } - - // plan C?: see if the 'current' location is useful/sane too: - if (loc.first_line <= 0 && current && (loc.last_line <= 0 || current.last_line <= loc.last_line)) { - loc.first_line = current.first_line | 0; - loc.first_column = current.first_column | 0; - - if (current.range) { - loc.range[0] = current.range[0] | 0; - } - } - - if (loc.last_line <= 0 && current && (loc.first_line <= 0 || current.first_line >= loc.first_line)) { - loc.last_line = current.last_line | 0; - loc.last_column = current.last_column | 0; - - if (current.range) { - loc.range[1] = current.range[1] | 0; - } - } - } - - // sanitize: fix last_line BEFORE we fix first_line as we use the 'raw' value of the latter - // or plan D heuristics to produce a 'sensible' last_line value: - if (loc.last_line <= 0) { - if (loc.first_line <= 0) { - loc.first_line = this.yylloc.first_line; - loc.last_line = this.yylloc.last_line; - loc.first_column = this.yylloc.first_column; - loc.last_column = this.yylloc.last_column; - loc.range[0] = this.yylloc.range[0]; - loc.range[1] = this.yylloc.range[1]; - } else { - loc.last_line = this.yylloc.last_line; - loc.last_column = this.yylloc.last_column; - loc.range[1] = this.yylloc.range[1]; - } - } - - if (loc.first_line <= 0) { - loc.first_line = loc.last_line; - loc.first_column = 0; // loc.last_column; - loc.range[1] = loc.range[0]; - } - - if (loc.first_column < 0) { - loc.first_column = 0; - } - - if (loc.last_column < 0) { - loc.last_column = (loc.first_column > 0 ? loc.first_column : 80); - } - - return loc; - }, - - /** - * return a string which displays the lines & columns of input which are referenced - * by the given location info range, plus a few lines of context. - * - * This function pretty-prints the indicated section of the input, with line numbers - * and everything! - * - * This function is very useful to provide highly readable error reports, while - * the location range may be specified in various flexible ways: - * - * - `loc` is the location info object which references the area which should be - * displayed and 'marked up': these lines & columns of text are marked up by `^` - * characters below each character in the entire input range. - * - * - `context_loc` is the *optional* location info object which instructs this - * pretty-printer how much *leading* context should be displayed alongside - * the area referenced by `loc`. This can help provide context for the displayed - * error, etc. - * - * When this location info is not provided, a default context of 3 lines is - * used. - * - * - `context_loc2` is another *optional* location info object, which serves - * a similar purpose to `context_loc`: it specifies the amount of *trailing* - * context lines to display in the pretty-print output. - * - * When this location info is not provided, a default context of 1 line only is - * used. - * - * Special Notes: - * - * - when the `loc`-indicated range is very large (about 5 lines or more), then - * only the first and last few lines of this block are printed while a - * `...continued...` message will be printed between them. - * - * This serves the purpose of not printing a huge amount of text when the `loc` - * range happens to be huge: this way a manageable & readable output results - * for arbitrary large ranges. - * - * - this function can display lines of input which whave not yet been lexed. - * `prettyPrintRange()` can access the entire input! - * - * @public - * @this {RegExpLexer} - */ - prettyPrintRange: function lexer_prettyPrintRange(loc, context_loc, context_loc2) { - loc = this.deriveLocationInfo(loc, context_loc, context_loc2); - const CONTEXT = 3; - const CONTEXT_TAIL = 1; - const MINIMUM_VISIBLE_NONEMPTY_LINE_COUNT = 2; - var input = this.matched + this._input; - var lines = input.split('\n'); - var l0 = Math.max(1, (context_loc ? context_loc.first_line : loc.first_line - CONTEXT)); - var l1 = Math.max(1, (context_loc2 ? context_loc2.last_line : loc.last_line + CONTEXT_TAIL)); - var lineno_display_width = 1 + Math.log10(l1 | 1) | 0; - var ws_prefix = new Array(lineno_display_width).join(' '); - var nonempty_line_indexes = []; - - var rv = lines.slice(l0 - 1, l1 + 1).map(function injectLineNumber(line, index) { - var lno = index + l0; - var lno_pfx = (ws_prefix + lno).substr(-lineno_display_width); - var rv = lno_pfx + ': ' + line; - var errpfx = new Array(lineno_display_width + 1).join('^'); - var offset = 2 + 1; - var len = 0; - - if (lno === loc.first_line) { - offset += loc.first_column; - - len = Math.max( - 2, - ((lno === loc.last_line ? loc.last_column : line.length)) - loc.first_column + 1 - ); - } else if (lno === loc.last_line) { - len = Math.max(2, loc.last_column + 1); - } else if (lno > loc.first_line && lno < loc.last_line) { - len = Math.max(2, line.length + 1); - } - - if (len) { - var lead = new Array(offset).join('.'); - var mark = new Array(len).join('^'); - rv += '\n' + errpfx + lead + mark; - - if (line.trim().length > 0) { - nonempty_line_indexes.push(index); - } - } - - rv = rv.replace(/\t/g, ' '); - return rv; - }); - - // now make sure we don't print an overly large amount of error area: limit it - // to the top and bottom line count: - if (nonempty_line_indexes.length > 2 * MINIMUM_VISIBLE_NONEMPTY_LINE_COUNT) { - var clip_start = nonempty_line_indexes[MINIMUM_VISIBLE_NONEMPTY_LINE_COUNT - 1] + 1; - var clip_end = nonempty_line_indexes[nonempty_line_indexes.length - MINIMUM_VISIBLE_NONEMPTY_LINE_COUNT] - 1; - var intermediate_line = new Array(lineno_display_width + 1).join(' ') + ' (...continued...)'; - intermediate_line += '\n' + new Array(lineno_display_width + 1).join('-') + ' (---------------)'; - rv.splice(clip_start, clip_end - clip_start + 1, intermediate_line); - } - - return rv.join('\n'); - }, - - /** - * helper function, used to produce a human readable description as a string, given - * the input `yylloc` location object. - * - * Set `display_range_too` to TRUE to include the string character index position(s) - * in the description if the `yylloc.range` is available. - * - * @public - * @this {RegExpLexer} - */ - describeYYLLOC: function lexer_describe_yylloc(yylloc, display_range_too) { - var l1 = yylloc.first_line; - var l2 = yylloc.last_line; - var c1 = yylloc.first_column; - var c2 = yylloc.last_column; - var dl = l2 - l1; - var dc = c2 - c1; - var rv; - - if (dl === 0) { - rv = 'line ' + l1 + ', '; - - if (dc <= 1) { - rv += 'column ' + c1; - } else { - rv += 'columns ' + c1 + ' .. ' + c2; - } - } else { - rv = 'lines ' + l1 + '(column ' + c1 + ') .. ' + l2 + '(column ' + c2 + ')'; - } - - if (yylloc.range && display_range_too) { - var r1 = yylloc.range[0]; - var r2 = yylloc.range[1] - 1; - - if (r2 <= r1) { - rv += ' {String Offset: ' + r1 + '}'; - } else { - rv += ' {String Offset range: ' + r1 + ' .. ' + r2 + '}'; - } - } - - return rv; - }, - - /** - * test the lexed token: return FALSE when not a match, otherwise return token. - * - * `match` is supposed to be an array coming out of a regex match, i.e. `match[0]` - * contains the actually matched text string. - * - * Also move the input cursor forward and update the match collectors: - * - * - `yytext` - * - `yyleng` - * - `match` - * - `matches` - * - `yylloc` - * - `offset` - * - * @public - * @this {RegExpLexer} - */ - test_match: function lexer_test_match(match, indexed_rule) { - var token, lines, backup, match_str, match_str_len; - - if (this.options.backtrack_lexer) { - // save context - backup = { - yylineno: this.yylineno, - - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.yylloc.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column, - range: this.yylloc.range.slice(0) - }, - - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - - //_signaled_error_token: this._signaled_error_token, - yy: this.yy, - - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - } - - match_str = match[0]; - match_str_len = match_str.length; - - // if (match_str.indexOf('\n') !== -1 || match_str.indexOf('\r') !== -1) { - lines = match_str.split(/(?:\r\n?|\n)/g); - - if (lines.length > 1) { - this.yylineno += lines.length - 1; - this.yylloc.last_line = this.yylineno + 1; - this.yylloc.last_column = lines[lines.length - 1].length; - } else { - this.yylloc.last_column += match_str_len; - } - - // } - this.yytext += match_str; - - this.match += match_str; - this.matched += match_str; - this.matches = match; - this.yyleng = this.yytext.length; - this.yylloc.range[1] += match_str_len; - - // previous lex rules MAY have invoked the `more()` API rather than producing a token: - // those rules will already have moved this `offset` forward matching their match lengths, - // hence we must only add our own match length now: - this.offset += match_str_len; - - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match_str_len); - - // calling this method: - // - // function lexer__performAction(yy, yyrulenumber, YY_START) {...} - token = this.performAction.call( - this, - this.yy, - indexed_rule, - this.conditionStack[this.conditionStack.length - 1] /* = YY_START */ - ); - - // otherwise, when the action codes are all simple return token statements: - //token = this.simpleCaseActionClusters[indexed_rule]; - - if (this.done && this._input) { - this.done = false; - } - - if (token) { - return token; - } else if (this._backtrack) { - // recover context - for (var k in backup) { - this[k] = backup[k]; - } - - this.__currentRuleSet__ = null; - return false; // rule action called reject() implying the next rule should be tested instead. - } else if (this._signaled_error_token) { - // produce one 'error' token as `.parseError()` in `reject()` - // did not guarantee a failure signal by throwing an exception! - token = this._signaled_error_token; - - this._signaled_error_token = false; - return token; - } - - return false; - }, - - /** - * return next match in input - * - * @public - * @this {RegExpLexer} - */ - next: function lexer_next() { - if (this.done) { - this.clear(); - return this.EOF; - } - - if (!this._input) { - this.done = true; - } - - var token, match, tempMatch, index; - - if (!this._more) { - this.clear(); - } - - var spec = this.__currentRuleSet__; - - if (!spec) { - // Update the ruleset cache as we apparently encountered a state change or just started lexing. - // The cache is set up for fast lookup -- we assume a lexer will switch states much less often than it will - // invoke the `lex()` token-producing API and related APIs, hence caching the set for direct access helps - // speed up those activities a tiny bit. - spec = this.__currentRuleSet__ = this._currentRules(); - - // Check whether a *sane* condition has been pushed before: this makes the lexer robust against - // user-programmer bugs such as https://github.com/zaach/jison-lex/issues/19 - if (!spec || !spec.rules) { - var lineno_msg = ''; - - if (this.options.trackPosition) { - lineno_msg = ' on line ' + (this.yylineno + 1); - } - - var p = this.constructLexErrorInfo( - 'Internal lexer engine error' + lineno_msg + ': The lex grammar programmer pushed a non-existing condition name "' + this.topState() + '"; this is a fatal error and should be reported to the application programmer team!', - false - ); - - // produce one 'error' token until this situation has been resolved, most probably by parse termination! - return this.parseError(p.errStr, p, this.JisonLexerError) || this.ERROR; - } - } - - var rule_ids = spec.rules; - var regexes = spec.__rule_regexes; - var len = spec.__rule_count; - - // Note: the arrays are 1-based, while `len` itself is a valid index, - // hence the non-standard less-or-equal check in the next loop condition! - for (var i = 1; i <= len; i++) { - tempMatch = this._input.match(regexes[i]); - - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rule_ids[i]); - - if (token !== false) { - return token; - } else if (this._backtrack) { - match = undefined; - continue; // rule action called reject() implying a rule MISmatch. - } else { - // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - - if (match) { - token = this.test_match(match, rule_ids[index]); - - if (token !== false) { - return token; - } - - // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; - } - - if (!this._input) { - this.done = true; - this.clear(); - return this.EOF; - } else { - var lineno_msg = ''; - - if (this.options.trackPosition) { - lineno_msg = ' on line ' + (this.yylineno + 1); - } - - var p = this.constructLexErrorInfo( - 'Lexical error' + lineno_msg + ': Unrecognized text.', - this.options.lexerErrorsAreRecoverable - ); - - var pendingInput = this._input; - var activeCondition = this.topState(); - var conditionStackDepth = this.conditionStack.length; - token = this.parseError(p.errStr, p, this.JisonLexerError) || this.ERROR; - - if (token === this.ERROR) { - // we can try to recover from a lexer error that `parseError()` did not 'recover' for us - // by moving forward at least one character at a time IFF the (user-specified?) `parseError()` - // has not consumed/modified any pending input or changed state in the error handler: - if (!this.matches && // and make sure the input has been modified/consumed ... - pendingInput === this._input && // ...or the lexer state has been modified significantly enough - // to merit a non-consuming error handling action right now. - activeCondition === this.topState() && conditionStackDepth === this.conditionStack.length) { - this.input(); - } - } - - return token; - } - }, - - /** - * return next match that has a token - * - * @public - * @this {RegExpLexer} - */ - lex: function lexer_lex() { - var r; - - // allow the PRE/POST handlers set/modify the return token for maximum flexibility of the generated lexer: - if (typeof this.pre_lex === 'function') { - r = this.pre_lex.call(this, 0); - } - - if (typeof this.options.pre_lex === 'function') { - // (also account for a userdef function which does not return any value: keep the token as is) - r = this.options.pre_lex.call(this, r) || r; - } - - if (this.yy && typeof this.yy.pre_lex === 'function') { - // (also account for a userdef function which does not return any value: keep the token as is) - r = this.yy.pre_lex.call(this, r) || r; - } - - while (!r) { - r = this.next(); - } - - if (this.yy && typeof this.yy.post_lex === 'function') { - // (also account for a userdef function which does not return any value: keep the token as is) - r = this.yy.post_lex.call(this, r) || r; - } - - if (typeof this.options.post_lex === 'function') { - // (also account for a userdef function which does not return any value: keep the token as is) - r = this.options.post_lex.call(this, r) || r; - } - - if (typeof this.post_lex === 'function') { - // (also account for a userdef function which does not return any value: keep the token as is) - r = this.post_lex.call(this, r) || r; - } - - return r; - }, - - /** - * return next match that has a token. Identical to the `lex()` API but does not invoke any of the - * `pre_lex()` nor any of the `post_lex()` callbacks. - * - * @public - * @this {RegExpLexer} - */ - fastLex: function lexer_fastLex() { - var r; - - while (!r) { - r = this.next(); - } - - return r; - }, - - /** - * return info about the lexer state that can help a parser or other lexer API user to use the - * most efficient means available. This API is provided to aid run-time performance for larger - * systems which employ this lexer. - * - * @public - * @this {RegExpLexer} - */ - canIUse: function lexer_canIUse() { - var rv = { - fastLex: !(typeof this.pre_lex === 'function' || typeof this.options.pre_lex === 'function' || this.yy && typeof this.yy.pre_lex === 'function' || this.yy && typeof this.yy.post_lex === 'function' || typeof this.options.post_lex === 'function' || typeof this.post_lex === 'function') && typeof this.fastLex === 'function' - }; - - return rv; - }, - - /** - * backwards compatible alias for `pushState()`; - * the latter is symmetrical with `popState()` and we advise to use - * those APIs in any modern lexer code, rather than `begin()`. - * - * @public - * @this {RegExpLexer} - */ - begin: function lexer_begin(condition) { - return this.pushState(condition); - }, - - /** - * activates a new lexer condition state (pushes the new lexer - * condition state onto the condition stack) - * - * @public - * @this {RegExpLexer} - */ - pushState: function lexer_pushState(condition) { - this.conditionStack.push(condition); - this.__currentRuleSet__ = null; - return this; - }, - - /** - * pop the previously active lexer condition state off the condition - * stack - * - * @public - * @this {RegExpLexer} - */ - popState: function lexer_popState() { - var n = this.conditionStack.length - 1; - - if (n > 0) { - this.__currentRuleSet__ = null; - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - - /** - * return the currently active lexer condition state; when an index - * argument is provided it produces the N-th previous condition state, - * if available - * - * @public - * @this {RegExpLexer} - */ - topState: function lexer_topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - - if (n >= 0) { - return this.conditionStack[n]; - } else { - return 'INITIAL'; - } - }, - - /** - * (internal) determine the lexer rule set which is active for the - * currently active lexer condition state - * - * @public - * @this {RegExpLexer} - */ - _currentRules: function lexer__currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]]; - } else { - return this.conditions['INITIAL']; - } - }, - - /** - * return the number of states currently on the stack - * - * @public - * @this {RegExpLexer} - */ - stateStackSize: function lexer_stateStackSize() { - return this.conditionStack.length; - }, - - options: { - trackPosition: true, - caseInsensitive: true - }, - - JisonLexerError: JisonLexerError, - - performAction: function lexer__performAction(yy, yyrulenumber, YY_START) { - var yy_ = this; - var YYSTATE = YY_START; - - switch (yyrulenumber) { - case 0: - /*! Conditions:: INITIAL */ - /*! Rule:: \s+ */ - /* skip whitespace */ - break; - - case 7: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)em\b */ - return 12; // em - - break; - - case 8: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)ex\b */ - return 12; // ex - - break; - - case 9: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)ch\b */ - return 12; // ch - - break; - - case 10: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)rem\b */ - return 12; // rem - - break; - - case 11: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)vw\b */ - return 12; // vw - - break; - - case 12: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)vh\b */ - return 12; // vh - - break; - - case 13: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)vmin\b */ - return 12; // vmin - - break; - - case 14: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)vmax\b */ - return 12; // vmax - - break; - - case 15: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)vm\b */ - return 12; // vm (non-standard name) - - break; - - case 16: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)px\b */ - return 12; // px - - break; - - case 17: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)mm\b */ - return 12; // mm - - break; - - case 18: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)cm\b */ - return 12; // cm - - break; - - case 19: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)in\b */ - return 12; // in - - break; - - case 20: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)pt\b */ - return 12; // pt - - break; - - case 21: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)pc\b */ - return 12; // pc - - break; - - case 22: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)Q\b */ - return 12; // Q - - break; - - case 23: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)fr\b */ - return 12; // fr - - break; - - case 24: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)deg\b */ - return 13; // deg - - break; - - case 25: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)grad\b */ - return 13; // grad - - break; - - case 26: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)turn\b */ - return 13; // turn - - break; - - case 27: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)rad\b */ - return 13; // rad - - break; - - case 28: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)s\b */ - return 14; // s - - break; - - case 29: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)ms\b */ - return 14; // ms - - break; - - case 30: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)Hz\b */ - return 15; // Hz - - break; - - case 31: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)kHz\b */ - return 15; // kHz - - break; - - case 32: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)dpi\b */ - return 16; // dpi - - break; - - case 33: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)dpcm\b */ - return 16; // dpcm - - break; - - case 34: - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)dppx\b */ - return 16; // dppm - - break; - - case 39: - /*! Conditions:: INITIAL */ - /*! Rule:: #\{([\s\S]*?)\} */ - return 18; // scss variable - - break; - - case 40: - /*! Conditions:: INITIAL */ - /*! Rule:: @\{([\s\S]*?)\} */ - return 18; // less variable - - break; - - default: - return this.simpleCaseActionClusters[yyrulenumber]; - } - }, - - simpleCaseActionClusters: { - /*! Conditions:: INITIAL */ - /*! Rule:: (-(webkit|moz)-)?calc\b */ - 1: 3, - - /*! Conditions:: INITIAL */ - /*! Rule:: [a-z][a-z0-9-]*\s*\((?:(?:"(?:\\.|[^\"\\])*"|'(?:\\.|[^\'\\])*')|\([^)]*\)|[^\(\)]*)*\) */ - 2: 11, - - /*! Conditions:: INITIAL */ - /*! Rule:: \* */ - 3: 8, - - /*! Conditions:: INITIAL */ - /*! Rule:: \/ */ - 4: 9, - - /*! Conditions:: INITIAL */ - /*! Rule:: \+ */ - 5: 6, - - /*! Conditions:: INITIAL */ - /*! Rule:: - */ - 6: 7, - - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)% */ - 35: 17, - - /*! Conditions:: INITIAL */ - /*! Rule:: ([0-9]+(\.[0-9]+)?|\.[0-9]+)\b */ - 36: 10, - - /*! Conditions:: INITIAL */ - /*! Rule:: \( */ - 37: 4, - - /*! Conditions:: INITIAL */ - /*! Rule:: \) */ - 38: 5, - - /*! Conditions:: INITIAL */ - /*! Rule:: \S[^\s()*\/+-]* */ - 41: 18, - - /*! Conditions:: INITIAL */ - /*! Rule:: $ */ - 42: 1 - }, - - rules: [ - /* 0: */ /^(?:\s+)/i, - /* 1: */ /^(?:(-(webkit|moz)-)?calc\b)/i, - /* 2: */ /^(?:[a-z][\d\-a-z]*\s*\((?:(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')|\([^)]*\)|[^()]*)*\))/i, - /* 3: */ /^(?:\*)/i, - /* 4: */ /^(?:\/)/i, - /* 5: */ /^(?:\+)/i, - /* 6: */ /^(?:-)/i, - /* 7: */ /^(?:(\d+(\.\d+)?|\.\d+)em\b)/i, - /* 8: */ /^(?:(\d+(\.\d+)?|\.\d+)ex\b)/i, - /* 9: */ /^(?:(\d+(\.\d+)?|\.\d+)ch\b)/i, - /* 10: */ /^(?:(\d+(\.\d+)?|\.\d+)rem\b)/i, - /* 11: */ /^(?:(\d+(\.\d+)?|\.\d+)vw\b)/i, - /* 12: */ /^(?:(\d+(\.\d+)?|\.\d+)vh\b)/i, - /* 13: */ /^(?:(\d+(\.\d+)?|\.\d+)vmin\b)/i, - /* 14: */ /^(?:(\d+(\.\d+)?|\.\d+)vmax\b)/i, - /* 15: */ /^(?:(\d+(\.\d+)?|\.\d+)vm\b)/i, - /* 16: */ /^(?:(\d+(\.\d+)?|\.\d+)px\b)/i, - /* 17: */ /^(?:(\d+(\.\d+)?|\.\d+)mm\b)/i, - /* 18: */ /^(?:(\d+(\.\d+)?|\.\d+)cm\b)/i, - /* 19: */ /^(?:(\d+(\.\d+)?|\.\d+)in\b)/i, - /* 20: */ /^(?:(\d+(\.\d+)?|\.\d+)pt\b)/i, - /* 21: */ /^(?:(\d+(\.\d+)?|\.\d+)pc\b)/i, - /* 22: */ /^(?:(\d+(\.\d+)?|\.\d+)Q\b)/i, - /* 23: */ /^(?:(\d+(\.\d+)?|\.\d+)fr\b)/i, - /* 24: */ /^(?:(\d+(\.\d+)?|\.\d+)deg\b)/i, - /* 25: */ /^(?:(\d+(\.\d+)?|\.\d+)grad\b)/i, - /* 26: */ /^(?:(\d+(\.\d+)?|\.\d+)turn\b)/i, - /* 27: */ /^(?:(\d+(\.\d+)?|\.\d+)rad\b)/i, - /* 28: */ /^(?:(\d+(\.\d+)?|\.\d+)s\b)/i, - /* 29: */ /^(?:(\d+(\.\d+)?|\.\d+)ms\b)/i, - /* 30: */ /^(?:(\d+(\.\d+)?|\.\d+)Hz\b)/i, - /* 31: */ /^(?:(\d+(\.\d+)?|\.\d+)kHz\b)/i, - /* 32: */ /^(?:(\d+(\.\d+)?|\.\d+)dpi\b)/i, - /* 33: */ /^(?:(\d+(\.\d+)?|\.\d+)dpcm\b)/i, - /* 34: */ /^(?:(\d+(\.\d+)?|\.\d+)dppx\b)/i, - /* 35: */ /^(?:(\d+(\.\d+)?|\.\d+)%)/i, - /* 36: */ /^(?:(\d+(\.\d+)?|\.\d+)\b)/i, - /* 37: */ /^(?:\()/i, - /* 38: */ /^(?:\))/i, - /* 39: */ /^(?:#\{([\s\S]*?)\})/i, - /* 40: */ /^(?:@\{([\s\S]*?)\})/i, - /* 41: */ /^(?:\S[^\s()*\/+-]*)/i, - /* 42: */ /^(?:$)/i - ], - - conditions: { - 'INITIAL': { - rules: [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42 - ], - - inclusive: true - } - } - }; - - return lexer; -}(); -parser.lexer = lexer; - - - -function Parser() { - this.yy = {}; -} -Parser.prototype = parser; -parser.Parser = Parser; - -return new Parser(); -})(); - - - - -if (typeof require !== 'undefined' && typeof exports !== 'undefined') { - exports.parser = parser; - exports.Parser = parser.Parser; - exports.parse = function () { - return parser.parse.apply(parser, arguments); - }; - -} diff --git a/package.json b/package.json index c9dd891cc1..25ef0601ca 100644 --- a/package.json +++ b/package.json @@ -74,8 +74,7 @@ "collectCoverage": false, "collectCoverageFrom": [ "lib/**/*.js", - "!lib/vendor/**/*.js", - "!lib/utils/parseCalcExpression/parser.js" + "!lib/vendor/**/*.js" ], "coverageDirectory": "./.coverage/", "coverageReporters": [ From 0b3fa84134627bdf6d34bf33c86aec7ac00e0d36 Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Fri, 14 May 2021 07:34:09 +0100 Subject: [PATCH 004/194] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 82752097ed..349e2b12fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ All notable changes to this project are documented in this file. ## Head - Removed: rules deprecated in 13.7.0 ([#5295](https://github.com/stylelint/stylelint/pull/5295)). +- Removed: `function-calc-no-invalid` ([#5296](https://github.com/stylelint/stylelint/pull/5296)). ## 13.13.1 From 37e1190cb68d20f96dfe56f74cf7776515dc4598 Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Fri, 14 May 2021 20:01:12 +0900 Subject: [PATCH 005/194] Drop Node 10 support for ESM (#5303) This change is a part of the next major version (v14). - Remove Node 10 from CI - Update `engines.node` In addition, this removes needless `CI: true` (just a refactoring). See --- .github/workflows/linting.yml | 3 --- .github/workflows/testing.yml | 5 +---- package.json | 2 +- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index ffdac5fc42..1f6d397aee 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -9,9 +9,6 @@ on: branches: - '**' -env: - CI: true - jobs: lint: name: Lint on Node.js ${{ matrix.node }} and ${{ matrix.os }} diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 3a86a3a00d..6c4423d981 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -9,9 +9,6 @@ on: branches: - '**' -env: - CI: true - jobs: test: name: Test on Node.js ${{ matrix.node }} and ${{ matrix.os }} @@ -21,7 +18,7 @@ jobs: strategy: fail-fast: false matrix: - node: [10, 12, 14, 16] + node: [12, 14, 16] os: [ubuntu-latest, windows-latest, macos-latest] exclude: - os: ubuntu-latest diff --git a/package.json b/package.json index 25ef0601ca..ad1b3737a1 100644 --- a/package.json +++ b/package.json @@ -191,6 +191,6 @@ "typescript": "^4.2.4" }, "engines": { - "node": ">=10.13.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } } From 90a174df52a837e3d3615de34ac4fe160adb672b Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Fri, 14 May 2021 20:05:13 +0900 Subject: [PATCH 006/194] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 349e2b12fb..d4b1334837 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ All notable changes to this project are documented in this file. - Removed: rules deprecated in 13.7.0 ([#5295](https://github.com/stylelint/stylelint/pull/5295)). - Removed: `function-calc-no-invalid` ([#5296](https://github.com/stylelint/stylelint/pull/5296)). +- Removed: Drop Node 10 support ([#5303](https://github.com/stylelint/stylelint/pull/5303)). ## 13.13.1 From e4b61413c44c11f421b7d69e6589ab03be4e39c7 Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Fri, 14 May 2021 20:06:01 +0900 Subject: [PATCH 007/194] Refactor to remove `Number.isInteger` polyfill (#5302) We will no longer need the polyfill on the next major release (v14). --- lib/utils/isNonNegativeInteger.js | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/lib/utils/isNonNegativeInteger.js b/lib/utils/isNonNegativeInteger.js index 0ed8de96f7..044467e082 100644 --- a/lib/utils/isNonNegativeInteger.js +++ b/lib/utils/isNonNegativeInteger.js @@ -1,17 +1,8 @@ 'use strict'; -// TODO: We need this polyfill because of the support of Node 10. -// When we will drop Node 10, please remove this polyfill. -// See -const isInteger = - Number.isInteger || - function (value) { - return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; - }; - /** * @param {unknown} value */ -module.exports = function (value) { - return isInteger(value) && typeof value === 'number' && value >= 0; +module.exports = function isNonNegativeInteger(value) { + return Number.isInteger(value) && typeof value === 'number' && value >= 0; }; From 887f03ee2298c8492d3bec0904d36612f6ec1b73 Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Fri, 14 May 2021 20:07:07 +0900 Subject: [PATCH 008/194] Add lang to code blocks in Markdown (#5299) * Add lang to code blocks in Markdown This change aims to make documents more readable and avoid syntax errors by adding a language specifier to code blocks in Markdown. To perform this task efficiently, I use two remark plugins: - [remark-lint-code-block-syntax](https://github.com/ybiquitous/remark-lint-code-block-syntax) - [remark-lint-fenced-code-flag](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-fenced-code-flag) ```diff --- a/package.json +++ b/package.json @@ -66,7 +66,9 @@ }, "remarkConfig": { "plugins": [ - "@stylelint/remark-preset" + "@stylelint/remark-preset", + "remark-lint-code-block-syntax", + "remark-lint-fenced-code-flag" ] }, "jest": { @@ -189,6 +191,8 @@ "postcss-import": "^12.0.1", "prettier": "^2.2.1", "remark-cli": "^9.0.0", + "remark-lint-code-block-syntax": "^0.2.1", + "remark-lint-fenced-code-flag": "^2.0.1", "typescript": "^4.2.4" }, "engines": { ``` Note: I do not recommend the addition of the plugins because they produce false positives. * Remove deprecated files * Remove deprecated files again --- lib/rules/alpha-value-notation/README.md | 2 +- lib/rules/at-rule-allowed-list/README.md | 2 +- lib/rules/at-rule-disallowed-list/README.md | 2 +- lib/rules/at-rule-empty-line-before/README.md | 2 +- lib/rules/at-rule-no-unknown/README.md | 2 +- .../at-rule-property-required-list/README.md | 2 +- .../README.md | 2 +- .../README.md | 4 ++-- lib/rules/color-named/README.md | 2 +- lib/rules/comment-empty-line-before/README.md | 4 ++-- lib/rules/comment-pattern/README.md | 2 +- .../comment-word-disallowed-list/README.md | 2 +- lib/rules/custom-media-pattern/README.md | 2 +- lib/rules/custom-property-pattern/README.md | 2 +- .../README.md | 2 +- .../README.md | 2 +- .../README.md | 20 ++++++++++--------- .../README.md | 2 +- .../README.md | 2 +- .../README.md | 2 +- .../font-family-no-duplicate-names/README.md | 2 +- .../README.md | 2 +- lib/rules/function-allowed-list/README.md | 2 +- lib/rules/function-disallowed-list/README.md | 2 +- lib/rules/function-name-case/README.md | 2 +- .../README.md | 2 +- .../README.md | 2 +- lib/rules/keyframes-name-pattern/README.md | 2 +- lib/rules/max-line-length/README.md | 2 +- lib/rules/max-nesting-depth/README.md | 2 +- .../media-feature-name-allowed-list/README.md | 2 +- .../README.md | 2 +- .../media-feature-name-no-unknown/README.md | 2 +- .../README.md | 2 +- lib/rules/number-max-precision/README.md | 2 +- lib/rules/property-allowed-list/README.md | 2 +- lib/rules/property-disallowed-list/README.md | 2 +- lib/rules/property-no-unknown/README.md | 6 +++--- lib/rules/property-no-vendor-prefix/README.md | 2 +- .../README.md | 2 +- .../README.md | 2 +- .../README.md | 2 +- lib/rules/selector-class-pattern/README.md | 2 +- .../README.md | 2 +- .../README.md | 2 +- lib/rules/selector-disallowed-list/README.md | 4 ++-- lib/rules/selector-id-pattern/README.md | 2 +- lib/rules/selector-max-attribute/README.md | 2 +- lib/rules/selector-max-id/README.md | 4 ++-- lib/rules/selector-max-specificity/README.md | 4 ++-- lib/rules/selector-max-type/README.md | 2 +- lib/rules/selector-nested-pattern/README.md | 2 +- lib/rules/selector-no-vendor-prefix/README.md | 2 +- .../README.md | 2 +- .../README.md | 2 +- .../README.md | 2 +- .../README.md | 2 +- .../README.md | 2 +- .../README.md | 2 +- lib/rules/selector-type-case/README.md | 2 +- lib/rules/selector-type-no-unknown/README.md | 4 ++-- lib/rules/unit-allowed-list/README.md | 8 ++++---- lib/rules/unit-disallowed-list/README.md | 14 ++++++------- lib/rules/unit-no-unknown/README.md | 4 ++-- lib/rules/value-keyword-case/README.md | 2 +- lib/rules/value-no-vendor-prefix/README.md | 2 +- 66 files changed, 94 insertions(+), 92 deletions(-) diff --git a/lib/rules/alpha-value-notation/README.md b/lib/rules/alpha-value-notation/README.md index a738167d43..3061dc0138 100644 --- a/lib/rules/alpha-value-notation/README.md +++ b/lib/rules/alpha-value-notation/README.md @@ -81,7 +81,7 @@ For example with `"percentage"`. Given: -``` +```json ["opacity"] ``` diff --git a/lib/rules/at-rule-allowed-list/README.md b/lib/rules/at-rule-allowed-list/README.md index 995c21d40e..715b8e5470 100644 --- a/lib/rules/at-rule-allowed-list/README.md +++ b/lib/rules/at-rule-allowed-list/README.md @@ -15,7 +15,7 @@ Specify a list of allowed at-rules. Given: -``` +```json ["extend", "keyframes"] ``` diff --git a/lib/rules/at-rule-disallowed-list/README.md b/lib/rules/at-rule-disallowed-list/README.md index 336dc9d1a5..31837b2626 100644 --- a/lib/rules/at-rule-disallowed-list/README.md +++ b/lib/rules/at-rule-disallowed-list/README.md @@ -15,7 +15,7 @@ Specify a list of disallowed at-rules. Given: -``` +```json ["extend", "keyframes"] ``` diff --git a/lib/rules/at-rule-empty-line-before/README.md b/lib/rules/at-rule-empty-line-before/README.md index 1f67dcda3b..e5a20c1a37 100644 --- a/lib/rules/at-rule-empty-line-before/README.md +++ b/lib/rules/at-rule-empty-line-before/README.md @@ -408,7 +408,7 @@ For example, with `"always"`. Given: -``` +```json ["import"] ``` diff --git a/lib/rules/at-rule-no-unknown/README.md b/lib/rules/at-rule-no-unknown/README.md index 9ec32ad11f..fb7d56e02c 100644 --- a/lib/rules/at-rule-no-unknown/README.md +++ b/lib/rules/at-rule-no-unknown/README.md @@ -52,7 +52,7 @@ The following patterns are _not_ considered violations: Given: -``` +```json ["/^my-/", "custom"] ``` diff --git a/lib/rules/at-rule-property-required-list/README.md b/lib/rules/at-rule-property-required-list/README.md index eb4eb944c6..81dc7a0224 100644 --- a/lib/rules/at-rule-property-required-list/README.md +++ b/lib/rules/at-rule-property-required-list/README.md @@ -15,7 +15,7 @@ Specify a list of required properties for an at-rule. Given: -``` +```json { "font-face": ["font-display", "font-family", "font-style"] } diff --git a/lib/rules/block-closing-brace-newline-after/README.md b/lib/rules/block-closing-brace-newline-after/README.md index 6556ba8fc9..3b44346edb 100644 --- a/lib/rules/block-closing-brace-newline-after/README.md +++ b/lib/rules/block-closing-brace-newline-after/README.md @@ -173,7 +173,7 @@ For example, with `"always"` or `"always-multi-line"`. Given: -``` +```json ["if", "else"] ``` diff --git a/lib/rules/block-opening-brace-space-before/README.md b/lib/rules/block-opening-brace-space-before/README.md index b637275141..2e0d8155b0 100644 --- a/lib/rules/block-opening-brace-space-before/README.md +++ b/lib/rules/block-opening-brace-space-before/README.md @@ -179,7 +179,7 @@ color: pink;} Given: -``` +```json ["/fo/"] ``` @@ -200,7 +200,7 @@ The following patterns are _not_ considered violations: Given: -``` +```json [":root"] ``` diff --git a/lib/rules/color-named/README.md b/lib/rules/color-named/README.md index a3833bee58..3815311558 100644 --- a/lib/rules/color-named/README.md +++ b/lib/rules/color-named/README.md @@ -148,7 +148,7 @@ For example with `"never"`. Given: -``` +```json ["/^my-/", "composes"] ``` diff --git a/lib/rules/comment-empty-line-before/README.md b/lib/rules/comment-empty-line-before/README.md index 00e036b4cf..2bd0fad9d8 100644 --- a/lib/rules/comment-empty-line-before/README.md +++ b/lib/rules/comment-empty-line-before/README.md @@ -172,8 +172,8 @@ Ignore comments matching the given regular expressions or strings. For example, with `"always"` and given: -``` -[/^ignore/, "string-ignore"] +```json +["/^ignore/", "string-ignore"] ``` The following comments are _not_ considered violations: diff --git a/lib/rules/comment-pattern/README.md b/lib/rules/comment-pattern/README.md index b0a276e225..63a7d9fb76 100644 --- a/lib/rules/comment-pattern/README.md +++ b/lib/rules/comment-pattern/README.md @@ -17,7 +17,7 @@ A string will be translated into a RegExp like so `new RegExp(yourString)` —  Given the string: -``` +```json "foo .+" ``` diff --git a/lib/rules/comment-word-disallowed-list/README.md b/lib/rules/comment-word-disallowed-list/README.md index 814667b43c..30b4dbe6ff 100644 --- a/lib/rules/comment-word-disallowed-list/README.md +++ b/lib/rules/comment-word-disallowed-list/README.md @@ -19,7 +19,7 @@ If a string is surrounded with `"/"` (e.g. `"/^TODO:/"`), it is interpreted as a Given: -``` +```json ["/^TODO:/", "badword"] ``` diff --git a/lib/rules/custom-media-pattern/README.md b/lib/rules/custom-media-pattern/README.md index d9dc628f56..c990ef7c39 100644 --- a/lib/rules/custom-media-pattern/README.md +++ b/lib/rules/custom-media-pattern/README.md @@ -17,7 +17,7 @@ A string will be translated into a RegExp like so `new RegExp(yourString)` —  Given the string: -``` +```json "foo-.+" ``` diff --git a/lib/rules/custom-property-pattern/README.md b/lib/rules/custom-property-pattern/README.md index 1382b9fc0b..c58d12c5af 100644 --- a/lib/rules/custom-property-pattern/README.md +++ b/lib/rules/custom-property-pattern/README.md @@ -17,7 +17,7 @@ A string will be translated into a RegExp like so `new RegExp(yourString)` —  Given the string: -``` +```json "foo-.+" ``` diff --git a/lib/rules/declaration-block-no-duplicate-properties/README.md b/lib/rules/declaration-block-no-duplicate-properties/README.md index c8b6e59727..68fa98cd2b 100644 --- a/lib/rules/declaration-block-no-duplicate-properties/README.md +++ b/lib/rules/declaration-block-no-duplicate-properties/README.md @@ -114,7 +114,7 @@ Ignore duplicates of specific properties. Given: -``` +```json ["color", "/background-/"] ``` diff --git a/lib/rules/declaration-block-no-redundant-longhand-properties/README.md b/lib/rules/declaration-block-no-redundant-longhand-properties/README.md index a4b330c21a..78aecf704b 100644 --- a/lib/rules/declaration-block-no-redundant-longhand-properties/README.md +++ b/lib/rules/declaration-block-no-redundant-longhand-properties/README.md @@ -151,7 +151,7 @@ a { Given: -``` +```json ["padding", "/border/"] ``` diff --git a/lib/rules/declaration-property-unit-allowed-list/README.md b/lib/rules/declaration-property-unit-allowed-list/README.md index d67ead027d..bd495a19c5 100644 --- a/lib/rules/declaration-property-unit-allowed-list/README.md +++ b/lib/rules/declaration-property-unit-allowed-list/README.md @@ -17,7 +17,7 @@ If a property name is surrounded with `"/"` (e.g. `"/^animation/"`), it is inter Given: -``` +```json { "font-size": ["em", "px"], "/^animation/": ["s"], @@ -92,14 +92,16 @@ Ignore units that are inside a function. For example, given: -``` -{ - "/^border/": ["px"], - "/^background/": ["%"], -}, -{ - "ignore": ["inside-function"], -}, +```json +[ + { + "/^border/": ["px"], + "/^background/": ["%"] + }, + { + "ignore": ["inside-function"] + } +] ``` The following patterns are _not_ considered violations: diff --git a/lib/rules/declaration-property-unit-disallowed-list/README.md b/lib/rules/declaration-property-unit-disallowed-list/README.md index 088d42a3af..8ec7ec1829 100644 --- a/lib/rules/declaration-property-unit-disallowed-list/README.md +++ b/lib/rules/declaration-property-unit-disallowed-list/README.md @@ -17,7 +17,7 @@ If a property name is surrounded with `"/"` (e.g. `"/^animation/"`), it is inter Given: -``` +```json { "font-size": ["em", "px"], "/^animation/": ["s"] diff --git a/lib/rules/declaration-property-value-allowed-list/README.md b/lib/rules/declaration-property-value-allowed-list/README.md index 1c9a1b1424..bd95aca808 100644 --- a/lib/rules/declaration-property-value-allowed-list/README.md +++ b/lib/rules/declaration-property-value-allowed-list/README.md @@ -23,7 +23,7 @@ Be careful with regex matching not to accidentally consider quoted string values Given: -``` +```json { "transform": ["/scale/"], "whitespace": ["nowrap"], diff --git a/lib/rules/declaration-property-value-disallowed-list/README.md b/lib/rules/declaration-property-value-disallowed-list/README.md index 982799a29d..7cef752994 100644 --- a/lib/rules/declaration-property-value-disallowed-list/README.md +++ b/lib/rules/declaration-property-value-disallowed-list/README.md @@ -21,7 +21,7 @@ Be careful with regex matching not to accidentally consider quoted string values Given: -``` +```json { "transform": ["/scale3d/", "/rotate3d/", "/translate3d/"], "position": ["fixed"], diff --git a/lib/rules/font-family-no-duplicate-names/README.md b/lib/rules/font-family-no-duplicate-names/README.md index 779f15d80d..e247e6f3e8 100644 --- a/lib/rules/font-family-no-duplicate-names/README.md +++ b/lib/rules/font-family-no-duplicate-names/README.md @@ -59,7 +59,7 @@ a { font: normal 14px/32px -apple-system, BlinkMacSystemFont, sans-serif; } Given: -``` +```json ["/^My Font /", "monospace"] ``` diff --git a/lib/rules/font-family-no-missing-generic-family-keyword/README.md b/lib/rules/font-family-no-missing-generic-family-keyword/README.md index a7ba77f294..795299db42 100644 --- a/lib/rules/font-family-no-missing-generic-family-keyword/README.md +++ b/lib/rules/font-family-no-missing-generic-family-keyword/README.md @@ -70,7 +70,7 @@ a { font-family: Helvetica, var(--font-family-common); } Given: -``` +```json ["custom-font"] ``` diff --git a/lib/rules/function-allowed-list/README.md b/lib/rules/function-allowed-list/README.md index 92b304d491..9dff1f6a69 100644 --- a/lib/rules/function-allowed-list/README.md +++ b/lib/rules/function-allowed-list/README.md @@ -17,7 +17,7 @@ If a string is surrounded with `"/"` (e.g. `"/^rgb/"`), it is interpreted as a r Given: -``` +```json ["scale", "rgba", "linear-gradient"] ``` diff --git a/lib/rules/function-disallowed-list/README.md b/lib/rules/function-disallowed-list/README.md index e6dad004a2..35843b9f08 100644 --- a/lib/rules/function-disallowed-list/README.md +++ b/lib/rules/function-disallowed-list/README.md @@ -17,7 +17,7 @@ If a string is surrounded with `"/"` (e.g. `"/^rgb/"`), it is interpreted as a r Given: -``` +```json ["scale", "rgba", "linear-gradient"] ``` diff --git a/lib/rules/function-name-case/README.md b/lib/rules/function-name-case/README.md index cdac1a71b3..f8ea7e4cb8 100644 --- a/lib/rules/function-name-case/README.md +++ b/lib/rules/function-name-case/README.md @@ -123,7 +123,7 @@ For example, with `"lower"`. Given: -``` +```json ["some-function", "/^get.*$/"] ``` diff --git a/lib/rules/function-url-scheme-allowed-list/README.md b/lib/rules/function-url-scheme-allowed-list/README.md index 64cbbdcfd6..02aa7a836f 100644 --- a/lib/rules/function-url-scheme-allowed-list/README.md +++ b/lib/rules/function-url-scheme-allowed-list/README.md @@ -22,7 +22,7 @@ This rule ignores: Given: -``` +```json ["data", "/^http/"] ``` diff --git a/lib/rules/function-url-scheme-disallowed-list/README.md b/lib/rules/function-url-scheme-disallowed-list/README.md index 11e4d73d7e..3173825650 100644 --- a/lib/rules/function-url-scheme-disallowed-list/README.md +++ b/lib/rules/function-url-scheme-disallowed-list/README.md @@ -22,7 +22,7 @@ This rule ignores: Given: -``` +```json ["ftp", "/^http/"] ``` diff --git a/lib/rules/keyframes-name-pattern/README.md b/lib/rules/keyframes-name-pattern/README.md index cda65c13c1..a9dd78ff16 100644 --- a/lib/rules/keyframes-name-pattern/README.md +++ b/lib/rules/keyframes-name-pattern/README.md @@ -17,7 +17,7 @@ A string will be translated into a RegExp like so `new RegExp(yourString)` —  Given the string: -``` +```json "foo-.+" ``` diff --git a/lib/rules/max-line-length/README.md b/lib/rules/max-line-length/README.md index 8693d2472c..06abbfa374 100644 --- a/lib/rules/max-line-length/README.md +++ b/lib/rules/max-line-length/README.md @@ -126,7 +126,7 @@ Ignore any line that matches the given regex pattern, regardless of whether it i Given: -``` +```json "/^@import\\s+/" ``` diff --git a/lib/rules/max-nesting-depth/README.md b/lib/rules/max-nesting-depth/README.md index 43e6cdfacd..ff59dc2c35 100644 --- a/lib/rules/max-nesting-depth/README.md +++ b/lib/rules/max-nesting-depth/README.md @@ -284,7 +284,7 @@ Ignore the specified at-rules. For example, with `1` and given: -``` +```json ["/^my-/", "media"] ``` diff --git a/lib/rules/media-feature-name-allowed-list/README.md b/lib/rules/media-feature-name-allowed-list/README.md index 255b865f1f..7fa546d046 100644 --- a/lib/rules/media-feature-name-allowed-list/README.md +++ b/lib/rules/media-feature-name-allowed-list/README.md @@ -15,7 +15,7 @@ Specify a list of allowed media feature names. Given: -``` +```json ["max-width", "/^my-/"] ``` diff --git a/lib/rules/media-feature-name-disallowed-list/README.md b/lib/rules/media-feature-name-disallowed-list/README.md index cd232e1736..fa3d747afc 100644 --- a/lib/rules/media-feature-name-disallowed-list/README.md +++ b/lib/rules/media-feature-name-disallowed-list/README.md @@ -15,7 +15,7 @@ Specify a list of disallowed media feature names. Given: -``` +```json ["max-width", "/^my-/"] ``` diff --git a/lib/rules/media-feature-name-no-unknown/README.md b/lib/rules/media-feature-name-no-unknown/README.md index 8b57d1efaf..86cfafe22b 100644 --- a/lib/rules/media-feature-name-no-unknown/README.md +++ b/lib/rules/media-feature-name-no-unknown/README.md @@ -67,7 +67,7 @@ The following patterns are _not_ considered violations: Given: -``` +```json ["/^my-/", "custom"] ``` diff --git a/lib/rules/media-feature-name-value-allowed-list/README.md b/lib/rules/media-feature-name-value-allowed-list/README.md index e81fd3cf29..a2f77c9ec0 100644 --- a/lib/rules/media-feature-name-value-allowed-list/README.md +++ b/lib/rules/media-feature-name-value-allowed-list/README.md @@ -27,7 +27,7 @@ as a regular expression. For example, `/width$/` will match `max-width` and Given: -``` +```json { "min-width": ["768px", "1024px"], "/resolution/": ["/dpcm$/"] diff --git a/lib/rules/number-max-precision/README.md b/lib/rules/number-max-precision/README.md index c62309264c..415f27ba03 100644 --- a/lib/rules/number-max-precision/README.md +++ b/lib/rules/number-max-precision/README.md @@ -54,7 +54,7 @@ For example, with `2`. Given: -``` +```json ["/^my-/", "%"] ``` diff --git a/lib/rules/property-allowed-list/README.md b/lib/rules/property-allowed-list/README.md index e2b2250e1a..8a61f07655 100644 --- a/lib/rules/property-allowed-list/README.md +++ b/lib/rules/property-allowed-list/README.md @@ -19,7 +19,7 @@ If a string is surrounded with `"/"` (e.g. `"/^background/"`), it is interpreted Given: -``` +```json ["display", "animation", "/^background/"] ``` diff --git a/lib/rules/property-disallowed-list/README.md b/lib/rules/property-disallowed-list/README.md index 81edc3444f..86c89bd760 100644 --- a/lib/rules/property-disallowed-list/README.md +++ b/lib/rules/property-disallowed-list/README.md @@ -17,7 +17,7 @@ If a string is surrounded with `"/"` (e.g. `"/^background/"`), it is interpreted Given: -``` +```json ["text-rendering", "animation", "/^background/"] ``` diff --git a/lib/rules/property-no-unknown/README.md b/lib/rules/property-no-unknown/README.md index f5f82d4e40..0937c80f39 100644 --- a/lib/rules/property-no-unknown/README.md +++ b/lib/rules/property-no-unknown/README.md @@ -81,7 +81,7 @@ a { Given: -``` +```json ["/^my-/", "custom"] ``` @@ -114,7 +114,7 @@ Skips checking properties of the given selectors against this rule. Given: -``` +```json [":root"] ``` @@ -133,7 +133,7 @@ Ignores properties nested within specified at-rules. Given: -``` +```json ["supports"] ``` diff --git a/lib/rules/property-no-vendor-prefix/README.md b/lib/rules/property-no-vendor-prefix/README.md index 7833e0f16f..dc8b132ca6 100644 --- a/lib/rules/property-no-vendor-prefix/README.md +++ b/lib/rules/property-no-vendor-prefix/README.md @@ -53,7 +53,7 @@ a { -webkit-touch-callout: none; } Given: -``` +```json ["transform", "columns"] ``` diff --git a/lib/rules/selector-attribute-name-disallowed-list/README.md b/lib/rules/selector-attribute-name-disallowed-list/README.md index 36f7a2a759..fec157852b 100644 --- a/lib/rules/selector-attribute-name-disallowed-list/README.md +++ b/lib/rules/selector-attribute-name-disallowed-list/README.md @@ -15,7 +15,7 @@ Specify a list of disallowed attribute names. Given: -``` +```json ["class", "id", "/^data-/"] ``` diff --git a/lib/rules/selector-attribute-operator-allowed-list/README.md b/lib/rules/selector-attribute-operator-allowed-list/README.md index 557d9ec0a8..239d1eca1b 100644 --- a/lib/rules/selector-attribute-operator-allowed-list/README.md +++ b/lib/rules/selector-attribute-operator-allowed-list/README.md @@ -15,7 +15,7 @@ Specify a list of allowed attribute operators. Given: -``` +```json ["=", "|="] ``` diff --git a/lib/rules/selector-attribute-operator-disallowed-list/README.md b/lib/rules/selector-attribute-operator-disallowed-list/README.md index 62cbb512bc..07a1093468 100644 --- a/lib/rules/selector-attribute-operator-disallowed-list/README.md +++ b/lib/rules/selector-attribute-operator-disallowed-list/README.md @@ -15,7 +15,7 @@ Specify a list of disallowed attribute operators. Given: -``` +```json ["*="] ``` diff --git a/lib/rules/selector-class-pattern/README.md b/lib/rules/selector-class-pattern/README.md index e7da1ed34e..4699801c8a 100644 --- a/lib/rules/selector-class-pattern/README.md +++ b/lib/rules/selector-class-pattern/README.md @@ -77,7 +77,7 @@ For example, with `true`. Given the string: -``` +```json "^[A-Z]+$" ``` diff --git a/lib/rules/selector-combinator-allowed-list/README.md b/lib/rules/selector-combinator-allowed-list/README.md index 5fdce86ffa..5e1fec1676 100644 --- a/lib/rules/selector-combinator-allowed-list/README.md +++ b/lib/rules/selector-combinator-allowed-list/README.md @@ -19,7 +19,7 @@ This rule ignores [reference combinators](https://www.w3.org/TR/selectors4/#idre Given: -``` +```json [">", " "] ``` diff --git a/lib/rules/selector-combinator-disallowed-list/README.md b/lib/rules/selector-combinator-disallowed-list/README.md index ae4fe2a419..e0c727ba9d 100644 --- a/lib/rules/selector-combinator-disallowed-list/README.md +++ b/lib/rules/selector-combinator-disallowed-list/README.md @@ -19,7 +19,7 @@ This rule ignores [reference combinators](https://www.w3.org/TR/selectors4/#idre Given: -``` +```json [">", " "] ``` diff --git a/lib/rules/selector-disallowed-list/README.md b/lib/rules/selector-disallowed-list/README.md index ca20b594f1..4a1eccee70 100644 --- a/lib/rules/selector-disallowed-list/README.md +++ b/lib/rules/selector-disallowed-list/README.md @@ -17,8 +17,8 @@ If a string is surrounded with `"/"` (e.g. `"/\.foo/"`), it is interpreted as a Given: -``` -["a > .foo", /\[data-.+]/] +```json +["a > .foo", "/\\[data-.+]/"] ``` The following patterns are considered violations: diff --git a/lib/rules/selector-id-pattern/README.md b/lib/rules/selector-id-pattern/README.md index cab22b7d18..408dbc4041 100644 --- a/lib/rules/selector-id-pattern/README.md +++ b/lib/rules/selector-id-pattern/README.md @@ -19,7 +19,7 @@ The selector value _after `#`_ will be checked. No need to include `#` in your p Given the string: -``` +```json "foo-[a-z]+" ``` diff --git a/lib/rules/selector-max-attribute/README.md b/lib/rules/selector-max-attribute/README.md index cee0f86507..165dd18d74 100644 --- a/lib/rules/selector-max-attribute/README.md +++ b/lib/rules/selector-max-attribute/README.md @@ -94,7 +94,7 @@ The following patterns are _not_ considered violations: Given: -``` +```json ["/^my-/", "dir"] ``` diff --git a/lib/rules/selector-max-id/README.md b/lib/rules/selector-max-id/README.md index 301fe42f45..5f06ea2f96 100644 --- a/lib/rules/selector-max-id/README.md +++ b/lib/rules/selector-max-id/README.md @@ -81,8 +81,8 @@ Ignore selectors inside of specified [functional pseudo-classes](https://drafts. Given: -```js -[":not", /^:(h|H)as$/]; +```json +[":not", "/^:(h|H)as$/"] ``` The following patterns are considered violations: diff --git a/lib/rules/selector-max-specificity/README.md b/lib/rules/selector-max-specificity/README.md index 476a99eba4..41b2881b92 100755 --- a/lib/rules/selector-max-specificity/README.md +++ b/lib/rules/selector-max-specificity/README.md @@ -94,11 +94,11 @@ div {} Given: -``` +```json [ "0,2,0", { - ignoreSelectors: [":global", ":local", "/my-/"] + "ignoreSelectors": [":global", ":local", "/my-/"] } ] ``` diff --git a/lib/rules/selector-max-type/README.md b/lib/rules/selector-max-type/README.md index c15c9de3c0..f6af2aced2 100644 --- a/lib/rules/selector-max-type/README.md +++ b/lib/rules/selector-max-type/README.md @@ -155,7 +155,7 @@ div a + span {} Given: -``` +```json ["/^my-/", "custom"] ``` diff --git a/lib/rules/selector-nested-pattern/README.md b/lib/rules/selector-nested-pattern/README.md index fc223497cd..5b6808f140 100644 --- a/lib/rules/selector-nested-pattern/README.md +++ b/lib/rules/selector-nested-pattern/README.md @@ -24,7 +24,7 @@ The selector value will be checked in its entirety. If you'd like to allow for c Given the string: -``` +```json "^&:(?:hover|focus)$" ``` diff --git a/lib/rules/selector-no-vendor-prefix/README.md b/lib/rules/selector-no-vendor-prefix/README.md index 8555ec6d10..e53b94d1ea 100644 --- a/lib/rules/selector-no-vendor-prefix/README.md +++ b/lib/rules/selector-no-vendor-prefix/README.md @@ -49,7 +49,7 @@ Ignore vendor prefixes for selectors. Given: -``` +```json ["::-webkit-input-placeholder", "/-moz-.*/"] ``` diff --git a/lib/rules/selector-pseudo-class-allowed-list/README.md b/lib/rules/selector-pseudo-class-allowed-list/README.md index 5932b92623..e8afeca0b1 100644 --- a/lib/rules/selector-pseudo-class-allowed-list/README.md +++ b/lib/rules/selector-pseudo-class-allowed-list/README.md @@ -19,7 +19,7 @@ If a string is surrounded with `"/"` (e.g. `"/^nth-/"`), it is interpreted as a Given: -``` +```json ["hover", "/^nth-/"] ``` diff --git a/lib/rules/selector-pseudo-class-disallowed-list/README.md b/lib/rules/selector-pseudo-class-disallowed-list/README.md index dbd5a98d31..c0ad174a4a 100644 --- a/lib/rules/selector-pseudo-class-disallowed-list/README.md +++ b/lib/rules/selector-pseudo-class-disallowed-list/README.md @@ -19,7 +19,7 @@ If a string is surrounded with `"/"` (e.g. `"/^nth-/"`), it is interpreted as a Given: -``` +```json ["hover", "/^nth-/"] ``` diff --git a/lib/rules/selector-pseudo-class-no-unknown/README.md b/lib/rules/selector-pseudo-class-no-unknown/README.md index 7f6ea43f8a..6c3d8a1759 100644 --- a/lib/rules/selector-pseudo-class-no-unknown/README.md +++ b/lib/rules/selector-pseudo-class-no-unknown/README.md @@ -62,7 +62,7 @@ input:-moz-placeholder {} Given: -``` +```json ["/^my-/", "pseudo-class"] ``` diff --git a/lib/rules/selector-pseudo-element-allowed-list/README.md b/lib/rules/selector-pseudo-element-allowed-list/README.md index c920727f8a..1d289ce0b6 100644 --- a/lib/rules/selector-pseudo-element-allowed-list/README.md +++ b/lib/rules/selector-pseudo-element-allowed-list/README.md @@ -20,7 +20,7 @@ This rule ignores: Given: -``` +```json ["before", "/^my-/i"] ``` diff --git a/lib/rules/selector-pseudo-element-disallowed-list/README.md b/lib/rules/selector-pseudo-element-disallowed-list/README.md index 36516836e7..d3c9d56c26 100644 --- a/lib/rules/selector-pseudo-element-disallowed-list/README.md +++ b/lib/rules/selector-pseudo-element-disallowed-list/README.md @@ -20,7 +20,7 @@ This rule ignores: Given: -``` +```json ["before", "/^my-/i"] ``` diff --git a/lib/rules/selector-pseudo-element-no-unknown/README.md b/lib/rules/selector-pseudo-element-no-unknown/README.md index f1e3b0e7e2..c1912a7de5 100644 --- a/lib/rules/selector-pseudo-element-no-unknown/README.md +++ b/lib/rules/selector-pseudo-element-no-unknown/README.md @@ -62,7 +62,7 @@ input::-moz-placeholder {} Given: -``` +```json ["/^my-/", "pseudo-element"] ``` diff --git a/lib/rules/selector-type-case/README.md b/lib/rules/selector-type-case/README.md index 1c67dccea5..97d9a252bc 100644 --- a/lib/rules/selector-type-case/README.md +++ b/lib/rules/selector-type-case/README.md @@ -73,7 +73,7 @@ LI {} Given: -``` +```json ["$childClass", "/(p|P)arent.*/"] ``` diff --git a/lib/rules/selector-type-no-unknown/README.md b/lib/rules/selector-type-no-unknown/README.md index 26b2f43eb5..6e04705b8d 100644 --- a/lib/rules/selector-type-no-unknown/README.md +++ b/lib/rules/selector-type-no-unknown/README.md @@ -93,7 +93,7 @@ unknown {} Given: -``` +```json ["/^my-/", "custom-namespace"] ``` @@ -118,7 +118,7 @@ my-other-namespace|unknown {} Given: -``` +```json ["/^my-/", "custom-type"] ``` diff --git a/lib/rules/unit-allowed-list/README.md b/lib/rules/unit-allowed-list/README.md index 3f5e2de93c..d8c04b4026 100644 --- a/lib/rules/unit-allowed-list/README.md +++ b/lib/rules/unit-allowed-list/README.md @@ -15,7 +15,7 @@ a { width: 100px; } Given: -``` +```json ["px", "em", "deg"] ``` @@ -73,10 +73,10 @@ For example, with `["px", "em"]`. Given: -``` +```json { - "rem": [ "line-height", "/^border/" ], - "%": [ "width" ] + "rem": ["line-height", "/^border/"], + "%": ["width"] } ``` diff --git a/lib/rules/unit-disallowed-list/README.md b/lib/rules/unit-disallowed-list/README.md index e38d426968..e1a774c784 100644 --- a/lib/rules/unit-disallowed-list/README.md +++ b/lib/rules/unit-disallowed-list/README.md @@ -15,7 +15,7 @@ a { width: 100px; } Given: -``` +```json ["px", "em", "deg"] ``` @@ -68,10 +68,10 @@ For example, with `["px", "vmin"]`. Given: -``` +```json { - "px": [ "font-size", "/^border/" ], - "vmin": [ "width" ] + "px": ["font-size", "/^border/"], + "vmin": ["width"] } ``` @@ -117,10 +117,10 @@ For example, with `["px", "dpi"]`. Given: -``` +```json { - "px": [ "min-width", "/height$/" ], - "dpi": [ "resolution" ] + "px": ["min-width", "/height$/"], + "dpi": ["resolution"] } ``` diff --git a/lib/rules/unit-no-unknown/README.md b/lib/rules/unit-no-unknown/README.md index 42012087e5..cca7c287f2 100644 --- a/lib/rules/unit-no-unknown/README.md +++ b/lib/rules/unit-no-unknown/README.md @@ -67,7 +67,7 @@ a { Given: -``` +```json ["/^my-/", "custom"] ``` @@ -98,7 +98,7 @@ a { Given: -``` +```json ["image-set", "/^my-/", "/^YOUR-/i"] ``` diff --git a/lib/rules/value-keyword-case/README.md b/lib/rules/value-keyword-case/README.md index cc0823e569..01d63cac80 100644 --- a/lib/rules/value-keyword-case/README.md +++ b/lib/rules/value-keyword-case/README.md @@ -123,7 +123,7 @@ For example, with `"lower"`. Given: -``` +```json ["Block", "/^(f|F)lex$/"] ``` diff --git a/lib/rules/value-no-vendor-prefix/README.md b/lib/rules/value-no-vendor-prefix/README.md index 9a08e40582..b75b1c82f7 100644 --- a/lib/rules/value-no-vendor-prefix/README.md +++ b/lib/rules/value-no-vendor-prefix/README.md @@ -57,7 +57,7 @@ a { background: linear-gradient(bottom, #000, #fff); } Given: -``` +```json ["grab", "max-content"] ``` From 52f99c6551fe823bfa7fd06dc24a09927057fbd5 Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Sat, 15 May 2021 08:29:47 +0100 Subject: [PATCH 009/194] Remove syntax option (#5297) --- docs/user-guide/usage/cli.md | 4 - docs/user-guide/usage/options.md | 23 +- docs/user-guide/usage/postcss-plugin.md | 2 +- lib/__tests__/__snapshots__/cli.test.js.snap | 7 - .../fixtures/extension-sensitive.html | 19 - .../fixtures/extension-sensitive.less | 4 - .../fixtures/extension-sensitive.sass | 3 - .../fixtures/extension-sensitive.scss | 4 - .../fixtures/extension-sensitive.sss | 4 - lib/__tests__/fixtures/extension-sensitive.ts | 6 - lib/__tests__/fixtures/html.js | 5 - lib/__tests__/fixtures/style-tag.html | 13 - lib/__tests__/fixtures/style-tag.markdown | 7 - lib/__tests__/fixtures/style-tag.vue | 13 - lib/__tests__/standalone-fix.test.js | 17 - lib/__tests__/standalone-syntax.test.js | 294 ++---------- lib/__tests__/standalone.test.js | 32 -- lib/__tests__/syntaxes.test.js | 17 - lib/cli.js | 7 - lib/getPostcssResult.js | 58 +-- .../alpha-value-notation/__tests__/index.js | 5 +- .../at-rule-allowed-list/__tests__/index.js | 4 +- .../__tests__/index.js | 4 +- .../__tests__/index.js | 6 +- .../at-rule-name-case/__tests__/index.js | 4 +- .../__tests__/index.js | 7 +- .../__tests__/index.js | 7 +- .../at-rule-no-unknown/__tests__/index.js | 4 +- .../__tests__/index.js | 4 +- .../__tests__/index.js | 4 +- lib/rules/block-no-empty/__tests__/index.js | 9 +- .../__tests__/index.js | 5 +- lib/rules/color-hex-case/__tests__/index.js | 2 + lib/rules/color-hex-length/__tests__/index.js | 2 + lib/rules/color-no-hex/__tests__/index.js | 1 + .../color-no-invalid-hex/__tests__/index.js | 1 + .../__tests__/index.js | 13 +- lib/rules/comment-no-empty/__tests__/index.js | 4 +- lib/rules/comment-pattern/__tests__/index.js | 4 +- .../__tests__/index.js | 11 +- .../__tests__/index.js | 7 +- .../__tests__/index.js | 2 + .../__tests__/index.js | 2 + .../__tests__/index.js | 2 + .../__tests__/index.js | 2 + .../__tests__/index.js | 4 +- .../__tests__/index.js | 7 +- .../__tests__/index.js | 12 +- .../font-weight-notation/__tests__/index.js | 4 +- .../__tests__/index.js | 4 +- .../__tests__/index.js | 8 +- .../__tests__/index.js | 8 +- .../__tests__/index.js | 10 +- .../__tests__/index.js | 10 +- .../__tests__/index.js | 4 +- .../__tests__/index.js | 2 + .../function-url-quotes/__tests__/index.js | 2 + .../__tests__/index.js | 10 +- .../hue-degree-notation/__tests__/index.js | 5 +- lib/rules/indentation/__tests__/functions.js | 4 +- lib/rules/indentation/__tests__/html.js | 5 + lib/rules/indentation/__tests__/javascript.js | 3 + .../length-zero-no-unit/__tests__/index.js | 7 +- lib/rules/max-empty-lines/__tests__/index.js | 26 +- lib/rules/max-line-length/__tests__/index.js | 6 +- .../max-nesting-depth/__tests__/index.js | 4 +- .../__tests__/index.js | 7 +- .../__tests__/index.js | 11 +- .../__tests__/index.js | 7 +- .../__tests__/index.js | 7 +- .../__tests__/index.js | 7 +- .../__tests__/index.js | 5 +- .../no-duplicate-selectors/__tests__/index.js | 1 + lib/rules/no-empty-source/__tests__/index.js | 1 + .../no-eol-whitespace/__tests__/index.js | 10 +- .../no-extra-semicolons/__tests__/index.js | 5 +- .../__tests__/index.js | 11 +- .../__tests__/index.js | 3 +- .../__tests__/index.js | 6 +- lib/rules/property-case/__tests__/index.js | 11 +- .../property-no-unknown/__tests__/index.js | 9 +- .../rule-empty-line-before/__tests__/index.js | 4 +- .../__tests__/index.js | 11 +- .../selector-class-pattern/__tests__/index.js | 7 +- .../__tests__/index.js | 9 +- .../__tests__/index.js | 9 +- .../__tests__/index.js | 7 +- .../selector-id-pattern/__tests__/index.js | 4 +- .../__tests__/index.js | 7 +- .../__tests__/index.js | 4 +- .../selector-max-attribute/__tests__/index.js | 4 +- .../selector-max-class/__tests__/index.js | 7 +- .../__tests__/index.js | 7 +- .../__tests__/index.js | 7 +- lib/rules/selector-max-id/__tests__/index.js | 9 +- .../__tests__/index.js | 6 +- .../__tests__/index.js | 9 +- .../selector-max-type/__tests__/index.js | 7 +- .../selector-max-universal/__tests__/index.js | 4 +- .../__tests__/index.js | 4 +- .../__tests__/index.js | 7 +- .../__tests__/index.js | 4 +- .../__tests__/index.js | 6 +- .../__tests__/index.js | 4 +- .../__tests__/index.js | 7 +- .../__tests__/index.js | 4 +- .../__tests__/index.js | 6 +- .../__tests__/index.js | 4 +- .../__tests__/index.js | 4 +- .../selector-type-case/__tests__/index.js | 4 +- .../__tests__/index.js | 8 +- .../__tests__/index.js | 7 +- .../string-no-newline/__tests__/index.js | 5 +- lib/rules/string-quotes/__tests__/index.js | 7 +- lib/rules/unicode-bom/__tests__/index.js | 4 + lib/rules/unit-case/__tests__/index.js | 11 +- lib/rules/unit-no-unknown/__tests__/index.js | 7 +- .../value-keyword-case/__tests__/index.js | 13 +- .../value-no-vendor-prefix/__tests__/index.js | 7 +- lib/syntaxes/index.js | 16 - lib/syntaxes/syntax-css-in-js.js | 3 - lib/syntaxes/syntax-html.js | 8 - lib/syntaxes/syntax-less.js | 3 - lib/syntaxes/syntax-markdown.js | 8 - lib/syntaxes/syntax-sass.js | 3 - lib/syntaxes/syntax-scss.js | 3 - lib/syntaxes/syntax-sugarss.js | 3 - package-lock.json | 448 ++++++++---------- package.json | 16 +- system-tests/002/fs.test.js | 3 + system-tests/002/no-fs.test.js | 4 +- types/global.d.ts | 5 - types/postcss-syntax/index.d.ts | 7 - 133 files changed, 694 insertions(+), 982 deletions(-) delete mode 100644 lib/__tests__/fixtures/extension-sensitive.html delete mode 100644 lib/__tests__/fixtures/extension-sensitive.less delete mode 100644 lib/__tests__/fixtures/extension-sensitive.sass delete mode 100644 lib/__tests__/fixtures/extension-sensitive.scss delete mode 100644 lib/__tests__/fixtures/extension-sensitive.sss delete mode 100644 lib/__tests__/fixtures/extension-sensitive.ts delete mode 100644 lib/__tests__/fixtures/html.js delete mode 100644 lib/__tests__/fixtures/style-tag.html delete mode 100644 lib/__tests__/fixtures/style-tag.markdown delete mode 100644 lib/__tests__/fixtures/style-tag.vue delete mode 100644 lib/__tests__/syntaxes.test.js delete mode 100644 lib/syntaxes/index.js delete mode 100644 lib/syntaxes/syntax-css-in-js.js delete mode 100644 lib/syntaxes/syntax-html.js delete mode 100644 lib/syntaxes/syntax-less.js delete mode 100644 lib/syntaxes/syntax-markdown.js delete mode 100644 lib/syntaxes/syntax-sass.js delete mode 100644 lib/syntaxes/syntax-scss.js delete mode 100644 lib/syntaxes/syntax-sugarss.js delete mode 100644 types/global.d.ts delete mode 100644 types/postcss-syntax/index.d.ts diff --git a/docs/user-guide/usage/cli.md b/docs/user-guide/usage/cli.md index fb1d663914..5e7d10b4da 100644 --- a/docs/user-guide/usage/cli.md +++ b/docs/user-guide/usage/cli.md @@ -100,10 +100,6 @@ A filename to assign the input. More info about this option in [standard options Accept stdin input even if it is empty. -### `--syntax, -s` - -Specify a syntax. More info about this option in [standard options](options.md#syntax). - ### `--version, -v` Show the currently installed version of stylelint. diff --git a/docs/user-guide/usage/options.md b/docs/user-guide/usage/options.md index 33894a04f5..2f6676db47 100644 --- a/docs/user-guide/usage/options.md +++ b/docs/user-guide/usage/options.md @@ -87,36 +87,17 @@ If the number of warnings exceeds this value, the: - CLI process exits with code `2` - Node.js API adds a [`maxWarningsExceeded`](node-api.md#maxwarningsexceeded) property to the returned data -## `syntax` - -CLI flags: `--syntax, -s` - -Specify a syntax. Options: - -- `css` -- `css-in-js` -- `html` -- `less` -- `markdown` -- `sass` -- `scss` -- `sugarss` - -If you do not specify a syntax, stylelint will automatically infer the syntaxes. - -Only use this option if you want to force a specific syntax. - ## `customSyntax` CLI flag: `--custom-syntax` -Specify a custom syntax to use on your code. Use this option if you want to force a specific syntax that's not already built into stylelint. +Specify a custom syntax to use on your code. This option should be a string that resolves to a JS module that exports a [PostCSS-compatible syntax](https://github.com/postcss/postcss#syntaxes). The string can be a module name (like `my-module`) or a path to a JS file (like `path/to/my-module.js`). Using the Node.js API, the `customSyntax` option can also accept a [Syntax object](https://github.com/postcss/postcss/blob/abfaa7122a0f480bc5be0905df3c24a6a51a82d9/lib/postcss.d.ts#L223-L232). Stylelint treats the `parse` property as a required value. -Note that stylelint can provide no guarantee that core rules work with syntaxes other than the defaults listed for the `syntax` option above. +Note that stylelint can provide no guarantee that core rules work with syntaxes. ## `disableDefaultIgnores` diff --git a/docs/user-guide/usage/postcss-plugin.md b/docs/user-guide/usage/postcss-plugin.md index 92c5daf020..158414c735 100644 --- a/docs/user-guide/usage/postcss-plugin.md +++ b/docs/user-guide/usage/postcss-plugin.md @@ -6,7 +6,7 @@ _However, if a dedicated stylelint task runner plugin [is available](../integrat ## Options -The PostCSS plugin uses the [standard options](options.md), _except the `syntax` and `customSyntax` options_. Instead, the syntax must be set within the [PostCSS options](https://github.com/postcss/postcss#options) as there can only be one parser/syntax in a pipeline. +The PostCSS plugin uses the [standard options](options.md), _except the `customSyntax` option_. Instead, the syntax must be set within the [PostCSS options](https://github.com/postcss/postcss#options) as there can only be one parser/syntax in a pipeline. ## Usage examples diff --git a/lib/__tests__/__snapshots__/cli.test.js.snap b/lib/__tests__/__snapshots__/cli.test.js.snap index 234a0320f2..74552c2a47 100644 --- a/lib/__tests__/__snapshots__/cli.test.js.snap +++ b/lib/__tests__/__snapshots__/cli.test.js.snap @@ -47,13 +47,6 @@ exports[`CLI --help 1`] = ` Pattern of files to ignore (in addition to those in .stylelintignore) - --syntax, -s - - Specify a syntax. Options: \\"css\\", \\"css-in-js\\", \\"html\\", \\"less\\", - \\"markdown\\", \\"sass\\", \\"scss\\", \\"sugarss\\". If you do not specify a syntax, - syntaxes will be automatically inferred by the file extensions - and file content. - --fix Automatically fix violations of certain rules. diff --git a/lib/__tests__/fixtures/extension-sensitive.html b/lib/__tests__/fixtures/extension-sensitive.html deleted file mode 100644 index 93d18679c7..0000000000 --- a/lib/__tests__/fixtures/extension-sensitive.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - -import styled from 'styled-components'; - -export default styled.div` - color: #00 -` diff --git a/lib/__tests__/fixtures/extension-sensitive.less b/lib/__tests__/fixtures/extension-sensitive.less deleted file mode 100644 index 5f8d06f433..0000000000 --- a/lib/__tests__/fixtures/extension-sensitive.less +++ /dev/null @@ -1,4 +0,0 @@ -/* Cannot trigger a syntax warning */ -a { - color: #00; -} diff --git a/lib/__tests__/fixtures/extension-sensitive.sass b/lib/__tests__/fixtures/extension-sensitive.sass deleted file mode 100644 index 8c6641550e..0000000000 --- a/lib/__tests__/fixtures/extension-sensitive.sass +++ /dev/null @@ -1,3 +0,0 @@ -/* Cannot trigger a syntax warning */ -a - color: #00 diff --git a/lib/__tests__/fixtures/extension-sensitive.scss b/lib/__tests__/fixtures/extension-sensitive.scss deleted file mode 100644 index 41e7f7afc9..0000000000 --- a/lib/__tests__/fixtures/extension-sensitive.scss +++ /dev/null @@ -1,4 +0,0 @@ -/* Cannot trigger a syntax warning */ -a { - color: #00; -} diff --git a/lib/__tests__/fixtures/extension-sensitive.sss b/lib/__tests__/fixtures/extension-sensitive.sss deleted file mode 100644 index 14233187cc..0000000000 --- a/lib/__tests__/fixtures/extension-sensitive.sss +++ /dev/null @@ -1,4 +0,0 @@ -/* Cannot trigger a syntax warning */ -a - color: #00 - diff --git a/lib/__tests__/fixtures/extension-sensitive.ts b/lib/__tests__/fixtures/extension-sensitive.ts deleted file mode 100644 index 257768ad6d..0000000000 --- a/lib/__tests__/fixtures/extension-sensitive.ts +++ /dev/null @@ -1,6 +0,0 @@ -import styled from 'styled-components'; - -/* Cannot trigger a syntax warning */ -export default styled.div` - color: #00; -`; diff --git a/lib/__tests__/fixtures/html.js b/lib/__tests__/fixtures/html.js deleted file mode 100644 index 5ac0bb3d4d..0000000000 --- a/lib/__tests__/fixtures/html.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -let html; - -html.replace(); diff --git a/lib/__tests__/fixtures/style-tag.html b/lib/__tests__/fixtures/style-tag.html deleted file mode 100644 index 2d5b05a74f..0000000000 --- a/lib/__tests__/fixtures/style-tag.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - -Document - - - - - diff --git a/lib/__tests__/fixtures/style-tag.markdown b/lib/__tests__/fixtures/style-tag.markdown deleted file mode 100644 index 081f0be2cb..0000000000 --- a/lib/__tests__/fixtures/style-tag.markdown +++ /dev/null @@ -1,7 +0,0 @@ -Markdown -==== - -```SugarSS -/* should trigger warning ("block-no-empty") but is parsable - should not trigger syntax error */ -a -``` diff --git a/lib/__tests__/fixtures/style-tag.vue b/lib/__tests__/fixtures/style-tag.vue deleted file mode 100644 index 2061a509e4..0000000000 --- a/lib/__tests__/fixtures/style-tag.vue +++ /dev/null @@ -1,13 +0,0 @@ - - diff --git a/lib/__tests__/standalone-fix.test.js b/lib/__tests__/standalone-fix.test.js index c244f9a34b..c1b7ab92b9 100644 --- a/lib/__tests__/standalone-fix.test.js +++ b/lib/__tests__/standalone-fix.test.js @@ -25,23 +25,6 @@ it('outputs fixed code when input is code string', async () => { expect(result.output).toBe('a { color: red; }'); }); -it('does not modify shorthand object syntax when autofixing', async () => { - const codeString = `const width = '100px'; const x =
Hi
`; - - const result = await standalone({ - code: codeString, - syntax: 'css-in-js', - config: { - rules: { - indentation: 2, - }, - }, - fix: true, - }); - - expect(result.output).toBe(codeString); -}); - it('apply indentation autofix at last', async () => { const result = await standalone({ code: diff --git a/lib/__tests__/standalone-syntax.test.js b/lib/__tests__/standalone-syntax.test.js index 3af5cba73d..2ca0174af0 100644 --- a/lib/__tests__/standalone-syntax.test.js +++ b/lib/__tests__/standalone-syntax.test.js @@ -5,252 +5,10 @@ const path = require('path'); const replaceBackslashes = require('../testUtils/replaceBackslashes'); const standalone = require('../standalone'); const stringFormatter = require('../formatters/stringFormatter'); -const stripAnsi = require('strip-ansi'); const { promisify } = require('util'); const fixturesPath = replaceBackslashes(path.join(__dirname, 'fixtures')); -it('standalone with css syntax', () => { - const config = { - rules: { - 'block-no-empty': true, - }, - }; - - return standalone({ - config, - code: 'a {}', - syntax: 'css', - formatter: stringFormatter, - }).then((linted) => { - const strippedOutput = stripAnsi(linted.output); - - expect(typeof linted.output).toBe('string'); - expect(strippedOutput).toContain('1:3'); - expect(strippedOutput).toContain('block-no-empty'); - }); -}); - -it('standalone with scss syntax', () => { - const config = { - rules: { - 'block-no-empty': true, - }, - }; - - return standalone({ - config, - code: '$foo: bar; // foo;\nb {}', - syntax: 'scss', - formatter: stringFormatter, - }).then((linted) => { - const strippedOutput = stripAnsi(linted.output); - - expect(typeof linted.output).toBe('string'); - expect(strippedOutput).toContain('2:3'); - expect(strippedOutput).toContain('block-no-empty'); - }); -}); - -it('standalone with sugarss syntax', () => { - const config = { - rules: { - 'length-zero-no-unit': true, - }, - }; - - return standalone({ - config, - code: '.one\n color: black\n top: 0px\n.two', - syntax: 'sugarss', - formatter: stringFormatter, - }).then((linted) => { - const strippedOutput = stripAnsi(linted.output); - - expect(typeof linted.output).toBe('string'); - expect(strippedOutput).toContain('3:9'); - expect(strippedOutput).toContain('length-zero-no-unit'); - }); -}); - -it('standalone with Less syntax', () => { - const config = { - rules: { - 'block-no-empty': true, - }, - }; - - return standalone({ - config, - code: '@foo: bar; // foo;\nb {}', - syntax: 'less', - formatter: stringFormatter, - }).then((linted) => { - const strippedOutput = stripAnsi(linted.output); - - expect(typeof linted.output).toBe('string'); - expect(strippedOutput).toContain('2:3'); - expect(strippedOutput).toContain('block-no-empty'); - }); -}); - -it('standalone with postcss-html syntax', () => { - const config = { - rules: { - 'no-empty-source': true, - 'comment-empty-line-before': 'always', - 'rule-empty-line-before': [ - 'always', - { - ignore: ['inside-block'], - }, - ], - 'at-rule-empty-line-before': [ - 'always', - { - except: ['inside-block'], - }, - ], - }, - }; - - return standalone({ - config, - customSyntax: 'postcss-html', - files: [ - `${fixturesPath}/at-rule-empty-line-before.html`, - `${fixturesPath}/comment-empty-line-before.html`, - `${fixturesPath}/no-empty-source.html`, - `${fixturesPath}/rule-empty-line-before.html`, - ], - formatter: stringFormatter, - }).then((linted) => { - const results = linted.results; - - expect(results).toHaveLength(4); - - const atRuleEmptyLineBeforeResult = results.find((r) => - /[/\\]at-rule-empty-line-before\.html$/.test(r.source), - ); - - expect(atRuleEmptyLineBeforeResult.errored).toBeFalsy(); - expect(atRuleEmptyLineBeforeResult.warnings).toHaveLength(0); - - const commentEmptyLineBeforeResult = results.find((r) => - /[/\\]comment-empty-line-before\.html$/.test(r.source), - ); - - expect(commentEmptyLineBeforeResult.errored).toBeFalsy(); - expect(commentEmptyLineBeforeResult.warnings).toHaveLength(0); - - const noEmptySourceResult = results.find((r) => /[/\\]no-empty-source\.html$/.test(r.source)); - - expect(noEmptySourceResult.errored).toBeFalsy(); - expect(noEmptySourceResult.warnings).toHaveLength(0); - - const ruleEmptyLineBeforeResult = results.find((r) => - /[/\\]rule-empty-line-before\.html$/.test(r.source), - ); - - expect(ruleEmptyLineBeforeResult.errored).toBe(true); - expect(ruleEmptyLineBeforeResult.warnings).toHaveLength(1); - expect(ruleEmptyLineBeforeResult.warnings[0].line).toBe(8); - expect(ruleEmptyLineBeforeResult.warnings[0].rule).toBe('rule-empty-line-before'); - }); -}); - -describe('standalone with syntax set by extension', () => { - it('By extension', () => { - return standalone({ - files: `${fixturesPath}/extension-sensitive.*`, - config: { rules: { 'color-no-invalid-hex': true } }, - }).then(({ results }) => { - // correct number of files - expect(results).toHaveLength(6); - - // parsed each according to its extension - const sssResult = results.find((r) => path.extname(r.source) === '.sss'); - const lessResult = results.find((r) => path.extname(r.source) === '.less'); - const sassResult = results.find((r) => path.extname(r.source) === '.sass'); - const scssResult = results.find((r) => path.extname(r.source) === '.scss'); - const htmlResult = results.find((r) => path.extname(r.source) === '.html'); - const jsResult = results.find((r) => path.extname(r.source) === '.ts'); - - expect(sssResult._postcssResult.root.source.lang).toBe('sugarss'); - expect(lessResult._postcssResult.root.source.lang).toBe('less'); - expect(sassResult._postcssResult.root.source.lang).toBe('sass'); - expect(scssResult._postcssResult.root.source.lang).toBe('scss'); - expect(htmlResult._postcssResult.root.source.lang).toBe('html'); - expect(jsResult._postcssResult.root.source.lang).toBe('jsx'); - - results.forEach((result) => { - expect(result.warnings).toHaveLength(1); - expect(result.warnings[0].rule).toBe('color-no-invalid-hex'); - }); - }); - }); - - it('By extension with config processors to a empty array', () => { - return standalone({ - files: `${fixturesPath}/extension-sensitive.*`, - config: { - rules: { 'color-no-invalid-hex': true }, - processors: [], - }, - }).then(({ results }) => { - // parsed each according to its extension - const sssResult = results.find((r) => path.extname(r.source) === '.sss'); - const lessResult = results.find((r) => path.extname(r.source) === '.less'); - const sassResult = results.find((r) => path.extname(r.source) === '.sass'); - const scssResult = results.find((r) => path.extname(r.source) === '.scss'); - - expect(sssResult._postcssResult.root.source.lang).toBe('sugarss'); - expect(lessResult._postcssResult.root.source.lang).toBe('less'); - expect(sassResult._postcssResult.root.source.lang).toBe('sass'); - expect(scssResult._postcssResult.root.source.lang).toBe('scss'); - }); - }); -}); - -it('standalone with automatic syntax inference', () => { - return standalone({ - files: `${fixturesPath}/style-tag.*`, - config: { - rules: { - 'block-no-empty': true, - }, - }, - }).then((data) => { - const results = data.results; - const htmlResult = results.find((r) => path.extname(r.source) === '.html'); - const vueResult = results.find((r) => path.extname(r.source) === '.vue'); - const mdResult = results.find((r) => path.extname(r.source) === '.markdown'); - - expect(htmlResult.warnings[0].line).toBe(8); - expect(vueResult.warnings[0].line).toBe(3); - expect(mdResult.warnings[0].line).toBe(6); - results.forEach((result) => { - expect(result._postcssResult.css).toEqual(result._postcssResult.root.source.input.css); - expect(result.warnings).toHaveLength(1); - expect(result.warnings[0].rule).toBe('block-no-empty'); - expect(result.warnings[0].column).toBe(1); - }); - }); -}); - -it('standalone with js file contains html', () => { - return standalone({ - files: `${fixturesPath}/html.js`, - config: { - rules: { - 'block-no-empty': true, - }, - }, - }).then((data) => { - expect(data.results[0].errored).toBe(false); - }); -}); - it('standalone with postcss-safe-parser', () => { return standalone({ files: `${fixturesPath}/syntax_error.*`, @@ -340,7 +98,39 @@ it('standalone with path to custom syntax', () => { }); }); -it('standalone should use customSyntax when both customSyntax and syntax are set', () => { +it('unknown custom syntax option', () => { + return standalone({ + customSyntax: 'unknown-module', + code: '', + config: { rules: { 'block-no-empty': 'wahoo' } }, + }) + .then(() => { + throw new Error('should not have succeeded'); + }) + .catch((err) => { + expect(err.message).toBe( + 'Cannot resolve custom syntax module unknown-module. Check that module unknown-module is available and spelled correctly.', + ); + }); +}); + +it('throws on syntax option', () => { + return standalone({ + syntax: 'scss', + code: '', + config: { rules: { 'block-no-empty': true } }, + }) + .then(() => { + throw new Error('should not have succeeded'); + }) + .catch((err) => { + expect(err.message).toBe( + 'The "syntax" (--syntax) option has been removed. Install the appropriate syntax and use the "customSyntax" (--custom-syntax) option instead', + ); + }); +}); + +it('throws when customSyntax and syntax are set', () => { const config = { rules: { 'block-no-empty': true, @@ -353,13 +143,13 @@ it('standalone should use customSyntax when both customSyntax and syntax are set customSyntax: `${fixturesPath}/custom-syntax`, code: '$foo: bar; // foo;\nb {}', formatter: stringFormatter, - }).then((linted) => { - const results = linted.results; - - expect(results).toHaveLength(1); - expect(results[0].warnings).toHaveLength(1); - expect(results[0].warnings[0].line).toBe(2); - expect(results[0].warnings[0].column).toBe(3); - expect(results[0].warnings[0].rule).toBe('block-no-empty'); - }); + }) + .then(() => { + throw new Error('should not have succeeded'); + }) + .catch((err) => { + expect(err.message).toBe( + 'The "syntax" (--syntax) option has been removed. Install the appropriate syntax and use the "customSyntax" (--custom-syntax) option instead', + ); + }); }); diff --git a/lib/__tests__/standalone.test.js b/lib/__tests__/standalone.test.js index d5fca2a58b..5892fa507a 100644 --- a/lib/__tests__/standalone.test.js +++ b/lib/__tests__/standalone.test.js @@ -223,38 +223,6 @@ it('configuration error sets errored to true', () => { }); }); -it('unknown syntax option', () => { - return standalone({ - syntax: 'unknown', - code: '', - config: { rules: { 'block-no-empty': 'wahoo' } }, - }) - .then(() => { - throw new Error('should not have succeeded'); - }) - .catch((err) => { - expect(err.message).toBe( - 'You must use a valid syntax option, either: css, css-in-js, html, less, markdown, sass, scss or sugarss', - ); - }); -}); - -it('unknown custom syntax option', () => { - return standalone({ - customSyntax: 'unknown-module', - code: '', - config: { rules: { 'block-no-empty': 'wahoo' } }, - }) - .then(() => { - throw new Error('should not have succeeded'); - }) - .catch((err) => { - expect(err.message).toBe( - 'Cannot resolve custom syntax module unknown-module. Check that module unknown-module is available and spelled correctly.', - ); - }); -}); - it('unknown formatter option', () => { return standalone({ formatter: 'unknown', diff --git a/lib/__tests__/syntaxes.test.js b/lib/__tests__/syntaxes.test.js deleted file mode 100644 index 396df78ddb..0000000000 --- a/lib/__tests__/syntaxes.test.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -const syntaxes = require('../syntaxes'); - -const inputs = Object.keys(syntaxes).map((name) => [ - name, - require(`../syntaxes/syntax-${name}.js`), // directly require modules to bypass importLazy() in syntaxes/index.js -]); - -describe('syntaxes', () => { - it.each(inputs)('syntax is an object with parse and stringify keys: %s', (name, module) => { - expect(module).toMatchObject({ - parse: expect.any(Function), - stringify: expect.any(Function), - }); - }); -}); diff --git a/lib/cli.js b/lib/cli.js index efaaea2aba..15cc64d3d6 100644 --- a/lib/cli.js +++ b/lib/cli.js @@ -130,13 +130,6 @@ const meowOptions = { Pattern of files to ignore (in addition to those in .stylelintignore) - --syntax, -s - - Specify a syntax. Options: "css", "css-in-js", "html", "less", - "markdown", "sass", "scss", "sugarss". If you do not specify a syntax, - syntaxes will be automatically inferred by the file extensions - and file content. - --fix Automatically fix violations of certain rules. diff --git a/lib/getPostcssResult.js b/lib/getPostcssResult.js index 603cb7372e..393703c05a 100644 --- a/lib/getPostcssResult.js +++ b/lib/getPostcssResult.js @@ -2,8 +2,8 @@ const fs = require('fs'); const LazyResult = require('postcss/lib/lazy-result'); +const path = require('path'); const postcss = require('postcss'); -const syntaxes = require('./syntaxes'); /** @typedef {import('postcss').Result} Result */ /** @typedef {import('postcss').Syntax} Syntax */ @@ -39,40 +39,19 @@ module.exports = function (stylelint, options = {}) { return getCode .then((code) => { + if (stylelint._options.syntax) { + throw new Error( + 'The "syntax" (--syntax) option has been removed. Install the appropriate syntax and use the "customSyntax" (--custom-syntax) option instead', + ); + } + /** @type {Syntax | null} */ let syntax = null; if (stylelint._options.customSyntax) { syntax = getCustomSyntax(stylelint._options.customSyntax); - } else if (stylelint._options.syntax) { - if (stylelint._options.syntax === 'css') { - syntax = cssSyntax(stylelint); - } else { - const keys = Object.keys(syntaxes); - - if (!keys.includes(stylelint._options.syntax)) { - throw new Error( - `You must use a valid syntax option, either: css, ${keys - .slice(0, -1) - .join(', ')} or ${keys.slice(-1)}`, - ); - } - - syntax = syntaxes[stylelint._options.syntax]; - } - } else if (!(options.codeProcessors && options.codeProcessors.length)) { - const autoSyntax = require('postcss-syntax'); - - // TODO: investigate why lazy import HTML syntax causes - // JS files with the word "html" to throw TypeError - // https://github.com/stylelint/stylelint/issues/4793 - const { html, ...rest } = syntaxes; - - syntax = autoSyntax({ - css: cssSyntax(stylelint), - jsx: syntaxes['css-in-js'], - ...rest, - }); + } else { + syntax = cssSyntax(stylelint, options.filePath); } const postcssOptions = { @@ -172,11 +151,26 @@ function readFile(filePath) { /** * @param {StylelintInternalApi} stylelint + * @param {string|undefined} filePath * @returns {Syntax} */ -function cssSyntax(stylelint) { +function cssSyntax(stylelint, filePath) { + let fileExtension = ''; + + if (filePath) { + fileExtension = path + .extname(filePath || '') + .slice(1) + .toLowerCase(); + } + + const extensions = ['css', 'pcss', 'postcss']; + return { - parse: stylelint._options.fix ? require('postcss-safe-parser') : postcss.parse, + parse: + stylelint._options.fix && extensions.includes(fileExtension) + ? require('postcss-safe-parser') + : postcss.parse, stringify: postcss.stringify, }; } diff --git a/lib/rules/alpha-value-notation/__tests__/index.js b/lib/rules/alpha-value-notation/__tests__/index.js index cb203676c9..d63fa6436d 100644 --- a/lib/rules/alpha-value-notation/__tests__/index.js +++ b/lib/rules/alpha-value-notation/__tests__/index.js @@ -1,5 +1,6 @@ 'use strict'; +const postcssScss = require('postcss-scss'); const stripIndent = require('common-tags').stripIndent; const { messages, ruleName } = require('..'); @@ -323,7 +324,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: ['number'], fix: true, @@ -358,7 +359,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: ['percentage'], fix: true, diff --git a/lib/rules/at-rule-allowed-list/__tests__/index.js b/lib/rules/at-rule-allowed-list/__tests__/index.js index 2873e4b816..afeba3cdea 100644 --- a/lib/rules/at-rule-allowed-list/__tests__/index.js +++ b/lib/rules/at-rule-allowed-list/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssLess = require('postcss-less'); + const { messages, ruleName } = require('..'); testRule({ @@ -150,7 +152,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: ['keyframes'], skipBasicChecks: true, diff --git a/lib/rules/at-rule-disallowed-list/__tests__/index.js b/lib/rules/at-rule-disallowed-list/__tests__/index.js index 44c2be5a20..d36239f6ee 100644 --- a/lib/rules/at-rule-disallowed-list/__tests__/index.js +++ b/lib/rules/at-rule-disallowed-list/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssLess = require('postcss-less'); + const { messages, ruleName } = require('..'); testRule({ @@ -158,7 +160,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: ['keyframes'], accept: [ diff --git a/lib/rules/at-rule-empty-line-before/__tests__/index.js b/lib/rules/at-rule-empty-line-before/__tests__/index.js index 7c4bb96e4b..d8b0633a42 100644 --- a/lib/rules/at-rule-empty-line-before/__tests__/index.js +++ b/lib/rules/at-rule-empty-line-before/__tests__/index.js @@ -1,7 +1,9 @@ 'use strict'; -const mergeTestDescriptions = require('../../../testUtils/mergeTestDescriptions'); +const postcssLess = require('postcss-less'); const stripIndent = require('common-tags').stripIndent; + +const mergeTestDescriptions = require('../../../testUtils/mergeTestDescriptions'); const { messages, ruleName } = require('..'); const sharedAlwaysTests = { @@ -1283,7 +1285,7 @@ testRule( testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: ['always'], accept: [ diff --git a/lib/rules/at-rule-name-case/__tests__/index.js b/lib/rules/at-rule-name-case/__tests__/index.js index 0476cb1c80..a6d5704ab2 100644 --- a/lib/rules/at-rule-name-case/__tests__/index.js +++ b/lib/rules/at-rule-name-case/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssLess = require('postcss-less'); + const { messages, ruleName } = require('..'); testRule({ @@ -286,7 +288,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: ['lower'], skipBasicChecks: true, diff --git a/lib/rules/at-rule-name-newline-after/__tests__/index.js b/lib/rules/at-rule-name-newline-after/__tests__/index.js index bb756a853d..e5526a8cdc 100644 --- a/lib/rules/at-rule-name-newline-after/__tests__/index.js +++ b/lib/rules/at-rule-name-newline-after/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -184,7 +187,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: ['always'], skipBasicChecks: true, @@ -225,7 +228,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: ['always'], skipBasicChecks: true, diff --git a/lib/rules/at-rule-name-space-after/__tests__/index.js b/lib/rules/at-rule-name-space-after/__tests__/index.js index f7809789d4..7b1fc13e04 100644 --- a/lib/rules/at-rule-name-space-after/__tests__/index.js +++ b/lib/rules/at-rule-name-space-after/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -212,7 +215,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: ['always'], accept: [ @@ -252,7 +255,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: ['always'], accept: [ diff --git a/lib/rules/at-rule-no-unknown/__tests__/index.js b/lib/rules/at-rule-no-unknown/__tests__/index.js index 5d6386cd4e..ccd8d97b30 100644 --- a/lib/rules/at-rule-no-unknown/__tests__/index.js +++ b/lib/rules/at-rule-no-unknown/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssLess = require('postcss-less'); + const { messages, ruleName } = require('..'); testRule({ @@ -183,7 +185,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: [true], accept: [ diff --git a/lib/rules/at-rule-semicolon-newline-after/__tests__/index.js b/lib/rules/at-rule-semicolon-newline-after/__tests__/index.js index b56aa5ad1b..38d604b8a3 100644 --- a/lib/rules/at-rule-semicolon-newline-after/__tests__/index.js +++ b/lib/rules/at-rule-semicolon-newline-after/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssLess = require('postcss-less'); + const { messages, ruleName } = require('..'); testRule({ @@ -127,7 +129,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: ['always'], accept: [ { diff --git a/lib/rules/at-rule-semicolon-space-before/__tests__/index.js b/lib/rules/at-rule-semicolon-space-before/__tests__/index.js index ac8fc38459..d398866d1b 100644 --- a/lib/rules/at-rule-semicolon-space-before/__tests__/index.js +++ b/lib/rules/at-rule-semicolon-space-before/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssLess = require('postcss-less'); + const { messages, ruleName } = require('..'); testRule({ @@ -150,7 +152,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: ['always'], skipBasicChecks: true, diff --git a/lib/rules/block-no-empty/__tests__/index.js b/lib/rules/block-no-empty/__tests__/index.js index 8b2ad114a9..459ceb3a7b 100644 --- a/lib/rules/block-no-empty/__tests__/index.js +++ b/lib/rules/block-no-empty/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssScss = require('postcss-scss'); +const sugarss = require('sugarss'); + const { messages, ruleName } = require('..'); testRule({ @@ -176,7 +179,7 @@ testRule({ ruleName, config: [true], skipBasicChecks: true, - syntax: 'sugarss', + customSyntax: sugarss, reject: [ { @@ -198,7 +201,7 @@ testRule({ ruleName, config: [true], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -222,7 +225,7 @@ testRule({ }, ], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/color-function-notation/__tests__/index.js b/lib/rules/color-function-notation/__tests__/index.js index afbef557be..341eaa5b57 100644 --- a/lib/rules/color-function-notation/__tests__/index.js +++ b/lib/rules/color-function-notation/__tests__/index.js @@ -1,5 +1,6 @@ 'use strict'; +const postcssScss = require('postcss-scss'); const stripIndent = require('common-tags').stripIndent; const { messages, ruleName } = require('..'); @@ -363,7 +364,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: ['modern'], fix: true, @@ -399,7 +400,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: ['legacy'], accept: [ diff --git a/lib/rules/color-hex-case/__tests__/index.js b/lib/rules/color-hex-case/__tests__/index.js index 3845e29963..d08ad4106d 100644 --- a/lib/rules/color-hex-case/__tests__/index.js +++ b/lib/rules/color-hex-case/__tests__/index.js @@ -166,6 +166,7 @@ testRule( ); testRule({ + skip: true, ruleName, config: ['lower'], syntax: 'css-in-js', @@ -255,6 +256,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: ['upper'], syntax: 'css-in-js', diff --git a/lib/rules/color-hex-length/__tests__/index.js b/lib/rules/color-hex-length/__tests__/index.js index 505b0c40d6..511d87b690 100644 --- a/lib/rules/color-hex-length/__tests__/index.js +++ b/lib/rules/color-hex-length/__tests__/index.js @@ -188,6 +188,7 @@ testRule( ); testRule({ + skip: true, ruleName, config: ['short'], syntax: 'css-in-js', @@ -284,6 +285,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: ['long'], syntax: 'css-in-js', diff --git a/lib/rules/color-no-hex/__tests__/index.js b/lib/rules/color-no-hex/__tests__/index.js index a01e7ad6fb..519c7148b1 100644 --- a/lib/rules/color-no-hex/__tests__/index.js +++ b/lib/rules/color-no-hex/__tests__/index.js @@ -96,6 +96,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [true], syntax: 'css-in-js', diff --git a/lib/rules/color-no-invalid-hex/__tests__/index.js b/lib/rules/color-no-invalid-hex/__tests__/index.js index 6ad247ff4c..435d0ce51a 100644 --- a/lib/rules/color-no-invalid-hex/__tests__/index.js +++ b/lib/rules/color-no-invalid-hex/__tests__/index.js @@ -92,6 +92,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [true], syntax: 'css-in-js', diff --git a/lib/rules/comment-empty-line-before/__tests__/index.js b/lib/rules/comment-empty-line-before/__tests__/index.js index df50c6b3f8..c392faae11 100644 --- a/lib/rules/comment-empty-line-before/__tests__/index.js +++ b/lib/rules/comment-empty-line-before/__tests__/index.js @@ -1,7 +1,10 @@ 'use strict'; -const mergeTestDescriptions = require('../../../testUtils/mergeTestDescriptions'); +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); +const sugarss = require('sugarss'); +const mergeTestDescriptions = require('../../../testUtils/mergeTestDescriptions'); const { messages, ruleName } = require('..'); const alwaysTests = { @@ -264,7 +267,7 @@ testRule({ testRule({ ruleName, config: ['always'], - syntax: 'scss', + customSyntax: postcssScss, fix: true, accept: [ @@ -282,7 +285,7 @@ testRule({ testRule({ ruleName, config: ['never'], - syntax: 'sugarss', + customSyntax: sugarss, skipBasicChecks: true, fix: true, @@ -297,7 +300,7 @@ testRule({ testRule({ ruleName, config: ['always'], - syntax: 'less', + customSyntax: postcssLess, fix: true, accept: [ @@ -315,7 +318,7 @@ testRule({ testRule({ ruleName, config: ['never'], - syntax: 'less', + customSyntax: postcssLess, fix: true, accept: [ diff --git a/lib/rules/comment-no-empty/__tests__/index.js b/lib/rules/comment-no-empty/__tests__/index.js index f7d8dd0b37..98c2e7e2c7 100644 --- a/lib/rules/comment-no-empty/__tests__/index.js +++ b/lib/rules/comment-no-empty/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -60,7 +62,7 @@ testRule({ testRule({ ruleName, config: [true], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/comment-pattern/__tests__/index.js b/lib/rules/comment-pattern/__tests__/index.js index c3ff4fcd43..fbc5690959 100644 --- a/lib/rules/comment-pattern/__tests__/index.js +++ b/lib/rules/comment-pattern/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -69,7 +71,7 @@ testRule({ testRule({ ruleName, config: [/foo-.+/], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/comment-whitespace-inside/__tests__/index.js b/lib/rules/comment-whitespace-inside/__tests__/index.js index 58d4cfe932..7ca0357504 100755 --- a/lib/rules/comment-whitespace-inside/__tests__/index.js +++ b/lib/rules/comment-whitespace-inside/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -237,7 +240,7 @@ testRule({ ruleName, config: ['always'], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -251,7 +254,7 @@ testRule({ ruleName, config: ['never'], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -265,7 +268,7 @@ testRule({ ruleName, config: ['always'], skipBasicChecks: true, - syntax: 'less', + customSyntax: postcssLess, accept: [ { @@ -279,7 +282,7 @@ testRule({ ruleName, config: ['never'], skipBasicChecks: true, - syntax: 'less', + customSyntax: postcssLess, accept: [ { diff --git a/lib/rules/comment-word-disallowed-list/__tests__/index.js b/lib/rules/comment-word-disallowed-list/__tests__/index.js index 745e881610..c61338797c 100644 --- a/lib/rules/comment-word-disallowed-list/__tests__/index.js +++ b/lib/rules/comment-word-disallowed-list/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -218,7 +221,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: [['/^TODO:/', 'bad-word']], accept: [ @@ -263,7 +266,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: ['/^TODO:/', 'bad-word'], accept: [ diff --git a/lib/rules/declaration-block-no-duplicate-custom-properties/__tests__/index.js b/lib/rules/declaration-block-no-duplicate-custom-properties/__tests__/index.js index 8c428a0ea1..493fac214c 100644 --- a/lib/rules/declaration-block-no-duplicate-custom-properties/__tests__/index.js +++ b/lib/rules/declaration-block-no-duplicate-custom-properties/__tests__/index.js @@ -87,6 +87,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [true], skipBasicChecks: true, @@ -135,6 +136,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [true], skipBasicChecks: true, diff --git a/lib/rules/declaration-block-no-duplicate-properties/__tests__/index.js b/lib/rules/declaration-block-no-duplicate-properties/__tests__/index.js index 9e21133992..8e70acfa83 100644 --- a/lib/rules/declaration-block-no-duplicate-properties/__tests__/index.js +++ b/lib/rules/declaration-block-no-duplicate-properties/__tests__/index.js @@ -231,6 +231,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [true], skipBasicChecks: true, @@ -268,6 +269,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [true], skipBasicChecks: true, diff --git a/lib/rules/declaration-block-no-redundant-longhand-properties/__tests__/index.js b/lib/rules/declaration-block-no-redundant-longhand-properties/__tests__/index.js index 6db74447f5..773559125f 100644 --- a/lib/rules/declaration-block-no-redundant-longhand-properties/__tests__/index.js +++ b/lib/rules/declaration-block-no-redundant-longhand-properties/__tests__/index.js @@ -118,6 +118,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [true], syntax: 'html', @@ -150,6 +151,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [true], syntax: 'css-in-js', diff --git a/lib/rules/declaration-block-no-shorthand-property-overrides/__tests__/index.js b/lib/rules/declaration-block-no-shorthand-property-overrides/__tests__/index.js index b8bd6ca7a3..ebc944f536 100644 --- a/lib/rules/declaration-block-no-shorthand-property-overrides/__tests__/index.js +++ b/lib/rules/declaration-block-no-shorthand-property-overrides/__tests__/index.js @@ -87,6 +87,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [true], syntax: 'html', @@ -119,6 +120,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [true], syntax: 'css-in-js', diff --git a/lib/rules/declaration-block-single-line-max-declarations/__tests__/index.js b/lib/rules/declaration-block-single-line-max-declarations/__tests__/index.js index 7562bfdc8e..af4ef65e61 100644 --- a/lib/rules/declaration-block-single-line-max-declarations/__tests__/index.js +++ b/lib/rules/declaration-block-single-line-max-declarations/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssLess = require('postcss-less'); + const { messages, ruleName } = require('..'); testRule({ @@ -89,7 +91,7 @@ testRule({ ruleName, config: [2], skipBasicChecks: true, - syntax: 'less', + customSyntax: postcssLess, accept: [ { diff --git a/lib/rules/declaration-block-trailing-semicolon/__tests__/index.js b/lib/rules/declaration-block-trailing-semicolon/__tests__/index.js index 744c3854f2..c84d3029f0 100644 --- a/lib/rules/declaration-block-trailing-semicolon/__tests__/index.js +++ b/lib/rules/declaration-block-trailing-semicolon/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -153,7 +155,7 @@ testRule({ testRule({ ruleName, config: ['always'], - syntax: 'scss', + customSyntax: postcssScss, fix: true, accept: [ @@ -190,7 +192,7 @@ testRule({ testRule({ ruleName, config: ['never'], - syntax: 'scss', + customSyntax: postcssScss, fix: true, accept: [ @@ -225,6 +227,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: ['always'], syntax: 'css-in-js', diff --git a/lib/rules/declaration-empty-line-before/__tests__/index.js b/lib/rules/declaration-empty-line-before/__tests__/index.js index 6888cf7ad3..9752f0fac8 100644 --- a/lib/rules/declaration-empty-line-before/__tests__/index.js +++ b/lib/rules/declaration-empty-line-before/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); const stripIndent = require('common-tags').stripIndent; const { messages, ruleName } = require('..'); @@ -102,7 +104,7 @@ testRule({ testRule({ ruleName, config: ['always'], - syntax: 'scss', + customSyntax: postcssScss, fix: true, accept: [ @@ -152,7 +154,7 @@ testRule({ testRule({ ruleName, config: ['always'], - syntax: 'less', + customSyntax: postcssLess, fix: true, accept: [ @@ -548,7 +550,7 @@ testRule({ testRule({ ruleName, config: ['always', { except: ['after-declaration'] }], - syntax: 'scss', + customSyntax: postcssScss, fix: true, accept: [ @@ -589,7 +591,7 @@ testRule({ testRule({ ruleName, config: ['always', { except: ['after-declaration'] }], - syntax: 'less', + customSyntax: postcssLess, fix: true, accept: [ @@ -901,6 +903,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: ['always'], syntax: 'html', @@ -958,6 +961,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: ['always', { ignore: ['inside-single-line-block'] }], syntax: 'html', diff --git a/lib/rules/font-weight-notation/__tests__/index.js b/lib/rules/font-weight-notation/__tests__/index.js index a54f0a6895..df4dbf67ee 100644 --- a/lib/rules/font-weight-notation/__tests__/index.js +++ b/lib/rules/font-weight-notation/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -368,7 +370,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: ['numeric'], accept: [ diff --git a/lib/rules/function-calc-no-unspaced-operator/__tests__/index.js b/lib/rules/function-calc-no-unspaced-operator/__tests__/index.js index 67c8ef1979..27db1656e8 100644 --- a/lib/rules/function-calc-no-unspaced-operator/__tests__/index.js +++ b/lib/rules/function-calc-no-unspaced-operator/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -365,7 +367,7 @@ testRule({ testRule({ ruleName, config: [true], - syntax: 'scss', + customSyntax: postcssScss, reject: [ { diff --git a/lib/rules/function-comma-newline-after/__tests__/index.js b/lib/rules/function-comma-newline-after/__tests__/index.js index a2407834e9..d9624a7b4e 100644 --- a/lib/rules/function-comma-newline-after/__tests__/index.js +++ b/lib/rules/function-comma-newline-after/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -134,7 +136,7 @@ testRule({ testRule({ ruleName, config: ['always'], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -296,7 +298,7 @@ testRule({ testRule({ ruleName, config: ['always-multi-line'], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -414,7 +416,7 @@ testRule({ testRule({ ruleName, config: ['never-multi-line'], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/function-comma-newline-before/__tests__/index.js b/lib/rules/function-comma-newline-before/__tests__/index.js index 6dea7f1904..7e6eb04e11 100644 --- a/lib/rules/function-comma-newline-before/__tests__/index.js +++ b/lib/rules/function-comma-newline-before/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -107,7 +109,7 @@ testRule({ testRule({ ruleName, config: ['always'], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -212,7 +214,7 @@ testRule({ testRule({ ruleName, config: ['always-multi-line'], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -309,7 +311,7 @@ testRule({ testRule({ ruleName, config: ['never-multi-line'], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/function-comma-space-after/__tests__/index.js b/lib/rules/function-comma-space-after/__tests__/index.js index 7b415a8b53..18d5f8b5a2 100644 --- a/lib/rules/function-comma-space-after/__tests__/index.js +++ b/lib/rules/function-comma-space-after/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -151,7 +153,7 @@ testRule({ testRule({ ruleName, config: ['always'], - syntax: 'scss', + customSyntax: postcssScss, fix: true, accept: [ @@ -302,7 +304,7 @@ testRule({ testRule({ ruleName, config: ['never'], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -387,7 +389,7 @@ testRule({ testRule({ ruleName, config: ['always-single-line'], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -469,7 +471,7 @@ testRule({ testRule({ ruleName, config: ['never-single-line'], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/function-comma-space-before/__tests__/index.js b/lib/rules/function-comma-space-before/__tests__/index.js index b988592160..e48d4279f6 100644 --- a/lib/rules/function-comma-space-before/__tests__/index.js +++ b/lib/rules/function-comma-space-before/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -108,7 +110,7 @@ testRule({ testRule({ ruleName, config: ['always'], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -219,7 +221,7 @@ testRule({ testRule({ ruleName, config: ['never'], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -302,7 +304,7 @@ testRule({ testRule({ ruleName, config: ['always-single-line'], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -375,7 +377,7 @@ testRule({ testRule({ ruleName, config: ['never-single-line'], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/function-linear-gradient-no-nonstandard-direction/__tests__/index.js b/lib/rules/function-linear-gradient-no-nonstandard-direction/__tests__/index.js index 7e48ead46e..2dba67cf90 100644 --- a/lib/rules/function-linear-gradient-no-nonstandard-direction/__tests__/index.js +++ b/lib/rules/function-linear-gradient-no-nonstandard-direction/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -255,7 +257,7 @@ testRule({ testRule({ ruleName, config: [true], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/function-url-no-scheme-relative/__tests__/index.js b/lib/rules/function-url-no-scheme-relative/__tests__/index.js index b86620da3c..2f55e23038 100644 --- a/lib/rules/function-url-no-scheme-relative/__tests__/index.js +++ b/lib/rules/function-url-no-scheme-relative/__tests__/index.js @@ -118,6 +118,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [true], syntax: 'html', @@ -140,6 +141,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [true], syntax: 'css-in-js', diff --git a/lib/rules/function-url-quotes/__tests__/index.js b/lib/rules/function-url-quotes/__tests__/index.js index 2d941f2c5a..ea967fda52 100644 --- a/lib/rules/function-url-quotes/__tests__/index.js +++ b/lib/rules/function-url-quotes/__tests__/index.js @@ -613,6 +613,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: ['always'], syntax: 'html', @@ -634,6 +635,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: ['always'], syntax: 'css-in-js', diff --git a/lib/rules/function-whitespace-after/__tests__/index.js b/lib/rules/function-whitespace-after/__tests__/index.js index 7353fbd1a5..60c0fda3ec 100644 --- a/lib/rules/function-whitespace-after/__tests__/index.js +++ b/lib/rules/function-whitespace-after/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -274,7 +277,7 @@ testRule({ ruleName, config: ['always'], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, fix: true, accept: [ @@ -299,7 +302,7 @@ testRule({ ruleName, config: ['always'], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, reject: [ { @@ -318,7 +321,7 @@ testRule({ ruleName, config: ['always'], skipBasicChecks: true, - syntax: 'less', + customSyntax: postcssLess, fix: true, accept: [ @@ -341,6 +344,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: ['always'], skipBasicChecks: true, diff --git a/lib/rules/hue-degree-notation/__tests__/index.js b/lib/rules/hue-degree-notation/__tests__/index.js index 6f0af10f84..bdf106b1f8 100644 --- a/lib/rules/hue-degree-notation/__tests__/index.js +++ b/lib/rules/hue-degree-notation/__tests__/index.js @@ -1,5 +1,6 @@ 'use strict'; +const postcssScss = require('postcss-scss'); const stripIndent = require('common-tags').stripIndent; const { messages, ruleName } = require('..'); @@ -199,7 +200,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: ['angle'], fix: true, @@ -225,7 +226,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: ['number'], fix: true, diff --git a/lib/rules/indentation/__tests__/functions.js b/lib/rules/indentation/__tests__/functions.js index d221974990..31e5de9582 100644 --- a/lib/rules/indentation/__tests__/functions.js +++ b/lib/rules/indentation/__tests__/functions.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssLess = require('postcss-less'); + const { messages, ruleName } = require('..'); testRule({ @@ -755,7 +757,7 @@ testRule({ testRule({ ruleName, config: [2], - syntax: 'less', + customSyntax: postcssLess, skipBasicChecks: true, // fix: true, diff --git a/lib/rules/indentation/__tests__/html.js b/lib/rules/indentation/__tests__/html.js index 9c0c4f6d16..40cae1525f 100644 --- a/lib/rules/indentation/__tests__/html.js +++ b/lib/rules/indentation/__tests__/html.js @@ -3,6 +3,7 @@ const { messages, ruleName } = require('..'); testRule({ + skip: true, ruleName, config: ['tab'], syntax: 'html', @@ -190,6 +191,7 @@ a { }); testRule({ + skip: true, ruleName, config: [2], syntax: 'html', @@ -240,6 +242,7 @@ a { }); testRule({ + skip: true, ruleName, config: [ 'tab', @@ -385,6 +388,7 @@ a { }); testRule({ + skip: true, ruleName, config: [ 'tab', @@ -480,6 +484,7 @@ a { }); testRule({ + skip: true, ruleName, config: [ 2, diff --git a/lib/rules/indentation/__tests__/javascript.js b/lib/rules/indentation/__tests__/javascript.js index 7fe221e0d5..3aa6e33be2 100644 --- a/lib/rules/indentation/__tests__/javascript.js +++ b/lib/rules/indentation/__tests__/javascript.js @@ -3,6 +3,7 @@ const { messages, ruleName } = require('..'); testRule({ + skip: true, ruleName, config: [2], syntax: 'css-in-js', @@ -130,6 +131,7 @@ color: #b02d00; }); testRule({ + skip: true, ruleName, config: [ 'tab', @@ -191,6 +193,7 @@ export default styled.div\` }); testRule({ + skip: true, ruleName, config: [ 'tab', diff --git a/lib/rules/length-zero-no-unit/__tests__/index.js b/lib/rules/length-zero-no-unit/__tests__/index.js index b94822d73c..00718b22cd 100644 --- a/lib/rules/length-zero-no-unit/__tests__/index.js +++ b/lib/rules/length-zero-no-unit/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -601,7 +604,7 @@ testRule({ ruleName, config: [true], fix: true, - syntax: 'scss', + customSyntax: postcssScss, reject: [ { @@ -630,7 +633,7 @@ testRule({ ruleName, config: [true], fix: true, - syntax: 'less', + customSyntax: postcssLess, accept: [ { code: '@variable: 0px;', diff --git a/lib/rules/max-empty-lines/__tests__/index.js b/lib/rules/max-empty-lines/__tests__/index.js index dafd1ed002..5bd10f321f 100644 --- a/lib/rules/max-empty-lines/__tests__/index.js +++ b/lib/rules/max-empty-lines/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssScss = require('postcss-scss'); +const sugarss = require('sugarss'); + const { messages, ruleName } = require('..'); testRule({ @@ -142,6 +145,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [1], syntax: 'html', @@ -151,15 +155,10 @@ testRule({ { code: `
- - - - -
`, }, { @@ -201,7 +200,6 @@ a {color: pink;} `, fixed: `
@@ -218,7 +216,6 @@ a {color: pink;} { code: `
`, fixed: `
@@ -259,6 +255,7 @@ a {} }); testRule({ + skip: true, ruleName, config: [1], syntax: 'css-in-js', @@ -269,17 +266,10 @@ testRule({ code: ` import styled from 'styled-components'; - - - - export default styled.div\` color: #00 \`; - - - `, }, { @@ -313,7 +303,6 @@ import styled from 'styled-components'; export default styled.div\` /* horse */ - color: #00 \`; `, @@ -341,7 +330,6 @@ export const style1 = styled.div\` export const style2 = styled.div\` color: #00 - \`;`, fixed: ` import styled from 'styled-components'; @@ -438,7 +426,7 @@ testRule({ ruleName, config: [2], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, fix: true, accept: [ @@ -482,7 +470,7 @@ testRule({ ruleName, config: [2], skipBasicChecks: true, - syntax: 'sugarss', + customSyntax: sugarss, fix: true, accept: [ diff --git a/lib/rules/max-line-length/__tests__/index.js b/lib/rules/max-line-length/__tests__/index.js index c3a629983d..c448131dca 100644 --- a/lib/rules/max-line-length/__tests__/index.js +++ b/lib/rules/max-line-length/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); const testUrl = 'somethingsomething something\tsomething'; const _21whitespaces = new Array(21).fill('\u0020').join(''); @@ -225,6 +227,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [20], syntax: 'html', @@ -276,6 +279,7 @@ a { }); testRule({ + skip: true, ruleName, config: [20], syntax: 'css-in-js', @@ -310,7 +314,7 @@ export default styled.div\` testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: [20], reject: [ diff --git a/lib/rules/max-nesting-depth/__tests__/index.js b/lib/rules/max-nesting-depth/__tests__/index.js index 6d1bc4eebd..34a6ed9267 100644 --- a/lib/rules/max-nesting-depth/__tests__/index.js +++ b/lib/rules/max-nesting-depth/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -221,7 +223,7 @@ testRule({ ruleName, config: [1], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/media-feature-name-allowed-list/__tests__/index.js b/lib/rules/media-feature-name-allowed-list/__tests__/index.js index 6d8303f0cc..75753abb7c 100644 --- a/lib/rules/media-feature-name-allowed-list/__tests__/index.js +++ b/lib/rules/media-feature-name-allowed-list/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -128,7 +131,7 @@ testRule({ testRule({ ruleName, config: ['max-width', 'orientation'], - syntax: 'less', + customSyntax: postcssLess, accept: [ { @@ -143,7 +146,7 @@ testRule({ testRule({ ruleName, config: ['max-width'], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/media-feature-name-case/__tests__/index.js b/lib/rules/media-feature-name-case/__tests__/index.js index b29d2819f1..f3a748008f 100644 --- a/lib/rules/media-feature-name-case/__tests__/index.js +++ b/lib/rules/media-feature-name-case/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -169,7 +172,7 @@ testRule({ testRule({ ruleName, config: ['lower'], - syntax: 'less', + customSyntax: postcssLess, fix: true, accept: [ @@ -225,7 +228,7 @@ testRule({ testRule({ ruleName, config: ['lower'], - syntax: 'scss', + customSyntax: postcssScss, fix: true, accept: [ @@ -440,7 +443,7 @@ testRule({ testRule({ ruleName, config: ['upper'], - syntax: 'less', + customSyntax: postcssLess, fix: true, accept: [ @@ -496,7 +499,7 @@ testRule({ testRule({ ruleName, config: ['upper'], - syntax: 'scss', + customSyntax: postcssScss, fix: true, accept: [ diff --git a/lib/rules/media-feature-name-disallowed-list/__tests__/index.js b/lib/rules/media-feature-name-disallowed-list/__tests__/index.js index c225362f33..66c10cec65 100644 --- a/lib/rules/media-feature-name-disallowed-list/__tests__/index.js +++ b/lib/rules/media-feature-name-disallowed-list/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -138,7 +141,7 @@ testRule({ testRule({ ruleName, config: ['feature-name'], - syntax: 'less', + customSyntax: postcssLess, accept: [ { @@ -153,7 +156,7 @@ testRule({ testRule({ ruleName, config: ['feature-name', 'width'], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/media-feature-name-no-unknown/__tests__/index.js b/lib/rules/media-feature-name-no-unknown/__tests__/index.js index 77b4ea9d66..edc3e639fd 100644 --- a/lib/rules/media-feature-name-no-unknown/__tests__/index.js +++ b/lib/rules/media-feature-name-no-unknown/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -110,7 +113,7 @@ testRule({ testRule({ ruleName, config: [true], - syntax: 'less', + customSyntax: postcssLess, accept: [ { @@ -137,7 +140,7 @@ testRule({ testRule({ ruleName, config: [true], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/media-query-list-comma-newline-after/__tests__/index.js b/lib/rules/media-query-list-comma-newline-after/__tests__/index.js index c6b0bb12db..feb71bd1e4 100644 --- a/lib/rules/media-query-list-comma-newline-after/__tests__/index.js +++ b/lib/rules/media-query-list-comma-newline-after/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -423,7 +426,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: ['always'], accept: [ @@ -441,7 +444,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: ['always'], accept: [ diff --git a/lib/rules/no-descending-specificity/__tests__/index.js b/lib/rules/no-descending-specificity/__tests__/index.js index 8db2efb378..58a29c9ac7 100644 --- a/lib/rules/no-descending-specificity/__tests__/index.js +++ b/lib/rules/no-descending-specificity/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -158,7 +160,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: [true], accept: [ @@ -169,6 +171,7 @@ testRule({ }); testRule({ + skip: true, ruleName, syntax: 'css-in-js', config: [true], diff --git a/lib/rules/no-duplicate-selectors/__tests__/index.js b/lib/rules/no-duplicate-selectors/__tests__/index.js index 19a491f02e..119135dce9 100644 --- a/lib/rules/no-duplicate-selectors/__tests__/index.js +++ b/lib/rules/no-duplicate-selectors/__tests__/index.js @@ -273,6 +273,7 @@ it('with postcss-import and duplicates across files, no warnings', () => { }); testRule({ + skip: true, ruleName, syntax: 'css-in-js', config: [true], diff --git a/lib/rules/no-empty-source/__tests__/index.js b/lib/rules/no-empty-source/__tests__/index.js index 640b93b4d2..02ca44a83e 100644 --- a/lib/rules/no-empty-source/__tests__/index.js +++ b/lib/rules/no-empty-source/__tests__/index.js @@ -93,6 +93,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [true], syntax: 'html', diff --git a/lib/rules/no-eol-whitespace/__tests__/index.js b/lib/rules/no-eol-whitespace/__tests__/index.js index 2a86b8f689..bf6117a277 100644 --- a/lib/rules/no-eol-whitespace/__tests__/index.js +++ b/lib/rules/no-eol-whitespace/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -523,7 +525,7 @@ testRule({ testRule({ ruleName, config: [true], - syntax: 'scss', + customSyntax: postcssScss, fix: true, accept: [ @@ -580,6 +582,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [true], syntax: 'html', @@ -587,7 +590,7 @@ testRule({ accept: [ { - code: `
/* After this comment we have eol whitespace */ + code: `
/* After this comment we have eol whitespace */ @@ -669,6 +672,7 @@ testRule({ }); testRule({ + skip: true, ruleName, syntax: 'css-in-js', config: [true], diff --git a/lib/rules/no-extra-semicolons/__tests__/index.js b/lib/rules/no-extra-semicolons/__tests__/index.js index 40262e3a03..531c9664b5 100644 --- a/lib/rules/no-extra-semicolons/__tests__/index.js +++ b/lib/rules/no-extra-semicolons/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssLess = require('postcss-less'); + const { messages, ruleName } = require('..'); testRule({ @@ -952,6 +954,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [true], syntax: 'html', @@ -1010,7 +1013,7 @@ a { testRule({ ruleName, config: [true], - syntax: 'less', + customSyntax: postcssLess, fix: true, accept: [ diff --git a/lib/rules/no-invalid-double-slash-comments/__tests__/index.js b/lib/rules/no-invalid-double-slash-comments/__tests__/index.js index 7a927e7fea..dd614e2b3b 100644 --- a/lib/rules/no-invalid-double-slash-comments/__tests__/index.js +++ b/lib/rules/no-invalid-double-slash-comments/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -64,7 +67,7 @@ testRule({ ruleName, config: [true], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -78,7 +81,7 @@ testRule({ ruleName, config: [true], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -92,7 +95,7 @@ testRule({ ruleName, config: [true], skipBasicChecks: true, - syntax: 'less', + customSyntax: postcssLess, accept: [ { @@ -106,7 +109,7 @@ testRule({ ruleName, config: [true], skipBasicChecks: true, - syntax: 'less', + customSyntax: postcssLess, accept: [ { diff --git a/lib/rules/no-invalid-position-at-import-rule/__tests__/index.js b/lib/rules/no-invalid-position-at-import-rule/__tests__/index.js index 60071094d4..6257328679 100644 --- a/lib/rules/no-invalid-position-at-import-rule/__tests__/index.js +++ b/lib/rules/no-invalid-position-at-import-rule/__tests__/index.js @@ -1,5 +1,6 @@ 'use strict'; +const postcssScss = require('postcss-scss'); const stripIndent = require('common-tags').stripIndent; const { messages, ruleName } = require('..'); @@ -115,7 +116,7 @@ testRule({ testRule({ ruleName, config: [true], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/no-missing-end-of-source-newline/__tests__/index.js b/lib/rules/no-missing-end-of-source-newline/__tests__/index.js index 8b4a25fb14..86b28f2acb 100644 --- a/lib/rules/no-missing-end-of-source-newline/__tests__/index.js +++ b/lib/rules/no-missing-end-of-source-newline/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const sugarss = require('sugarss'); + const { messages, ruleName } = require('..'); testRule({ @@ -69,6 +71,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [true], skipBasicChecks: true, @@ -106,6 +109,7 @@ a { }); testRule({ + skip: true, ruleName, config: [true], skipBasicChecks: true, @@ -127,7 +131,7 @@ testRule({ ruleName, config: [true], skipBasicChecks: true, - syntax: 'sugarss', + customSyntax: sugarss, fix: true, accept: [ diff --git a/lib/rules/property-case/__tests__/index.js b/lib/rules/property-case/__tests__/index.js index 1f5344de42..a0f3e8d8ba 100644 --- a/lib/rules/property-case/__tests__/index.js +++ b/lib/rules/property-case/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -172,7 +175,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: ['lower'], fix: true, @@ -296,7 +299,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: ['lower'], fix: true, @@ -576,7 +579,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: ['upper'], fix: true, @@ -700,7 +703,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: ['upper'], fix: true, diff --git a/lib/rules/property-no-unknown/__tests__/index.js b/lib/rules/property-no-unknown/__tests__/index.js index 9e901babe5..7a569ee4c4 100644 --- a/lib/rules/property-no-unknown/__tests__/index.js +++ b/lib/rules/property-no-unknown/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -78,7 +81,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: [true], accept: [ @@ -103,7 +106,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: [true], accept: [ @@ -273,6 +276,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [true], syntax: 'css-in-js', @@ -336,6 +340,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [true], syntax: 'html', diff --git a/lib/rules/rule-empty-line-before/__tests__/index.js b/lib/rules/rule-empty-line-before/__tests__/index.js index 3ff46d3ddf..9d928343c3 100644 --- a/lib/rules/rule-empty-line-before/__tests__/index.js +++ b/lib/rules/rule-empty-line-before/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssLess = require('postcss-less'); + const { messages, ruleName } = require('..'); testRule({ @@ -798,7 +800,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: ['always'], fix: true, diff --git a/lib/rules/selector-attribute-quotes/__tests__/index.js b/lib/rules/selector-attribute-quotes/__tests__/index.js index 03ecf4829e..6bf593d93b 100644 --- a/lib/rules/selector-attribute-quotes/__tests__/index.js +++ b/lib/rules/selector-attribute-quotes/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -272,7 +275,7 @@ testRule({ testRule({ ruleName, config: ['always'], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -290,7 +293,7 @@ testRule({ testRule({ ruleName, config: ['never'], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -308,7 +311,7 @@ testRule({ testRule({ ruleName, config: ['always'], - syntax: 'less', + customSyntax: postcssLess, accept: [ { @@ -326,7 +329,7 @@ testRule({ testRule({ ruleName, config: ['never'], - syntax: 'less', + customSyntax: postcssLess, accept: [ { diff --git a/lib/rules/selector-class-pattern/__tests__/index.js b/lib/rules/selector-class-pattern/__tests__/index.js index d2b7743170..e3bb3abc9b 100644 --- a/lib/rules/selector-class-pattern/__tests__/index.js +++ b/lib/rules/selector-class-pattern/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); const basicAZTestsAccept = { @@ -186,7 +189,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: [/^[A-Z]+$/, { resolveNestedSelectors: true }], accept: [ @@ -211,7 +214,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: [/^[A-Z]+$/], accept: [ diff --git a/lib/rules/selector-combinator-space-after/__tests__/index.js b/lib/rules/selector-combinator-space-after/__tests__/index.js index a153b793a4..477574c91c 100644 --- a/lib/rules/selector-combinator-space-after/__tests__/index.js +++ b/lib/rules/selector-combinator-space-after/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -522,7 +525,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: ['always'], fix: true, @@ -545,7 +548,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: ['always'], fix: true, @@ -563,7 +566,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: ['never'], fix: true, diff --git a/lib/rules/selector-combinator-space-before/__tests__/index.js b/lib/rules/selector-combinator-space-before/__tests__/index.js index 203a16d511..4d5864dca2 100644 --- a/lib/rules/selector-combinator-space-before/__tests__/index.js +++ b/lib/rules/selector-combinator-space-before/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -432,7 +435,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: ['always'], fix: true, @@ -455,7 +458,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: ['always'], fix: true, @@ -488,7 +491,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: ['never'], fix: true, diff --git a/lib/rules/selector-descendant-combinator-no-non-space/__tests__/index.js b/lib/rules/selector-descendant-combinator-no-non-space/__tests__/index.js index 8556c2a2f7..01e65bb90e 100644 --- a/lib/rules/selector-descendant-combinator-no-non-space/__tests__/index.js +++ b/lib/rules/selector-descendant-combinator-no-non-space/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -153,7 +156,7 @@ testRule({ testRule({ ruleName, config: [true], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -165,7 +168,7 @@ testRule({ testRule({ ruleName, config: [true], - syntax: 'less', + customSyntax: postcssLess, accept: [ { diff --git a/lib/rules/selector-id-pattern/__tests__/index.js b/lib/rules/selector-id-pattern/__tests__/index.js index c265d37b6c..547239d02e 100644 --- a/lib/rules/selector-id-pattern/__tests__/index.js +++ b/lib/rules/selector-id-pattern/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); const basicAZTests = { @@ -87,7 +89,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: [/^[A-Z]+$/], accept: [ diff --git a/lib/rules/selector-list-comma-newline-after/__tests__/index.js b/lib/rules/selector-list-comma-newline-after/__tests__/index.js index 8e536b380d..9fdbabb099 100644 --- a/lib/rules/selector-list-comma-newline-after/__tests__/index.js +++ b/lib/rules/selector-list-comma-newline-after/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -340,7 +343,7 @@ testRule({ ruleName, config: ['always'], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, fix: true, accept: [ @@ -371,7 +374,7 @@ testRule({ ruleName, config: ['always'], skipBasicChecks: true, - syntax: 'less', + customSyntax: postcssLess, fix: true, accept: [ diff --git a/lib/rules/selector-list-comma-space-after/__tests__/index.js b/lib/rules/selector-list-comma-space-after/__tests__/index.js index 04f09e27ea..ef8298bf5c 100644 --- a/lib/rules/selector-list-comma-space-after/__tests__/index.js +++ b/lib/rules/selector-list-comma-space-after/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssLess = require('postcss-less'); + const { messages, ruleName } = require('..'); testRule({ @@ -382,7 +384,7 @@ testRule({ ruleName, config: ['always'], skipBasicChecks: true, - syntax: 'less', + customSyntax: postcssLess, accept: [ { diff --git a/lib/rules/selector-max-attribute/__tests__/index.js b/lib/rules/selector-max-attribute/__tests__/index.js index 1a1e125688..845401e454 100644 --- a/lib/rules/selector-max-attribute/__tests__/index.js +++ b/lib/rules/selector-max-attribute/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); // Sanity checks @@ -228,7 +230,7 @@ testRule({ testRule({ ruleName, config: [0], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/selector-max-class/__tests__/index.js b/lib/rules/selector-max-class/__tests__/index.js index 030f17d7a8..c3ec1acdbd 100644 --- a/lib/rules/selector-max-class/__tests__/index.js +++ b/lib/rules/selector-max-class/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); // Sanity checks @@ -150,7 +153,7 @@ testRule({ testRule({ ruleName, config: [0], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -185,7 +188,7 @@ testRule({ testRule({ ruleName, config: [0], - syntax: 'less', + customSyntax: postcssLess, accept: [ { diff --git a/lib/rules/selector-max-combinators/__tests__/index.js b/lib/rules/selector-max-combinators/__tests__/index.js index 2fcac4de4e..dbd3accaa8 100644 --- a/lib/rules/selector-max-combinators/__tests__/index.js +++ b/lib/rules/selector-max-combinators/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); // Sanity checks @@ -197,7 +200,7 @@ testRule({ ruleName, config: [0], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -301,7 +304,7 @@ testRule({ ruleName, config: [true], skipBasicChecks: true, - syntax: 'less', + customSyntax: postcssLess, accept: [ { diff --git a/lib/rules/selector-max-compound-selectors/__tests__/index.js b/lib/rules/selector-max-compound-selectors/__tests__/index.js index ec93a919d0..b46ec392f5 100644 --- a/lib/rules/selector-max-compound-selectors/__tests__/index.js +++ b/lib/rules/selector-max-compound-selectors/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); // Testing plain selectors, different combinators @@ -275,7 +278,7 @@ testRule({ testRule({ ruleName, config: [1], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -334,7 +337,7 @@ testRule({ testRule({ ruleName, config: [1], - syntax: 'less', + customSyntax: postcssLess, accept: [ { diff --git a/lib/rules/selector-max-id/__tests__/index.js b/lib/rules/selector-max-id/__tests__/index.js index 6647ccc659..616ba2feb6 100644 --- a/lib/rules/selector-max-id/__tests__/index.js +++ b/lib/rules/selector-max-id/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); // Sanity checks @@ -260,7 +263,7 @@ testRule({ ruleName, config: [0], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -382,7 +385,7 @@ testRule({ ruleName, config: [0], skipBasicChecks: true, - syntax: 'less', + customSyntax: postcssLess, accept: [ { @@ -420,7 +423,7 @@ testRule({ ruleName, config: [2], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/selector-max-pseudo-class/__tests__/index.js b/lib/rules/selector-max-pseudo-class/__tests__/index.js index f4351c117b..7cc00c4414 100644 --- a/lib/rules/selector-max-pseudo-class/__tests__/index.js +++ b/lib/rules/selector-max-pseudo-class/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -64,7 +66,7 @@ testRule({ ruleName, config: [0], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [], @@ -178,7 +180,7 @@ testRule({ ruleName, config: [1], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [], diff --git a/lib/rules/selector-max-specificity/__tests__/index.js b/lib/rules/selector-max-specificity/__tests__/index.js index 2987257b29..5c39ea75c3 100755 --- a/lib/rules/selector-max-specificity/__tests__/index.js +++ b/lib/rules/selector-max-specificity/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -265,7 +268,7 @@ testRule({ testRule({ ruleName, config: ['0,1,1'], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -333,7 +336,7 @@ testRule({ testRule({ ruleName, config: ['0,3,0'], - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -345,7 +348,7 @@ testRule({ testRule({ ruleName, config: ['0,1,1'], - syntax: 'less', + customSyntax: postcssLess, accept: [ { diff --git a/lib/rules/selector-max-type/__tests__/index.js b/lib/rules/selector-max-type/__tests__/index.js index 4074493ca4..21058388b0 100644 --- a/lib/rules/selector-max-type/__tests__/index.js +++ b/lib/rules/selector-max-type/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); // Sanity checks @@ -519,7 +522,7 @@ testRule({ ruleName, config: [0], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -596,7 +599,7 @@ testRule({ ruleName, config: [0], skipBasicChecks: true, - syntax: 'less', + customSyntax: postcssLess, accept: [ { diff --git a/lib/rules/selector-max-universal/__tests__/index.js b/lib/rules/selector-max-universal/__tests__/index.js index 6ea8eac4af..260eec2d59 100644 --- a/lib/rules/selector-max-universal/__tests__/index.js +++ b/lib/rules/selector-max-universal/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); // Sanity checks @@ -202,7 +204,7 @@ testRule({ ruleName, config: [0], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, reject: [ { diff --git a/lib/rules/selector-nested-pattern/__tests__/index.js b/lib/rules/selector-nested-pattern/__tests__/index.js index e05a21dff5..ad357255c9 100644 --- a/lib/rules/selector-nested-pattern/__tests__/index.js +++ b/lib/rules/selector-nested-pattern/__tests__/index.js @@ -1,6 +1,8 @@ 'use strict'; +const postcssScss = require('postcss-scss'); const stripIndent = require('common-tags').stripIndent; + const { messages, ruleName } = require('..'); const basicAZTests = { @@ -145,7 +147,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: [/^[A-Z]+$/], accept: [ diff --git a/lib/rules/selector-no-qualifying-type/__tests__/index.js b/lib/rules/selector-no-qualifying-type/__tests__/index.js index 2808a9db0b..dea677210b 100644 --- a/lib/rules/selector-no-qualifying-type/__tests__/index.js +++ b/lib/rules/selector-no-qualifying-type/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -2041,7 +2044,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: [true], accept: [ @@ -2137,7 +2140,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: [true], accept: [ diff --git a/lib/rules/selector-pseudo-class-allowed-list/__tests__/index.js b/lib/rules/selector-pseudo-class-allowed-list/__tests__/index.js index d9adad4dfe..0cb0a82a39 100644 --- a/lib/rules/selector-pseudo-class-allowed-list/__tests__/index.js +++ b/lib/rules/selector-pseudo-class-allowed-list/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -157,7 +159,7 @@ testRule({ ruleName, config: ['hover'], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/selector-pseudo-class-case/__tests__/index.js b/lib/rules/selector-pseudo-class-case/__tests__/index.js index 65beb559fd..a6af6cbf79 100644 --- a/lib/rules/selector-pseudo-class-case/__tests__/index.js +++ b/lib/rules/selector-pseudo-class-case/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -635,7 +637,7 @@ testRule({ ruleName, config: ['lower'], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -905,7 +907,7 @@ testRule({ ruleName, config: ['upper'], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/selector-pseudo-class-disallowed-list/__tests__/index.js b/lib/rules/selector-pseudo-class-disallowed-list/__tests__/index.js index 08ecbb317e..e8c9e2a871 100644 --- a/lib/rules/selector-pseudo-class-disallowed-list/__tests__/index.js +++ b/lib/rules/selector-pseudo-class-disallowed-list/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -208,7 +210,7 @@ testRule({ ruleName, config: ['variable'], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/selector-pseudo-class-no-unknown/__tests__/index.js b/lib/rules/selector-pseudo-class-no-unknown/__tests__/index.js index d1ee407f81..57b35241b0 100644 --- a/lib/rules/selector-pseudo-class-no-unknown/__tests__/index.js +++ b/lib/rules/selector-pseudo-class-no-unknown/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -217,7 +220,7 @@ testRule({ ruleName, config: [true], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -239,7 +242,7 @@ testRule({ ruleName, config: [true], skipBasicChecks: true, - syntax: 'less', + customSyntax: postcssLess, accept: [ { diff --git a/lib/rules/selector-pseudo-element-allowed-list/__tests__/index.js b/lib/rules/selector-pseudo-element-allowed-list/__tests__/index.js index 6228fd300e..b822872968 100644 --- a/lib/rules/selector-pseudo-element-allowed-list/__tests__/index.js +++ b/lib/rules/selector-pseudo-element-allowed-list/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -101,7 +103,7 @@ testRule({ ruleName, config: ['before'], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/selector-pseudo-element-case/__tests__/index.js b/lib/rules/selector-pseudo-element-case/__tests__/index.js index 8bc27a02d5..0fd3b547e2 100644 --- a/lib/rules/selector-pseudo-element-case/__tests__/index.js +++ b/lib/rules/selector-pseudo-element-case/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -289,7 +291,7 @@ testRule({ ruleName, config: ['lower'], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -578,7 +580,7 @@ testRule({ ruleName, config: ['upper'], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/selector-pseudo-element-disallowed-list/__tests__/index.js b/lib/rules/selector-pseudo-element-disallowed-list/__tests__/index.js index 7909c34097..ef1f56004c 100644 --- a/lib/rules/selector-pseudo-element-disallowed-list/__tests__/index.js +++ b/lib/rules/selector-pseudo-element-disallowed-list/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -87,7 +89,7 @@ testRule({ ruleName, config: ['before'], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/selector-pseudo-element-no-unknown/__tests__/index.js b/lib/rules/selector-pseudo-element-no-unknown/__tests__/index.js index 8cd9b0e26b..3908263bf1 100644 --- a/lib/rules/selector-pseudo-element-no-unknown/__tests__/index.js +++ b/lib/rules/selector-pseudo-element-no-unknown/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -159,7 +161,7 @@ testRule({ ruleName, config: [true], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { diff --git a/lib/rules/selector-type-case/__tests__/index.js b/lib/rules/selector-type-case/__tests__/index.js index 117eaf806a..ae9287a531 100644 --- a/lib/rules/selector-type-case/__tests__/index.js +++ b/lib/rules/selector-type-case/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -277,7 +279,7 @@ testRule({ ruleName, config: ['upper'], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, fix: true, accept: [ diff --git a/lib/rules/selector-type-no-unknown/__tests__/index.js b/lib/rules/selector-type-no-unknown/__tests__/index.js index e063b5ed15..28258af37f 100644 --- a/lib/rules/selector-type-no-unknown/__tests__/index.js +++ b/lib/rules/selector-type-no-unknown/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -215,7 +218,7 @@ testRule({ ruleName, config: [true], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, accept: [ { @@ -235,7 +238,7 @@ testRule({ ruleName, config: [true], skipBasicChecks: true, - syntax: 'less', + customSyntax: postcssLess, accept: [ { @@ -446,6 +449,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [true], skipBasicChecks: true, diff --git a/lib/rules/shorthand-property-no-redundant-values/__tests__/index.js b/lib/rules/shorthand-property-no-redundant-values/__tests__/index.js index 72a0ff053a..0956cbbdc5 100644 --- a/lib/rules/shorthand-property-no-redundant-values/__tests__/index.js +++ b/lib/rules/shorthand-property-no-redundant-values/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -360,7 +363,7 @@ testRule({ testRule({ ruleName, config: [true], - syntax: 'less', + customSyntax: postcssLess, fix: true, accept: [ { @@ -381,7 +384,7 @@ testRule({ testRule({ ruleName, config: [true], - syntax: 'scss', + customSyntax: postcssScss, fix: true, accept: [ { diff --git a/lib/rules/string-no-newline/__tests__/index.js b/lib/rules/string-no-newline/__tests__/index.js index bfd319198b..499a865f2b 100644 --- a/lib/rules/string-no-newline/__tests__/index.js +++ b/lib/rules/string-no-newline/__tests__/index.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -71,7 +73,7 @@ testRule({ testRule({ ruleName, config: [], - syntax: 'scss', + customSyntax: postcssScss, skipBasicChecks: true, accept: [ @@ -82,6 +84,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: [true], syntax: 'html', diff --git a/lib/rules/string-quotes/__tests__/index.js b/lib/rules/string-quotes/__tests__/index.js index 1eb6b2c33f..412625ef4f 100644 --- a/lib/rules/string-quotes/__tests__/index.js +++ b/lib/rules/string-quotes/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -253,7 +256,7 @@ testRule({ ruleName, config: ['double'], skipBasicChecks: true, - syntax: 'scss', + customSyntax: postcssScss, fix: true, accept: [ { @@ -290,7 +293,7 @@ testRule({ ruleName, config: ['double'], skipBasicChecks: true, - syntax: 'less', + customSyntax: postcssLess, fix: true, accept: [ { diff --git a/lib/rules/unicode-bom/__tests__/index.js b/lib/rules/unicode-bom/__tests__/index.js index 502a179032..6854c43183 100644 --- a/lib/rules/unicode-bom/__tests__/index.js +++ b/lib/rules/unicode-bom/__tests__/index.js @@ -63,6 +63,7 @@ testRule({ }); testRule({ + skip: true, ruleName, syntax: 'html', config: ['always'], @@ -89,6 +90,7 @@ testRule({ }); testRule({ + skip: true, ruleName, syntax: 'html', config: ['never'], @@ -115,6 +117,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: ['always'], skipBasicChecks: true, @@ -133,6 +136,7 @@ testRule({ }); testRule({ + skip: true, ruleName, config: ['never'], skipBasicChecks: true, diff --git a/lib/rules/unit-case/__tests__/index.js b/lib/rules/unit-case/__tests__/index.js index e133a73843..62e4408023 100644 --- a/lib/rules/unit-case/__tests__/index.js +++ b/lib/rules/unit-case/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -288,7 +291,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: ['lower'], fix: true, @@ -386,7 +389,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: ['lower'], fix: true, @@ -618,7 +621,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: ['upper'], fix: true, @@ -716,7 +719,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: ['upper'], fix: true, diff --git a/lib/rules/unit-no-unknown/__tests__/index.js b/lib/rules/unit-no-unknown/__tests__/index.js index d8debaa236..78dcca608a 100644 --- a/lib/rules/unit-no-unknown/__tests__/index.js +++ b/lib/rules/unit-no-unknown/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -424,7 +427,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: [true], accept: [ @@ -522,7 +525,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: [true], accept: [ diff --git a/lib/rules/value-keyword-case/__tests__/index.js b/lib/rules/value-keyword-case/__tests__/index.js index 290de1d76c..1dc262095b 100644 --- a/lib/rules/value-keyword-case/__tests__/index.js +++ b/lib/rules/value-keyword-case/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -680,7 +683,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: ['lower'], fix: true, @@ -854,7 +857,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: ['lower'], fix: true, @@ -1638,7 +1641,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: ['upper'], fix: true, @@ -1808,7 +1811,7 @@ testRule({ testRule({ ruleName, - syntax: 'less', + customSyntax: postcssLess, config: ['upper'], fix: true, @@ -2155,7 +2158,7 @@ testRule({ testRule({ ruleName, - syntax: 'scss', + customSyntax: postcssScss, config: ['lower', { ignoreProperties: ['$fontFamily'] }], fix: true, diff --git a/lib/rules/value-no-vendor-prefix/__tests__/index.js b/lib/rules/value-no-vendor-prefix/__tests__/index.js index 39934295e1..bcf3ade05d 100644 --- a/lib/rules/value-no-vendor-prefix/__tests__/index.js +++ b/lib/rules/value-no-vendor-prefix/__tests__/index.js @@ -1,5 +1,8 @@ 'use strict'; +const postcssLess = require('postcss-less'); +const postcssScss = require('postcss-scss'); + const { messages, ruleName } = require('..'); testRule({ @@ -101,7 +104,7 @@ testRule({ testRule({ ruleName, config: [true], - syntax: 'scss', + customSyntax: postcssScss, fix: true, accept: [ @@ -123,7 +126,7 @@ testRule({ testRule({ ruleName, config: [true], - syntax: 'less', + customSyntax: postcssLess, fix: true, accept: [ diff --git a/lib/syntaxes/index.js b/lib/syntaxes/index.js deleted file mode 100644 index 7afa0c3ccd..0000000000 --- a/lib/syntaxes/index.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -// Use this require pattern so that syntaxes can be bundled separately -const importLazy = require('import-lazy')(require); - -/** @typedef {import('../getPostcssResult').Syntax} Syntax */ -/** @type {{[k: string]: Syntax}} */ -module.exports = { - 'css-in-js': importLazy('./syntax-css-in-js'), - html: importLazy('./syntax-html'), - less: importLazy('./syntax-less'), - markdown: importLazy('./syntax-markdown'), - sass: importLazy('./syntax-sass'), - scss: importLazy('./syntax-scss'), - sugarss: importLazy('./syntax-sugarss'), -}; diff --git a/lib/syntaxes/syntax-css-in-js.js b/lib/syntaxes/syntax-css-in-js.js deleted file mode 100644 index 0bf6a5f647..0000000000 --- a/lib/syntaxes/syntax-css-in-js.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('@stylelint/postcss-css-in-js')(); diff --git a/lib/syntaxes/syntax-html.js b/lib/syntaxes/syntax-html.js deleted file mode 100644 index edf9fa0601..0000000000 --- a/lib/syntaxes/syntax-html.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -module.exports = require('postcss-html')({ - scss: require('postcss-scss'), - less: require('postcss-less'), - sass: require('postcss-sass'), - sugarss: require('sugarss'), -}); diff --git a/lib/syntaxes/syntax-less.js b/lib/syntaxes/syntax-less.js deleted file mode 100644 index 0d2b57548f..0000000000 --- a/lib/syntaxes/syntax-less.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('postcss-less'); diff --git a/lib/syntaxes/syntax-markdown.js b/lib/syntaxes/syntax-markdown.js deleted file mode 100644 index 7ae0cdbdbf..0000000000 --- a/lib/syntaxes/syntax-markdown.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -module.exports = require('@stylelint/postcss-markdown')({ - scss: require('postcss-scss'), - less: require('postcss-less'), - sass: require('postcss-sass'), - sugarss: require('sugarss'), -}); diff --git a/lib/syntaxes/syntax-sass.js b/lib/syntaxes/syntax-sass.js deleted file mode 100644 index 38c8a38ff6..0000000000 --- a/lib/syntaxes/syntax-sass.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('postcss-sass'); diff --git a/lib/syntaxes/syntax-scss.js b/lib/syntaxes/syntax-scss.js deleted file mode 100644 index 289a42f3f3..0000000000 --- a/lib/syntaxes/syntax-scss.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('postcss-scss'); diff --git a/lib/syntaxes/syntax-sugarss.js b/lib/syntaxes/syntax-sugarss.js deleted file mode 100644 index bdbe155891..0000000000 --- a/lib/syntaxes/syntax-sugarss.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('sugarss'); diff --git a/package-lock.json b/package-lock.json index 5a3983dd6f..17be692af4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,8 +8,6 @@ "version": "13.13.1", "license": "MIT", "dependencies": { - "@stylelint/postcss-css-in-js": "^0.37.2", - "@stylelint/postcss-markdown": "^0.36.2", "autoprefixer": "^9.8.6", "balanced-match": "^2.0.0", "chalk": "^4.1.1", @@ -35,15 +33,10 @@ "micromatch": "^4.0.4", "normalize-selector": "^0.2.0", "postcss": "^7.0.35", - "postcss-html": "^0.36.0", - "postcss-less": "^3.1.4", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^4.0.2", - "postcss-sass": "^0.4.4", - "postcss-scss": "^2.1.1", "postcss-selector-parser": "^6.0.5", - "postcss-syntax": "^0.36.2", "postcss-value-parser": "^4.1.0", "resolve-from": "^5.0.0", "slash": "^3.0.0", @@ -51,7 +44,6 @@ "string-width": "^4.2.2", "strip-ansi": "^6.0.0", "style-search": "^0.1.0", - "sugarss": "^2.0.0", "svg-tags": "^1.0.0", "table": "^6.6.0", "v8-compile-cache": "^2.3.0", @@ -84,14 +76,18 @@ "husky": "^6.0.0", "jest": "^26.6.3", "jest-circus": "^26.6.3", - "jest-preset-stylelint": "^3.0.0", + "jest-preset-stylelint": "^4.1.0", "jest-watch-typeahead": "^0.6.3", "lint-staged": "^10.5.4", "np": "^7.5.0", "npm-run-all": "^4.1.5", "postcss-import": "^12.0.1", - "prettier": "^2.2.1", + "postcss-less": "^3.1.4", + "postcss-sass": "^0.4.4", + "postcss-scss": "^2.1.1", + "prettier": "2.2.1", "remark-cli": "^9.0.0", + "sugarss": "^2.0.0", "typescript": "^4.2.4" }, "engines": { @@ -114,6 +110,7 @@ "version": "7.12.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.12.1", @@ -140,6 +137,7 @@ "version": "7.12.5", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", + "dev": true, "dependencies": { "@babel/types": "^7.12.5", "jsesc": "^2.5.1", @@ -150,6 +148,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "dev": true, "dependencies": { "@babel/helper-get-function-arity": "^7.10.4", "@babel/template": "^7.10.4", @@ -160,6 +159,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "dev": true, "dependencies": { "@babel/types": "^7.10.4" } @@ -168,6 +168,7 @@ "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", + "dev": true, "dependencies": { "@babel/types": "^7.12.1" } @@ -176,6 +177,7 @@ "version": "7.12.5", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "dev": true, "dependencies": { "@babel/types": "^7.12.5" } @@ -184,6 +186,7 @@ "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.12.1", "@babel/helper-replace-supers": "^7.12.1", @@ -200,6 +203,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "dev": true, "dependencies": { "@babel/types": "^7.10.4" } @@ -214,6 +218,7 @@ "version": "7.12.5", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", + "dev": true, "dependencies": { "@babel/helper-member-expression-to-functions": "^7.12.1", "@babel/helper-optimise-call-expression": "^7.10.4", @@ -225,6 +230,7 @@ "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "dev": true, "dependencies": { "@babel/types": "^7.12.1" } @@ -233,6 +239,7 @@ "version": "7.11.0", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "dev": true, "dependencies": { "@babel/types": "^7.11.0" } @@ -246,6 +253,7 @@ "version": "7.12.5", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "dev": true, "dependencies": { "@babel/template": "^7.10.4", "@babel/traverse": "^7.12.5", @@ -279,6 +287,7 @@ "version": "7.12.5", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz", "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==", + "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -398,6 +407,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/parser": "^7.10.4", @@ -408,6 +418,7 @@ "version": "7.12.5", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz", "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.12.5", @@ -424,6 +435,7 @@ "version": "7.12.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.19", @@ -862,23 +874,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "node_modules/@stylelint/postcss-css-in-js": { - "version": "0.37.2", - "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz", - "integrity": "sha512-nEhsFoJurt8oUmieT8qy4nk81WRHmJynmVwn/Vts08PL9fhgIsMhk1GId5yAN643OzqEEb5S/6At2TZW7pqPDA==", - "dependencies": { - "@babel/core": ">=7.9.0" - } - }, - "node_modules/@stylelint/postcss-markdown": { - "version": "0.36.2", - "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz", - "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==", - "dependencies": { - "remark": "^13.0.0", - "unist-util-find-all-after": "^3.0.2" - } - }, "node_modules/@stylelint/prettier-config": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@stylelint/prettier-config/-/prettier-config-2.0.0.tgz", @@ -1084,6 +1079,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "dev": true, "dependencies": { "@types/unist": "*" } @@ -1178,7 +1174,8 @@ "node_modules/@types/unist": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", + "dev": true }, "node_modules/@types/write-file-atomic": { "version": "3.0.1", @@ -1729,7 +1726,8 @@ "node_modules/bail": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true }, "node_modules/balanced-match": { "version": "2.0.0", @@ -2169,17 +2167,20 @@ "node_modules/character-entities": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true }, "node_modules/character-entities-legacy": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true }, "node_modules/character-reference-invalid": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true }, "node_modules/chardet": { "version": "0.7.0", @@ -2547,6 +2548,7 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, "dependencies": { "safe-buffer": "~5.1.1" } @@ -2941,30 +2943,6 @@ "node": ">=6.0.0" } }, - "node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz", - "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==" - }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" - }, - "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, "node_modules/domexception": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", @@ -2986,23 +2964,6 @@ "node": ">=8" } }, - "node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, "node_modules/dot-prop": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", @@ -3089,11 +3050,6 @@ "node": ">=8.6" } }, - "node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3806,7 +3762,8 @@ "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true }, "node_modules/extend-shallow": { "version": "3.0.2", @@ -4156,6 +4113,7 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -4327,6 +4285,7 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, "engines": { "node": ">=4" } @@ -4359,6 +4318,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "dev": true, "dependencies": { "minimist": "^1.2.5" }, @@ -4600,19 +4560,6 @@ "node": ">=8" } }, - "node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, "node_modules/http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", @@ -5043,12 +4990,14 @@ "node_modules/is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true }, "node_modules/is-alphanumerical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, "dependencies": { "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0" @@ -5075,6 +5024,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, "engines": { "node": ">=4" } @@ -5138,7 +5088,8 @@ "node_modules/is-decimal": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true }, "node_modules/is-descriptor": { "version": "0.1.6", @@ -5229,7 +5180,8 @@ "node_modules/is-hexadecimal": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true }, "node_modules/is-installed-globally": { "version": "0.3.2", @@ -5331,6 +5283,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, "engines": { "node": ">=8" } @@ -5970,12 +5923,15 @@ } }, "node_modules/jest-preset-stylelint": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jest-preset-stylelint/-/jest-preset-stylelint-3.0.0.tgz", - "integrity": "sha512-D1OVhoyshWE5i7upXpXuBMkMInnTFCia/uP5Dv+fwRjJz/hvJkJJvMXEa5I9EuHxa4/vmmG5busoMUyUCsKzAg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jest-preset-stylelint/-/jest-preset-stylelint-4.1.0.tgz", + "integrity": "sha512-HibeWaRTmWagAQ6wHbefHqnP2NAb7MAhVVt45iwiTP8fXIuc6ikfhrzOoGWh6FegPLJBXPwuNYOM1ZYANX75yQ==", "dev": true, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "jest": "^25.3.0 || ^26.0.1" } }, "node_modules/jest-regex-util": { @@ -6389,6 +6345,7 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, "bin": { "jsesc": "bin/jsesc" }, @@ -6441,6 +6398,7 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, "dependencies": { "minimist": "^1.2.5" }, @@ -7301,7 +7259,8 @@ "node_modules/longest-streak": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==" + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true }, "node_modules/lowercase-keys": { "version": "2.0.0", @@ -7422,6 +7381,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.1.tgz", "integrity": "sha512-qJXNcFcuCSPqUF0Tb0uYcFDIq67qwB3sxo9RPdf9vG8T90ViKnksFqdB/Coq2a7sTnxL/Ify2y7aIQXDkQFH0w==", + "dev": true, "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-to-string": "^1.0.0", @@ -7456,6 +7416,7 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.5.3.tgz", "integrity": "sha512-sr8q7fQJ1xoCqZSXW6dO/MYu2Md+a4Hfk9uO+XHCfiBhVM0EgWtfAV7BuN+ff6otUeu2xDyt1o7vhZGwOG3+BA==", + "dev": true, "dependencies": { "@types/unist": "^2.0.0", "longest-streak": "^2.0.0", @@ -7468,7 +7429,8 @@ "node_modules/mdast-util-to-string": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==" + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true }, "node_modules/mem": { "version": "6.1.1", @@ -7541,6 +7503,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.10.1.tgz", "integrity": "sha512-fUuVF8sC1X7wsCS29SYQ2ZfIZYbTymp0EYr6sab3idFjigFFjGa5UwoniPlV9tAgntjuapW1t9U+S0yDYeGKHQ==", + "dev": true, "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -7632,7 +7595,8 @@ "node_modules/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true }, "node_modules/minimist-options": { "version": "4.1.0", @@ -8919,6 +8883,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, "dependencies": { "character-entities": "^1.0.0", "character-entities-legacy": "^1.0.0", @@ -9103,14 +9068,6 @@ "node": ">=6.0.0" } }, - "node_modules/postcss-html": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", - "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", - "dependencies": { - "htmlparser2": "^3.10.0" - } - }, "node_modules/postcss-import": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", @@ -9136,6 +9093,7 @@ "version": "3.1.4", "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", + "dev": true, "dependencies": { "postcss": "^7.0.14" }, @@ -9168,6 +9126,7 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", + "dev": true, "dependencies": { "gonzales-pe": "^4.3.0", "postcss": "^7.0.21" @@ -9177,6 +9136,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", + "dev": true, "dependencies": { "postcss": "^7.0.6" }, @@ -9196,11 +9156,6 @@ "node": ">=4" } }, - "node_modules/postcss-syntax": { - "version": "0.36.2", - "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", - "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==" - }, "node_modules/postcss-value-parser": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", @@ -9537,6 +9492,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -9620,6 +9576,7 @@ "version": "13.0.0", "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", + "dev": true, "dependencies": { "remark-parse": "^9.0.0", "remark-stringify": "^9.0.0", @@ -9928,6 +9885,7 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "dev": true, "dependencies": { "mdast-util-from-markdown": "^0.8.0" } @@ -9973,6 +9931,7 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.0.tgz", "integrity": "sha512-8x29DpTbVzEc6Dwb90qhxCtbZ6hmj3BxWWDpMhA+1WM4dOEGH5U5/GFe3Be5Hns5MvPSFAr1e2KSVtKZkK5nUw==", + "dev": true, "dependencies": { "mdast-util-to-markdown": "^0.5.0" } @@ -10012,6 +9971,7 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, "engines": { "node": ">=0.10" } @@ -10020,6 +9980,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true, "engines": { "node": ">= 0.10" } @@ -10269,7 +10230,8 @@ "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "node_modules/safe-regex": { "version": "1.1.0", @@ -10843,6 +10805,7 @@ "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -11030,6 +10993,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -11037,7 +11001,8 @@ "node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true }, "node_modules/string-argv": { "version": "0.3.1", @@ -11246,6 +11211,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", + "dev": true, "dependencies": { "postcss": "^7.0.2" } @@ -11419,6 +11385,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, "engines": { "node": ">=4" } @@ -11535,7 +11502,8 @@ "node_modules/trough": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true }, "node_modules/tslib": { "version": "1.14.1", @@ -11633,6 +11601,7 @@ "version": "9.2.0", "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dev": true, "dependencies": { "bail": "^1.0.0", "extend": "^3.0.0", @@ -11801,14 +11770,6 @@ "node": ">=8" } }, - "node_modules/unist-util-find-all-after": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", - "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==", - "dependencies": { - "unist-util-is": "^4.0.0" - } - }, "node_modules/unist-util-generated": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", @@ -11831,7 +11792,8 @@ "node_modules/unist-util-is": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.3.tgz", - "integrity": "sha512-bTofCFVx0iQM8Jqb1TBDVRIQW03YkD3p66JOd/aCWuqzlLyUtx1ZAGw/u+Zw+SttKvSVcvTiKYbfrtLoLefykw==" + "integrity": "sha512-bTofCFVx0iQM8Jqb1TBDVRIQW03YkD3p66JOd/aCWuqzlLyUtx1ZAGw/u+Zw+SttKvSVcvTiKYbfrtLoLefykw==", + "dev": true }, "node_modules/unist-util-position": { "version": "3.1.0", @@ -11847,6 +11809,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, "dependencies": { "@types/unist": "^2.0.2" } @@ -12143,6 +12106,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==", + "dev": true, "dependencies": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", @@ -12165,6 +12129,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dev": true, "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" @@ -12497,7 +12462,8 @@ "node_modules/zwitch": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "dev": true } }, "dependencies": { @@ -12513,6 +12479,7 @@ "version": "7.12.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", + "dev": true, "requires": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.12.1", @@ -12536,6 +12503,7 @@ "version": "7.12.5", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", + "dev": true, "requires": { "@babel/types": "^7.12.5", "jsesc": "^2.5.1", @@ -12546,6 +12514,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.10.4", "@babel/template": "^7.10.4", @@ -12556,6 +12525,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "dev": true, "requires": { "@babel/types": "^7.10.4" } @@ -12564,6 +12534,7 @@ "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", + "dev": true, "requires": { "@babel/types": "^7.12.1" } @@ -12572,6 +12543,7 @@ "version": "7.12.5", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "dev": true, "requires": { "@babel/types": "^7.12.5" } @@ -12580,6 +12552,7 @@ "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "dev": true, "requires": { "@babel/helper-module-imports": "^7.12.1", "@babel/helper-replace-supers": "^7.12.1", @@ -12596,6 +12569,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "dev": true, "requires": { "@babel/types": "^7.10.4" } @@ -12610,6 +12584,7 @@ "version": "7.12.5", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", + "dev": true, "requires": { "@babel/helper-member-expression-to-functions": "^7.12.1", "@babel/helper-optimise-call-expression": "^7.10.4", @@ -12621,6 +12596,7 @@ "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "dev": true, "requires": { "@babel/types": "^7.12.1" } @@ -12629,6 +12605,7 @@ "version": "7.11.0", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "dev": true, "requires": { "@babel/types": "^7.11.0" } @@ -12642,6 +12619,7 @@ "version": "7.12.5", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "dev": true, "requires": { "@babel/template": "^7.10.4", "@babel/traverse": "^7.12.5", @@ -12673,7 +12651,8 @@ "@babel/parser": { "version": "7.12.5", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz", - "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==" + "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==", + "dev": true }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -12787,6 +12766,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "dev": true, "requires": { "@babel/code-frame": "^7.10.4", "@babel/parser": "^7.10.4", @@ -12797,6 +12777,7 @@ "version": "7.12.5", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz", "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==", + "dev": true, "requires": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.12.5", @@ -12813,6 +12794,7 @@ "version": "7.12.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.19", @@ -13174,23 +13156,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "@stylelint/postcss-css-in-js": { - "version": "0.37.2", - "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz", - "integrity": "sha512-nEhsFoJurt8oUmieT8qy4nk81WRHmJynmVwn/Vts08PL9fhgIsMhk1GId5yAN643OzqEEb5S/6At2TZW7pqPDA==", - "requires": { - "@babel/core": ">=7.9.0" - } - }, - "@stylelint/postcss-markdown": { - "version": "0.36.2", - "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz", - "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==", - "requires": { - "remark": "^13.0.0", - "unist-util-find-all-after": "^3.0.2" - } - }, "@stylelint/prettier-config": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@stylelint/prettier-config/-/prettier-config-2.0.0.tgz", @@ -13393,6 +13358,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "dev": true, "requires": { "@types/unist": "*" } @@ -13487,7 +13453,8 @@ "@types/unist": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", + "dev": true }, "@types/write-file-atomic": { "version": "3.0.1", @@ -13922,7 +13889,8 @@ "bail": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true }, "balanced-match": { "version": "2.0.0", @@ -14279,17 +14247,20 @@ "character-entities": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true }, "character-entities-legacy": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true }, "character-reference-invalid": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true }, "chardet": { "version": "0.7.0", @@ -14584,6 +14555,7 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, "requires": { "safe-buffer": "~5.1.1" } @@ -14889,32 +14861,6 @@ "esutils": "^2.0.2" } }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz", - "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==" - }, - "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" - } - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, "domexception": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", @@ -14932,23 +14878,6 @@ } } }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, "dot-prop": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", @@ -15022,11 +14951,6 @@ "ansi-colors": "^4.1.1" } }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -15583,7 +15507,8 @@ "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true }, "extend-shallow": { "version": "3.0.2", @@ -15867,7 +15792,8 @@ "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true }, "get-caller-file": { "version": "2.0.5", @@ -16007,7 +15933,8 @@ "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true }, "globby": { "version": "11.0.3", @@ -16031,6 +15958,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "dev": true, "requires": { "minimist": "^1.2.5" } @@ -16215,19 +16143,6 @@ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==" }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", @@ -16570,12 +16485,14 @@ "is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true }, "is-alphanumerical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, "requires": { "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0" @@ -16598,7 +16515,8 @@ "is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true }, "is-callable": { "version": "1.2.2", @@ -16649,7 +16567,8 @@ "is-decimal": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true }, "is-descriptor": { "version": "0.1.6", @@ -16715,7 +16634,8 @@ "is-hexadecimal": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true }, "is-installed-globally": { "version": "0.3.2", @@ -16788,7 +16708,8 @@ "is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true }, "is-plain-object": { "version": "2.0.4", @@ -17336,10 +17257,11 @@ "dev": true }, "jest-preset-stylelint": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jest-preset-stylelint/-/jest-preset-stylelint-3.0.0.tgz", - "integrity": "sha512-D1OVhoyshWE5i7upXpXuBMkMInnTFCia/uP5Dv+fwRjJz/hvJkJJvMXEa5I9EuHxa4/vmmG5busoMUyUCsKzAg==", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jest-preset-stylelint/-/jest-preset-stylelint-4.1.0.tgz", + "integrity": "sha512-HibeWaRTmWagAQ6wHbefHqnP2NAb7MAhVVt45iwiTP8fXIuc6ikfhrzOoGWh6FegPLJBXPwuNYOM1ZYANX75yQ==", + "dev": true, + "requires": {} }, "jest-regex-util": { "version": "26.0.0", @@ -17648,7 +17570,8 @@ "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true }, "json-buffer": { "version": "3.0.1", @@ -17695,6 +17618,7 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, "requires": { "minimist": "^1.2.5" } @@ -18364,7 +18288,8 @@ "longest-streak": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==" + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true }, "lowercase-keys": { "version": "2.0.0", @@ -18456,6 +18381,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.1.tgz", "integrity": "sha512-qJXNcFcuCSPqUF0Tb0uYcFDIq67qwB3sxo9RPdf9vG8T90ViKnksFqdB/Coq2a7sTnxL/Ify2y7aIQXDkQFH0w==", + "dev": true, "requires": { "@types/mdast": "^3.0.0", "mdast-util-to-string": "^1.0.0", @@ -18482,6 +18408,7 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.5.3.tgz", "integrity": "sha512-sr8q7fQJ1xoCqZSXW6dO/MYu2Md+a4Hfk9uO+XHCfiBhVM0EgWtfAV7BuN+ff6otUeu2xDyt1o7vhZGwOG3+BA==", + "dev": true, "requires": { "@types/unist": "^2.0.0", "longest-streak": "^2.0.0", @@ -18494,7 +18421,8 @@ "mdast-util-to-string": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==" + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true }, "mem": { "version": "6.1.1", @@ -18554,6 +18482,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.10.1.tgz", "integrity": "sha512-fUuVF8sC1X7wsCS29SYQ2ZfIZYbTymp0EYr6sab3idFjigFFjGa5UwoniPlV9tAgntjuapW1t9U+S0yDYeGKHQ==", + "dev": true, "requires": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -18620,7 +18549,8 @@ "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true }, "minimist-options": { "version": "4.1.0", @@ -19638,6 +19568,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, "requires": { "character-entities": "^1.0.0", "character-entities-legacy": "^1.0.0", @@ -19809,14 +19740,6 @@ } } }, - "postcss-html": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", - "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", - "requires": { - "htmlparser2": "^3.10.0" - } - }, "postcss-import": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", @@ -19841,6 +19764,7 @@ "version": "3.1.4", "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", + "dev": true, "requires": { "postcss": "^7.0.14" } @@ -19867,6 +19791,7 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", + "dev": true, "requires": { "gonzales-pe": "^4.3.0", "postcss": "^7.0.21" @@ -19876,6 +19801,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", + "dev": true, "requires": { "postcss": "^7.0.6" } @@ -19889,11 +19815,6 @@ "util-deprecate": "^1.0.2" } }, - "postcss-syntax": { - "version": "0.36.2", - "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", - "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==" - }, "postcss-value-parser": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", @@ -20136,6 +20057,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -20198,6 +20120,7 @@ "version": "13.0.0", "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", + "dev": true, "requires": { "remark-parse": "^9.0.0", "remark-stringify": "^9.0.0", @@ -20431,6 +20354,7 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "dev": true, "requires": { "mdast-util-from-markdown": "^0.8.0" } @@ -20469,6 +20393,7 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.0.tgz", "integrity": "sha512-8x29DpTbVzEc6Dwb90qhxCtbZ6hmj3BxWWDpMhA+1WM4dOEGH5U5/GFe3Be5Hns5MvPSFAr1e2KSVtKZkK5nUw==", + "dev": true, "requires": { "mdast-util-to-markdown": "^0.5.0" } @@ -20504,12 +20429,14 @@ "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true }, "replace-ext": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true }, "request": { "version": "2.88.2", @@ -20708,7 +20635,8 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "safe-regex": { "version": "1.1.0", @@ -21195,7 +21123,8 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true }, "source-map-resolve": { "version": "0.5.3", @@ -21356,6 +21285,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "requires": { "safe-buffer": "~5.2.0" }, @@ -21363,7 +21293,8 @@ "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true } } }, @@ -21535,6 +21466,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", + "dev": true, "requires": { "postcss": "^7.0.2" } @@ -21680,7 +21612,8 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true }, "to-object-path": { "version": "0.3.0", @@ -21772,7 +21705,8 @@ "trough": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true }, "tslib": { "version": "1.14.1", @@ -21848,6 +21782,7 @@ "version": "9.2.0", "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dev": true, "requires": { "bail": "^1.0.0", "extend": "^3.0.0", @@ -21989,14 +21924,6 @@ "crypto-random-string": "^2.0.0" } }, - "unist-util-find-all-after": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", - "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==", - "requires": { - "unist-util-is": "^4.0.0" - } - }, "unist-util-generated": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", @@ -22015,7 +21942,8 @@ "unist-util-is": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.3.tgz", - "integrity": "sha512-bTofCFVx0iQM8Jqb1TBDVRIQW03YkD3p66JOd/aCWuqzlLyUtx1ZAGw/u+Zw+SttKvSVcvTiKYbfrtLoLefykw==" + "integrity": "sha512-bTofCFVx0iQM8Jqb1TBDVRIQW03YkD3p66JOd/aCWuqzlLyUtx1ZAGw/u+Zw+SttKvSVcvTiKYbfrtLoLefykw==", + "dev": true }, "unist-util-position": { "version": "3.1.0", @@ -22027,6 +21955,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, "requires": { "@types/unist": "^2.0.2" } @@ -22274,6 +22203,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==", + "dev": true, "requires": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", @@ -22292,6 +22222,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dev": true, "requires": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" @@ -22576,7 +22507,8 @@ "zwitch": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "dev": true } } } diff --git a/package.json b/package.json index ad1b3737a1..96cdf44b2f 100644 --- a/package.json +++ b/package.json @@ -107,8 +107,6 @@ ] }, "dependencies": { - "@stylelint/postcss-css-in-js": "^0.37.2", - "@stylelint/postcss-markdown": "^0.36.2", "autoprefixer": "^9.8.6", "balanced-match": "^2.0.0", "chalk": "^4.1.1", @@ -134,15 +132,10 @@ "micromatch": "^4.0.4", "normalize-selector": "^0.2.0", "postcss": "^7.0.35", - "postcss-html": "^0.36.0", - "postcss-less": "^3.1.4", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^4.0.2", - "postcss-sass": "^0.4.4", - "postcss-scss": "^2.1.1", "postcss-selector-parser": "^6.0.5", - "postcss-syntax": "^0.36.2", "postcss-value-parser": "^4.1.0", "resolve-from": "^5.0.0", "slash": "^3.0.0", @@ -150,7 +143,6 @@ "string-width": "^4.2.2", "strip-ansi": "^6.0.0", "style-search": "^0.1.0", - "sugarss": "^2.0.0", "svg-tags": "^1.0.0", "table": "^6.6.0", "v8-compile-cache": "^2.3.0", @@ -180,14 +172,18 @@ "husky": "^6.0.0", "jest": "^26.6.3", "jest-circus": "^26.6.3", - "jest-preset-stylelint": "^3.0.0", + "jest-preset-stylelint": "^4.1.0", "jest-watch-typeahead": "^0.6.3", "lint-staged": "^10.5.4", "np": "^7.5.0", "npm-run-all": "^4.1.5", "postcss-import": "^12.0.1", - "prettier": "^2.2.1", + "postcss-less": "^3.1.4", + "postcss-sass": "^0.4.4", + "postcss-scss": "^2.1.1", + "prettier": "2.2.1", "remark-cli": "^9.0.0", + "sugarss": "^2.0.0", "typescript": "^4.2.4" }, "engines": { diff --git a/system-tests/002/fs.test.js b/system-tests/002/fs.test.js index 95594da199..8128b478b7 100644 --- a/system-tests/002/fs.test.js +++ b/system-tests/002/fs.test.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const stylelint = require('../../lib'); const { caseConfigFile, caseFiles, prepForSnapshot } = require('../systemTestUtils'); @@ -11,6 +13,7 @@ it('fs - invalid twbs buttons and their config', async () => { await stylelint.lint({ files: caseFiles(CASE_NUMBER), configFile: caseConfigFile(CASE_NUMBER), + customSyntax: postcssScss, }), ), ).toMatchSnapshot(); diff --git a/system-tests/002/no-fs.test.js b/system-tests/002/no-fs.test.js index ce8707868d..b9bfaee78f 100644 --- a/system-tests/002/no-fs.test.js +++ b/system-tests/002/no-fs.test.js @@ -1,5 +1,7 @@ 'use strict'; +const postcssScss = require('postcss-scss'); + const stylelint = require('../../lib'); const { caseConfig, caseCode, prepForSnapshot } = require('../systemTestUtils'); @@ -11,7 +13,7 @@ it('no-fs - invalid twbs buttons and their config', async () => { await stylelint.lint({ code: await caseCode(CASE_NUMBER, 'scss'), config: await caseConfig(CASE_NUMBER), - syntax: 'scss', + customSyntax: postcssScss, }), ), ).toMatchSnapshot(); diff --git a/types/global.d.ts b/types/global.d.ts deleted file mode 100644 index 0ad887272f..0000000000 --- a/types/global.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module '@stylelint/postcss-css-in-js'; -declare module '@stylelint/postcss-markdown'; -declare module 'postcss-html'; -declare module 'postcss-sass'; -declare module 'sugarss'; diff --git a/types/postcss-syntax/index.d.ts b/types/postcss-syntax/index.d.ts deleted file mode 100644 index 75a6c32315..0000000000 --- a/types/postcss-syntax/index.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -declare module 'postcss-syntax' { - import { Syntax } from 'postcss'; - - function syntax(config: { [k: string]: Syntax }): Syntax; - - export = syntax; -} From 1e4ca41e254037dc4c08e7125be29d9efccc6b21 Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Sat, 15 May 2021 08:30:57 +0100 Subject: [PATCH 010/194] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d4b1334837..002e77a529 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ All notable changes to this project are documented in this file. ## Head +- Removed: `syntax` option ([#5297](https://github.com/stylelint/stylelint/pull/5297)). - Removed: rules deprecated in 13.7.0 ([#5295](https://github.com/stylelint/stylelint/pull/5295)). - Removed: `function-calc-no-invalid` ([#5296](https://github.com/stylelint/stylelint/pull/5296)). - Removed: Drop Node 10 support ([#5303](https://github.com/stylelint/stylelint/pull/5303)). From e0004aa0f2ced65c9b06e1047894df490f031156 Mon Sep 17 00:00:00 2001 From: "Mark S. Everitt" Date: Sun, 16 May 2021 09:13:54 +0100 Subject: [PATCH 011/194] Refactor async calls to fs to use fs/promises (#5271) (#5306) --- lib/__tests__/plugins.test.js | 18 +- lib/__tests__/standalone-cache.test.js | 76 +++--- lib/__tests__/standalone-fix.test.js | 2 +- lib/__tests__/standalone-formatter.test.js | 22 +- lib/__tests__/standalone-syntax.test.js | 81 +++---- lib/__tests__/standalone.test.js | 34 ++- lib/getPostcssResult.js | 20 +- lib/utils/__tests__/isMap.test.js | 2 + package-lock.json | 263 +++++++++++---------- package.json | 2 +- system-tests/systemTestUtils.js | 2 +- 11 files changed, 245 insertions(+), 277 deletions(-) diff --git a/lib/__tests__/plugins.test.js b/lib/__tests__/plugins.test.js index a63f41b890..4e17503be6 100644 --- a/lib/__tests__/plugins.test.js +++ b/lib/__tests__/plugins.test.js @@ -195,7 +195,7 @@ describe('module providing an array of plugins', () => { }); }); -it('slashless plugin causes configuration error', () => { +it('slashless plugin causes configuration error', async () => { const config = { plugins: [path.join(__dirname, 'fixtures/plugin-slashless-warn-about-foo')], rules: { @@ -203,17 +203,11 @@ it('slashless plugin causes configuration error', () => { }, }; - return postcss() - .use(stylelint(config)) - .process('.foo {}', { from: undefined }) - .then(() => { - throw new Error('should not have succeeded'); - }) - .catch((err) => { - expect(err.message.startsWith('stylelint v7+ requires plugin rules to be namespaced')).toBe( - true, - ); - }); + const postcssPromise = postcss().use(stylelint(config)).process('.foo {}', { from: undefined }); + + await expect(postcssPromise).rejects.toThrow( + /^stylelint v7\+ requires plugin rules to be namespaced/, + ); }); it('plugin with primary option array', () => { diff --git a/lib/__tests__/standalone-cache.test.js b/lib/__tests__/standalone-cache.test.js index 2ca6aed7ef..812abf0e43 100644 --- a/lib/__tests__/standalone-cache.test.js +++ b/lib/__tests__/standalone-cache.test.js @@ -4,15 +4,15 @@ const hash = require('../utils/hash'); const path = require('path'); const standalone = require('../standalone'); const fixturesPath = path.join(__dirname, 'fixtures'); -const fs = require('fs'); -const replaceBackslashes = require('../testUtils/replaceBackslashes'); -const { promisify } = require('util'); -const unlink = promisify(fs.unlink); const fCache = require('file-entry-cache'); +const replaceBackslashes = require('../testUtils/replaceBackslashes'); +const { promises: fs, constants: fsConstants } = require('fs'); -const copyFile = promisify(fs.copyFile); const fileExists = (filePath) => - new Promise((resolve) => fs.access(filePath, fs.F_OK, (error) => resolve(!error))); + fs.access(filePath, fsConstants.F_OK).then( + () => true, + () => false, + ); const cwd = process.cwd(); const invalidFile = path.join(fixturesPath, 'empty-block.css'); @@ -44,11 +44,11 @@ describe('standalone cache', () => { afterEach(() => { // Clean up after each test case return Promise.all([ - unlink(expectedCacheFilePath).catch(() => { + fs.unlink(expectedCacheFilePath).catch(() => { // fs.unlink() throws an error if file doesn't exist and it's ok. We just // want to make sure it's not there for next test. }), - unlink(newFileDest).catch(() => { + fs.unlink(newFileDest).catch(() => { // fs.unlink() throws an error if file doesn't exist and it's ok. We just // want to make sure it's not there for next test. }), @@ -71,7 +71,8 @@ describe('standalone cache', () => { it('only changed files are linted', () => { // Add "changed" file - return copyFile(validFile, newFileDest) + return fs + .copyFile(validFile, newFileDest) .then(() => { // Next run should lint only changed files return standalone(getConfig()); @@ -97,7 +98,8 @@ describe('standalone cache', () => { changedConfig.config.rules['block-no-empty'] = false; - return copyFile(validFile, newFileDest) + return fs + .copyFile(validFile, newFileDest) .then(() => { // All file should be re-linted as config has changed return standalone(changedConfig); @@ -113,7 +115,8 @@ describe('standalone cache', () => { }); it('invalid files are not cached', () => { - return copyFile(invalidFile, newFileDest) + return fs + .copyFile(invalidFile, newFileDest) .then(() => { // Should lint only changed files return standalone(getConfig()); @@ -137,7 +140,8 @@ describe('standalone cache', () => { }); }); it('files with syntax errors are not cached', () => { - return copyFile(syntaxErrorFile, newFileDest) + return fs + .copyFile(syntaxErrorFile, newFileDest) .then(() => { // Should lint only changed files return standalone(getConfig()); @@ -150,26 +154,16 @@ describe('standalone cache', () => { expect(typeof cache.getKey(newFileDest) === 'undefined').toBe(true); }); }); - it('cache file is removed when cache is disabled', () => { + it('cache file is removed when cache is disabled', async () => { const noCacheConfig = getConfig(); noCacheConfig.cache = false; - let cacheFileExists = true; - - return standalone(noCacheConfig).then(() => { - return fileExists(expectedCacheFilePath) - .then(() => { - throw new Error( - `Cache file is supposed to be removed, ${expectedCacheFilePath} is found instead`, - ); - }) - .catch(() => { - cacheFileExists = false; - expect(cacheFileExists).toBe(false); - }); - }); + + await standalone(noCacheConfig); + await expect(fileExists(expectedCacheFilePath)).resolves.toBe(false); }); - it("cache doesn't do anything if string is passed", () => { + // eslint-disable-next-line jest/no-disabled-tests + it.skip("cache doesn't do anything if string is passed", async () => { const config = { code: '.foo {}', codeFilename: 'foo.css', @@ -180,22 +174,12 @@ describe('standalone cache', () => { }, }, }; - let cacheFileExists = true; - - return standalone(config).then((lintResults) => { - expect(lintResults.errored).toBe(false); - - return fileExists(expectedCacheFilePath) - .then(() => { - throw new Error( - `Cache file should not be created if string is passed, ${expectedCacheFilePath} is found instead`, - ); - }) - .catch(() => { - cacheFileExists = false; - expect(cacheFileExists).toBe(false); - }); - }); + + const lintResults = await standalone(config); + + expect(lintResults.errored).toBe(false); + + await expect(fileExists(expectedCacheFilePath)).resolves.toBe(false); }); }); describe('standalone cache uses cacheLocation', () => { @@ -206,11 +190,11 @@ describe('standalone cache uses cacheLocation', () => { afterEach(() => { // clean up after each test return Promise.all([ - unlink(expectedCacheFilePath).catch(() => { + fs.unlink(expectedCacheFilePath).catch(() => { // fs.unlink() throws an error if file doesn't exist and it's ok. We just // want to make sure it's not there for next test. }), - unlink(cacheLocationFile).catch(() => { + fs.unlink(cacheLocationFile).catch(() => { // fs.unlink() throws an error if file doesn't exist and it's ok. We just // want to make sure it's not there for next test. }), diff --git a/lib/__tests__/standalone-fix.test.js b/lib/__tests__/standalone-fix.test.js index c1b7ab92b9..0fef10791e 100644 --- a/lib/__tests__/standalone-fix.test.js +++ b/lib/__tests__/standalone-fix.test.js @@ -4,7 +4,7 @@ const _ = require('lodash'); const os = require('os'); const path = require('path'); const stripIndent = require('common-tags').stripIndent; -const { existsSync, promises: fs } = require('fs'); // eslint-disable-line node/no-unsupported-features/node-builtins +const { existsSync, promises: fs } = require('fs'); const replaceBackslashes = require('../testUtils/replaceBackslashes'); const standalone = require('../standalone'); diff --git a/lib/__tests__/standalone-formatter.test.js b/lib/__tests__/standalone-formatter.test.js index bbf0d5f594..ce28d6c651 100644 --- a/lib/__tests__/standalone-formatter.test.js +++ b/lib/__tests__/standalone-formatter.test.js @@ -37,16 +37,14 @@ it('standalone with input css and alternate formatter function', () => { }); }); -it('standalone with invalid formatter option', () => { - return standalone({ - code: 'a {}', - config: configBlockNoEmpty, - formatter: 'invalid', - }).catch((err) => { - expect(err).toEqual( - new Error( - 'You must use a valid formatter option: "compact", "json", "string", "tap", "unix", "verbose" or a function', - ), - ); - }); +it('standalone with invalid formatter option', async () => { + await expect( + standalone({ + code: 'a {}', + config: configBlockNoEmpty, + formatter: 'invalid', + }), + ).rejects.toThrow( + 'You must use a valid formatter option: "compact", "json", "string", "tap", "unix", "verbose" or a function', + ); }); diff --git a/lib/__tests__/standalone-syntax.test.js b/lib/__tests__/standalone-syntax.test.js index 2ca0174af0..431e2367e9 100644 --- a/lib/__tests__/standalone-syntax.test.js +++ b/lib/__tests__/standalone-syntax.test.js @@ -1,11 +1,10 @@ 'use strict'; -const fs = require('fs'); const path = require('path'); const replaceBackslashes = require('../testUtils/replaceBackslashes'); const standalone = require('../standalone'); const stringFormatter = require('../formatters/stringFormatter'); -const { promisify } = require('util'); +const { promises: fs } = require('fs'); const fixturesPath = replaceBackslashes(path.join(__dirname, 'fixtures')); @@ -46,7 +45,7 @@ it('standalone with postcss-safe-parser', () => { expect(result.warnings).toHaveLength(0); expect(root.toString()).not.toBe(root.source.input.css); - return promisify(fs.writeFile)(root.source.input.file, root.source.input.css); + return fs.writeFile(root.source.input.file, root.source.input.css); }), ); }); @@ -98,58 +97,46 @@ it('standalone with path to custom syntax', () => { }); }); -it('unknown custom syntax option', () => { - return standalone({ - customSyntax: 'unknown-module', - code: '', - config: { rules: { 'block-no-empty': 'wahoo' } }, - }) - .then(() => { - throw new Error('should not have succeeded'); - }) - .catch((err) => { - expect(err.message).toBe( - 'Cannot resolve custom syntax module unknown-module. Check that module unknown-module is available and spelled correctly.', - ); - }); +it('rejects on unknown custom syntax option', async () => { + await expect( + standalone({ + customSyntax: 'unknown-module', + code: '', + config: { rules: { 'block-no-empty': 'wahoo' } }, + }), + ).rejects.toThrow( + 'Cannot resolve custom syntax module unknown-module. Check that module unknown-module is available and spelled correctly.', + ); }); -it('throws on syntax option', () => { - return standalone({ - syntax: 'scss', - code: '', - config: { rules: { 'block-no-empty': true } }, - }) - .then(() => { - throw new Error('should not have succeeded'); - }) - .catch((err) => { - expect(err.message).toBe( - 'The "syntax" (--syntax) option has been removed. Install the appropriate syntax and use the "customSyntax" (--custom-syntax) option instead', - ); - }); +it('rejects on syntax option', async () => { + await expect( + standalone({ + syntax: 'scss', + code: '', + config: { rules: { 'block-no-empty': true } }, + }), + ).rejects.toThrow( + 'The "syntax" (--syntax) option has been removed. Install the appropriate syntax and use the "customSyntax" (--custom-syntax) option instead', + ); }); -it('throws when customSyntax and syntax are set', () => { +it('rejects when customSyntax and syntax are set', async () => { const config = { rules: { 'block-no-empty': true, }, }; - return standalone({ - config, - syntax: 'less', - customSyntax: `${fixturesPath}/custom-syntax`, - code: '$foo: bar; // foo;\nb {}', - formatter: stringFormatter, - }) - .then(() => { - throw new Error('should not have succeeded'); - }) - .catch((err) => { - expect(err.message).toBe( - 'The "syntax" (--syntax) option has been removed. Install the appropriate syntax and use the "customSyntax" (--custom-syntax) option instead', - ); - }); + await expect( + standalone({ + config, + syntax: 'less', + customSyntax: `${fixturesPath}/custom-syntax`, + code: '$foo: bar; // foo;\nb {}', + formatter: stringFormatter, + }), + ).rejects.toThrow( + 'The "syntax" (--syntax) option has been removed. Install the appropriate syntax and use the "customSyntax" (--custom-syntax) option instead', + ); }); diff --git a/lib/__tests__/standalone.test.js b/lib/__tests__/standalone.test.js index 5892fa507a..6b836962ed 100644 --- a/lib/__tests__/standalone.test.js +++ b/lib/__tests__/standalone.test.js @@ -117,16 +117,16 @@ it('standalone without input css and file(s) should throw error', () => { expect(() => standalone({ config: configBlockNoEmpty })).toThrow(expectedError); }); -it('standalone with non-existent-file throws an error', () => { +it('standalone with non-existent-file throws an error', async () => { const files = `${fixturesPath}/non-existent-file.css`; const expectedError = new NoFilesFoundError(files); - return standalone({ - files, - config: configBlockNoEmpty, - }).catch((actualError) => { - expect(actualError).toEqual(expectedError); - }); + await expect( + standalone({ + files, + config: configBlockNoEmpty, + }), + ).rejects.toThrow(expectedError); }); it('standalone with non-existent-file and allowEmptyInput enabled quietly exits', () => { @@ -223,18 +223,14 @@ it('configuration error sets errored to true', () => { }); }); -it('unknown formatter option', () => { - return standalone({ - formatter: 'unknown', - code: '', - config: { rules: { 'block-no-empty': 'wahoo' } }, - }) - .then(() => { - throw new Error('should not have succeeded'); - }) - .catch((err) => { - expect(err.message.startsWith('You must use a valid formatter option')).toBe(true); - }); +it('unknown formatter option', async () => { + await expect( + standalone({ + formatter: 'unknown', + code: '', + config: { rules: { 'block-no-empty': 'wahoo' } }, + }), + ).rejects.toThrow(/^You must use a valid formatter option/); }); describe('standalone with different configs per file', () => { diff --git a/lib/getPostcssResult.js b/lib/getPostcssResult.js index 393703c05a..8bec66ab42 100644 --- a/lib/getPostcssResult.js +++ b/lib/getPostcssResult.js @@ -1,9 +1,9 @@ 'use strict'; -const fs = require('fs'); const LazyResult = require('postcss/lib/lazy-result'); const path = require('path'); const postcss = require('postcss'); +const { promises: fs } = require('fs'); /** @typedef {import('postcss').Result} Result */ /** @typedef {import('postcss').Syntax} Syntax */ @@ -30,7 +30,7 @@ module.exports = function (stylelint, options = {}) { if (options.code !== undefined) { getCode = Promise.resolve(options.code); } else if (options.filePath) { - getCode = readFile(options.filePath); + getCode = fs.readFile(options.filePath, 'utf8'); } if (!getCode) { @@ -133,22 +133,6 @@ function getCustomSyntax(customSyntax) { throw new Error(`Custom syntax must be a string or a Syntax object`); } -/** - * @param {string} filePath - * @returns {Promise} - */ -function readFile(filePath) { - return new Promise((resolve, reject) => { - fs.readFile(filePath, 'utf8', (err, content) => { - if (err) { - return reject(err); - } - - resolve(content); - }); - }); -} - /** * @param {StylelintInternalApi} stylelint * @param {string|undefined} filePath diff --git a/lib/utils/__tests__/isMap.test.js b/lib/utils/__tests__/isMap.test.js index 126ef96276..5f8b22687c 100644 --- a/lib/utils/__tests__/isMap.test.js +++ b/lib/utils/__tests__/isMap.test.js @@ -45,8 +45,10 @@ describe('isMap', () => { expect(valueNodes.length).toBeGreaterThan(0); valueNodes.forEach((valueNode) => { if (expected.includes(valueNode.sourceIndex)) { + // eslint-disable-next-line jest/no-conditional-expect expect(isMap(valueNode)).toBeTruthy(); } else { + // eslint-disable-next-line jest/no-conditional-expect expect(isMap(valueNode)).toBeFalsy(); } }); diff --git a/package-lock.json b/package-lock.json index 17be692af4..dd4bf2bd6e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -71,7 +71,7 @@ "benchmark": "^2.1.4", "common-tags": "^1.8.0", "eslint": "^7.25.0", - "eslint-config-stylelint": "^13.1.0", + "eslint-config-stylelint": "^13.1.1", "got": "^11.8.2", "husky": "^6.0.0", "jest": "^26.6.3", @@ -91,7 +91,7 @@ "typescript": "^4.2.4" }, "engines": { - "node": ">=10.13.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -1055,9 +1055,9 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", "dev": true }, "node_modules/@types/keyv": { @@ -1202,68 +1202,94 @@ "dev": true }, "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.8.1.tgz", - "integrity": "sha512-WigyLn144R3+lGATXW4nNcDJ9JlTkG8YdBWHkDlN0lC3gUGtDi7Pe3h5GPvFKMcRz8KbZpm9FJV9NTW8CpRHpg==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.23.0.tgz", + "integrity": "sha512-WAFNiTDnQfrF3Z2fQ05nmCgPsO5o790vOhmWKXbbYQTO9erE1/YsFot5/LnOUizLzU2eeuz6+U/81KV5/hFTGA==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.8.1", - "@typescript-eslint/types": "4.8.1", - "@typescript-eslint/typescript-estree": "4.8.1", + "@typescript-eslint/scope-manager": "4.23.0", + "@typescript-eslint/types": "4.23.0", + "@typescript-eslint/typescript-estree": "4.23.0", "eslint-scope": "^5.0.0", "eslint-utils": "^2.0.0" }, "engines": { "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.8.1.tgz", - "integrity": "sha512-r0iUOc41KFFbZdPAdCS4K1mXivnSZqXS5D9oW+iykQsRlTbQRfuFRSW20xKDdYiaCoH+SkSLeIF484g3kWzwOQ==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.23.0.tgz", + "integrity": "sha512-ZZ21PCFxPhI3n0wuqEJK9omkw51wi2bmeKJvlRZPH5YFkcawKOuRMQMnI8mH6Vo0/DoHSeZJnHiIx84LmVQY+w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.8.1", - "@typescript-eslint/visitor-keys": "4.8.1" + "@typescript-eslint/types": "4.23.0", + "@typescript-eslint/visitor-keys": "4.23.0" }, "engines": { "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/types": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.8.1.tgz", - "integrity": "sha512-ave2a18x2Y25q5K05K/U3JQIe2Av4+TNi/2YuzyaXLAsDx6UZkz1boZ7nR/N6Wwae2PpudTZmHFXqu7faXfHmA==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.23.0.tgz", + "integrity": "sha512-oqkNWyG2SLS7uTWLZf6Sr7Dm02gA5yxiz1RP87tvsmDsguVATdpVguHr4HoGOcFOpCvx9vtCSCyQUGfzq28YCw==", "dev": true, "engines": { "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.8.1.tgz", - "integrity": "sha512-bJ6Fn/6tW2g7WIkCWh3QRlaSU7CdUUK52shx36/J7T5oTQzANvi6raoTsbwGM11+7eBbeem8hCCKbyvAc0X3sQ==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.23.0.tgz", + "integrity": "sha512-5Sty6zPEVZF5fbvrZczfmLCOcby3sfrSPu30qKoY1U3mca5/jvU5cwsPb/CO6Q3ByRjixTMIVsDkqwIxCf/dMw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.8.1", - "@typescript-eslint/visitor-keys": "4.8.1", + "@typescript-eslint/types": "4.23.0", + "@typescript-eslint/visitor-keys": "4.23.0", "debug": "^4.1.1", "globby": "^11.0.1", "is-glob": "^4.0.1", - "lodash": "^4.17.15", "semver": "^7.3.2", "tsutils": "^3.17.1" }, "engines": { "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" }, @@ -1272,16 +1298,20 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.8.1.tgz", - "integrity": "sha512-3nrwXFdEYALQh/zW8rFwP4QltqsanCDz4CwWMPiIZmwlk9GlvBeueEIbq05SEq4ganqM0g9nh02xXgv5XI3PeQ==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.23.0.tgz", + "integrity": "sha512-5PNe5cmX9pSifit0H+nPoQBXdbNzi5tOEec+3riK+ku4e3er37pKxMKDH5Ct5Y4fhWxcD4spnlYjxi9vXbSpwg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.8.1", + "@typescript-eslint/types": "4.23.0", "eslint-visitor-keys": "^2.0.0" }, "engines": { "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/abab": { @@ -3257,40 +3287,29 @@ } }, "node_modules/eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", "dev": true, - "dependencies": { - "get-stdin": "^6.0.0" - }, "bin": { - "eslint-config-prettier-check": "bin/cli.js" - } - }, - "node_modules/eslint-config-prettier/node_modules/get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true, - "engines": { - "node": ">=4" + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, "node_modules/eslint-config-stylelint": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-stylelint/-/eslint-config-stylelint-13.1.0.tgz", - "integrity": "sha512-ugSbgLmdyQqDohZWXjj4IHIkx8a+GUHVn1SHH+WEGhEamulg0zeRN8Q0ejux8INNbljPJFm5KFYYDbr5FDlL3w==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/eslint-config-stylelint/-/eslint-config-stylelint-13.1.1.tgz", + "integrity": "sha512-qk74J/gGNyNz0/lYvWoXJmM6XgTFdtI6VPFvp6eLRVOBKGMLDQHmzIVjnzPw1PrRslsMnqTHOKLYFnFjaTED8Q==", "dev": true, + "license": "MIT", "dependencies": { - "eslint-config-prettier": "^6.10.1", - "eslint-plugin-eslint-comments": "^3.1.2", - "eslint-plugin-jest": "^24.0.2", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-jest": "^24.3.6", "eslint-plugin-node": "^11.1.0", "eslint-plugin-sort-requires": "^2.1.0" - }, - "engines": { - "node": ">=10.0.0" } }, "node_modules/eslint-plugin-es": { @@ -3320,15 +3339,24 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "24.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.1.3.tgz", - "integrity": "sha512-dNGGjzuEzCE3d5EPZQ/QGtmlMotqnYWD/QpCZ1UuZlrMAdhG5rldh0N0haCvhGnUkSeuORS5VNROwF9Hrgn3Lg==", + "version": "24.3.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.3.6.tgz", + "integrity": "sha512-WOVH4TIaBLIeCX576rLcOgjNXqP+jNlCiEmRgFTfQtJ52DpwnIQKAVGlGPAN7CZ33bW6eNfHD6s8ZbEUTQubJg==", "dev": true, "dependencies": { "@typescript-eslint/experimental-utils": "^4.0.1" }, "engines": { "node": ">=10" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": ">= 4", + "eslint": ">=5" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } } }, "node_modules/eslint-plugin-node": { @@ -11512,15 +11540,18 @@ "dev": true }, "node_modules/tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "dependencies": { "tslib": "^1.8.1" }, "engines": { "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, "node_modules/tunnel-agent": { @@ -13334,9 +13365,9 @@ } }, "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", "dev": true }, "@types/keyv": { @@ -13481,66 +13512,68 @@ "dev": true }, "@typescript-eslint/experimental-utils": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.8.1.tgz", - "integrity": "sha512-WigyLn144R3+lGATXW4nNcDJ9JlTkG8YdBWHkDlN0lC3gUGtDi7Pe3h5GPvFKMcRz8KbZpm9FJV9NTW8CpRHpg==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.23.0.tgz", + "integrity": "sha512-WAFNiTDnQfrF3Z2fQ05nmCgPsO5o790vOhmWKXbbYQTO9erE1/YsFot5/LnOUizLzU2eeuz6+U/81KV5/hFTGA==", "dev": true, "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.8.1", - "@typescript-eslint/types": "4.8.1", - "@typescript-eslint/typescript-estree": "4.8.1", + "@typescript-eslint/scope-manager": "4.23.0", + "@typescript-eslint/types": "4.23.0", + "@typescript-eslint/typescript-estree": "4.23.0", "eslint-scope": "^5.0.0", "eslint-utils": "^2.0.0" } }, "@typescript-eslint/scope-manager": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.8.1.tgz", - "integrity": "sha512-r0iUOc41KFFbZdPAdCS4K1mXivnSZqXS5D9oW+iykQsRlTbQRfuFRSW20xKDdYiaCoH+SkSLeIF484g3kWzwOQ==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.23.0.tgz", + "integrity": "sha512-ZZ21PCFxPhI3n0wuqEJK9omkw51wi2bmeKJvlRZPH5YFkcawKOuRMQMnI8mH6Vo0/DoHSeZJnHiIx84LmVQY+w==", "dev": true, "requires": { - "@typescript-eslint/types": "4.8.1", - "@typescript-eslint/visitor-keys": "4.8.1" + "@typescript-eslint/types": "4.23.0", + "@typescript-eslint/visitor-keys": "4.23.0" } }, "@typescript-eslint/types": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.8.1.tgz", - "integrity": "sha512-ave2a18x2Y25q5K05K/U3JQIe2Av4+TNi/2YuzyaXLAsDx6UZkz1boZ7nR/N6Wwae2PpudTZmHFXqu7faXfHmA==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.23.0.tgz", + "integrity": "sha512-oqkNWyG2SLS7uTWLZf6Sr7Dm02gA5yxiz1RP87tvsmDsguVATdpVguHr4HoGOcFOpCvx9vtCSCyQUGfzq28YCw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.8.1.tgz", - "integrity": "sha512-bJ6Fn/6tW2g7WIkCWh3QRlaSU7CdUUK52shx36/J7T5oTQzANvi6raoTsbwGM11+7eBbeem8hCCKbyvAc0X3sQ==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.23.0.tgz", + "integrity": "sha512-5Sty6zPEVZF5fbvrZczfmLCOcby3sfrSPu30qKoY1U3mca5/jvU5cwsPb/CO6Q3ByRjixTMIVsDkqwIxCf/dMw==", "dev": true, "requires": { - "@typescript-eslint/types": "4.8.1", - "@typescript-eslint/visitor-keys": "4.8.1", + "@typescript-eslint/types": "4.23.0", + "@typescript-eslint/visitor-keys": "4.23.0", "debug": "^4.1.1", "globby": "^11.0.1", "is-glob": "^4.0.1", - "lodash": "^4.17.15", "semver": "^7.3.2", "tsutils": "^3.17.1" }, "dependencies": { "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, "@typescript-eslint/visitor-keys": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.8.1.tgz", - "integrity": "sha512-3nrwXFdEYALQh/zW8rFwP4QltqsanCDz4CwWMPiIZmwlk9GlvBeueEIbq05SEq4ganqM0g9nh02xXgv5XI3PeQ==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.23.0.tgz", + "integrity": "sha512-5PNe5cmX9pSifit0H+nPoQBXdbNzi5tOEec+3riK+ku4e3er37pKxMKDH5Ct5Y4fhWxcD4spnlYjxi9vXbSpwg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.8.1", + "@typescript-eslint/types": "4.23.0", "eslint-visitor-keys": "^2.0.0" } }, @@ -15144,31 +15177,21 @@ } }, "eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", "dev": true, - "requires": { - "get-stdin": "^6.0.0" - }, - "dependencies": { - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - } - } + "requires": {} }, "eslint-config-stylelint": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-stylelint/-/eslint-config-stylelint-13.1.0.tgz", - "integrity": "sha512-ugSbgLmdyQqDohZWXjj4IHIkx8a+GUHVn1SHH+WEGhEamulg0zeRN8Q0ejux8INNbljPJFm5KFYYDbr5FDlL3w==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/eslint-config-stylelint/-/eslint-config-stylelint-13.1.1.tgz", + "integrity": "sha512-qk74J/gGNyNz0/lYvWoXJmM6XgTFdtI6VPFvp6eLRVOBKGMLDQHmzIVjnzPw1PrRslsMnqTHOKLYFnFjaTED8Q==", "dev": true, "requires": { - "eslint-config-prettier": "^6.10.1", - "eslint-plugin-eslint-comments": "^3.1.2", - "eslint-plugin-jest": "^24.0.2", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-jest": "^24.3.6", "eslint-plugin-node": "^11.1.0", "eslint-plugin-sort-requires": "^2.1.0" } @@ -15194,9 +15217,9 @@ } }, "eslint-plugin-jest": { - "version": "24.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.1.3.tgz", - "integrity": "sha512-dNGGjzuEzCE3d5EPZQ/QGtmlMotqnYWD/QpCZ1UuZlrMAdhG5rldh0N0haCvhGnUkSeuORS5VNROwF9Hrgn3Lg==", + "version": "24.3.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.3.6.tgz", + "integrity": "sha512-WOVH4TIaBLIeCX576rLcOgjNXqP+jNlCiEmRgFTfQtJ52DpwnIQKAVGlGPAN7CZ33bW6eNfHD6s8ZbEUTQubJg==", "dev": true, "requires": { "@typescript-eslint/experimental-utils": "^4.0.1" @@ -21715,9 +21738,9 @@ "dev": true }, "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { "tslib": "^1.8.1" diff --git a/package.json b/package.json index 96cdf44b2f..94f7050307 100644 --- a/package.json +++ b/package.json @@ -167,7 +167,7 @@ "benchmark": "^2.1.4", "common-tags": "^1.8.0", "eslint": "^7.25.0", - "eslint-config-stylelint": "^13.1.0", + "eslint-config-stylelint": "^13.1.1", "got": "^11.8.2", "husky": "^6.0.0", "jest": "^26.6.3", diff --git a/system-tests/systemTestUtils.js b/system-tests/systemTestUtils.js index 32ede63bab..59962b731b 100644 --- a/system-tests/systemTestUtils.js +++ b/system-tests/systemTestUtils.js @@ -3,7 +3,7 @@ const _ = require('lodash'); const os = require('os'); const path = require('path'); -const { promises: fs } = require('fs'); // eslint-disable-line node/no-unsupported-features/node-builtins +const { promises: fs } = require('fs'); const replaceBackslashes = require('../lib/testUtils/replaceBackslashes'); From 2345a21e7c399de37ab6bddf3a354ce652bb5785 Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Mon, 17 May 2021 20:41:36 +0900 Subject: [PATCH 012/194] Refactor `lib/__tests__/standalone-cache.test.js` (#5311) * Refactor `lib/__tests__/standalone-cache.test.js` - Reduce redundant callbacks via `async/await` syntax. (#4881) - Use `fs.existsSync()` instead of `fs.access()`. See - Fix the disabled test. (#5309) - Inline redundant local variables. - Make expectations using `typeof` more accurate. * Reduce local variables by improving `getConfig()` --- lib/__tests__/standalone-cache.test.js | 272 ++++++++++--------------- 1 file changed, 113 insertions(+), 159 deletions(-) diff --git a/lib/__tests__/standalone-cache.test.js b/lib/__tests__/standalone-cache.test.js index 812abf0e43..604e8be028 100644 --- a/lib/__tests__/standalone-cache.test.js +++ b/lib/__tests__/standalone-cache.test.js @@ -1,20 +1,23 @@ 'use strict'; -const hash = require('../utils/hash'); -const path = require('path'); -const standalone = require('../standalone'); -const fixturesPath = path.join(__dirname, 'fixtures'); const fCache = require('file-entry-cache'); +const path = require('path'); +const { promises: fs, existsSync } = require('fs'); + +const hash = require('../utils/hash'); const replaceBackslashes = require('../testUtils/replaceBackslashes'); -const { promises: fs, constants: fsConstants } = require('fs'); +const standalone = require('../standalone'); -const fileExists = (filePath) => - fs.access(filePath, fsConstants.F_OK).then( - () => true, - () => false, - ); +// NOTE: `fs.rm(file, { force: true })` will be available when we drop the support of older Node versions. +// See +const removeFile = async (filePath) => { + if (existsSync(filePath)) { + await fs.unlink(filePath); + } +}; const cwd = process.cwd(); +const fixturesPath = path.join(__dirname, 'fixtures'); const invalidFile = path.join(fixturesPath, 'empty-block.css'); const syntaxErrorFile = path.join(fixturesPath, 'syntax_error.css'); const validFile = path.join(fixturesPath, 'cache', 'valid.css'); @@ -23,147 +26,120 @@ const newFileDest = path.join(fixturesPath, 'cache', 'newFile.css'); // Config object is getting mutated internally. // Return new object of the same structure to // make sure config doesn't change between runs. -function getConfig() { +function getConfig(additional = {}) { return { files: replaceBackslashes(path.join(fixturesPath, 'cache', '*.css')), config: { rules: { 'block-no-empty': true, 'color-no-invalid-hex': true }, }, cache: true, + ...additional, }; } describe('standalone cache', () => { const expectedCacheFilePath = path.join(cwd, '.stylelintcache'); - beforeEach(() => { + beforeEach(async () => { // Initial run to warm up the cache - return standalone(getConfig()); + await standalone(getConfig()); }); - afterEach(() => { + afterEach(async () => { // Clean up after each test case - return Promise.all([ - fs.unlink(expectedCacheFilePath).catch(() => { - // fs.unlink() throws an error if file doesn't exist and it's ok. We just - // want to make sure it's not there for next test. - }), - fs.unlink(newFileDest).catch(() => { - // fs.unlink() throws an error if file doesn't exist and it's ok. We just - // want to make sure it's not there for next test. - }), - ]); + await removeFile(expectedCacheFilePath); + await removeFile(newFileDest); }); - it('cache file is created at $CWD/.stylelintcache', () => { + it('cache file is created at $CWD/.stylelintcache', async () => { // Ensure cache file exists - return fileExists(expectedCacheFilePath).then((isFileExist) => { - expect(Boolean(isFileExist)).toBe(true); + expect(existsSync(expectedCacheFilePath)).toBe(true); - const fileCache = fCache.createFromFile(expectedCacheFilePath); - const { cache } = fileCache; + const { cache } = fCache.createFromFile(expectedCacheFilePath); - // Ensure cache file contains only linted css file - expect(typeof cache.getKey(validFile) === 'object').toBe(true); - expect(typeof cache.getKey(newFileDest) === 'undefined').toBe(true); - }); + // Ensure cache file contains only linted css file + expect(typeof cache.getKey(validFile)).toBe('object'); + expect(cache.getKey(validFile)).toBeTruthy(); + expect(cache.getKey(newFileDest)).toBeUndefined(); }); - it('only changed files are linted', () => { + it('only changed files are linted', async () => { // Add "changed" file - return fs - .copyFile(validFile, newFileDest) - .then(() => { - // Next run should lint only changed files - return standalone(getConfig()); - }) - .then((output) => { - // Ensure only changed files are linted - const isValidFileLinted = Boolean(output.results.find((file) => file.source === validFile)); - const isNewFileLinted = Boolean(output.results.find((file) => file.source === newFileDest)); - - expect(isValidFileLinted).toBe(false); - expect(isNewFileLinted).toBe(true); - - const fileCache = fCache.createFromFile(expectedCacheFilePath); - const { cache } = fileCache; - - expect(typeof cache.getKey(validFile) === 'object').toBe(true); - expect(typeof cache.getKey(newFileDest) === 'object').toBe(true); - }); + await fs.copyFile(validFile, newFileDest); + + // Next run should lint only changed files + const { results } = await standalone(getConfig()); + + // Ensure only changed files are linted + expect(results.some((file) => file.source === validFile)).toBe(false); + expect(results.some((file) => file.source === newFileDest)).toBe(true); + + const { cache } = fCache.createFromFile(expectedCacheFilePath); + + expect(typeof cache.getKey(validFile)).toBe('object'); + expect(cache.getKey(validFile)).toBeTruthy(); + expect(typeof cache.getKey(newFileDest)).toBe('object'); + expect(cache.getKey(newFileDest)).toBeTruthy(); }); - it('all files are linted on config change', () => { - const changedConfig = getConfig(); - - changedConfig.config.rules['block-no-empty'] = false; - - return fs - .copyFile(validFile, newFileDest) - .then(() => { - // All file should be re-linted as config has changed - return standalone(changedConfig); - }) - .then((output) => { - // Ensure all files are re-linted - const isValidFileLinted = Boolean(output.results.find((file) => file.source === validFile)); - const isNewFileLinted = Boolean(output.results.find((file) => file.source === newFileDest)); - - expect(isValidFileLinted).toBe(true); - expect(isNewFileLinted).toBe(true); - }); + it('all files are linted on config change', async () => { + await fs.copyFile(validFile, newFileDest); + + // All file should be re-linted as config has changed + const { results } = await standalone( + getConfig({ + config: { + rules: { 'block-no-empty': false }, + }, + }), + ); + + // Ensure all files are re-linted + expect(results.some((file) => file.source === validFile)).toBe(true); + expect(results.some((file) => file.source === newFileDest)).toBe(true); }); - it('invalid files are not cached', () => { - return fs - .copyFile(invalidFile, newFileDest) - .then(() => { - // Should lint only changed files - return standalone(getConfig()); - }) - .then((output) => { - expect(output.errored).toBe(true); - // Ensure only changed files are linted - const isValidFileLinted = Boolean(output.results.find((file) => file.source === validFile)); - const isInvalidFileLinted = Boolean( - output.results.find((file) => file.source === newFileDest), - ); - - expect(isValidFileLinted).toBe(false); - expect(isInvalidFileLinted).toBe(true); - - const fileCache = fCache.createFromFile(expectedCacheFilePath); - const { cache } = fileCache; - - expect(typeof cache.getKey(validFile) === 'object').toBe(true); - expect(typeof cache.getKey(newFileDest) === 'undefined').toBe(true); - }); + it('invalid files are not cached', async () => { + await fs.copyFile(invalidFile, newFileDest); + + // Should lint only changed files + const { errored, results } = await standalone(getConfig()); + + expect(errored).toBe(true); + + // Ensure only changed files are linted + expect(results.some((file) => file.source === validFile)).toBe(false); + expect(results.some((file) => file.source === newFileDest)).toBe(true); + + const { cache } = fCache.createFromFile(expectedCacheFilePath); + + expect(typeof cache.getKey(validFile)).toBe('object'); + expect(cache.getKey(validFile)).toBeTruthy(); + expect(cache.getKey(newFileDest)).toBeUndefined(); }); - it('files with syntax errors are not cached', () => { - return fs - .copyFile(syntaxErrorFile, newFileDest) - .then(() => { - // Should lint only changed files - return standalone(getConfig()); - }) - .then(() => { - const fileCache = fCache.createFromFile(expectedCacheFilePath); - const { cache } = fileCache; - - expect(typeof cache.getKey(validFile) === 'object').toBe(true); - expect(typeof cache.getKey(newFileDest) === 'undefined').toBe(true); - }); + + it('files with syntax errors are not cached', async () => { + await fs.copyFile(syntaxErrorFile, newFileDest); + + // Should lint only changed files + await standalone(getConfig()); + + const { cache } = fCache.createFromFile(expectedCacheFilePath); + + expect(typeof cache.getKey(validFile)).toBe('object'); + expect(cache.getKey(validFile)).toBeTruthy(); + expect(cache.getKey(newFileDest)).toBeUndefined(); }); + it('cache file is removed when cache is disabled', async () => { - const noCacheConfig = getConfig(); + await standalone(getConfig({ cache: false })); + expect(existsSync(expectedCacheFilePath)).toBe(false); + }); - noCacheConfig.cache = false; + it("cache doesn't do anything if string is passed", async () => { + // Ensure no cache file + await removeFile(expectedCacheFilePath); - await standalone(noCacheConfig); - await expect(fileExists(expectedCacheFilePath)).resolves.toBe(false); - }); - // eslint-disable-next-line jest/no-disabled-tests - it.skip("cache doesn't do anything if string is passed", async () => { const config = { code: '.foo {}', codeFilename: 'foo.css', @@ -178,64 +154,42 @@ describe('standalone cache', () => { const lintResults = await standalone(config); expect(lintResults.errored).toBe(false); - - await expect(fileExists(expectedCacheFilePath)).resolves.toBe(false); + expect(existsSync(expectedCacheFilePath)).toBe(false); }); }); + describe('standalone cache uses cacheLocation', () => { const cacheLocationFile = path.join(fixturesPath, 'cache', '.cachefile'); const cacheLocationDir = path.join(fixturesPath, 'cache'); const expectedCacheFilePath = path.join(cacheLocationDir, `.stylelintcache_${hash(cwd)}`); - afterEach(() => { + afterEach(async () => { // clean up after each test - return Promise.all([ - fs.unlink(expectedCacheFilePath).catch(() => { - // fs.unlink() throws an error if file doesn't exist and it's ok. We just - // want to make sure it's not there for next test. - }), - fs.unlink(cacheLocationFile).catch(() => { - // fs.unlink() throws an error if file doesn't exist and it's ok. We just - // want to make sure it's not there for next test. - }), - ]); + await removeFile(expectedCacheFilePath); + await removeFile(cacheLocationFile); }); - it('cacheLocation is a file', () => { - const config = getConfig(); - config.cacheLocation = cacheLocationFile; + it('cacheLocation is a file', async () => { + await standalone(getConfig({ cacheLocation: cacheLocationFile })); - return standalone(config) - .then(() => { - // Ensure cache file is created - return fileExists(cacheLocationFile); - }) - .then((fileStats) => { - expect(Boolean(fileStats)).toBe(true); + // Ensure cache file is created + expect(existsSync(cacheLocationFile)).toBe(true); - const fileCache = fCache.createFromFile(cacheLocationFile); - const { cache } = fileCache; + const { cache } = fCache.createFromFile(cacheLocationFile); - expect(typeof cache.getKey(validFile) === 'object').toBe(true); - }); + expect(typeof cache.getKey(validFile)).toBe('object'); + expect(cache.getKey(validFile)).toBeTruthy(); }); - it('cacheLocation is a directory', () => { - const config = getConfig(); - config.cacheLocation = cacheLocationDir; + it('cacheLocation is a directory', async () => { + await standalone(getConfig({ cacheLocation: cacheLocationDir })); - return standalone(config) - .then(() => { - return fileExists(expectedCacheFilePath); - }) - .then((cacheFileStats) => { - // Ensure cache file is created - expect(Boolean(cacheFileStats)).toBe(true); + // Ensure cache file is created + expect(existsSync(expectedCacheFilePath)).toBe(true); - const fileCache = fCache.createFromFile(expectedCacheFilePath); - const { cache } = fileCache; + const { cache } = fCache.createFromFile(expectedCacheFilePath); - expect(typeof cache.getKey(validFile) === 'object').toBe(true); - }); + expect(typeof cache.getKey(validFile)).toBe('object'); + expect(cache.getKey(validFile)).toBeTruthy(); }); }); From 3d5725e7a80f8462964b161b8c79d029fb75164d Mon Sep 17 00:00:00 2001 From: doing-art Date: Mon, 17 May 2021 16:11:54 +0300 Subject: [PATCH 013/194] Add autofix to function-calc-no-unspaced-operator (#5273) --- .../README.md | 2 + .../__tests__/index.js | 103 ++++++++++++++++++ .../index.js | 103 ++++++++++++++++-- 3 files changed, 199 insertions(+), 9 deletions(-) diff --git a/lib/rules/function-calc-no-unspaced-operator/README.md b/lib/rules/function-calc-no-unspaced-operator/README.md index 6a68f443cb..d6d00e8f39 100644 --- a/lib/rules/function-calc-no-unspaced-operator/README.md +++ b/lib/rules/function-calc-no-unspaced-operator/README.md @@ -11,6 +11,8 @@ a { top: calc(1px + 2px); } Before the operator, there must be a single whitespace or a newline plus indentation. After the operator, there must be a single whitespace or a newline. +The [`fix` option](../../../docs/user-guide/usage/options.md#fix) can automatically fix all of the problems reported by this rule. + ## Options ### `true` diff --git a/lib/rules/function-calc-no-unspaced-operator/__tests__/index.js b/lib/rules/function-calc-no-unspaced-operator/__tests__/index.js index 27db1656e8..2bf9083171 100644 --- a/lib/rules/function-calc-no-unspaced-operator/__tests__/index.js +++ b/lib/rules/function-calc-no-unspaced-operator/__tests__/index.js @@ -7,6 +7,7 @@ const { messages, ruleName } = require('..'); testRule({ ruleName, config: [true], + fix: true, accept: [ { @@ -155,6 +156,7 @@ testRule({ reject: [ { code: 'a { top: calc(1px +\t-1px)}', + fixed: 'a { top: calc(1px + -1px)}', description: 'tab before sign after operator', message: messages.expectedAfter('+'), line: 1, @@ -162,6 +164,7 @@ testRule({ }, { code: 'a { top: calc(1px + -1px)}', + fixed: 'a { top: calc(1px + -1px)}', description: 'multiple spaces before sign after operator', message: messages.expectedAfter('+'), line: 1, @@ -169,102 +172,119 @@ testRule({ }, { code: 'a { top: calc(1px+ 2px); }', + fixed: 'a { top: calc(1px + 2px); }', message: messages.expectedBefore('+'), line: 1, column: 18, }, { code: 'a { top: cAlC(1px+ 2px); }', + fixed: 'a { top: cAlC(1px + 2px); }', message: messages.expectedBefore('+'), line: 1, column: 18, }, { code: 'a { top: CALC(1px+ 2px); }', + fixed: 'a { top: CALC(1px + 2px); }', message: messages.expectedBefore('+'), line: 1, column: 18, }, { code: 'a { top: calc(1px + 2px); }', + fixed: 'a { top: calc(1px + 2px); }', message: messages.expectedBefore('+'), line: 1, column: 20, }, { code: 'a { top: calc(1px\t+ 2px); }', + fixed: 'a { top: calc(1px + 2px); }', message: messages.expectedBefore('+'), line: 1, column: 19, }, { code: 'a { top: calc(1px + 2px); }', + fixed: 'a { top: calc(1px + 2px); }', message: messages.expectedAfter('+'), line: 1, column: 19, }, { code: 'a { top: calc(1px +\t2px); }', + fixed: 'a { top: calc(1px + 2px); }', message: messages.expectedAfter('+'), line: 1, column: 19, }, { code: 'a { top: calc(1px- 2px); }', + fixed: 'a { top: calc(1px - 2px); }', message: messages.expectedBefore('-'), line: 1, column: 18, }, { code: 'a { top: calc(1px* 2); }', + fixed: 'a { top: calc(1px * 2); }', message: messages.expectedBefore('*'), line: 1, column: 18, }, { code: 'a { top: calc(1px *2); }', + fixed: 'a { top: calc(1px * 2); }', message: messages.expectedAfter('*'), line: 1, column: 19, }, { code: 'a { top: calc(1px/ 2); }', + fixed: 'a { top: calc(1px / 2); }', message: messages.expectedBefore('/'), line: 1, column: 18, }, { code: 'a { top: calc(1px /2); }', + fixed: 'a { top: calc(1px / 2); }', message: messages.expectedAfter('/'), line: 1, column: 19, }, { code: 'a { top: calc(calc(1px* 2px) + 3px); }', + fixed: 'a { top: calc(calc(1px * 2px) + 3px); }', message: messages.expectedBefore('*'), line: 1, column: 23, }, { code: 'a { top: calc(calc(1px + 2px)* 3px); }', + fixed: 'a { top: calc(calc(1px + 2px) * 3px); }', message: messages.expectedBefore('*'), line: 1, column: 30, }, { code: 'a { top: calc(1px +2px); }', + fixed: 'a { top: calc(1px + 2px); }', message: messages.expectedOperatorBeforeSign('+'), line: 1, column: 19, }, { code: 'a { top: calc(1px -2px); }', + fixed: 'a { top: calc(1px - 2px); }', message: messages.expectedOperatorBeforeSign('-'), line: 1, column: 19, }, { code: 'a { padding: 10px calc(1px +\t-1px)}', + fixed: 'a { padding: 10px calc(1px + -1px)}', description: 'tab before sign after operator', message: messages.expectedAfter('+'), line: 1, @@ -272,6 +292,7 @@ testRule({ }, { code: 'a { padding: 10px calc(1px + -1px)}', + fixed: 'a { padding: 10px calc(1px + -1px)}', description: 'multiple spaces before sign after operator', message: messages.expectedAfter('+'), line: 1, @@ -279,88 +300,166 @@ testRule({ }, { code: 'a { padding: 10px calc(1px+ 2px); }', + fixed: 'a { padding: 10px calc(1px + 2px); }', message: messages.expectedBefore('+'), line: 1, column: 27, }, { code: 'a { padding: 10px calc(1px + 2px); }', + fixed: 'a { padding: 10px calc(1px + 2px); }', message: messages.expectedBefore('+'), line: 1, column: 29, }, { code: 'a { padding: 10px calc(1px\t+ 2px); }', + fixed: 'a { padding: 10px calc(1px + 2px); }', message: messages.expectedBefore('+'), line: 1, column: 28, }, { code: 'a { padding: 10px calc(1px + 2px); }', + fixed: 'a { padding: 10px calc(1px + 2px); }', message: messages.expectedAfter('+'), line: 1, column: 28, }, { code: 'a { padding: 10px calc(1px +\t2px); }', + fixed: 'a { padding: 10px calc(1px + 2px); }', message: messages.expectedAfter('+'), line: 1, column: 28, }, { code: 'a { padding: 10px calc(1px- 2px); }', + fixed: 'a { padding: 10px calc(1px - 2px); }', message: messages.expectedBefore('-'), line: 1, column: 27, }, { code: 'a { padding: 10px calc(1px* 2); }', + fixed: 'a { padding: 10px calc(1px * 2); }', message: messages.expectedBefore('*'), line: 1, column: 27, }, { code: 'a { padding: 10px calc(1px *2); }', + fixed: 'a { padding: 10px calc(1px * 2); }', message: messages.expectedAfter('*'), line: 1, column: 28, }, { code: 'a { padding: 10px calc(1px/ 2); }', + fixed: 'a { padding: 10px calc(1px / 2); }', message: messages.expectedBefore('/'), line: 1, column: 27, }, { code: 'a { padding: 10px calc(1px /2); }', + fixed: 'a { padding: 10px calc(1px / 2); }', message: messages.expectedAfter('/'), line: 1, column: 28, }, { code: 'a { padding: 10px calc(calc(1px* 2px) + 3px); }', + fixed: 'a { padding: 10px calc(calc(1px * 2px) + 3px); }', message: messages.expectedBefore('*'), line: 1, column: 32, }, { code: 'a { padding: 10px calc(calc(1px + 2px)* 3px); }', + fixed: 'a { padding: 10px calc(calc(1px + 2px) * 3px); }', message: messages.expectedBefore('*'), line: 1, column: 39, }, { code: 'a { padding: 10px calc(1px +2px); }', + fixed: 'a { padding: 10px calc(1px + 2px); }', message: messages.expectedOperatorBeforeSign('+'), line: 1, column: 28, }, { code: 'a { padding: 10px calc(1px -2px); }', + fixed: 'a { padding: 10px calc(1px - 2px); }', message: messages.expectedOperatorBeforeSign('-'), line: 1, column: 28, }, + { + code: 'a { padding: calc(1rem\t + 1em)}', + fixed: 'a { padding: calc(1rem + 1em)}', + description: 'several whitespace characters before operator starting from space', + message: messages.expectedBefore('+'), + line: 1, + column: 25, + }, + { + code: 'a { padding: calc(1rem \t+ 1em)}', + fixed: 'a { padding: calc(1rem + 1em)}', + description: 'several whitespace characters before operator starting from tab', + message: messages.expectedBefore('+'), + line: 1, + column: 26, + }, + { + code: 'a { padding: calc(1rem\t\f\r\t+ 1em)}', + fixed: 'a { padding: calc(1rem + 1em)}', + description: 'several incorrect whitespace characters before operator', + message: messages.expectedBefore('+'), + line: 1, + column: 27, + }, + { + code: 'a { padding: calc(1rem + \t1em)}', + fixed: 'a { padding: calc(1rem + 1em)}', + description: 'several whitespace characters after operator starting from space', + message: messages.expectedAfter('+'), + line: 1, + column: 24, + }, + { + code: 'a { padding: calc(1rem +\t \t1em)}', + fixed: 'a { padding: calc(1rem + 1em)}', + description: 'several whitespace characters after operator starting from tab', + message: messages.expectedAfter('+'), + line: 1, + column: 24, + }, + { + code: 'a { padding: calc(1rem +\t\r\f\t1em)}', + fixed: 'a { padding: calc(1rem + 1em)}', + description: 'several incorrect whitespace characters after operator', + message: messages.expectedAfter('+'), + line: 1, + column: 24, + }, + { + code: 'a { padding: calc(1rem +\t \t\f\n\f\t1em)}', + fixed: 'a { padding: calc(1rem +\n\f\t1em)}', + description: 'several whitespace characters after operator but before the \\n', + message: messages.expectedAfter('+'), + line: 1, + column: 24, + }, + { + code: 'a { padding: calc(1rem + \t\r\n 1em)}', + fixed: 'a { padding: calc(1rem +\r\n 1em)}', + description: 'several whitespace characters after operator but before the \\r\\n', + message: messages.expectedAfter('+'), + line: 1, + column: 24, + }, ], }); @@ -368,22 +467,26 @@ testRule({ ruleName, config: [true], customSyntax: postcssScss, + fix: true, reject: [ { code: 'a { top: calc(100%- #{$foo}); }', + fixed: 'a { top: calc(100% - #{$foo}); }', message: messages.expectedBefore('-'), line: 1, column: 19, }, { code: 'a { top: calc(100% *#{$foo}); }', + fixed: 'a { top: calc(100% * #{$foo}); }', message: messages.expectedAfter('*'), line: 1, column: 20, }, { code: 'a { top: calc(100% -#{$foo}); }', + fixed: 'a { top: calc(100% - #{$foo}); }', message: messages.expectedOperatorBeforeSign('-'), line: 1, column: 20, diff --git a/lib/rules/function-calc-no-unspaced-operator/index.js b/lib/rules/function-calc-no-unspaced-operator/index.js index abcc9e8f70..e8ec9106e8 100644 --- a/lib/rules/function-calc-no-unspaced-operator/index.js +++ b/lib/rules/function-calc-no-unspaced-operator/index.js @@ -18,7 +18,7 @@ const messages = ruleMessages(ruleName, { expectedOperatorBeforeSign: (operator) => `Expected an operator before sign "${operator}"`, }); -function rule(actual) { +function rule(actual, secondary, context) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual }); @@ -31,6 +31,8 @@ function rule(actual) { } root.walkDecls((decl) => { + const symbolsToFix = []; + valueParser(decl.value).walk((node) => { if (node.type !== 'function' || node.value.toLowerCase() !== 'calc') { return; @@ -65,13 +67,14 @@ function rule(actual) { styleSearch(styleSearchOptions, (match) => { const index = match.startIndex; + const symbolIndex = node.sourceIndex + parensMatch.start + index + 1; // Deal with signs. // (@ and $ are considered "digits" here to allow for variable syntaxes // that permit signs in front of variables, e.g. `-$number`) // As is "." to deal with fractional numbers without a leading zero if ((symbol === '+' || symbol === '-') && /[\d@$.]/.test(expression[index + 1])) { - const expressionBeforeSign = expression.substr(0, index); + const expressionBeforeSign = expression.slice(0, index); // Ignore signs that directly follow a opening bracket if (expressionBeforeSign[expressionBeforeSign.length - 1] === '(') { @@ -88,10 +91,16 @@ function rule(actual) { return; } - // And if not, complain - complain(messages.expectedOperatorBeforeSign(symbol), decl, expressionIndex + index); + if (!context.fix) { + // And if not, complain + complain( + messages.expectedOperatorBeforeSign(symbol), + decl, + expressionIndex + index, + ); - return; + return; + } } const beforeOk = @@ -99,24 +108,100 @@ function rule(actual) { newlineBefore(expression, index - 1); if (!beforeOk) { - complain(messages.expectedBefore(symbol), decl, expressionIndex + index); + if (context.fix) { + let step = 1; + + // Remove all whitespace characters before the operator, e.g. `\t` + while (isWhitespace(expression[index - step])) { + symbolsToFix.push({ + index: symbolIndex - step, + insert: false, + }); + + step++; + } + + // Add only one space character + symbolsToFix.push({ + index: symbolIndex, + insert: true, + }); + } else { + complain(messages.expectedBefore(symbol), decl, expressionIndex + index); + } } const afterOk = (expression[index + 1] === ' ' && !isWhitespace(expression[index + 2])) || - expression[index + 1] === '\n' || - expression.substr(index + 1, 2) === '\r\n'; + isNewlineAtIndex(expression, index + 1); if (!afterOk) { - complain(messages.expectedAfter(symbol), decl, expressionIndex + index); + if (context.fix) { + let step = 1; + let spaceNeeded = true; + + // Remove all whitespace characters before the operator or \n, e.g. \t + while (isWhitespace(expression[index + step])) { + if (isNewlineAtIndex(expression, index + step)) { + spaceNeeded = false; + break; + } + + symbolsToFix.push({ + index: symbolIndex + step, + insert: false, + }); + step++; + } + + // Insert one space character if there is no \n + if (spaceNeeded) { + symbolsToFix.push({ + index: symbolIndex + 1, + insert: true, + }); + } + } else { + complain(messages.expectedAfter(symbol), decl, expressionIndex + index); + } } }); } }); + + if (context.fix) { + decl.value = symbolsToFix.reduce((fixedValue, { insert, index }) => { + shiftIndexes(symbolsToFix, index, insert); + + return insert + ? insertCharAtIndex(fixedValue, index, ' ') + : removeCharAtIndex(fixedValue, index); + }, decl.value); + } }); }; } +function isNewlineAtIndex(str, index) { + return str[index] === '\n' || str.slice(index, index + 2) === '\r\n'; +} + +function shiftIndexes(symbolsToFix, index, insert) { + symbolsToFix.forEach((symbol) => { + if (symbol.index > index) { + symbol.index += insert ? 1 : -1; + } + }); +} + +function removeCharAtIndex(str, index) { + return str.slice(0, index) + str.slice(index + 1, str.length); +} + +function insertCharAtIndex(str, index, char) { + return str.slice(0, index) + char + str.slice(index, str.length); +} + function blurVariables(source) { return source.replace(/[$@][^)\s]+|#{.+?}/g, '0'); } From a3460ef08d6fd5c2993982f58bf777afe5f42548 Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Mon, 17 May 2021 14:13:49 +0100 Subject: [PATCH 014/194] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 002e77a529..d7a9949894 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ All notable changes to this project are documented in this file. - Removed: rules deprecated in 13.7.0 ([#5295](https://github.com/stylelint/stylelint/pull/5295)). - Removed: `function-calc-no-invalid` ([#5296](https://github.com/stylelint/stylelint/pull/5296)). - Removed: Drop Node 10 support ([#5303](https://github.com/stylelint/stylelint/pull/5303)). +- Added: `function-calc-no-unspaced-operator` autofix ([#5273](https://github.com/stylelint/stylelint/pull/5273)). ## 13.13.1 From 52a67abea5b6c1735b4369e2e0745acc406ec3ce Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Wed, 19 May 2021 13:16:34 +0100 Subject: [PATCH 015/194] Fix false positives for flex in length-zero-no-unit (#5315) --- lib/rules/length-zero-no-unit/__tests__/index.js | 8 ++++++++ lib/rules/length-zero-no-unit/index.js | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/lib/rules/length-zero-no-unit/__tests__/index.js b/lib/rules/length-zero-no-unit/__tests__/index.js index 00718b22cd..d14d5def39 100644 --- a/lib/rules/length-zero-no-unit/__tests__/index.js +++ b/lib/rules/length-zero-no-unit/__tests__/index.js @@ -220,6 +220,14 @@ testRule({ { code: 'a { lIne-hEight: 0px; }', }, + { + code: 'a { flex: 0px; }', + description: 'ignore flex property', + }, + { + code: 'a { Flex: 0px; }', + description: 'ignore cased flex property', + }, { code: 'a { grid-auto-columns: 0fr; }', description: 'ignore some grid properties with `fr`', diff --git a/lib/rules/length-zero-no-unit/index.js b/lib/rules/length-zero-no-unit/index.js index 042b2ec5d0..5daf8e8eb2 100644 --- a/lib/rules/length-zero-no-unit/index.js +++ b/lib/rules/length-zero-no-unit/index.js @@ -107,6 +107,8 @@ function rule(primary, secondary, context) { if (isLineHeight(prop)) return; + if (isFlex(prop)) return; + if (optionsMatches(secondary, 'ignore', 'custom-properties') && isCustomProperty(prop)) return; @@ -142,6 +144,10 @@ function isLineHeight(prop) { return prop.toLowerCase() === 'line-height'; } +function isFlex(prop) { + return prop.toLowerCase() === 'flex'; +} + function isWord({ type }) { return type === 'word'; } From 9152ab43373d7e7ece6b68b51ccaa37426f55421 Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Wed, 19 May 2021 13:18:48 +0100 Subject: [PATCH 016/194] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7a9949894..09139808d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ All notable changes to this project are documented in this file. - Removed: `function-calc-no-invalid` ([#5296](https://github.com/stylelint/stylelint/pull/5296)). - Removed: Drop Node 10 support ([#5303](https://github.com/stylelint/stylelint/pull/5303)). - Added: `function-calc-no-unspaced-operator` autofix ([#5273](https://github.com/stylelint/stylelint/pull/5273)). +- Fixed: `length-zero-no-unit` false positives for `flex` property ([#5315](https://github.com/stylelint/stylelint/pull/5315)). ## 13.13.1 From 492ae333323b9c8145fc49cb5275250bc75acf43 Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Wed, 19 May 2021 13:40:35 +0100 Subject: [PATCH 017/194] Add ignoreFunctions: [] to length-zero-no-unit (#5314) --- lib/rules/length-zero-no-unit/README.md | 20 ++++++++++++++++ .../length-zero-no-unit/__tests__/index.js | 24 +++++++++++++++++++ lib/rules/length-zero-no-unit/index.js | 9 +++++++ 3 files changed, 53 insertions(+) diff --git a/lib/rules/length-zero-no-unit/README.md b/lib/rules/length-zero-no-unit/README.md index 0b3591f7fc..f0e749b6d9 100644 --- a/lib/rules/length-zero-no-unit/README.md +++ b/lib/rules/length-zero-no-unit/README.md @@ -67,3 +67,23 @@ The following pattern is _not_ considered a violation: ```css a { --x: 0px; } ``` + +### `ignoreFunctions: ["/regex/", /regex/, "string"]` + +Given: + +```json +["var", "/^--/"] +``` + +The following patterns are _not_ considered violations: + + +```css +a { top: var(--foo, 0px); } +``` + + +```css +a { top: --bar(0px); } +``` diff --git a/lib/rules/length-zero-no-unit/__tests__/index.js b/lib/rules/length-zero-no-unit/__tests__/index.js index d14d5def39..9c0685890a 100644 --- a/lib/rules/length-zero-no-unit/__tests__/index.js +++ b/lib/rules/length-zero-no-unit/__tests__/index.js @@ -608,6 +608,30 @@ testRule({ ], }); +testRule({ + ruleName, + config: [true, { ignoreFunctions: ['var', /^--/] }], + fix: true, + accept: [ + { + code: 'a { top: var(--foo, 0px); }', + }, + { + code: 'a { top: --bar(0px); }', + }, + ], + reject: [ + { + code: 'a { margin: var(--foo, 0px) 0px --bar(0px); }', + fixed: 'a { margin: var(--foo, 0px) 0 --bar(0px); }', + + message: messages.rejected, + line: 1, + column: 30, + }, + ], +}); + testRule({ ruleName, config: [true], diff --git a/lib/rules/length-zero-no-unit/index.js b/lib/rules/length-zero-no-unit/index.js index 5daf8e8eb2..aad1ea58f2 100644 --- a/lib/rules/length-zero-no-unit/index.js +++ b/lib/rules/length-zero-no-unit/index.js @@ -2,6 +2,7 @@ 'use strict'; +const _ = require('lodash'); const valueParser = require('postcss-value-parser'); const atRuleParamIndex = require('../../utils/atRuleParamIndex'); @@ -37,6 +38,7 @@ function rule(primary, secondary, context) { actual: secondary, possible: { ignore: ['custom-properties'], + ignoreFunctions: [_.isString, _.isRegExp], }, optional: true, }, @@ -51,6 +53,9 @@ function rule(primary, secondary, context) { if (isMathFunction(valueNode)) return false; + if (isFunction(valueNode) && optionsMatches(secondary, 'ignoreFunctions', value)) + return false; + if (!isWord(valueNode)) return; const numberUnit = valueParser.unit(value); @@ -156,6 +161,10 @@ function isLength(unit) { return keywordSets.lengthUnits.has(unit.toLowerCase()); } +function isFunction({ type }) { + return type === 'function'; +} + function isFraction(unit) { return unit.toLowerCase() === 'fr'; } From 697fc15ff6df229dbcb4e075a8fca9984efd8e01 Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Wed, 19 May 2021 13:42:09 +0100 Subject: [PATCH 018/194] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 09139808d3..b05699d9c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ All notable changes to this project are documented in this file. - Removed: `function-calc-no-invalid` ([#5296](https://github.com/stylelint/stylelint/pull/5296)). - Removed: Drop Node 10 support ([#5303](https://github.com/stylelint/stylelint/pull/5303)). - Added: `function-calc-no-unspaced-operator` autofix ([#5273](https://github.com/stylelint/stylelint/pull/5273)). +- Added: `ignoreFunctions: []` to `length-zero-no-unit` ([#5314](https://github.com/stylelint/stylelint/pull/5314)). - Fixed: `length-zero-no-unit` false positives for `flex` property ([#5315](https://github.com/stylelint/stylelint/pull/5315)). ## 13.13.1 From d540d789d0c7bbf9a8293e32567bb6ad7b4115ce Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Wed, 19 May 2021 14:48:22 +0100 Subject: [PATCH 019/194] Document what each formatter does (#5313) --- docs/user-guide/usage/options.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/user-guide/usage/options.md b/docs/user-guide/usage/options.md index 2f6676db47..aa4a2572e7 100644 --- a/docs/user-guide/usage/options.md +++ b/docs/user-guide/usage/options.md @@ -45,12 +45,12 @@ Specify the formatter to format your results. Options are: -- `compact` -- `json` (default for Node API) -- `string` (default for CLI) -- `tap` -- `unix` -- `verbose` +- `compact` - generates output similar to ESLint's compact formatter +- `json` (default for Node API) - generates [JSON](https://www.json.org) that can be consumed by another tool +- `string` (default for CLI) - generates human-readable strings +- `tap` - generates [Test Anything Protocol](http://testanything.org/) output +- `unix` - generates messages like a C compiler, so that tools like Emacs' _Compilation mode_ can hyperlink them +- `verbose` - extends `string` to include a list of checked files and a tally for each rule The `formatter` Node.js API option can also accept a function, whereas the `--custom-formatter` CLI flag accepts a path to a JS file exporting one. The function in both cases must fit the signature described in the [Developer Guide](../../developer-guide/formatters.md). From 608625531ad3125d7edc1f5c7554cf96d885ea1a Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Wed, 19 May 2021 22:52:28 +0900 Subject: [PATCH 020/194] Refactor to remove `autoprefixer` dependency (#5312) --- lib/rules/at-rule-no-vendor-prefix/README.md | 2 + .../README.md | 2 +- lib/rules/property-no-vendor-prefix/README.md | 2 +- lib/rules/selector-no-vendor-prefix/README.md | 2 +- lib/rules/value-no-vendor-prefix/README.md | 2 +- lib/rules/value-no-vendor-prefix/index.js | 2 +- lib/utils/__tests__/isAutoprefixable.test.js | 52 +++ lib/utils/isAutoprefixable.js | 310 ++++++++++++++++-- package-lock.json | 142 -------- package.json | 1 - types/autoprefixer/index.d.ts | 82 ----- 11 files changed, 339 insertions(+), 260 deletions(-) create mode 100644 lib/utils/__tests__/isAutoprefixable.test.js delete mode 100644 types/autoprefixer/index.d.ts diff --git a/lib/rules/at-rule-no-vendor-prefix/README.md b/lib/rules/at-rule-no-vendor-prefix/README.md index b39d3de552..ddc185171f 100644 --- a/lib/rules/at-rule-no-vendor-prefix/README.md +++ b/lib/rules/at-rule-no-vendor-prefix/README.md @@ -9,6 +9,8 @@ Disallow vendor prefixes for at-rules. * This prefix */ ``` +This rule ignores non-standard vendor-prefixed at-rules that aren't handled by [Autoprefixer](https://github.com/postcss/autoprefixer). + The [`fix` option](../../../docs/user-guide/usage/options.md#fix) can automatically fix all of the problems reported by this rule. ## Options diff --git a/lib/rules/media-feature-name-no-vendor-prefix/README.md b/lib/rules/media-feature-name-no-vendor-prefix/README.md index 91c113cf5f..6bfaa67ddf 100644 --- a/lib/rules/media-feature-name-no-vendor-prefix/README.md +++ b/lib/rules/media-feature-name-no-vendor-prefix/README.md @@ -9,7 +9,7 @@ Disallow vendor prefixes for media feature names. * This prefixe */ ``` -Right now this rule simply checks for prefixed _resolutions_. +This rule ignores non-standard vendor-prefixed media feature names that aren't handled by [Autoprefixer](https://github.com/postcss/autoprefixer). The [`fix` option](../../../docs/user-guide/usage/options.md#fix) can automatically fix all of the problems reported by this rule. diff --git a/lib/rules/property-no-vendor-prefix/README.md b/lib/rules/property-no-vendor-prefix/README.md index dc8b132ca6..1192fa0673 100644 --- a/lib/rules/property-no-vendor-prefix/README.md +++ b/lib/rules/property-no-vendor-prefix/README.md @@ -9,7 +9,7 @@ a { -webkit-transform: scale(1); } * This prefix */ ``` -This rule does not blanketly condemn vendor prefixes. Instead, it uses [Autoprefixer's](https://github.com/postcss/autoprefixer) up-to-date data (from [caniuse.com](http://caniuse.com/)) to know whether a vendor prefix should cause a violation or not. _If you've included a vendor prefixed property that has a standard alternative, one that Autoprefixer could take care of for you, this rule will complain about it_. If, however, you use a non-standard vendor-prefixed property, one that Autoprefixer would ignore and could not provide (such as `-webkit-touch-callout`), this rule will ignore it. +This rule ignores non-standard vendor-prefixed properties that aren't handled by [Autoprefixer](https://github.com/postcss/autoprefixer). The [`fix` option](../../../docs/user-guide/usage/options.md#fix) can automatically fix all of the problems reported by this rule. diff --git a/lib/rules/selector-no-vendor-prefix/README.md b/lib/rules/selector-no-vendor-prefix/README.md index e53b94d1ea..617d209483 100644 --- a/lib/rules/selector-no-vendor-prefix/README.md +++ b/lib/rules/selector-no-vendor-prefix/README.md @@ -9,7 +9,7 @@ input::-moz-placeholder {} * This prefix */ ``` -This rule does not blanketly condemn vendor prefixes. Instead, it uses [Autoprefixer's](https://github.com/postcss/autoprefixer) up-to-date data (from [caniuse.com](http://caniuse.com/)) to know whether a vendor prefix should cause a violation or not. _If you've included a vendor prefixed selector that has a standard alternative, one that Autoprefixer could take care of for you, this rule will complain about it_. If, however, you use a non-standard vendor-prefixed selector, one that Autoprefixer would ignore and could not provide, this rule will ignore it. +This rule ignores non-standard vendor-prefixed selectors that aren't handled by [Autoprefixer](https://github.com/postcss/autoprefixer). The [`fix` option](../../../docs/user-guide/usage/options.md#fix) can automatically fix all of the problems reported by this rule. diff --git a/lib/rules/value-no-vendor-prefix/README.md b/lib/rules/value-no-vendor-prefix/README.md index b75b1c82f7..b6ded42b55 100644 --- a/lib/rules/value-no-vendor-prefix/README.md +++ b/lib/rules/value-no-vendor-prefix/README.md @@ -9,7 +9,7 @@ a { display: -webkit-flex; } * These prefixes */ ``` -This rule will only complain for prefixed _standard_ values, and not for prefixed _proprietary_ or _unknown_ ones. +This rule ignores non-standard vendor-prefixed values that aren't handled by [Autoprefixer](https://github.com/postcss/autoprefixer). The [`fix` option](../../../docs/user-guide/usage/options.md#fix) can automatically fix all of the problems reported by this rule. diff --git a/lib/rules/value-no-vendor-prefix/index.js b/lib/rules/value-no-vendor-prefix/index.js index 416b28c0f0..ad6840f025 100644 --- a/lib/rules/value-no-vendor-prefix/index.js +++ b/lib/rules/value-no-vendor-prefix/index.js @@ -63,7 +63,7 @@ function rule(actual, options, context) { styleSearch({ source: value.toLowerCase(), target: valuePrefixes }, (match) => { const fullIdentifier = /^(-[a-z-]+)\b/i.exec(value.slice(match.startIndex))[1]; - if (!isAutoprefixable.propertyValue(prop, fullIdentifier)) { + if (!isAutoprefixable.propertyValue(fullIdentifier)) { return; } diff --git a/lib/utils/__tests__/isAutoprefixable.test.js b/lib/utils/__tests__/isAutoprefixable.test.js new file mode 100644 index 0000000000..b1747b15f8 --- /dev/null +++ b/lib/utils/__tests__/isAutoprefixable.test.js @@ -0,0 +1,52 @@ +'use strict'; + +const isAutoprefixable = require('../isAutoprefixable'); + +describe('isAutoprefixable.atRuleName()', () => { + it('returns true', () => { + expect(isAutoprefixable.atRuleName('-moz-keyframes')).toBe(true); + expect(isAutoprefixable.atRuleName('-ms-viewport')).toBe(true); + expect(isAutoprefixable.atRuleName('resolution')).toBe(true); + }); + + it('returns false', () => { + expect(isAutoprefixable.atRuleName('keyframes')).toBe(false); + expect(isAutoprefixable.atRuleName('viewport')).toBe(false); + }); +}); + +describe('isAutoprefixable.selector()', () => { + it('returns true', () => { + expect(isAutoprefixable.selector(':-moz-any-link')).toBe(true); + expect(isAutoprefixable.selector('::-webkit-backdrop')).toBe(true); + expect(isAutoprefixable.selector(':-ms-input-placeholder')).toBe(true); + expect(isAutoprefixable.selector('::-webkit-input-placeholder')).toBe(true); + }); + + it('returns false', () => { + expect(isAutoprefixable.selector('::placeholder')).toBe(false); + expect(isAutoprefixable.selector(':any-link')).toBe(false); + }); +}); + +describe('isAutoprefixable.property()', () => { + it('returns true', () => { + expect(isAutoprefixable.property('-webkit-transition')).toBe(true); + expect(isAutoprefixable.property('-ms-interpolation-mode')).toBe(true); + }); + + it('returns false', () => { + expect(isAutoprefixable.property('transition')).toBe(false); + expect(isAutoprefixable.property('-webkit-touch-callout')).toBe(false); + }); +}); + +describe('isAutoprefixable.propertyValue()', () => { + it('returns true', () => { + expect(isAutoprefixable.propertyValue('-webkit-max-content')).toBe(true); + }); + + it('returns false', () => { + expect(isAutoprefixable.propertyValue('max-content')).toBe(false); + }); +}); diff --git a/lib/utils/isAutoprefixable.js b/lib/utils/isAutoprefixable.js index 051e23ea32..0e0e2a7cea 100644 --- a/lib/utils/isAutoprefixable.js +++ b/lib/utils/isAutoprefixable.js @@ -1,22 +1,273 @@ 'use strict'; -const autoprefixer = require('autoprefixer'); -const Browsers = require('autoprefixer/lib/browsers'); -const Prefixes = require('autoprefixer/lib/prefixes'); +const vendor = require('./vendor'); /** - * Use Autoprefixer's secret powers to determine whether or - * not a certain CSS identifier contains a vendor prefix that - * Autoprefixer, given the standardized identifier, could add itself. + * Extract each list using the internal API of Autoprefixer: * - * Used by `*-no-vendor-prefix-*` rules to find superfluous - * vendor prefixes. + * @example + * const autoprefixer = require('autoprefixer'); + * const Browsers = require('autoprefixer/lib/browsers'); + * const Prefixes = require('autoprefixer/lib/prefixes'); + * const prefixes = new Prefixes(autoprefixer.data.prefixes, new Browsers(autoprefixer.data.browsers, [])); */ -const prefixes = new Prefixes( - autoprefixer.data.prefixes, - new Browsers(autoprefixer.data.browsers, []), -); +/** + * @example + * Object.keys(prefixes.remove).filter((s) => s.startsWith('@')); + */ +const AT_RULES = new Set([ + '@-khtml-keyframes', + '@-moz-keyframes', + '@-ms-keyframes', + '@-ms-viewport', + '@-o-keyframes', + '@-o-viewport', + '@-webkit-keyframes', + '@resolution', +]); + +/** + * @example + * prefixes.remove.selectors.map((s) => s.prefixed); + */ +const SELECTORS = new Set([ + ':-moz-any-link', + ':-moz-full-screen', + ':-moz-placeholder', + ':-moz-placeholder-shown', + ':-moz-read-only', + ':-moz-read-write', + ':-ms-fullscreen', + ':-ms-input-placeholder', + ':-webkit-any-link', + ':-webkit-full-screen', + '::-moz-placeholder', + '::-moz-selection', + '::-ms-input-placeholder', + '::-webkit-backdrop', + '::-webkit-input-placeholder', +]); + +/** + * @example + * Object.entries(autoprefixer.data.prefixes) + * .filter(([key, value]) => !value.selector && !value.props && !key.startsWith('@')) + * .map(([key, value]) => key); + */ +const PROPERTIES = new Set([ + 'align-content', + 'align-items', + 'align-self', + 'animation', + 'animation-delay', + 'animation-direction', + 'animation-duration', + 'animation-fill-mode', + 'animation-iteration-count', + 'animation-name', + 'animation-play-state', + 'animation-timing-function', + 'appearance', + 'backdrop-filter', + 'backface-visibility', + 'background-clip', + 'background-origin', + 'background-size', + 'border-block-end', + 'border-block-start', + 'border-bottom-left-radius', + 'border-bottom-right-radius', + 'border-image', + 'border-inline-end', + 'border-inline-start', + 'border-radius', + 'border-top-left-radius', + 'border-top-right-radius', + 'box-decoration-break', + 'box-shadow', + 'box-sizing', + 'break-after', + 'break-before', + 'break-inside', + 'clip-path', + 'color-adjust', + 'column-count', + 'column-fill', + 'column-gap', + 'column-rule', + 'column-rule-color', + 'column-rule-style', + 'column-rule-width', + 'column-span', + 'column-width', + 'columns', + 'filter', + 'flex', + 'flex-basis', + 'flex-direction', + 'flex-flow', + 'flex-grow', + 'flex-shrink', + 'flex-wrap', + 'flow-from', + 'flow-into', + 'font-feature-settings', + 'font-kerning', + 'font-language-override', + 'font-variant-ligatures', + 'grid-area', + 'grid-column', + 'grid-column-align', + 'grid-column-end', + 'grid-column-start', + 'grid-row', + 'grid-row-align', + 'grid-row-end', + 'grid-row-start', + 'grid-template', + 'grid-template-areas', + 'grid-template-columns', + 'grid-template-rows', + 'hyphens', + 'image-rendering', + 'justify-content', + 'margin-block-end', + 'margin-block-start', + 'margin-inline-end', + 'margin-inline-start', + 'mask', + 'mask-border', + 'mask-border-outset', + 'mask-border-repeat', + 'mask-border-slice', + 'mask-border-source', + 'mask-border-width', + 'mask-clip', + 'mask-composite', + 'mask-image', + 'mask-origin', + 'mask-position', + 'mask-repeat', + 'mask-size', + 'object-fit', + 'object-position', + 'order', + 'overscroll-behavior', + 'padding-block-end', + 'padding-block-start', + 'padding-inline-end', + 'padding-inline-start', + 'perspective', + 'perspective-origin', + 'place-self', + 'region-fragment', + 'scroll-snap-coordinate', + 'scroll-snap-destination', + 'scroll-snap-points-x', + 'scroll-snap-points-y', + 'scroll-snap-type', + 'shape-image-threshold', + 'shape-margin', + 'shape-outside', + 'tab-size', + 'text-align-last', + 'text-decoration', + 'text-decoration-color', + 'text-decoration-line', + 'text-decoration-skip', + 'text-decoration-skip-ink', + 'text-decoration-style', + 'text-emphasis', + 'text-emphasis-color', + 'text-emphasis-position', + 'text-emphasis-style', + 'text-orientation', + 'text-overflow', + 'text-size-adjust', + 'text-spacing', + 'touch-action', + 'transform', + 'transform-origin', + 'transform-style', + 'transition', + 'transition-delay', + 'transition-duration', + 'transition-property', + 'transition-timing-function', + 'user-select', + 'writing-mode', +]); + +/** + * @example + * Object.values(prefixes.remove) + * .filter((p) => Array.isArray(p.values)) + * .flatMap((p) => p.values) + * .map((p) => p.prefixed); + */ +const PROPERTY_VALUES = new Set([ + '-moz-available', + '-moz-box', + '-moz-calc', + '-moz-crisp-edges', + '-moz-element', + '-moz-fit-content', + '-moz-grab', + '-moz-grabbing', + '-moz-inline-box', + '-moz-isolate', + '-moz-isolate-override', + '-moz-linear-gradient', + '-moz-max-content', + '-moz-min-content', + '-moz-plaintext', + '-moz-radial-gradient', + '-moz-repeating-linear-gradient', + '-moz-repeating-radial-gradient', + '-moz-zoom-in', + '-moz-zoom-out', + '-ms-flexbox', + '-ms-grid', + '-ms-inline-flexbox', + '-ms-inline-grid', + '-ms-linear-gradient', + '-ms-radial-gradient', + '-ms-repeating-linear-gradient', + '-ms-repeating-radial-gradient', + '-o-linear-gradient', + '-o-pixelated', + '-o-radial-gradient', + '-o-repeating-linear-gradient', + '-o-repeating-radial-gradient', + '-webkit- oldlinear-gradient', + '-webkit- oldradial-gradient', + '-webkit- oldrepeating-linear-gradient', + '-webkit- oldrepeating-radial-gradient', + '-webkit-box', + '-webkit-calc', + '-webkit-cross-fade', + '-webkit-fill-available', + '-webkit-filter', + '-webkit-fit-content', + '-webkit-flex', + '-webkit-grab', + '-webkit-grabbing', + '-webkit-image-set', + '-webkit-inline-box', + '-webkit-inline-flex', + '-webkit-isolate', + '-webkit-linear-gradient', + '-webkit-max-content', + '-webkit-min-content', + '-webkit-optimize-contrast', + '-webkit-radial-gradient', + '-webkit-repeating-linear-gradient', + '-webkit-repeating-radial-gradient', + '-webkit-sticky', + '-webkit-zoom-in', + '-webkit-zoom-out', +]); /** * Most identifier types have to be looked up in a unique way, @@ -28,7 +279,7 @@ module.exports = { * @returns {boolean} */ atRuleName(identifier) { - return Boolean(prefixes.remove[`@${identifier.toLowerCase()}`]); + return AT_RULES.has(`@${identifier.toLowerCase()}`); }, /** @@ -36,9 +287,7 @@ module.exports = { * @returns {boolean} */ selector(identifier) { - return prefixes.remove.selectors.some((/** @type {{ prefixed: string}} */ selectorObj) => { - return identifier.toLowerCase() === selectorObj.prefixed; - }); + return SELECTORS.has(identifier.toLowerCase()); }, /** @@ -54,29 +303,30 @@ module.exports = { * @returns {boolean} */ property(identifier) { - return Boolean(autoprefixer.data.prefixes[prefixes.unprefixed(identifier.toLowerCase())]); + const ident = identifier.toLowerCase(); + + // HACK: `interpolation-mode` does not exist. This is an IE extension for `image-rendering`. + // See + if (ident === '-ms-interpolation-mode') { + return true; + } + + if (vendor.prefix(ident).length === 0) { + return false; + } + + return PROPERTIES.has(vendor.unprefixed(ident)); }, /** - * - * @param {string} prop * @param {string} value * @returns {boolean} */ - propertyValue(prop, value) { - const possiblePrefixableValues = - (prefixes.remove[prop.toLowerCase()] && prefixes.remove[prop.toLowerCase()].values) || false; - - return ( - possiblePrefixableValues && - possiblePrefixableValues.some((/** @type {{ prefixed: string}} */ valueObj) => { - return value.toLowerCase() === valueObj.prefixed; - }) - ); + propertyValue(value) { + return PROPERTY_VALUES.has(value.toLowerCase()); }, /** - * * @param {string} value * @returns {string} */ diff --git a/package-lock.json b/package-lock.json index dd4bf2bd6e..35c7f422a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,6 @@ "version": "13.13.1", "license": "MIT", "dependencies": { - "autoprefixer": "^9.8.6", "balanced-match": "^2.0.0", "chalk": "^4.1.1", "cosmiconfig": "^7.0.0", @@ -1638,23 +1637,6 @@ "node": ">= 4.5.0" } }, - "node_modules/autoprefixer": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", - "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", - "dependencies": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "colorette": "^1.2.1", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - } - }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -1972,28 +1954,6 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, - "node_modules/browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", - "dependencies": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", - "escalade": "^3.1.1", - "node-releases": "^1.1.70" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, "node_modules/bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", @@ -2101,11 +2061,6 @@ "node": ">=8" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001194", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001194.tgz", - "integrity": "sha512-iDUOH+oFeBYk5XawYsPtsx/8fFpndAPUQJC7gBTfxHM8xw5nOZv7ceAD4frS1MKCLUac7QL5wdAJiFQlDRjXlA==" - }, "node_modules/capture-exit": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", @@ -2475,11 +2430,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "node_modules/colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -3031,11 +2981,6 @@ "safer-buffer": "^2.1.0" } }, - "node_modules/electron-to-chromium": { - "version": "1.3.678", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.678.tgz", - "integrity": "sha512-E5ha1pE9+aWWrT2fUD5wdPBWUnYtKnEnloewbtVyrkAs79HvodOiNO4rMR94+hKbxgMFQG4fnPQACOc1cfMfBg==" - }, "node_modules/elegant-spinner": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", @@ -3124,14 +3069,6 @@ "node": ">= 0.4" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, "node_modules/escape-goat": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz", @@ -7797,11 +7734,6 @@ "node": ">= 8" } }, - "node_modules/node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" - }, "node_modules/normalize-package-data": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.0.tgz", @@ -7839,14 +7771,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/normalize-selector": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", @@ -8346,11 +8270,6 @@ "node": ">=4" } }, - "node_modules/num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" - }, "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -13822,20 +13741,6 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, - "autoprefixer": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", - "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "colorette": "^1.2.1", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - } - }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -14105,18 +14010,6 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, - "browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", - "requires": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", - "escalade": "^3.1.1", - "node-releases": "^1.1.70" - } - }, "bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", @@ -14206,11 +14099,6 @@ "quick-lru": "^4.0.1" } }, - "caniuse-lite": { - "version": "1.0.30001194", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001194.tgz", - "integrity": "sha512-iDUOH+oFeBYk5XawYsPtsx/8fFpndAPUQJC7gBTfxHM8xw5nOZv7ceAD4frS1MKCLUac7QL5wdAJiFQlDRjXlA==" - }, "capture-exit": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", @@ -14504,11 +14392,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" - }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -14944,11 +14827,6 @@ "safer-buffer": "^2.1.0" } }, - "electron-to-chromium": { - "version": "1.3.678", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.678.tgz", - "integrity": "sha512-E5ha1pE9+aWWrT2fUD5wdPBWUnYtKnEnloewbtVyrkAs79HvodOiNO4rMR94+hKbxgMFQG4fnPQACOc1cfMfBg==" - }, "elegant-spinner": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", @@ -15022,11 +14900,6 @@ "is-symbol": "^1.0.2" } }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, "escape-goat": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz", @@ -18718,11 +18591,6 @@ } } }, - "node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" - }, "normalize-package-data": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.0.tgz", @@ -18750,11 +18618,6 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" - }, "normalize-selector": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", @@ -19146,11 +19009,6 @@ } } }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" - }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", diff --git a/package.json b/package.json index 94f7050307..7ecfe3dce8 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,6 @@ ] }, "dependencies": { - "autoprefixer": "^9.8.6", "balanced-match": "^2.0.0", "chalk": "^4.1.1", "cosmiconfig": "^7.0.0", diff --git a/types/autoprefixer/index.d.ts b/types/autoprefixer/index.d.ts deleted file mode 100644 index 9a8dbbd431..0000000000 --- a/types/autoprefixer/index.d.ts +++ /dev/null @@ -1,82 +0,0 @@ -declare module 'autoprefixer/lib/browsers' { - import browserslist from 'browserslist'; - - type Queries = string | ReadonlyArray; - - interface Browsers { - parse(queries: Queries): string[]; - prefix(browser: string): string; - isSelected(browser: string): boolean; - } - - class BrowsersImpl implements Browsers { - constructor(data: { [k: string]: any }, options?: any, browserslistOpts?: browserslist.Options); - - isSelected(browser: string): boolean; - - parse(queries: string | ReadonlyArray): string[]; - - prefix(browser: string): string; - - prefixes(): string[]; - - withPrefix(value: string): boolean; - } - - export = BrowsersImpl; -} - -declare module 'autoprefixer/lib/prefixes' { - import Browsers from 'autoprefixer/lib/browsers'; - - interface Prefixes { - remove: { [k: string]: any }; - - unprefixed(value: string): string; - } - - class PrefixesImpl implements Prefixes { - constructor(data: string[], browsers: Browsers, options?: any); - - remove: { [p: string]: any }; - - unprefixed(value: string): string; - } - - export = PrefixesImpl; -} - -/** fork from @types/autoprefixer */ -// Type definitions for autoprefixer 9.6 -// Project: https://github.com/postcss/autoprefixer -// Definitions by: Armando Meziat -// murt -// Slava Fomin II -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -// TypeScript Version: 2.7 - -declare module 'autoprefixer' { - import { Plugin } from 'postcss'; - import { Stats } from 'browserslist'; - type BrowserslistTarget = string | string[] | { [key: string]: string[] }; - - interface Options { - env?: string; - cascade?: boolean; - add?: boolean; - remove?: boolean; - supports?: boolean; - flexbox?: boolean | 'no-2009'; - grid?: false | 'autoplace' | 'no-autoplace'; - stats?: Stats; - browsers?: string[] | string; - overrideBrowserslist?: BrowserslistTarget; - ignoreUnknownVersions?: boolean; - } - - type Autoprefixer = Plugin & { data: { prefixes: any; browsers: string[] } }; - - const autoprefixer: Autoprefixer; - - export = autoprefixer; -} From cab9e9b4411b3bd17279213c4d81a07317e48368 Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Wed, 26 May 2021 07:19:48 -0400 Subject: [PATCH 021/194] Refactor to remove `_.last` (#5323) --- lib/assignDisabledRanges.js | 18 +++++++++++------- lib/rules/comment-whitespace-inside/index.js | 4 +--- lib/rules/no-descending-specificity/index.js | 10 ++++------ lib/rules/unit-no-unknown/index.js | 7 +++++-- lib/utils/addEmptyLineAfter.js | 5 ++--- 5 files changed, 23 insertions(+), 21 deletions(-) diff --git a/lib/assignDisabledRanges.js b/lib/assignDisabledRanges.js index 78d6c10fa5..a4f8756b03 100644 --- a/lib/assignDisabledRanges.js +++ b/lib/assignDisabledRanges.js @@ -253,8 +253,8 @@ module.exports = function (root, result) { }); } - Object.keys(disabledRanges).forEach((ruleName) => { - if (!_.get(_.last(disabledRanges[ruleName]), 'end')) { + Object.entries(disabledRanges).forEach(([ruleName, ranges]) => { + if (!_.get(ranges[ranges.length - 1], 'end')) { endDisabledRange(endLine, ruleName, ruleName === ALL_RULES); } }); @@ -269,7 +269,8 @@ module.exports = function (root, result) { createDisableRange(comment, start, false, description, end, false), ); } else { - const range = _.last(disabledRanges[ALL_RULES]); + const ranges = disabledRanges[ALL_RULES]; + const range = ranges ? ranges[ranges.length - 1] : null; if (range) { disabledRanges[ruleToEnable].push({ ...range }); @@ -369,7 +370,8 @@ module.exports = function (root, result) { * @param {boolean} strict */ function endDisabledRange(line, ruleName, strict) { - const lastRangeForRule = _.last(disabledRanges[ruleName]); + const ranges = disabledRanges[ruleName]; + const lastRangeForRule = ranges ? ranges[ranges.length - 1] : null; if (!lastRangeForRule) { return; @@ -396,11 +398,13 @@ module.exports = function (root, result) { * @returns {boolean} */ function ruleIsDisabled(ruleName) { - if (disabledRanges[ruleName] === undefined) return false; + const ranges = disabledRanges[ruleName]; - if (_.last(disabledRanges[ruleName]) === undefined) return false; + if (!ranges) return false; - if (_.get(_.last(disabledRanges[ruleName]), 'end') === undefined) return true; + if (!ranges[ranges.length - 1]) return false; + + if (!_.get(ranges[ranges.length - 1], 'end')) return true; return false; } diff --git a/lib/rules/comment-whitespace-inside/index.js b/lib/rules/comment-whitespace-inside/index.js index 7d5b77ec82..c9640ba234 100755 --- a/lib/rules/comment-whitespace-inside/index.js +++ b/lib/rules/comment-whitespace-inside/index.js @@ -2,8 +2,6 @@ 'use strict'; -const _ = require('lodash'); - const isWhitespace = require('../../utils/isWhitespace'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); @@ -27,7 +25,7 @@ function addWhitespaceBefore(comment) { } function addWhitespaceAfter(comment) { - if (_.last(comment.text) === '*') { + if (comment.text[comment.text.length - 1] === '*') { comment.text = comment.text.replace(/(\*+)$/, ` $1`); } else { comment.raws.right = ' '; diff --git a/lib/rules/no-descending-specificity/index.js b/lib/rules/no-descending-specificity/index.js index 5d267823a8..852cc92559 100644 --- a/lib/rules/no-descending-specificity/index.js +++ b/lib/rules/no-descending-specificity/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const findAtRuleContext = require('../../utils/findAtRuleContext'); const isCustomPropertySet = require('../../utils/isCustomPropertySet'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); @@ -126,11 +125,10 @@ function rule(on, options) { } function lastCompoundSelectorWithoutPseudoClasses(selectorNode) { - const nodesAfterLastCombinator = _.last( - selectorNode.nodes[0].split((node) => { - return node.type === 'combinator'; - }), - ); + const nodesByCombinator = selectorNode.nodes[0].split((node) => { + return node.type === 'combinator'; + }); + const nodesAfterLastCombinator = nodesByCombinator[nodesByCombinator.length - 1]; const nodesWithoutPseudoClasses = nodesAfterLastCombinator .filter((node) => { diff --git a/lib/rules/unit-no-unknown/index.js b/lib/rules/unit-no-unknown/index.js index 6b75ad25ee..f4e0aa18ad 100644 --- a/lib/rules/unit-no-unknown/index.js +++ b/lib/rules/unit-no-unknown/index.js @@ -99,9 +99,11 @@ function rule(actual, options) { let ignoreUnit = false; mediaParser(node.params).walk((mediaNode, i, mediaNodes) => { + const lastMediaNode = mediaNodes[mediaNodes.length - 1]; + if ( mediaNode.value.toLowerCase().includes('resolution') && - _.last(mediaNodes).sourceIndex === valueNode.sourceIndex + lastMediaNode.sourceIndex === valueNode.sourceIndex ) { ignoreUnit = true; @@ -123,7 +125,8 @@ function rule(actual, options) { const imageSet = parsedValue.nodes.find( (n) => vendor.unprefixed(n.value) === 'image-set', ); - const imageSetValueLastIndex = _.last(imageSet.nodes).sourceIndex; + const imageSetLastNode = imageSet.nodes[imageSet.nodes.length - 1]; + const imageSetValueLastIndex = imageSetLastNode.sourceIndex; if (imageSetValueLastIndex >= valueNode.sourceIndex) { return; diff --git a/lib/utils/addEmptyLineAfter.js b/lib/utils/addEmptyLineAfter.js index dcf00341be..c7b3cfe709 100644 --- a/lib/utils/addEmptyLineAfter.js +++ b/lib/utils/addEmptyLineAfter.js @@ -1,7 +1,5 @@ 'use strict'; -const _ = require('lodash'); - /** @typedef {import('postcss').ChildNode} ChildNode */ /** @@ -16,7 +14,8 @@ function addEmptyLineAfter(node, newline) { return node; } - const after = _.last(node.raws.after.split(';')) || ''; + const spaces = node.raws.after.split(';'); + const after = spaces[spaces.length - 1] || ''; if (!/\r?\n/.test(after)) { node.raws.after += newline.repeat(2); From feff3c9709f26f7cf0799e50c6c6e7a612777171 Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Wed, 26 May 2021 07:20:35 -0400 Subject: [PATCH 022/194] Refactor to remove `_.isEmpty` (#5324) --- lib/assignDisabledRanges.js | 2 +- lib/normalizeRuleSettings.js | 2 +- lib/rules/declaration-property-value-allowed-list/index.js | 2 +- lib/rules/declaration-property-value-disallowed-list/index.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/assignDisabledRanges.js b/lib/assignDisabledRanges.js index a4f8756b03..ca1576bd87 100644 --- a/lib/assignDisabledRanges.js +++ b/lib/assignDisabledRanges.js @@ -331,7 +331,7 @@ module.exports = function (root, result) { .filter(Boolean) .map((r) => r.trim()); - if (_.isEmpty(rules)) { + if (rules.length === 0) { return [ALL_RULES]; } diff --git a/lib/normalizeRuleSettings.js b/lib/normalizeRuleSettings.js index 4841839921..57da8881b3 100644 --- a/lib/normalizeRuleSettings.js +++ b/lib/normalizeRuleSettings.js @@ -39,7 +39,7 @@ module.exports = function ( } // Everything below is an array ... - if (!_.isEmpty(rawSettings) && _.isNil(rawSettings[0])) { + if (rawSettings.length > 0 && _.isNil(rawSettings[0])) { return null; } diff --git a/lib/rules/declaration-property-value-allowed-list/index.js b/lib/rules/declaration-property-value-allowed-list/index.js index 4985a2aaa3..37b062cd21 100644 --- a/lib/rules/declaration-property-value-allowed-list/index.js +++ b/lib/rules/declaration-property-value-allowed-list/index.js @@ -35,7 +35,7 @@ function rule(list) { matchesStringOrRegExp(unprefixedProp, propIdentifier), ); - if (_.isEmpty(propList)) { + if (!propList || propList.length === 0) { return; } diff --git a/lib/rules/declaration-property-value-disallowed-list/index.js b/lib/rules/declaration-property-value-disallowed-list/index.js index ad7e4de385..5e01dc1945 100644 --- a/lib/rules/declaration-property-value-disallowed-list/index.js +++ b/lib/rules/declaration-property-value-disallowed-list/index.js @@ -35,7 +35,7 @@ function rule(list) { matchesStringOrRegExp(unprefixedProp, propIdentifier), ); - if (_.isEmpty(propList)) { + if (!propList || propList.length === 0) { return; } From b8da5f04aa64439e9fc778976e692d58556fd76f Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Wed, 26 May 2021 20:21:13 +0900 Subject: [PATCH 023/194] Fix invalid `-webkit- old***` from `isAutoprefixable()` (#5321) --- lib/utils/isAutoprefixable.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/utils/isAutoprefixable.js b/lib/utils/isAutoprefixable.js index 0e0e2a7cea..2e1618b4d3 100644 --- a/lib/utils/isAutoprefixable.js +++ b/lib/utils/isAutoprefixable.js @@ -3,12 +3,16 @@ const vendor = require('./vendor'); /** - * Extract each list using the internal API of Autoprefixer: + * Extract each list using the internal API of Autoprefixer 10.2.5. + * + * @see https://github.com/postcss/autoprefixer/tree/10.2.5 * * @example * const autoprefixer = require('autoprefixer'); * const Browsers = require('autoprefixer/lib/browsers'); * const Prefixes = require('autoprefixer/lib/prefixes'); + * const utils = require('autoprefixer/lib/utils'); + * * const prefixes = new Prefixes(autoprefixer.data.prefixes, new Browsers(autoprefixer.data.browsers, [])); */ @@ -204,7 +208,10 @@ const PROPERTIES = new Set([ * Object.values(prefixes.remove) * .filter((p) => Array.isArray(p.values)) * .flatMap((p) => p.values) - * .map((p) => p.prefixed); + * .map((p) => utils.removeNote(p.prefixed)) // normalize '-webkit- old' + * .filter((p) => !p.endsWith('-')); // remove '-webkit-' only + * + * @see https://github.com/stylelint/stylelint/pull/5312/files#r636018013 */ const PROPERTY_VALUES = new Set([ '-moz-available', @@ -240,10 +247,6 @@ const PROPERTY_VALUES = new Set([ '-o-radial-gradient', '-o-repeating-linear-gradient', '-o-repeating-radial-gradient', - '-webkit- oldlinear-gradient', - '-webkit- oldradial-gradient', - '-webkit- oldrepeating-linear-gradient', - '-webkit- oldrepeating-radial-gradient', '-webkit-box', '-webkit-calc', '-webkit-cross-fade', From 783b64ad5318a99e00527d33e0580b6329af5e0e Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Fri, 28 May 2021 21:16:08 +0900 Subject: [PATCH 024/194] Bump jest from v26 to v27 (#5326) https://jestjs.io/blog/2021/05/25/jest-27 --- package-lock.json | 7648 +++++++++++++-------------------------------- package.json | 8 +- 2 files changed, 2191 insertions(+), 5465 deletions(-) diff --git a/package-lock.json b/package-lock.json index 35c7f422a3..dcaa029274 100644 --- a/package-lock.json +++ b/package-lock.json @@ -73,10 +73,9 @@ "eslint-config-stylelint": "^13.1.1", "got": "^11.8.2", "husky": "^6.0.0", - "jest": "^26.6.3", - "jest-circus": "^26.6.3", - "jest-preset-stylelint": "^4.1.0", - "jest-watch-typeahead": "^0.6.3", + "jest": "^27.0.1", + "jest-preset-stylelint": "^4.1.1", + "jest-watch-typeahead": "^0.6.4", "lint-staged": "^10.5.4", "np": "^7.5.0", "npm-run-all": "^4.1.5", @@ -105,166 +104,240 @@ "@babel/highlight": "^7.10.4" } }, + "node_modules/@babel/compat-data": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", + "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", + "dev": true + }, "node_modules/@babel/core": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", - "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.1", - "@babel/parser": "^7.12.3", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", + "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.3", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.2", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.3", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2", "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", + "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", + "semver": "^6.3.0", "source-map": "^0.5.0" }, "engines": { "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/@babel/generator": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", - "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", + "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", "dev": true, "dependencies": { - "@babel/types": "^7.12.5", + "@babel/types": "^7.14.2", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", + "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.15", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^6.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", "dev": true, "dependencies": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.14.2" } }, "node_modules/@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", "dev": true, "dependencies": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.13" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", "dev": true, "dependencies": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.13.12" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", "dev": true, "dependencies": { - "@babel/types": "^7.12.5" + "@babel/types": "^7.13.12" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", + "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", "dev": true, "dependencies": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.13" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true }, "node_modules/@babel/helper-replace-supers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", - "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz", + "integrity": "sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==", "dev": true, "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", "dev": true, "dependencies": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.13.12" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", "dev": true, "dependencies": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.12.13" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "dev": true }, "node_modules/@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", "dev": true, "dependencies": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, "node_modules/@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.14.0", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } @@ -283,9 +356,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz", - "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", + "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -301,6 +374,9 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-bigint": { @@ -310,15 +386,21 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-import-meta": { @@ -328,6 +410,9 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-json-strings": { @@ -337,6 +422,9 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { @@ -346,6 +434,9 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { @@ -355,6 +446,9 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-numeric-separator": { @@ -364,6 +458,9 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-object-rest-spread": { @@ -373,6 +470,9 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { @@ -382,6 +482,9 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-optional-chaining": { @@ -391,53 +494,87 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", + "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/template/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/highlight": "^7.12.13" } }, "node_modules/@babel/traverse": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz", - "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.5", - "@babel/types": "^7.12.5", + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" + "globals": "^11.1.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" } }, "node_modules/@babel/types": { - "version": "7.12.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", - "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", + "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.0", "to-fast-properties": "^2.0.0" } }, @@ -447,22 +584,6 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "dependencies": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, "node_modules/@eslint/eslintrc": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", @@ -533,127 +654,136 @@ } }, "node_modules/@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.1.tgz", + "integrity": "sha512-50E6nN2F5cAXn1lDljn0gE9F0WFXHYz/u0EeR7sOt4nbRPNli34ckbl6CUDaDABJbHt62DYnyQAIB3KgdzwKDw==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.0.1", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", + "jest-message-util": "^27.0.1", + "jest-util": "^27.0.1", "slash": "^3.0.0" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.1.tgz", + "integrity": "sha512-PiCbKSMf6t8PEfY3MAd0Ldn3aJAt5T+UcaFkAfMZ1VZgas35+fXk5uHIjAQHQLNIHZWX19TLv0wWNT03yvrw6w==", "dev": true, "dependencies": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/console": "^27.0.1", + "@jest/reporters": "^27.0.1", + "@jest/test-result": "^27.0.1", + "@jest/transform": "^27.0.1", + "@jest/types": "^27.0.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", + "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", + "jest-changed-files": "^27.0.1", + "jest-config": "^27.0.1", + "jest-haste-map": "^27.0.1", + "jest-message-util": "^27.0.1", + "jest-regex-util": "^27.0.1", + "jest-resolve": "^27.0.1", + "jest-resolve-dependencies": "^27.0.1", + "jest-runner": "^27.0.1", + "jest-runtime": "^27.0.1", + "jest-snapshot": "^27.0.1", + "jest-util": "^27.0.1", + "jest-validate": "^27.0.1", + "jest-watcher": "^27.0.1", + "micromatch": "^4.0.4", "p-each-series": "^2.1.0", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, "node_modules/@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.1.tgz", + "integrity": "sha512-nG+r3uSs2pOTsdhgt6lUm4ZGJLRcTc6HZIkrFsVpPcdSqEpJehEny9r9y2Bmhkn8fKXWdGCYJKF3i4nKO0HSmA==", "dev": true, "dependencies": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/fake-timers": "^27.0.1", + "@jest/types": "^27.0.1", "@types/node": "*", - "jest-mock": "^26.6.2" + "jest-mock": "^27.0.1" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.1.tgz", + "integrity": "sha512-3CyLJQnHzKI4TCJSCo+I9TzIHjSK4RrNEk93jFM6Q9+9WlSJ3mpMq/p2YuKMe0SiHKbmZOd5G/Ll5ofF9Xkw9g==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", + "@jest/types": "^27.0.1", + "@sinonjs/fake-timers": "^7.0.2", "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" + "jest-message-util": "^27.0.1", + "jest-mock": "^27.0.1", + "jest-util": "^27.0.1" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.1.tgz", + "integrity": "sha512-80ZCzgopysKdpp5EOglgjApKxiNDR96PG4PwngB4fTwZ4qqqSKo0EwGwQIhl16szQ1M2xCVYmr9J6KelvnABNQ==", "dev": true, "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" + "@jest/environment": "^27.0.1", + "@jest/types": "^27.0.1", + "expect": "^27.0.1" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.1.tgz", + "integrity": "sha512-lZbJWuS1h/ytKERfu1D6tEQ4PuQ7+15S4+HrSzHR0i7AGVT1WRo49h4fZqxASOp7AQCupUVtPJNZDkaG9ZXy0g==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/console": "^27.0.1", + "@jest/test-result": "^27.0.1", + "@jest/transform": "^27.0.1", + "@jest/types": "^27.0.1", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", @@ -664,11 +794,10 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "node-notifier": "^8.0.0", + "jest-haste-map": "^27.0.1", + "jest-resolve": "^27.0.1", + "jest-util": "^27.0.1", + "jest-worker": "^27.0.1", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", @@ -676,22 +805,21 @@ "v8-to-istanbul": "^7.0.0" }, "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/reporters/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, "node_modules/@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.1.tgz", + "integrity": "sha512-yMgkF0f+6WJtDMdDYNavmqvbHtiSpwRN2U/W+6uztgfqgkq/PXdKPqjBTUF1RD/feth4rH5N3NW0T5+wIuln1A==", "dev": true, "dependencies": { "callsites": "^3.0.0", @@ -699,98 +827,80 @@ "source-map": "^0.6.0" }, "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.1.tgz", + "integrity": "sha512-5aa+ibX2dsGSDLKaQMZb453MqjJU/CRVumebXfaJmuzuGE4qf87yQ2QZ6PEpEtBwVUEgrJCzi3jLCRaUbksSuw==", "dev": true, "dependencies": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/console": "^27.0.1", + "@jest/types": "^27.0.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.1.tgz", + "integrity": "sha512-yK2c2iruJ35WgH4KH8whS72uH+FASJUrzwxzNKTzLAEWmNpWKNEPOsSEKsHynvz78bLHafrTg4adN7RrYNbEOA==", "dev": true, "dependencies": { - "@jest/test-result": "^26.6.2", + "@jest/test-result": "^27.0.1", "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" + "jest-haste-map": "^27.0.1", + "jest-runner": "^27.0.1", + "jest-runtime": "^27.0.1" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.1.tgz", + "integrity": "sha512-LC95VpT6wMnQ96dRJDlUiAnW/90zyh4+jS30szI/5AsfS0qwSlr/O4TPcGoD2WVaVMfo6KvR+brvOtGyMHaNhA==", "dev": true, "dependencies": { "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", + "@jest/types": "^27.0.1", "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", + "jest-haste-map": "^27.0.1", + "jest-regex-util": "^27.0.1", + "jest-util": "^27.0.1", + "micromatch": "^4.0.4", "pirates": "^4.0.1", "slash": "^3.0.0", "source-map": "^0.6.1", "write-file-atomic": "^3.0.0" }, "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/transform/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.1.tgz", + "integrity": "sha512-8A25RRV4twZutsx2D+7WphnDsp7If9Yu6ko0Gxwrwv8BiWESFzka34+Aa2kC8w9xewt7SDuCUSZ6IiAFVj3PRg==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^15.0.0", + "@types/yargs": "^16.0.0", "chalk": "^4.0.0" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@nodelib/fs.scandir": { @@ -856,18 +966,18 @@ } }, "node_modules/@sinonjs/commons": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", - "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.0.tgz", + "integrity": "sha512-hAEzXi6Wbvlb67NnGMGSNOeAflLVnMa4yliPU/ty1qjgW/vAletH15/v/esJwASSIA0YlIyjnloenFbEZc9q9A==", "dev": true, "dependencies": { "@sinonjs/commons": "^1.7.0" @@ -906,10 +1016,19 @@ "node": ">=10" } }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/@types/babel__core": { - "version": "7.1.12", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", - "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==", + "version": "7.1.14", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", + "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -939,9 +1058,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.15.tgz", - "integrity": "sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", + "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", "dev": true, "dependencies": { "@babel/types": "^7.3.0" @@ -1009,9 +1128,9 @@ "dev": true }, "node_modules/@types/graceful-fs": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz", - "integrity": "sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", "dev": true, "dependencies": { "@types/node": "*" @@ -1138,9 +1257,9 @@ } }, "node_modules/@types/prettier": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.5.tgz", - "integrity": "sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", + "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==", "dev": true }, "node_modules/@types/responselike": { @@ -1186,9 +1305,9 @@ } }, "node_modules/@types/yargs": { - "version": "15.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.9.tgz", - "integrity": "sha512-HmU8SeIRhZCWcnRskCs36Q1Q00KBV6Cqh/ora8WN1+22dY07AZdn6Gel8QZ3t26XYPImtcL8WV/eqjhVmMEw4g==", + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -1359,6 +1478,18 @@ "node": ">=0.4.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -1523,33 +1654,6 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -1558,15 +1662,6 @@ "node": ">=8" } }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -1575,33 +1670,6 @@ "node": ">=0.10.0" } }, - "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -1625,50 +1693,26 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, "node_modules/babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.1.tgz", + "integrity": "sha512-aWFD7OGQjk3Y8MdZKf1XePlQvHnjMVJQjIq9WKrlAjz9by703kJ45Jxhp26JwnovoW71YYz5etuqRl8wMcIv0w==", "dev": true, "dependencies": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", + "@jest/transform": "^27.0.1", + "@jest/types": "^27.0.1", + "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", + "babel-preset-jest": "^27.0.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "slash": "^3.0.0" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" } }, "node_modules/babel-plugin-istanbul": { @@ -1688,9 +1732,9 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz", + "integrity": "sha512-sqBF0owAcCDBVEDtxqfYr2F36eSHdx7lAVGyYuOBRnKdD6gzcy0I0XrAYCZgOA3CRrLhmR+Uae9nogPzmAtOfQ==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", @@ -1699,13 +1743,13 @@ "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz", - "integrity": "sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", "dev": true, "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", @@ -1720,19 +1764,25 @@ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz", + "integrity": "sha512-nIBIqCEpuiyhvjQs2mVNwTxQQa2xk70p9Dd/0obQGBf8FBzbnI8QhQKzLsWMN2i6q+5B0OcWDtrboBX5gmOLyA==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^26.6.2", + "babel-plugin-jest-hoist": "^27.0.1", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/bail": { @@ -1746,106 +1796,29 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==" }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "node_modules/benchmark": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", + "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", "dev": true, "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" + "lodash": "^4.17.4", + "platform": "^1.3.3" } }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "node_modules/binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/benchmark": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", - "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", - "dev": true, - "dependencies": { - "lodash": "^4.17.4", - "platform": "^1.3.3" - } - }, - "node_modules/binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.0.tgz", - "integrity": "sha512-5bvsqw+hhgUi3oYGK0Vf4WpIkyemp60WBInn7+WNfoISzAqk/HX4L7WNROq38E6UR/y3YADpv6pEm4BfkeEAdA==", + "node_modules/boxen": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.0.tgz", + "integrity": "sha512-5bvsqw+hhgUi3oYGK0Vf4WpIkyemp60WBInn7+WNfoISzAqk/HX4L7WNROq38E6UR/y3YADpv6pEm4BfkeEAdA==", "dev": true, "dependencies": { "ansi-align": "^3.0.0", @@ -1954,6 +1927,29 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, + "node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, "node_modules/bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", @@ -1975,26 +1971,6 @@ "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", "dev": true }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", @@ -2061,24 +2037,16 @@ "node": ">=8" } }, - "node_modules/capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "node_modules/caniuse-lite": { + "version": "1.0.30001230", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", + "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", "dev": true, - "dependencies": { - "rsvp": "^4.8.4" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, "node_modules/chalk": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", @@ -2207,38 +2175,17 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", + "node_modules/ci-info": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.1.1.tgz", + "integrity": "sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==", "dev": true }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/cjs-module-lexer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz", + "integrity": "sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==", + "dev": true }, "node_modules/clean-stack": { "version": "2.2.0", @@ -2343,14 +2290,64 @@ } }, "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/clone-regexp": { @@ -2404,19 +2401,6 @@ "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", "dev": true }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -2430,6 +2414,12 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "node_modules/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -2460,12 +2450,6 @@ "node": ">=4.0.0" } }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2533,21 +2517,6 @@ "safe-buffer": "~5.1.1" } }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, "node_modules/cosmiconfig": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", @@ -2636,18 +2605,6 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -2713,15 +2670,6 @@ "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", "dev": true }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -2794,57 +2742,6 @@ "node": ">= 0.4" } }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/del": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", @@ -2892,12 +2789,12 @@ } }, "node_modules/diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz", + "integrity": "sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg==", "dev": true, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/dir-glob": { @@ -2971,15 +2868,11 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } + "node_modules/electron-to-chromium": { + "version": "1.3.739", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz", + "integrity": "sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A==", + "dev": true }, "node_modules/elegant-spinner": { "version": "1.0.1", @@ -2991,12 +2884,15 @@ } }, "node_modules/emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", "dev": true, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, "node_modules/emoji-regex": { @@ -3069,6 +2965,15 @@ "node": ">= 0.4" } }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/escape-goat": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz", @@ -3087,13 +2992,13 @@ } }, "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "dev": true, "dependencies": { "esprima": "^4.0.1", - "estraverse": "^4.2.0", + "estraverse": "^5.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1" }, @@ -3102,12 +3007,21 @@ "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=4.0" + "node": ">=6.0" }, "optionalDependencies": { "source-map": "~0.6.1" } }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/escodegen/node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -3147,16 +3061,6 @@ "node": ">= 0.8.0" } }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/escodegen/node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -3518,86 +3422,57 @@ "node": ">=0.10.0" } }, - "node_modules/exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", - "dev": true - }, "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", "dev": true, "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=4.8" - } - }, - "node_modules/execa/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" + "node": ">=10" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/execa/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/execa/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "node_modules/execa/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=10.17.0" } }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "node_modules/execa/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/execall": { @@ -3620,141 +3495,41 @@ "node": ">= 0.8.0" } }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, "node_modules/expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.1.tgz", + "integrity": "sha512-hjKwLeAvKUiq0Plha1dmzOH1FGEwJC9njbT993cq4PK9r58/+3NM+WDqFVGcPuRH7XTjmbIeHQBzp2faDrPhjQ==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" + "@jest/types": "^27.0.1", + "ansi-styles": "^5.0.0", + "jest-get-type": "^27.0.1", + "jest-matcher-utils": "^27.0.1", + "jest-message-util": "^27.0.1", + "jest-regex-util": "^27.0.1" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/expect/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - } - }, - "node_modules/expect/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" + "node": ">=10" }, - "engines": { - "node": ">=7.0.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/expect/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -3769,96 +3544,6 @@ "node": ">=4" } }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3992,36 +3677,18 @@ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==" }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "dependencies": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" }, "engines": { - "node": ">= 0.12" + "node": ">= 6" } }, "node_modules/format": { @@ -4033,28 +3700,17 @@ "node": ">=0.4.x" } }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "node_modules/fsevents": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", - "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -4138,24 +3794,6 @@ "node": ">=8" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, "node_modules/git-hooks-list": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-1.0.3.tgz", @@ -4325,34 +3963,6 @@ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", "dev": true }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", @@ -4410,93 +4020,24 @@ "node": ">= 0.4" } }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, + "node_modules/hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" + "node": ">=10" } }, "node_modules/html-encoding-sniffer": { @@ -4531,19 +4072,18 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" + "node": ">= 6" } }, "node_modules/http2-wrapper": { @@ -4568,6 +4108,19 @@ "node": ">=10" } }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/human-signals": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", @@ -4913,45 +4466,6 @@ "node": ">=6" } }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", @@ -5003,42 +4517,27 @@ "node": ">= 0.4" } }, - "node_modules/is-core-module": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", - "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "node_modules/is-ci": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", + "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "ci-info": "^3.1.1" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "is-ci": "bin.js" } }, - "node_modules/is-data-descriptor/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, + "node_modules/is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", "dependencies": { - "is-buffer": "^1.1.5" + "has": "^1.0.3" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-date-object": { @@ -5056,29 +4555,6 @@ "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", "dev": true }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-docker": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", @@ -5097,15 +4573,6 @@ "integrity": "sha1-3pu1snhzigWgsJpX4ftNSjQan2s=", "dev": true }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -5253,22 +4720,10 @@ "node": ">=8" } }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-potential-custom-element-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", - "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, "node_modules/is-promise": { @@ -5355,15 +4810,6 @@ "node": ">=10" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -5382,32 +4828,11 @@ "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", "dev": true }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, "node_modules/issue-regex": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/issue-regex/-/issue-regex-3.1.0.tgz", @@ -5499,15 +4924,6 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/istanbul-reports": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", @@ -5522,107 +4938,72 @@ } }, "node_modules/jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.1.tgz", + "integrity": "sha512-lFEoUdXjbGAIxk/gZhcv98xOaH1hjqG5R/PQHs5GBfIK5iL3tnXCjHQf4HQLVZZ2rcXML3oeVg9+XrRZbooBdQ==", "dev": true, "dependencies": { - "@jest/core": "^26.6.3", + "@jest/core": "^27.0.1", "import-local": "^3.0.2", - "jest-cli": "^26.6.3" + "jest-cli": "^27.0.1" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-changed-files/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0" }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-changed-files/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "engines": { - "node": ">=8" + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/jest-changed-files/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/jest-changed-files": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.1.tgz", + "integrity": "sha512-Y/4AnqYNcUX/vVgfkmvSA3t7rcg+t8m3CsSGlU+ra8kjlVW5ZqXcBZY/NUew2Mo8M+dn0ApKl+FmGGT1JV5dVA==", "dev": true, "dependencies": { - "path-key": "^3.0.0" + "@jest/types": "^27.0.1", + "execa": "^5.0.0", + "throat": "^6.0.1" }, "engines": { - "node": ">=8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-circus": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-26.6.3.tgz", - "integrity": "sha512-ACrpWZGcQMpbv13XbzRzpytEJlilP/Su0JtNCi5r/xLpOUhnaIJr8leYYpLEMgPFURZISEHrnnpmB54Q/UziPw==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.1.tgz", + "integrity": "sha512-Tz3ytmrsgxWlTwSyPYb8StF9J2IMjLlbBMKAjhL2UU9/0ZpYb2JiEGjXaAhnGauQRbbpyFbSH3yj5HIbdurmwQ==", "dev": true, "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", + "@jest/environment": "^27.0.1", + "@jest/test-result": "^27.0.1", + "@jest/types": "^27.0.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^26.6.2", + "expect": "^27.0.1", "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "stack-utils": "^2.0.2", - "throat": "^5.0.0" + "jest-each": "^27.0.1", + "jest-matcher-utils": "^27.0.1", + "jest-message-util": "^27.0.1", + "jest-runner": "^27.0.1", + "jest-runtime": "^27.0.1", + "jest-snapshot": "^27.0.1", + "jest-util": "^27.0.1", + "pretty-format": "^27.0.1", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-circus/node_modules/co": { @@ -5635,176 +5016,219 @@ "node": ">= 0.12.0" } }, + "node_modules/jest-cli": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.1.tgz", + "integrity": "sha512-plDsQQwpkKK1SZ5L5xqMa7v/sTwB5LTIeSJqb+cV+4EMlThdUQfg8jwMfHX8jHuUc9TPGLcdoZeBuZcGGn3Rlg==", + "dev": true, + "dependencies": { + "@jest/core": "^27.0.1", + "@jest/test-result": "^27.0.1", + "@jest/types": "^27.0.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "jest-config": "^27.0.1", + "jest-util": "^27.0.1", + "jest-validate": "^27.0.1", + "prompts": "^2.0.1", + "yargs": "^16.0.3" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, "node_modules/jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.1.tgz", + "integrity": "sha512-V8O6+CZjGF0OMq4kxVR29ztV/LQqlAAcJLw7a94RndfRXkha4U84n50yZCXiPWtAHHTmb3g1y52US6rGPxA+3w==", "dev": true, "dependencies": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", + "@jest/test-sequencer": "^27.0.1", + "@jest/types": "^27.0.1", + "babel-jest": "^27.0.1", "chalk": "^4.0.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" + "is-ci": "^3.0.0", + "jest-circus": "^27.0.1", + "jest-environment-jsdom": "^27.0.1", + "jest-environment-node": "^27.0.1", + "jest-get-type": "^27.0.1", + "jest-jasmine2": "^27.0.1", + "jest-regex-util": "^27.0.1", + "jest-resolve": "^27.0.1", + "jest-util": "^27.0.1", + "jest-validate": "^27.0.1", + "micromatch": "^4.0.4", + "pretty-format": "^27.0.1" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } } }, "node_modules/jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.1.tgz", + "integrity": "sha512-DQ3OgfJgoGWVTYo4qnYW/Jg5mpYFS2QW9BLxA8bs12ZRN1K8QPZtWeYvUPohQFs3CHX3JLTndGg3jyxdL5THFQ==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "diff-sequences": "^27.0.1", + "jest-get-type": "^27.0.1", + "pretty-format": "^27.0.1" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.1.tgz", + "integrity": "sha512-TA4+21s3oebURc7VgFV4r7ltdIJ5rtBH1E3Tbovcg7AV+oLfD5DcJ2V2vJ5zFA9sL5CFd/d2D6IpsAeSheEdrA==", "dev": true, "dependencies": { "detect-newline": "^3.0.0" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.1.tgz", + "integrity": "sha512-uJTK/aZ05HsdKkfXucAT5+/1DIURnTRv34OSxn1HWHrD+xu9eDX5Xgds09QSvg/mU01VS5upuHTDKG3W+r0rQA==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.0.1", "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" + "jest-get-type": "^27.0.1", + "jest-util": "^27.0.1", + "pretty-format": "^27.0.1" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.1.tgz", + "integrity": "sha512-lesU8T9zkjgLaLpUFmFDgchu6/2OCoXm52nN6UumR063Hb+1TJdI7ihgM86+G01Ay86Lyr+K/FAR6yIIOviH3Q==", "dev": true, "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/environment": "^27.0.1", + "@jest/fake-timers": "^27.0.1", + "@jest/types": "^27.0.1", "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" + "jest-mock": "^27.0.1", + "jest-util": "^27.0.1", + "jsdom": "^16.6.0" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.1.tgz", + "integrity": "sha512-/p94lo0hx+hbKUw1opnRFUPPsjncRBEUU+2Dh7BuxX8Nr4rRiTivLYgXzo79FhaeMYV0uiV5WAbHBq6xC11JJg==", "dev": true, "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/environment": "^27.0.1", + "@jest/fake-timers": "^27.0.1", + "@jest/types": "^27.0.1", "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" + "jest-mock": "^27.0.1", + "jest-util": "^27.0.1" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", + "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", "dev": true, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.1.tgz", + "integrity": "sha512-ioCuobr4z90H1Pz8+apz2vfz63387apzAoawm/9IIOndarDfRkjLURdLOe//AI5jUQmjVRg+WiL92339kqlCmA==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.0.1", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", + "jest-regex-util": "^27.0.1", + "jest-serializer": "^27.0.1", + "jest-util": "^27.0.1", + "jest-worker": "^27.0.1", + "micromatch": "^4.0.4", "walker": "^1.0.7" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "optionalDependencies": { - "fsevents": "^2.1.2" + "fsevents": "^2.3.2" } }, "node_modules/jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.1.tgz", + "integrity": "sha512-o8Ist0o970QDDm/R2o9UDbvNxq8A0++FTFQ0z9OnieJwS1nDH6H7WBDYAGPTdmnla7kbW41oLFPvhmjJE4mekg==", "dev": true, "dependencies": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/environment": "^27.0.1", + "@jest/source-map": "^27.0.1", + "@jest/test-result": "^27.0.1", + "@jest/types": "^27.0.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^26.6.2", + "expect": "^27.0.1", "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" + "jest-each": "^27.0.1", + "jest-matcher-utils": "^27.0.1", + "jest-message-util": "^27.0.1", + "jest-runtime": "^27.0.1", + "jest-snapshot": "^27.0.1", + "jest-util": "^27.0.1", + "pretty-format": "^27.0.1", + "throat": "^6.0.1" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-jasmine2/node_modules/co": { @@ -5818,64 +5242,73 @@ } }, "node_modules/jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.1.tgz", + "integrity": "sha512-SQ/lRhfmnV3UuiaKIjwNXCaW2yh1rTMAL4n4Cl4I4gU0X2LoIc6Ogxe4UKM/J6Ld2uzc4gDGVYc5lSdpf6WjYw==", "dev": true, "dependencies": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "jest-get-type": "^27.0.1", + "pretty-format": "^27.0.1" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.1.tgz", + "integrity": "sha512-NauNU+olKhPzLlsRnTOYFGk/MK5QFYl9ZzkrtfsY4eCq4SB3Bcl03UL44VdnlN5S/uFn4H2jwvRY1y6nSDTX3g==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "jest-diff": "^27.0.1", + "jest-get-type": "^27.0.1", + "pretty-format": "^27.0.1" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.1.tgz", + "integrity": "sha512-w8BfON2GwWORkos8BsxcwwQrLkV2s1ENxSRXK43+6yuquDE2hVxES/jrFqOArpP1ETVqqMmktU6iGkG8ncVzeA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.0.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", + "micromatch": "^4.0.4", + "pretty-format": "^27.0.1", "slash": "^3.0.0", - "stack-utils": "^2.0.2" + "stack-utils": "^2.0.3" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" } }, "node_modules/jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.1.tgz", + "integrity": "sha512-fXCSZQDT5hUcAUy8OBnB018x7JFOMQnz4XfpSKEbfpWzL6o5qaLRhgf2Qg2NPuVKmC/fgOf33Edj8wjF4I24CQ==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.0.1", "@types/node": "*" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-pnp-resolver": { @@ -5885,179 +5318,195 @@ "dev": true, "engines": { "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, "node_modules/jest-preset-stylelint": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/jest-preset-stylelint/-/jest-preset-stylelint-4.1.0.tgz", - "integrity": "sha512-HibeWaRTmWagAQ6wHbefHqnP2NAb7MAhVVt45iwiTP8fXIuc6ikfhrzOoGWh6FegPLJBXPwuNYOM1ZYANX75yQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jest-preset-stylelint/-/jest-preset-stylelint-4.1.1.tgz", + "integrity": "sha512-6dNUU+lYcW3/zvLF3v+vHCw2qJvmg/yd8j9u8ZmPdtfp/dESaeG/vDaWbbtyRybZcbkzlvCLDstVWH6i7PkeAg==", "dev": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "peerDependencies": { - "jest": "^25.3.0 || ^26.0.1" + "jest": "^25.3.0 || ^26.0.1 || ^27.0.1" } }, "node_modules/jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.1.tgz", + "integrity": "sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ==", "dev": true, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.1.tgz", + "integrity": "sha512-Q7QQ0OZ7z6D5Dul0MrsexlKalU8ZwexBfHLSu1qYPgphvUm6WO1b/xUnipU3e+uW1riDzMcJeJVYbdQ37hBHeg==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.0.1", "chalk": "^4.0.0", + "escalade": "^3.1.1", "graceful-fs": "^4.2.4", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", + "jest-util": "^27.0.1", + "resolve": "^1.20.0", "slash": "^3.0.0" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.1.tgz", + "integrity": "sha512-ly1x5mEf21f3IVWbUNwIz/ePLtv4QdhYuQIVSVDqxx7yzAwhhdu0DJo7UNiEYKQY7Im48wfbNdOUpo7euFUXBQ==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" + "@jest/types": "^27.0.1", + "jest-regex-util": "^27.0.1", + "jest-snapshot": "^27.0.1" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.1.tgz", + "integrity": "sha512-DUNizlD2D7J80G3VOrwfbtb7KYxiftMng82HNcKwTW0W3AwwNuBeq+1exoCnLO7Mxh7NP+k/1XQBlzLpjr/CnA==", "dev": true, "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/console": "^27.0.1", + "@jest/environment": "^27.0.1", + "@jest/test-result": "^27.0.1", + "@jest/transform": "^27.0.1", + "@jest/types": "^27.0.1", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.7.1", + "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", + "jest-config": "^27.0.1", + "jest-docblock": "^27.0.1", + "jest-haste-map": "^27.0.1", + "jest-leak-detector": "^27.0.1", + "jest-message-util": "^27.0.1", + "jest-resolve": "^27.0.1", + "jest-runtime": "^27.0.1", + "jest-util": "^27.0.1", + "jest-worker": "^27.0.1", "source-map-support": "^0.5.6", - "throat": "^5.0.0" + "throat": "^6.0.1" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.1.tgz", + "integrity": "sha512-ImcrbQtpCUp8X9Rm4ky3j1GG9cqIKZJvXGZyB5cHEapGPTmg7wvvNooLmKragEe61/p/bhw1qO68Y0/9BSsBBg==", + "dev": true, + "dependencies": { + "@jest/console": "^27.0.1", + "@jest/environment": "^27.0.1", + "@jest/fake-timers": "^27.0.1", + "@jest/globals": "^27.0.1", + "@jest/source-map": "^27.0.1", + "@jest/test-result": "^27.0.1", + "@jest/transform": "^27.0.1", + "@jest/types": "^27.0.1", + "@types/yargs": "^16.0.0", "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", + "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", + "jest-haste-map": "^27.0.1", + "jest-message-util": "^27.0.1", + "jest-mock": "^27.0.1", + "jest-regex-util": "^27.0.1", + "jest-resolve": "^27.0.1", + "jest-snapshot": "^27.0.1", + "jest-util": "^27.0.1", + "jest-validate": "^27.0.1", "slash": "^3.0.0", "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" + "yargs": "^16.0.3" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.1.tgz", + "integrity": "sha512-svy//5IH6bfQvAbkAEg1s7xhhgHTtXu0li0I2fdKHDsLP2P2MOiscPQIENQep8oU2g2B3jqLyxKKzotZOz4CwQ==", "dev": true, "dependencies": { "@types/node": "*", "graceful-fs": "^4.2.4" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.1.tgz", + "integrity": "sha512-HgKmSebDB3rswugREeh+nKrxJEVZE12K7lZ2MuwfFZT6YmiH0TlofsL2YmiLsCsG5KH5ZcLYYpF5bDrvtVx/Xg==", "dev": true, "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/parser": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", + "@jest/transform": "^27.0.1", + "@jest/types": "^27.0.1", "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^26.6.2", + "expect": "^27.0.1", "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", + "jest-diff": "^27.0.1", + "jest-get-type": "^27.0.1", + "jest-haste-map": "^27.0.1", + "jest-matcher-utils": "^27.0.1", + "jest-message-util": "^27.0.1", + "jest-resolve": "^27.0.1", + "jest-util": "^27.0.1", "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", + "pretty-format": "^27.0.1", "semver": "^7.3.2" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" }, @@ -6066,55 +5515,37 @@ } }, "node_modules/jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.1.tgz", + "integrity": "sha512-lEw3waSmEOO4ZkwkUlFSvg4es1+8+LIkSGxp/kF60K0+vMR3Dv3O2HMZhcln9NHqSQzpVbsDT6OeMzUPW7DfRg==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.0.1", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" + "is-ci": "^3.0.0", + "picomatch": "^2.2.3" }, "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-util/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/jest-util/node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.1.tgz", + "integrity": "sha512-zvmPRcfTkqTZuHveIKAI2nbkUc3SDXjWVJULknPLGF5bdxOGSeGZg7f/Uw0MUVOkCOaspcHnsPCgZG0pqmg71g==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", + "@jest/types": "^27.0.1", + "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", + "jest-get-type": "^27.0.1", "leven": "^3.1.0", - "pretty-format": "^26.6.2" + "pretty-format": "^27.0.1" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-validate/node_modules/camelcase": { @@ -6124,18 +5555,21 @@ "dev": true, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/jest-watch-typeahead": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.6.3.tgz", - "integrity": "sha512-rM+2m2U/7o4VeXxA3rcEWbbKq8K/aGjAwCgmqsthPV1AqLb5NNACzS+tDCD11bdQ8MrN+H3uN61Y9qFiJgtZPw==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.6.4.tgz", + "integrity": "sha512-tGxriteVJqonyrDj/xZHa0E2glKMiglMLQqISLCjxLUfeueRBh9VoRF2FKQyYO2xOqrWDTg7781zUejx411ZXA==", "dev": true, "dependencies": { "ansi-escapes": "^4.3.1", "chalk": "^4.0.0", - "jest-regex-util": "^26.0.0", - "jest-watcher": "^26.3.0", + "jest-regex-util": "^27.0.0", + "jest-watcher": "^27.0.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0" @@ -6144,39 +5578,39 @@ "node": ">=10" }, "peerDependencies": { - "jest": "^26.0.0" + "jest": "^26.0.0 || ^27.0.0" } }, "node_modules/jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.1.tgz", + "integrity": "sha512-Chp9c02BN0IgEbtGreyAhGqIsOrn9a0XnzbuXOxdW1+cW0Tjh12hMzHDIdLFHpYP/TqaMTmPHaJ5KWvpCCrNFw==", "dev": true, "dependencies": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/test-result": "^27.0.1", + "@jest/types": "^27.0.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^26.6.2", + "jest-util": "^27.0.1", "string-length": "^4.0.1" }, "engines": { - "node": ">= 10.14.2" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.1.tgz", + "integrity": "sha512-NhHqClI3owOjmS8dBhQMKHZ2rrT0sBTpqGitp9nMX5AAjVXd+15o4v96uBEMhoywaLKN+5opcKBlXwAoADZolA==", "dev": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "supports-color": "^8.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-worker/node_modules/has-flag": { @@ -6189,60 +5623,18 @@ } }, "node_modules/jest-worker/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==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/jest/node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/jest/node_modules/jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "dev": true, - "dependencies": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - }, - "bin": { - "jest": "bin/jest.js" + "node": ">=10" }, - "engines": { - "node": ">= 10.14.2" + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/js-tokens": { @@ -6263,47 +5655,62 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, "node_modules/jsdom": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", - "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", + "version": "16.6.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", + "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", "dev": true, "dependencies": { - "abab": "^2.0.3", - "acorn": "^7.1.1", + "abab": "^2.0.5", + "acorn": "^8.2.4", "acorn-globals": "^6.0.0", "cssom": "^0.4.4", - "cssstyle": "^2.2.0", + "cssstyle": "^2.3.0", "data-urls": "^2.0.0", - "decimal.js": "^10.2.0", + "decimal.js": "^10.2.1", "domexception": "^2.0.1", - "escodegen": "^1.14.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", "html-encoding-sniffer": "^2.0.1", - "is-potential-custom-element-name": "^1.0.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", "nwsapi": "^2.2.0", - "parse5": "5.1.1", - "request": "^2.88.2", - "request-promise-native": "^1.0.8", - "saxes": "^5.0.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", "symbol-tree": "^3.2.4", - "tough-cookie": "^3.0.1", + "tough-cookie": "^4.0.0", "w3c-hr-time": "^1.0.2", "w3c-xmlserializer": "^2.0.0", "webidl-conversions": "^6.1.0", "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0", - "ws": "^7.2.3", + "whatwg-url": "^8.5.0", + "ws": "^7.4.5", "xml-name-validator": "^3.0.0" }, "engines": { "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/acorn": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", + "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, "node_modules/jsesc": { @@ -6335,12 +5742,6 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "node_modules/json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -6353,12 +5754,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, "node_modules/json5": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", @@ -6374,21 +5769,6 @@ "node": ">=6" } }, - "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, "node_modules/keyv": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", @@ -6586,18 +5966,6 @@ "node": ">=8" } }, - "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/listr": { "version": "0.14.3", "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", @@ -7171,12 +6539,6 @@ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", "dev": true }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -7289,15 +6651,6 @@ "node": ">=6" } }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/map-obj": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", @@ -7306,18 +6659,6 @@ "node": ">=8" } }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/markdown-extensions": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz", @@ -7500,21 +6841,21 @@ } }, "node_modules/mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", "dev": true, "dependencies": { - "mime-db": "1.44.0" + "mime-db": "1.47.0" }, "engines": { "node": ">= 0.6" @@ -7584,31 +6925,6 @@ "node": ">=0.10.0" } }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -7620,28 +6936,6 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -7690,49 +6984,11 @@ "node": ">=0.10.0" } }, - "node_modules/node-notifier": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz", - "integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==", - "dev": true, - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - } - }, - "node_modules/node-notifier/node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-notifier/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } + "node_modules/node-releases": { + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "dev": true }, "node_modules/normalize-package-data": { "version": "3.0.0", @@ -7853,26 +7109,6 @@ "node": ">=10" } }, - "node_modules/np/node_modules/execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/np/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -7886,33 +7122,6 @@ "node": ">=10" } }, - "node_modules/np/node_modules/get-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/np/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/np/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/np/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -7947,18 +7156,6 @@ "node": ">=10" } }, - "node_modules/np/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/np/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -8250,24 +7447,15 @@ } }, "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "dependencies": { - "path-key": "^2.0.0" + "path-key": "^3.0.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/number-is-nan": { @@ -8285,15 +7473,6 @@ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -8303,50 +7482,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", @@ -8362,18 +7497,6 @@ "node": ">= 0.4" } }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", @@ -8389,18 +7512,6 @@ "node": ">= 0.4" } }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -8514,12 +7625,15 @@ } }, "node_modules/p-each-series": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.1.0.tgz", - "integrity": "sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-event": { @@ -8855,20 +7969,11 @@ } }, "node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -8907,12 +8012,6 @@ "node": ">=8" } }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, "node_modules/picomatch": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", @@ -8993,15 +8092,6 @@ "node": ">=4" } }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/postcss": { "version": "7.0.35", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", @@ -9132,14 +8222,6 @@ "node": ">=4" } }, - "node_modules/postcss/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/postcss/node_modules/supports-color": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", @@ -9191,50 +8273,32 @@ } }, "node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.1.tgz", + "integrity": "sha512-qE+0J6c/gd+R6XTcQgPJMc5hMJNsxzSF5p8iZSbMZ7GQzYGlSLNkh2P80Wa2dbF4gEVUsJEgcrBY+1L2/j265w==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.0.1", "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", + "ansi-styles": "^5.0.0", "react-is": "^17.0.1" }, "engines": { - "node": ">= 10" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-format/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" + "node": ">=10" }, - "engines": { - "node": ">=7.0.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/pretty-format/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -9245,9 +8309,9 @@ } }, "node_modules/prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", + "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", "dev": true, "dependencies": { "kleur": "^3.0.3", @@ -9311,15 +8375,6 @@ "node": ">=8" } }, - "node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/quick-lru": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", @@ -9473,19 +8528,6 @@ "node": ">=8" } }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/regexpp": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", @@ -9899,21 +8941,6 @@ "xtend": "^4.0.0" } }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "node_modules/repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", @@ -9932,98 +8959,6 @@ "node": ">= 0.10" } }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.19" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "dev": true, - "dependencies": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/request-promise-native/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/request/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -10041,19 +8976,16 @@ "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, "node_modules/resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dependencies": { - "is-core-module": "^2.1.0", + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-alpn": { @@ -10082,12 +9014,6 @@ "node": ">=8" } }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, "node_modules/responselike": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", @@ -10110,15 +9036,6 @@ "node": ">=8" } }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -10139,15 +9056,6 @@ "rimraf": "bin.js" } }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true, - "engines": { - "node": "6.* || >= 7.*" - } - }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -10180,193 +9088,12 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "node_modules/sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "dependencies": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "bin": { - "sane": "src/cli.js" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/sane/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/sane/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/sane/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", @@ -10423,39 +9150,6 @@ "semver": "bin/semver.js" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -10483,12 +9177,6 @@ "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", "dev": true }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true - }, "node_modules/signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -10545,165 +9233,13 @@ }, "node_modules/slice-ansi/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/sliced": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=", - "dev": true - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "node_modules/sliced": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=", "dev": true }, "node_modules/sort-object-keys": { @@ -10749,27 +9285,13 @@ } }, "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { "node": ">=0.10.0" } }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "node_modules/source-map-support": { "version": "0.5.19", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", @@ -10780,21 +9302,6 @@ "source-map": "^0.6.0" } }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, "node_modules/spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -10843,44 +9350,12 @@ "node": "*" } }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", @@ -10902,40 +9377,6 @@ "node": ">=8" } }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -11108,15 +9549,6 @@ "node": ">=8" } }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -11299,9 +9731,9 @@ "dev": true }, "node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, "node_modules/through": { @@ -11337,36 +9769,6 @@ "node": ">=4" } }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/to-readable-stream": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-2.1.0.tgz", @@ -11376,21 +9778,6 @@ "node": ">=8" } }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -11413,23 +9800,23 @@ } }, "node_modules/tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", "dev": true, "dependencies": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" }, "engines": { "node": ">=6" } }, "node_modules/tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "dependencies": { "punycode": "^2.1.1" @@ -11473,24 +9860,6 @@ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -11693,21 +10062,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -11785,52 +10139,13 @@ "unist-util-is": "^4.0.0" } }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 4.0.0" } }, "node_modules/update-notifier": { @@ -11942,12 +10257,6 @@ "punycode": "^2.1.0" } }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, "node_modules/url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", @@ -11960,38 +10269,20 @@ "node": ">=4" } }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "node_modules/uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, "node_modules/v8-to-istanbul": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz", - "integrity": "sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", + "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.1", @@ -12038,20 +10329,6 @@ "builtins": "^1.0.3" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "node_modules/vfile": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", @@ -12178,12 +10455,12 @@ "dev": true }, "node_modules/whatwg-url": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", - "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.5.0.tgz", + "integrity": "sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg==", "dev": true, "dependencies": { - "lodash.sortby": "^4.7.0", + "lodash": "^4.7.0", "tr46": "^2.0.2", "webidl-conversions": "^6.1.0" }, @@ -12202,12 +10479,6 @@ "which": "bin/which" } }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, "node_modules/widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", @@ -12300,12 +10571,24 @@ } }, "node_modules/ws": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", - "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "dev": true, "engines": { "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/xdg-basedir": { @@ -12339,10 +10622,13 @@ } }, "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } }, "node_modules/yallist": { "version": "4.0.0", @@ -12358,25 +10644,21 @@ } }, "node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/yargs-parser": { @@ -12387,19 +10669,6 @@ "node": ">=10" } }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -12425,163 +10694,224 @@ "@babel/highlight": "^7.10.4" } }, + "@babel/compat-data": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", + "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", + "dev": true + }, "@babel/core": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", - "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.1", - "@babel/parser": "^7.12.3", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", + "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.3", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.2", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.3", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2", "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", + "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", + "semver": "^6.3.0", "source-map": "^0.5.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, "@babel/generator": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", - "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", + "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", "dev": true, "requires": { - "@babel/types": "^7.12.5", + "@babel/types": "^7.14.2", "jsesc": "^2.5.1", "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", + "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.15", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.14.2" } }, "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.13" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.13.12" } }, "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", "dev": true, "requires": { - "@babel/types": "^7.12.5" + "@babel/types": "^7.13.12" } }, "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", + "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" } }, "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.13" } }, "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true }, "@babel/helper-replace-supers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", - "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz", + "integrity": "sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" } }, "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.13.12" } }, "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", "dev": true, "requires": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.12.13" } }, "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" + }, + "@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "dev": true }, "@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", "dev": true, "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.14.0", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -12599,9 +10929,9 @@ } }, "@babel/parser": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz", - "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", + "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -12623,12 +10953,12 @@ } }, "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-syntax-import-meta": { @@ -12704,50 +11034,79 @@ } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", + "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + } } }, "@babel/traverse": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz", - "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.5", - "@babel/types": "^7.12.5", + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + } } }, "@babel/types": { - "version": "7.12.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", - "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", + "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.0", "to-fast-properties": "^2.0.0" } }, @@ -12757,16 +11116,6 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, "@eslint/eslintrc": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", @@ -12821,55 +11170,56 @@ } }, "@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, "@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.1.tgz", + "integrity": "sha512-50E6nN2F5cAXn1lDljn0gE9F0WFXHYz/u0EeR7sOt4nbRPNli34ckbl6CUDaDABJbHt62DYnyQAIB3KgdzwKDw==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.0.1", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", + "jest-message-util": "^27.0.1", + "jest-util": "^27.0.1", "slash": "^3.0.0" } }, "@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.1.tgz", + "integrity": "sha512-PiCbKSMf6t8PEfY3MAd0Ldn3aJAt5T+UcaFkAfMZ1VZgas35+fXk5uHIjAQHQLNIHZWX19TLv0wWNT03yvrw6w==", "dev": true, "requires": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/console": "^27.0.1", + "@jest/reporters": "^27.0.1", + "@jest/test-result": "^27.0.1", + "@jest/transform": "^27.0.1", + "@jest/types": "^27.0.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", + "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", + "jest-changed-files": "^27.0.1", + "jest-config": "^27.0.1", + "jest-haste-map": "^27.0.1", + "jest-message-util": "^27.0.1", + "jest-regex-util": "^27.0.1", + "jest-resolve": "^27.0.1", + "jest-resolve-dependencies": "^27.0.1", + "jest-runner": "^27.0.1", + "jest-runtime": "^27.0.1", + "jest-snapshot": "^27.0.1", + "jest-util": "^27.0.1", + "jest-validate": "^27.0.1", + "jest-watcher": "^27.0.1", + "micromatch": "^4.0.4", "p-each-series": "^2.1.0", "rimraf": "^3.0.0", "slash": "^3.0.0", @@ -12877,53 +11227,53 @@ } }, "@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.1.tgz", + "integrity": "sha512-nG+r3uSs2pOTsdhgt6lUm4ZGJLRcTc6HZIkrFsVpPcdSqEpJehEny9r9y2Bmhkn8fKXWdGCYJKF3i4nKO0HSmA==", "dev": true, "requires": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/fake-timers": "^27.0.1", + "@jest/types": "^27.0.1", "@types/node": "*", - "jest-mock": "^26.6.2" + "jest-mock": "^27.0.1" } }, "@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.1.tgz", + "integrity": "sha512-3CyLJQnHzKI4TCJSCo+I9TzIHjSK4RrNEk93jFM6Q9+9WlSJ3mpMq/p2YuKMe0SiHKbmZOd5G/Ll5ofF9Xkw9g==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", + "@jest/types": "^27.0.1", + "@sinonjs/fake-timers": "^7.0.2", "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" + "jest-message-util": "^27.0.1", + "jest-mock": "^27.0.1", + "jest-util": "^27.0.1" } }, "@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.1.tgz", + "integrity": "sha512-80ZCzgopysKdpp5EOglgjApKxiNDR96PG4PwngB4fTwZ4qqqSKo0EwGwQIhl16szQ1M2xCVYmr9J6KelvnABNQ==", "dev": true, "requires": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" + "@jest/environment": "^27.0.1", + "@jest/types": "^27.0.1", + "expect": "^27.0.1" } }, "@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.1.tgz", + "integrity": "sha512-lZbJWuS1h/ytKERfu1D6tEQ4PuQ7+15S4+HrSzHR0i7AGVT1WRo49h4fZqxASOp7AQCupUVtPJNZDkaG9ZXy0g==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/console": "^27.0.1", + "@jest/test-result": "^27.0.1", + "@jest/transform": "^27.0.1", + "@jest/types": "^27.0.1", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", @@ -12934,111 +11284,86 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "node-notifier": "^8.0.0", + "jest-haste-map": "^27.0.1", + "jest-resolve": "^27.0.1", + "jest-util": "^27.0.1", + "jest-worker": "^27.0.1", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", "terminal-link": "^2.0.0", "v8-to-istanbul": "^7.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.1.tgz", + "integrity": "sha512-yMgkF0f+6WJtDMdDYNavmqvbHtiSpwRN2U/W+6uztgfqgkq/PXdKPqjBTUF1RD/feth4rH5N3NW0T5+wIuln1A==", "dev": true, "requires": { "callsites": "^3.0.0", "graceful-fs": "^4.2.4", "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.1.tgz", + "integrity": "sha512-5aa+ibX2dsGSDLKaQMZb453MqjJU/CRVumebXfaJmuzuGE4qf87yQ2QZ6PEpEtBwVUEgrJCzi3jLCRaUbksSuw==", "dev": true, "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/console": "^27.0.1", + "@jest/types": "^27.0.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.1.tgz", + "integrity": "sha512-yK2c2iruJ35WgH4KH8whS72uH+FASJUrzwxzNKTzLAEWmNpWKNEPOsSEKsHynvz78bLHafrTg4adN7RrYNbEOA==", "dev": true, "requires": { - "@jest/test-result": "^26.6.2", + "@jest/test-result": "^27.0.1", "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" + "jest-haste-map": "^27.0.1", + "jest-runner": "^27.0.1", + "jest-runtime": "^27.0.1" } }, "@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.1.tgz", + "integrity": "sha512-LC95VpT6wMnQ96dRJDlUiAnW/90zyh4+jS30szI/5AsfS0qwSlr/O4TPcGoD2WVaVMfo6KvR+brvOtGyMHaNhA==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", + "@jest/types": "^27.0.1", "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", + "jest-haste-map": "^27.0.1", + "jest-regex-util": "^27.0.1", + "jest-util": "^27.0.1", + "micromatch": "^4.0.4", "pirates": "^4.0.1", "slash": "^3.0.0", "source-map": "^0.6.1", "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.1.tgz", + "integrity": "sha512-8A25RRV4twZutsx2D+7WphnDsp7If9Yu6ko0Gxwrwv8BiWESFzka34+Aa2kC8w9xewt7SDuCUSZ6IiAFVj3PRg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^15.0.0", + "@types/yargs": "^16.0.0", "chalk": "^4.0.0" } }, @@ -13089,18 +11414,18 @@ "dev": true }, "@sinonjs/commons": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", - "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, "requires": { "type-detect": "4.0.8" } }, "@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.0.tgz", + "integrity": "sha512-hAEzXi6Wbvlb67NnGMGSNOeAflLVnMa4yliPU/ty1qjgW/vAletH15/v/esJwASSIA0YlIyjnloenFbEZc9q9A==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0" @@ -13136,10 +11461,16 @@ "defer-to-connect": "^2.0.0" } }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, "@types/babel__core": { - "version": "7.1.12", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", - "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==", + "version": "7.1.14", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", + "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -13169,9 +11500,9 @@ } }, "@types/babel__traverse": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.15.tgz", - "integrity": "sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", + "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", "dev": true, "requires": { "@babel/types": "^7.3.0" @@ -13239,9 +11570,9 @@ "dev": true }, "@types/graceful-fs": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz", - "integrity": "sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", "dev": true, "requires": { "@types/node": "*" @@ -13368,9 +11699,9 @@ } }, "@types/prettier": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.5.tgz", - "integrity": "sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", + "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==", "dev": true }, "@types/responselike": { @@ -13416,9 +11747,9 @@ } }, "@types/yargs": { - "version": "15.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.9.tgz", - "integrity": "sha512-HmU8SeIRhZCWcnRskCs36Q1Q00KBV6Cqh/ora8WN1+22dY07AZdn6Gel8QZ3t26XYPImtcL8WV/eqjhVmMEw4g==", + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -13531,6 +11862,15 @@ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, "aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -13663,61 +12003,16 @@ "sprintf-js": "~1.0.2" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -13735,35 +12030,17 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, "babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.1.tgz", + "integrity": "sha512-aWFD7OGQjk3Y8MdZKf1XePlQvHnjMVJQjIq9WKrlAjz9by703kJ45Jxhp26JwnovoW71YYz5etuqRl8wMcIv0w==", "dev": true, "requires": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", + "@jest/transform": "^27.0.1", + "@jest/types": "^27.0.1", + "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", + "babel-preset-jest": "^27.0.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "slash": "^3.0.0" @@ -13783,9 +12060,9 @@ } }, "babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz", + "integrity": "sha512-sqBF0owAcCDBVEDtxqfYr2F36eSHdx7lAVGyYuOBRnKdD6gzcy0I0XrAYCZgOA3CRrLhmR+Uae9nogPzmAtOfQ==", "dev": true, "requires": { "@babel/template": "^7.3.3", @@ -13795,9 +12072,9 @@ } }, "babel-preset-current-node-syntax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz", - "integrity": "sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", "dev": true, "requires": { "@babel/plugin-syntax-async-generators": "^7.8.4", @@ -13815,12 +12092,12 @@ } }, "babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz", + "integrity": "sha512-nIBIqCEpuiyhvjQs2mVNwTxQQa2xk70p9Dd/0obQGBf8FBzbnI8QhQKzLsWMN2i6q+5B0OcWDtrboBX5gmOLyA==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^26.6.2", + "babel-plugin-jest-hoist": "^27.0.1", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -13835,70 +12112,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==" }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, "benchmark": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", @@ -14010,6 +12223,19 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, "bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", @@ -14031,23 +12257,6 @@ "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", "dev": true }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, "cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", @@ -14099,19 +12308,10 @@ "quick-lru": "^4.0.1" } }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "caniuse-lite": { + "version": "1.0.30001230", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", + "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", "dev": true }, "chalk": { @@ -14214,34 +12414,17 @@ } } }, - "cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", + "ci-info": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.1.1.tgz", + "integrity": "sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==", "dev": true }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } + "cjs-module-lexer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz", + "integrity": "sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==", + "dev": true }, "clean-stack": { "version": "2.2.0", @@ -14318,14 +12501,51 @@ "dev": true }, "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } } }, "clone-regexp": { @@ -14369,16 +12589,6 @@ "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", "dev": true }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -14392,6 +12602,12 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -14413,12 +12629,6 @@ "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", "dev": true }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -14476,18 +12686,6 @@ "safe-buffer": "~5.1.1" } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, "cosmiconfig": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", @@ -14556,15 +12754,6 @@ } } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -14617,12 +12806,6 @@ "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", "dev": true }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, "decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -14679,47 +12862,6 @@ "object-keys": "^1.0.12" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "del": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", @@ -14755,9 +12897,9 @@ "dev": true }, "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz", + "integrity": "sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg==", "dev": true }, "dir-glob": { @@ -14817,15 +12959,11 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } + "electron-to-chromium": { + "version": "1.3.739", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz", + "integrity": "sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A==", + "dev": true }, "elegant-spinner": { "version": "1.0.1", @@ -14834,9 +12972,9 @@ "dev": true }, "emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", "dev": true }, "emoji-regex": { @@ -14900,6 +13038,12 @@ "is-symbol": "^1.0.2" } }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-goat": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz", @@ -14912,18 +13056,24 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "dev": true, "requires": { "esprima": "^4.0.1", - "estraverse": "^4.2.0", + "estraverse": "^5.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" }, "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -14954,13 +13104,6 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -15230,68 +13373,39 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", - "dev": true - }, "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true } } @@ -15310,92 +13424,24 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, "expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.1.tgz", + "integrity": "sha512-hjKwLeAvKUiq0Plha1dmzOH1FGEwJC9njbT993cq4PK9r58/+3NM+WDqFVGcPuRH7XTjmbIeHQBzp2faDrPhjQ==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" + "@jest/types": "^27.0.1", + "ansi-styles": "^5.0.0", + "jest-get-type": "^27.0.1", + "jest-matcher-utils": "^27.0.1", + "jest-message-util": "^27.0.1", + "jest-regex-util": "^27.0.1" }, "dependencies": { "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true } } @@ -15406,27 +13452,6 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -15438,77 +13463,6 @@ "tmp": "^0.0.33" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -15624,26 +13578,14 @@ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==" }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "requires": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, @@ -15653,24 +13595,15 @@ "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", "dev": true }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", - "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "optional": true }, @@ -15734,21 +13667,6 @@ "pump": "^3.0.0" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "git-hooks-list": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-1.0.3.tgz", @@ -15884,28 +13802,6 @@ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", "dev": true }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, "hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", @@ -15947,64 +13843,6 @@ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "has-yarn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", @@ -16045,15 +13883,15 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" } }, "http2-wrapper": { @@ -16074,6 +13912,16 @@ } } }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, "human-signals": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", @@ -16346,38 +14194,6 @@ } } }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", @@ -16420,38 +14236,21 @@ "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", "dev": true }, - "is-core-module": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", - "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", + "is-ci": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", + "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==", + "dev": true, "requires": { - "has": "^1.0.3" + "ci-info": "^3.1.1" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, + "is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "has": "^1.0.3" } }, "is-date-object": { @@ -16462,28 +14261,9 @@ }, "is-decimal": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true }, "is-docker": { "version": "2.1.1", @@ -16497,12 +14277,6 @@ "integrity": "sha1-3pu1snhzigWgsJpX4ftNSjQan2s=", "dev": true }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -16607,19 +14381,10 @@ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, "is-potential-custom-element-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", - "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, "is-promise": { @@ -16682,12 +14447,6 @@ "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==", "dev": true }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, "is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -16703,29 +14462,11 @@ "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", "dev": true }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, "issue-regex": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/issue-regex/-/issue-regex-3.1.0.tgz", @@ -16795,14 +14536,6 @@ "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "istanbul-reports": { @@ -16816,126 +14549,52 @@ } }, "jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.1.tgz", + "integrity": "sha512-lFEoUdXjbGAIxk/gZhcv98xOaH1hjqG5R/PQHs5GBfIK5iL3tnXCjHQf4HQLVZZ2rcXML3oeVg9+XrRZbooBdQ==", "dev": true, "requires": { - "@jest/core": "^26.6.3", + "@jest/core": "^27.0.1", "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "dependencies": { - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "dev": true, - "requires": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - } - } + "jest-cli": "^27.0.1" } }, "jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.1.tgz", + "integrity": "sha512-Y/4AnqYNcUX/vVgfkmvSA3t7rcg+t8m3CsSGlU+ra8kjlVW5ZqXcBZY/NUew2Mo8M+dn0ApKl+FmGGT1JV5dVA==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "dependencies": { - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - } + "@jest/types": "^27.0.1", + "execa": "^5.0.0", + "throat": "^6.0.1" } }, "jest-circus": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-26.6.3.tgz", - "integrity": "sha512-ACrpWZGcQMpbv13XbzRzpytEJlilP/Su0JtNCi5r/xLpOUhnaIJr8leYYpLEMgPFURZISEHrnnpmB54Q/UziPw==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.1.tgz", + "integrity": "sha512-Tz3ytmrsgxWlTwSyPYb8StF9J2IMjLlbBMKAjhL2UU9/0ZpYb2JiEGjXaAhnGauQRbbpyFbSH3yj5HIbdurmwQ==", "dev": true, "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", + "@jest/environment": "^27.0.1", + "@jest/test-result": "^27.0.1", + "@jest/types": "^27.0.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^26.6.2", + "expect": "^27.0.1", "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "stack-utils": "^2.0.2", - "throat": "^5.0.0" + "jest-each": "^27.0.1", + "jest-matcher-utils": "^27.0.1", + "jest-message-util": "^27.0.1", + "jest-runner": "^27.0.1", + "jest-runtime": "^27.0.1", + "jest-snapshot": "^27.0.1", + "jest-util": "^27.0.1", + "pretty-format": "^27.0.1", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" }, "dependencies": { "co": { @@ -16946,147 +14605,168 @@ } } }, + "jest-cli": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.1.tgz", + "integrity": "sha512-plDsQQwpkKK1SZ5L5xqMa7v/sTwB5LTIeSJqb+cV+4EMlThdUQfg8jwMfHX8jHuUc9TPGLcdoZeBuZcGGn3Rlg==", + "dev": true, + "requires": { + "@jest/core": "^27.0.1", + "@jest/test-result": "^27.0.1", + "@jest/types": "^27.0.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "jest-config": "^27.0.1", + "jest-util": "^27.0.1", + "jest-validate": "^27.0.1", + "prompts": "^2.0.1", + "yargs": "^16.0.3" + } + }, "jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.1.tgz", + "integrity": "sha512-V8O6+CZjGF0OMq4kxVR29ztV/LQqlAAcJLw7a94RndfRXkha4U84n50yZCXiPWtAHHTmb3g1y52US6rGPxA+3w==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", + "@jest/test-sequencer": "^27.0.1", + "@jest/types": "^27.0.1", + "babel-jest": "^27.0.1", "chalk": "^4.0.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" + "is-ci": "^3.0.0", + "jest-circus": "^27.0.1", + "jest-environment-jsdom": "^27.0.1", + "jest-environment-node": "^27.0.1", + "jest-get-type": "^27.0.1", + "jest-jasmine2": "^27.0.1", + "jest-regex-util": "^27.0.1", + "jest-resolve": "^27.0.1", + "jest-util": "^27.0.1", + "jest-validate": "^27.0.1", + "micromatch": "^4.0.4", + "pretty-format": "^27.0.1" } }, "jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.1.tgz", + "integrity": "sha512-DQ3OgfJgoGWVTYo4qnYW/Jg5mpYFS2QW9BLxA8bs12ZRN1K8QPZtWeYvUPohQFs3CHX3JLTndGg3jyxdL5THFQ==", "dev": true, "requires": { "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "diff-sequences": "^27.0.1", + "jest-get-type": "^27.0.1", + "pretty-format": "^27.0.1" } }, "jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.1.tgz", + "integrity": "sha512-TA4+21s3oebURc7VgFV4r7ltdIJ5rtBH1E3Tbovcg7AV+oLfD5DcJ2V2vJ5zFA9sL5CFd/d2D6IpsAeSheEdrA==", "dev": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.1.tgz", + "integrity": "sha512-uJTK/aZ05HsdKkfXucAT5+/1DIURnTRv34OSxn1HWHrD+xu9eDX5Xgds09QSvg/mU01VS5upuHTDKG3W+r0rQA==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.0.1", "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" + "jest-get-type": "^27.0.1", + "jest-util": "^27.0.1", + "pretty-format": "^27.0.1" } }, "jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.1.tgz", + "integrity": "sha512-lesU8T9zkjgLaLpUFmFDgchu6/2OCoXm52nN6UumR063Hb+1TJdI7ihgM86+G01Ay86Lyr+K/FAR6yIIOviH3Q==", "dev": true, "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/environment": "^27.0.1", + "@jest/fake-timers": "^27.0.1", + "@jest/types": "^27.0.1", "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" + "jest-mock": "^27.0.1", + "jest-util": "^27.0.1", + "jsdom": "^16.6.0" } }, "jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.1.tgz", + "integrity": "sha512-/p94lo0hx+hbKUw1opnRFUPPsjncRBEUU+2Dh7BuxX8Nr4rRiTivLYgXzo79FhaeMYV0uiV5WAbHBq6xC11JJg==", "dev": true, "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/environment": "^27.0.1", + "@jest/fake-timers": "^27.0.1", + "@jest/types": "^27.0.1", "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" + "jest-mock": "^27.0.1", + "jest-util": "^27.0.1" } }, "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", + "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", "dev": true }, "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.1.tgz", + "integrity": "sha512-ioCuobr4z90H1Pz8+apz2vfz63387apzAoawm/9IIOndarDfRkjLURdLOe//AI5jUQmjVRg+WiL92339kqlCmA==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.0.1", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", + "fsevents": "^2.3.2", "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", + "jest-regex-util": "^27.0.1", + "jest-serializer": "^27.0.1", + "jest-util": "^27.0.1", + "jest-worker": "^27.0.1", + "micromatch": "^4.0.4", "walker": "^1.0.7" } }, "jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.1.tgz", + "integrity": "sha512-o8Ist0o970QDDm/R2o9UDbvNxq8A0++FTFQ0z9OnieJwS1nDH6H7WBDYAGPTdmnla7kbW41oLFPvhmjJE4mekg==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/environment": "^27.0.1", + "@jest/source-map": "^27.0.1", + "@jest/test-result": "^27.0.1", + "@jest/types": "^27.0.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^26.6.2", + "expect": "^27.0.1", "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" + "jest-each": "^27.0.1", + "jest-matcher-utils": "^27.0.1", + "jest-message-util": "^27.0.1", + "jest-runtime": "^27.0.1", + "jest-snapshot": "^27.0.1", + "jest-util": "^27.0.1", + "pretty-format": "^27.0.1", + "throat": "^6.0.1" }, "dependencies": { "co": { @@ -17098,51 +14778,62 @@ } }, "jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.1.tgz", + "integrity": "sha512-SQ/lRhfmnV3UuiaKIjwNXCaW2yh1rTMAL4n4Cl4I4gU0X2LoIc6Ogxe4UKM/J6Ld2uzc4gDGVYc5lSdpf6WjYw==", "dev": true, "requires": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "jest-get-type": "^27.0.1", + "pretty-format": "^27.0.1" } }, "jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.1.tgz", + "integrity": "sha512-NauNU+olKhPzLlsRnTOYFGk/MK5QFYl9ZzkrtfsY4eCq4SB3Bcl03UL44VdnlN5S/uFn4H2jwvRY1y6nSDTX3g==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "jest-diff": "^27.0.1", + "jest-get-type": "^27.0.1", + "pretty-format": "^27.0.1" } }, "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.1.tgz", + "integrity": "sha512-w8BfON2GwWORkos8BsxcwwQrLkV2s1ENxSRXK43+6yuquDE2hVxES/jrFqOArpP1ETVqqMmktU6iGkG8ncVzeA==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.0.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", + "micromatch": "^4.0.4", + "pretty-format": "^27.0.1", "slash": "^3.0.0", - "stack-utils": "^2.0.2" + "stack-utils": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + } } }, "jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.1.tgz", + "integrity": "sha512-fXCSZQDT5hUcAUy8OBnB018x7JFOMQnz4XfpSKEbfpWzL6o5qaLRhgf2Qg2NPuVKmC/fgOf33Edj8wjF4I24CQ==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.0.1", "@types/node": "*" } }, @@ -17150,115 +14841,116 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true + "dev": true, + "requires": {} }, "jest-preset-stylelint": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/jest-preset-stylelint/-/jest-preset-stylelint-4.1.0.tgz", - "integrity": "sha512-HibeWaRTmWagAQ6wHbefHqnP2NAb7MAhVVt45iwiTP8fXIuc6ikfhrzOoGWh6FegPLJBXPwuNYOM1ZYANX75yQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jest-preset-stylelint/-/jest-preset-stylelint-4.1.1.tgz", + "integrity": "sha512-6dNUU+lYcW3/zvLF3v+vHCw2qJvmg/yd8j9u8ZmPdtfp/dESaeG/vDaWbbtyRybZcbkzlvCLDstVWH6i7PkeAg==", "dev": true, "requires": {} }, "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.1.tgz", + "integrity": "sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ==", "dev": true }, "jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.1.tgz", + "integrity": "sha512-Q7QQ0OZ7z6D5Dul0MrsexlKalU8ZwexBfHLSu1qYPgphvUm6WO1b/xUnipU3e+uW1riDzMcJeJVYbdQ37hBHeg==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.0.1", "chalk": "^4.0.0", + "escalade": "^3.1.1", "graceful-fs": "^4.2.4", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", + "jest-util": "^27.0.1", + "resolve": "^1.20.0", "slash": "^3.0.0" } }, "jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.1.tgz", + "integrity": "sha512-ly1x5mEf21f3IVWbUNwIz/ePLtv4QdhYuQIVSVDqxx7yzAwhhdu0DJo7UNiEYKQY7Im48wfbNdOUpo7euFUXBQ==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" + "@jest/types": "^27.0.1", + "jest-regex-util": "^27.0.1", + "jest-snapshot": "^27.0.1" } }, "jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.1.tgz", + "integrity": "sha512-DUNizlD2D7J80G3VOrwfbtb7KYxiftMng82HNcKwTW0W3AwwNuBeq+1exoCnLO7Mxh7NP+k/1XQBlzLpjr/CnA==", "dev": true, "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/console": "^27.0.1", + "@jest/environment": "^27.0.1", + "@jest/test-result": "^27.0.1", + "@jest/transform": "^27.0.1", + "@jest/types": "^27.0.1", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.7.1", + "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", + "jest-config": "^27.0.1", + "jest-docblock": "^27.0.1", + "jest-haste-map": "^27.0.1", + "jest-leak-detector": "^27.0.1", + "jest-message-util": "^27.0.1", + "jest-resolve": "^27.0.1", + "jest-runtime": "^27.0.1", + "jest-util": "^27.0.1", + "jest-worker": "^27.0.1", "source-map-support": "^0.5.6", - "throat": "^5.0.0" + "throat": "^6.0.1" } }, "jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.1.tgz", + "integrity": "sha512-ImcrbQtpCUp8X9Rm4ky3j1GG9cqIKZJvXGZyB5cHEapGPTmg7wvvNooLmKragEe61/p/bhw1qO68Y0/9BSsBBg==", + "dev": true, + "requires": { + "@jest/console": "^27.0.1", + "@jest/environment": "^27.0.1", + "@jest/fake-timers": "^27.0.1", + "@jest/globals": "^27.0.1", + "@jest/source-map": "^27.0.1", + "@jest/test-result": "^27.0.1", + "@jest/transform": "^27.0.1", + "@jest/types": "^27.0.1", + "@types/yargs": "^16.0.0", "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", + "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", + "jest-haste-map": "^27.0.1", + "jest-message-util": "^27.0.1", + "jest-mock": "^27.0.1", + "jest-regex-util": "^27.0.1", + "jest-resolve": "^27.0.1", + "jest-snapshot": "^27.0.1", + "jest-util": "^27.0.1", + "jest-validate": "^27.0.1", "slash": "^3.0.0", "strip-bom": "^4.0.0", - "yargs": "^15.4.1" + "yargs": "^16.0.3" } }, "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.1.tgz", + "integrity": "sha512-svy//5IH6bfQvAbkAEg1s7xhhgHTtXu0li0I2fdKHDsLP2P2MOiscPQIENQep8oU2g2B3jqLyxKKzotZOz4CwQ==", "dev": true, "requires": { "@types/node": "*", @@ -17266,80 +14958,74 @@ } }, "jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.1.tgz", + "integrity": "sha512-HgKmSebDB3rswugREeh+nKrxJEVZE12K7lZ2MuwfFZT6YmiH0TlofsL2YmiLsCsG5KH5ZcLYYpF5bDrvtVx/Xg==", "dev": true, "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/parser": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", + "@jest/transform": "^27.0.1", + "@jest/types": "^27.0.1", "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^26.6.2", + "expect": "^27.0.1", "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", + "jest-diff": "^27.0.1", + "jest-get-type": "^27.0.1", + "jest-haste-map": "^27.0.1", + "jest-matcher-utils": "^27.0.1", + "jest-message-util": "^27.0.1", + "jest-resolve": "^27.0.1", + "jest-util": "^27.0.1", "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", + "pretty-format": "^27.0.1", "semver": "^7.3.2" }, "dependencies": { "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.1.tgz", + "integrity": "sha512-lEw3waSmEOO4ZkwkUlFSvg4es1+8+LIkSGxp/kF60K0+vMR3Dv3O2HMZhcln9NHqSQzpVbsDT6OeMzUPW7DfRg==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.0.1", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - }, - "dependencies": { - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - } + "is-ci": "^3.0.0", + "picomatch": "^2.2.3" } }, "jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.1.tgz", + "integrity": "sha512-zvmPRcfTkqTZuHveIKAI2nbkUc3SDXjWVJULknPLGF5bdxOGSeGZg7f/Uw0MUVOkCOaspcHnsPCgZG0pqmg71g==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", + "@jest/types": "^27.0.1", + "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", + "jest-get-type": "^27.0.1", "leven": "^3.1.0", - "pretty-format": "^26.6.2" + "pretty-format": "^27.0.1" }, "dependencies": { "camelcase": { @@ -17351,44 +15037,44 @@ } }, "jest-watch-typeahead": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.6.3.tgz", - "integrity": "sha512-rM+2m2U/7o4VeXxA3rcEWbbKq8K/aGjAwCgmqsthPV1AqLb5NNACzS+tDCD11bdQ8MrN+H3uN61Y9qFiJgtZPw==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.6.4.tgz", + "integrity": "sha512-tGxriteVJqonyrDj/xZHa0E2glKMiglMLQqISLCjxLUfeueRBh9VoRF2FKQyYO2xOqrWDTg7781zUejx411ZXA==", "dev": true, "requires": { "ansi-escapes": "^4.3.1", "chalk": "^4.0.0", - "jest-regex-util": "^26.0.0", - "jest-watcher": "^26.3.0", + "jest-regex-util": "^27.0.0", + "jest-watcher": "^27.0.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0" } }, "jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.1.tgz", + "integrity": "sha512-Chp9c02BN0IgEbtGreyAhGqIsOrn9a0XnzbuXOxdW1+cW0Tjh12hMzHDIdLFHpYP/TqaMTmPHaJ5KWvpCCrNFw==", "dev": true, "requires": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/test-result": "^27.0.1", + "@jest/types": "^27.0.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^26.6.2", + "jest-util": "^27.0.1", "string-length": "^4.0.1" } }, "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.1.tgz", + "integrity": "sha512-NhHqClI3owOjmS8dBhQMKHZ2rrT0sBTpqGitp9nMX5AAjVXd+15o4v96uBEMhoywaLKN+5opcKBlXwAoADZolA==", "dev": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "supports-color": "^8.0.0" }, "dependencies": { "has-flag": { @@ -17398,9 +15084,9 @@ "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==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -17423,44 +15109,47 @@ "esprima": "^4.0.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, "jsdom": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", - "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", + "version": "16.6.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", + "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", "dev": true, "requires": { - "abab": "^2.0.3", - "acorn": "^7.1.1", + "abab": "^2.0.5", + "acorn": "^8.2.4", "acorn-globals": "^6.0.0", "cssom": "^0.4.4", - "cssstyle": "^2.2.0", + "cssstyle": "^2.3.0", "data-urls": "^2.0.0", - "decimal.js": "^10.2.0", + "decimal.js": "^10.2.1", "domexception": "^2.0.1", - "escodegen": "^1.14.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", "html-encoding-sniffer": "^2.0.1", - "is-potential-custom-element-name": "^1.0.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", "nwsapi": "^2.2.0", - "parse5": "5.1.1", - "request": "^2.88.2", - "request-promise-native": "^1.0.8", - "saxes": "^5.0.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", "symbol-tree": "^3.2.4", - "tough-cookie": "^3.0.1", + "tough-cookie": "^4.0.0", "w3c-hr-time": "^1.0.2", "w3c-xmlserializer": "^2.0.0", "webidl-conversions": "^6.1.0", "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0", - "ws": "^7.2.3", + "whatwg-url": "^8.5.0", + "ws": "^7.4.5", "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", + "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==", + "dev": true + } } }, "jsesc": { @@ -17486,12 +15175,6 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -17504,12 +15187,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, "json5": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", @@ -17519,18 +15196,6 @@ "minimist": "^1.2.5" } }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, "keyv": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", @@ -17684,15 +15349,6 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } } } }, @@ -18143,12 +15799,6 @@ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", "dev": true }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, "lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -18236,26 +15886,11 @@ "p-defer": "^1.0.0" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, "map-obj": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==" }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, "markdown-extensions": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz", @@ -18403,18 +16038,18 @@ } }, "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", "dev": true }, "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", "dev": true, "requires": { - "mime-db": "1.44.0" + "mime-db": "1.47.0" } }, "mimic-fn": { @@ -18465,27 +16100,6 @@ } } }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -18497,25 +16111,6 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -18557,39 +16152,11 @@ "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", "dev": true }, - "node-notifier": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz", - "integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==", - "dev": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - }, - "dependencies": { - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } + "node-releases": { + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "dev": true }, "normalize-package-data": { "version": "3.0.0", @@ -18679,54 +16246,19 @@ "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "get-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -18755,15 +16287,6 @@ "yargs-parser": "^20.2.3" } }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -18993,20 +16516,12 @@ } }, "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { - "path-key": "^2.0.0" - }, - "dependencies": { - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - } + "path-key": "^3.0.0" } }, "number-is-nan": { @@ -19021,55 +16536,12 @@ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "object-inspect": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", @@ -19082,15 +16554,6 @@ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, "object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", @@ -19103,15 +16566,6 @@ "object-keys": "^1.1.1" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -19200,9 +16654,9 @@ "dev": true }, "p-each-series": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.1.0.tgz", - "integrity": "sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", "dev": true }, "p-event": { @@ -19471,15 +16925,9 @@ } }, "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, "path-exists": { @@ -19508,12 +16956,6 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, "picomatch": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", @@ -19570,12 +17012,6 @@ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, "postcss": { "version": "7.0.35", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", @@ -19606,11 +17042,6 @@ } } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, "supports-color": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", @@ -19729,39 +17160,21 @@ } }, "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.1.tgz", + "integrity": "sha512-qE+0J6c/gd+R6XTcQgPJMc5hMJNsxzSF5p8iZSbMZ7GQzYGlSLNkh2P80Wa2dbF4gEVUsJEgcrBY+1L2/j265w==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.0.1", "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", + "ansi-styles": "^5.0.0", "react-is": "^17.0.1" }, "dependencies": { "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true } } @@ -19773,9 +17186,9 @@ "dev": true }, "prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", + "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", "dev": true, "requires": { "kleur": "^3.0.3", @@ -19829,12 +17242,6 @@ } } }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, "quick-lru": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", @@ -19963,16 +17370,6 @@ "strip-indent": "^3.0.0" } }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, "regexpp": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", @@ -20295,18 +17692,6 @@ "xtend": "^4.0.0" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", @@ -20319,84 +17704,6 @@ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", "dev": true }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "dev": true, - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "dependencies": { - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -20408,18 +17715,12 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "requires": { - "is-core-module": "^2.1.0", + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } }, @@ -20443,12 +17744,6 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, "responselike": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", @@ -20467,220 +17762,52 @@ "onetime": "^5.1.0", "signal-exit": "^3.0.2" } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "run-parallel": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", - "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==" - }, - "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "run-parallel": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", + "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==" + }, + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" } }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, "saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", @@ -20724,35 +17851,6 @@ } } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -20774,12 +17872,6 @@ "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", "dev": true }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true - }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -20835,134 +17927,6 @@ "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=", "dev": true }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "sort-object-keys": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-1.1.3.tgz", @@ -21002,23 +17966,9 @@ } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-support": { "version": "0.5.19", @@ -21028,22 +17978,8 @@ "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -21086,38 +18022,12 @@ "through": "2" } }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, "stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", @@ -21135,33 +18045,6 @@ } } }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -21312,12 +18195,6 @@ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -21464,9 +18341,9 @@ "dev": true }, "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, "through": { @@ -21496,50 +18373,12 @@ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "to-readable-stream": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-2.1.0.tgz", "integrity": "sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w==", "dev": true }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -21559,20 +18398,20 @@ } }, "tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", "dev": true, "requires": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" } }, "tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "requires": { "punycode": "^2.1.1" @@ -21604,21 +18443,6 @@ "tslib": "^1.8.1" } }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -21784,18 +18608,6 @@ "vfile-location": "^3.0.0" } }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -21862,45 +18674,11 @@ "unist-util-is": "^4.0.0" } }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true }, "update-notifier": { "version": "5.1.0", @@ -21989,12 +18767,6 @@ "punycode": "^2.1.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", @@ -22004,32 +18776,20 @@ "prepend-http": "^2.0.0" } }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==", - "dev": true - }, "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, "v8-to-istanbul": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz", - "integrity": "sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", + "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.1", @@ -22069,17 +18829,6 @@ "builtins": "^1.0.3" } }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "vfile": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", @@ -22195,12 +18944,12 @@ "dev": true }, "whatwg-url": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", - "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.5.0.tgz", + "integrity": "sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg==", "dev": true, "requires": { - "lodash.sortby": "^4.7.0", + "lodash": "^4.7.0", "tr46": "^2.0.2", "webidl-conversions": "^6.1.0" } @@ -22213,12 +18962,6 @@ "isexe": "^2.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, "widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", @@ -22298,10 +19041,11 @@ } }, "ws": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", - "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==", - "dev": true + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "dev": true, + "requires": {} }, "xdg-basedir": { "version": "4.0.0", @@ -22328,9 +19072,9 @@ "dev": true }, "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yallist": { @@ -22344,34 +19088,18 @@ "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" }, "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "dependencies": { - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } }, "yargs-parser": { diff --git a/package.json b/package.json index 7ecfe3dce8..1a9ae813f2 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,6 @@ ], "testEnvironment": "node", "testRegex": ".*\\.test\\.js$|rules/.*/__tests__/.*\\.js$", - "testRunner": "jest-circus/runner", "watchPlugins": [ "jest-watch-typeahead/filename", "jest-watch-typeahead/testname" @@ -169,10 +168,9 @@ "eslint-config-stylelint": "^13.1.1", "got": "^11.8.2", "husky": "^6.0.0", - "jest": "^26.6.3", - "jest-circus": "^26.6.3", - "jest-preset-stylelint": "^4.1.0", - "jest-watch-typeahead": "^0.6.3", + "jest": "^27.0.1", + "jest-preset-stylelint": "^4.1.1", + "jest-watch-typeahead": "^0.6.4", "lint-staged": "^10.5.4", "np": "^7.5.0", "npm-run-all": "^4.1.5", From 0f6da86935d74972733f32ae58e13620ae2c30e5 Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Fri, 28 May 2021 12:14:23 -0400 Subject: [PATCH 025/194] Refactor to remove some uses of `_.get` and `_.set` (#5327) --- lib/assignDisabledRanges.js | 12 ++++---- lib/formatters/verboseFormatter.js | 10 +++---- lib/normalizeAllRuleSettings.js | 11 +++---- lib/normalizeRuleSettings.js | 4 ++- lib/printConfig.js | 3 +- lib/reportDisables.js | 30 ++++++++++--------- lib/rules/max-line-length/index.js | 9 ++---- lib/rules/no-duplicate-selectors/index.js | 2 +- lib/rules/property-no-unknown/index.js | 2 +- lib/rules/selector-class-pattern/index.js | 2 +- lib/rules/selector-max-type/index.js | 2 +- lib/rules/string-quotes/index.js | 3 +- lib/standalone.js | 4 +-- lib/utils/getNextNonSharedLineCommentNode.js | 2 +- .../getPreviousNonSharedLineCommentNode.js | 2 +- .../isAfterStandardPropertyDeclaration.js | 3 +- ...klessAtRuleAfterSameNameBlocklessAtRule.js | 7 +++-- lib/utils/report.js | 7 ++--- lib/utils/validateOptions.js | 7 ++++- types/stylelint/index.d.ts | 9 ++++-- 20 files changed, 70 insertions(+), 61 deletions(-) diff --git a/lib/assignDisabledRanges.js b/lib/assignDisabledRanges.js index ca1576bd87..f7c1a921ff 100644 --- a/lib/assignDisabledRanges.js +++ b/lib/assignDisabledRanges.js @@ -1,7 +1,5 @@ 'use strict'; -const _ = require('lodash'); - const COMMAND_PREFIX = 'stylelint-'; const disableCommand = `${COMMAND_PREFIX}disable`; const enableCommand = `${COMMAND_PREFIX}enable`; @@ -254,7 +252,9 @@ module.exports = function (root, result) { } Object.entries(disabledRanges).forEach(([ruleName, ranges]) => { - if (!_.get(ranges[ranges.length - 1], 'end')) { + const lastRange = ranges[ranges.length - 1]; + + if (!lastRange || !lastRange.end) { endDisabledRange(endLine, ruleName, ruleName === ALL_RULES); } }); @@ -402,9 +402,11 @@ module.exports = function (root, result) { if (!ranges) return false; - if (!ranges[ranges.length - 1]) return false; + const lastRange = ranges[ranges.length - 1]; + + if (!lastRange) return false; - if (!_.get(ranges[ranges.length - 1], 'end')) return true; + if (!lastRange.end) return true; return false; } diff --git a/lib/formatters/verboseFormatter.js b/lib/formatters/verboseFormatter.js index 5683b044a2..a418e31a0e 100644 --- a/lib/formatters/verboseFormatter.js +++ b/lib/formatters/verboseFormatter.js @@ -22,14 +22,14 @@ module.exports = function (results) { output += chalk.underline(`${checkedDisplay} ${sourceWord} checked\n`); results.forEach((result) => { - let formatting = 'green'; + let formatting = chalk.green; if (result.errored) { - formatting = 'red'; + formatting = chalk.red; } else if (result.warnings.length) { - formatting = 'yellow'; + formatting = chalk.yellow; } else if (result.ignored) { - formatting = 'dim'; + formatting = chalk.dim; } let sourceText = `${result.source}`; @@ -38,7 +38,7 @@ module.exports = function (results) { sourceText += ' (ignored)'; } - output += _.get(chalk, formatting)(` ${sourceText}\n`); + output += formatting(` ${sourceText}\n`); }); const warnings = _.flatten(results.map((r) => r.warnings)); diff --git a/lib/normalizeAllRuleSettings.js b/lib/normalizeAllRuleSettings.js index 990608e3fb..ee1dbcb111 100644 --- a/lib/normalizeAllRuleSettings.js +++ b/lib/normalizeAllRuleSettings.js @@ -1,6 +1,5 @@ 'use strict'; -const _ = require('lodash'); const normalizeRuleSettings = require('./normalizeRuleSettings'); const rules = require('./rules'); @@ -17,10 +16,8 @@ function normalizeAllRuleSettings(config) { if (!config.rules) return config; - Object.keys(config.rules).forEach((ruleName) => { - const rawRuleSettings = _.get(config, ['rules', ruleName]); - - const rule = rules[ruleName] || _.get(config, ['pluginFunctions', ruleName]); + for (const [ruleName, rawRuleSettings] of Object.entries(config.rules)) { + const rule = rules[ruleName] || (config.pluginFunctions && config.pluginFunctions[ruleName]); if (!rule) { normalizedRules[ruleName] = []; @@ -28,10 +25,10 @@ function normalizeAllRuleSettings(config) { normalizedRules[ruleName] = normalizeRuleSettings( rawRuleSettings, ruleName, - _.get(rule, 'primaryOptionArray'), + rule.primaryOptionArray, ); } - }); + } config.rules = normalizedRules; diff --git a/lib/normalizeRuleSettings.js b/lib/normalizeRuleSettings.js index 57da8881b3..d11ec42083 100644 --- a/lib/normalizeRuleSettings.js +++ b/lib/normalizeRuleSettings.js @@ -46,7 +46,9 @@ module.exports = function ( if (primaryOptionArray === undefined) { const rule = rules[ruleName]; - primaryOptionArray = _.get(rule, 'primaryOptionArray'); + if (rule && 'primaryOptionArray' in rule) { + primaryOptionArray = rule.primaryOptionArray; + } } if (!primaryOptionArray) { diff --git a/lib/printConfig.js b/lib/printConfig.js index 87539ef853..ca42821cd5 100644 --- a/lib/printConfig.js +++ b/lib/printConfig.js @@ -1,6 +1,5 @@ 'use strict'; -const _ = require('lodash'); const createStylelint = require('./createStylelint'); const globby = require('globby'); const path = require('path'); @@ -41,7 +40,7 @@ module.exports = function (options) { configOverrides, }); - const cwd = _.get(globbyOptions, 'cwd', process.cwd()); + const cwd = (globbyOptions && globbyOptions.cwd) || process.cwd(); const absoluteFilePath = !path.isAbsolute(filePath) ? path.join(cwd, filePath) : path.normalize(filePath); diff --git a/lib/reportDisables.js b/lib/reportDisables.js index 36ac5a109a..8b1219056e 100644 --- a/lib/reportDisables.js +++ b/lib/reportDisables.js @@ -1,15 +1,15 @@ 'use strict'; -const _ = require('lodash'); - /** @typedef {import('stylelint').RangeType} RangeType */ /** @typedef {import('stylelint').DisableReportRange} DisabledRange */ +/** @typedef {import('stylelint').StylelintResult} StylelintResult */ +/** @typedef {import('stylelint').StylelintConfigRuleSettings} StylelintConfigRuleSettings */ /** * Returns a report describing which `results` (if any) contain disabled ranges * for rules that disallow disables via `reportDisables: true`. * - * @param {import('stylelint').StylelintResult[]} results + * @param {StylelintResult[]} results */ module.exports = function (results) { results.forEach((result) => { @@ -25,19 +25,21 @@ module.exports = function (results) { const config = result._postcssResult.stylelint.config; + if (!config || !config.rules) return; + // If no rules actually disallow disables, don't bother looking for ranges // that correspond to disabled rules. - if (!Object.values(_.get(config, 'rules', {})).some(reportDisablesForRule)) { - return []; + if (!Object.values(config.rules).some(reportDisablesForRule)) { + return; } - Object.keys(rangeData).forEach((rule) => { - rangeData[rule].forEach((range) => { - if (!reportDisablesForRule(_.get(config, ['rules', rule], []))) return; + for (const [rule, ranges] of Object.entries(rangeData)) { + for (const range of ranges) { + if (!reportDisablesForRule(config.rules[rule] || [])) continue; // If the comment doesn't have a location, we can't report a useful error. // In practice we expect all comments to have locations, though. - if (!range.comment.source || !range.comment.source.start) return; + if (!range.comment.source || !range.comment.source.start) continue; result.warnings.push({ text: `Rule "${rule}" may not be disabled`, @@ -46,17 +48,17 @@ module.exports = function (results) { column: range.comment.source.start.column, severity: 'error', }); - }); - }); + } + } }); }; /** - * @param {[any, object]|null} options + * @param {StylelintConfigRuleSettings} options * @return {boolean} */ function reportDisablesForRule(options) { - if (!options) return false; + if (!options || !options[1]) return false; - return _.get(options[1], 'reportDisables', false); + return Boolean(options[1].reportDisables); } diff --git a/lib/rules/max-line-length/index.js b/lib/rules/max-line-length/index.js index 6dd3cfc157..355d746e91 100644 --- a/lib/rules/max-line-length/index.js +++ b/lib/rules/max-line-length/index.js @@ -53,13 +53,10 @@ function rule(maxLength, options, context) { EXCLUDED_PATTERNS.forEach((pattern) => execall(pattern, rootString).forEach((match) => { - const startOfSubString = - match.index + match.match.indexOf(_.get(match, 'subMatches[0]', '')); + const subMatch = match.subMatches[0] || ''; + const startOfSubString = match.index + match.match.indexOf(subMatch); - return skippedSubStrings.push([ - startOfSubString, - startOfSubString + _.get(match, 'subMatches[0].length', 0), - ]); + return skippedSubStrings.push([startOfSubString, startOfSubString + subMatch.length]); }), ); diff --git a/lib/rules/no-duplicate-selectors/index.js b/lib/rules/no-duplicate-selectors/index.js index 399a579d22..ceebe24a3b 100644 --- a/lib/rules/no-duplicate-selectors/index.js +++ b/lib/rules/no-duplicate-selectors/index.js @@ -39,7 +39,7 @@ function rule(actual, options) { return; } - const shouldDisallowDuplicateInList = _.get(options, 'disallowInList'); + const shouldDisallowDuplicateInList = options && options.disallowInList; // The top level of this map will be rule sources. // Each source maps to another map, which maps rule parents to a set of selectors. diff --git a/lib/rules/property-no-unknown/index.js b/lib/rules/property-no-unknown/index.js index 3651a1bc27..12a87f5013 100644 --- a/lib/rules/property-no-unknown/index.js +++ b/lib/rules/property-no-unknown/index.js @@ -43,7 +43,7 @@ function rule(actual, options) { return; } - const shouldCheckPrefixed = _.get(options, 'checkPrefixed'); + const shouldCheckPrefixed = options && options.checkPrefixed; root.walkDecls(checkStatement); diff --git a/lib/rules/selector-class-pattern/index.js b/lib/rules/selector-class-pattern/index.js index 5cd1e5f911..60ee35544d 100644 --- a/lib/rules/selector-class-pattern/index.js +++ b/lib/rules/selector-class-pattern/index.js @@ -41,7 +41,7 @@ function rule(pattern, options) { return; } - const shouldResolveNestedSelectors = _.get(options, 'resolveNestedSelectors'); + const shouldResolveNestedSelectors = options && options.resolveNestedSelectors; const normalizedPattern = _.isString(pattern) ? new RegExp(pattern) : pattern; root.walkRules((ruleNode) => { diff --git a/lib/rules/selector-max-type/index.js b/lib/rules/selector-max-type/index.js index 3b0cb2f1e7..5707f634e1 100644 --- a/lib/rules/selector-max-type/index.js +++ b/lib/rules/selector-max-type/index.js @@ -152,7 +152,7 @@ function hasNextSiblingCombinator(node) { function isCombinator(node) { if (!node) return false; - return _.get(node, 'type') === 'combinator'; + return node.type === 'combinator'; } function isDescendantCombinator(node) { diff --git a/lib/rules/string-quotes/index.js b/lib/rules/string-quotes/index.js index fb0d705503..09613c1149 100644 --- a/lib/rules/string-quotes/index.js +++ b/lib/rules/string-quotes/index.js @@ -46,7 +46,8 @@ function rule(expectation, secondary, context) { return; } - const avoidEscape = _.get(secondary, 'avoidEscape', true); + const avoidEscape = + secondary && secondary.avoidEscape !== undefined ? secondary.avoidEscape : true; root.walk((node) => { switch (node.type) { diff --git a/lib/standalone.js b/lib/standalone.js index 7f39b7883f..097196ebdd 100644 --- a/lib/standalone.js +++ b/lib/standalone.js @@ -172,7 +172,7 @@ module.exports = function (options) { } fileList = fileList.map((entry) => { - const cwd = _.get(globbyOptions, 'cwd', process.cwd()); + const cwd = (globbyOptions && globbyOptions.cwd) || process.cwd(); const absolutePath = !path.isAbsolute(entry) ? path.join(cwd, entry) : path.normalize(entry); if (fs.existsSync(absolutePath)) { @@ -215,7 +215,7 @@ module.exports = function (options) { return Promise.all([]); } - const cwd = _.get(globbyOptions, 'cwd', process.cwd()); + const cwd = (globbyOptions && globbyOptions.cwd) || process.cwd(); let absoluteFilePaths = filePaths.map((filePath) => { const absoluteFilepath = !path.isAbsolute(filePath) ? path.join(cwd, filePath) diff --git a/lib/utils/getNextNonSharedLineCommentNode.js b/lib/utils/getNextNonSharedLineCommentNode.js index 8a4d32fb6e..86081aa6ba 100644 --- a/lib/utils/getNextNonSharedLineCommentNode.js +++ b/lib/utils/getNextNonSharedLineCommentNode.js @@ -23,7 +23,7 @@ module.exports = function getNextNonSharedLineCommentNode(node) { /** @type {Node | void} */ const nextNode = node.next(); - if (_.get(nextNode, 'type') !== 'comment') { + if (!nextNode || nextNode.type !== 'comment') { return nextNode; } diff --git a/lib/utils/getPreviousNonSharedLineCommentNode.js b/lib/utils/getPreviousNonSharedLineCommentNode.js index 5d6bfb21a0..b6a8cb8d41 100644 --- a/lib/utils/getPreviousNonSharedLineCommentNode.js +++ b/lib/utils/getPreviousNonSharedLineCommentNode.js @@ -22,7 +22,7 @@ module.exports = function getPreviousNonSharedLineCommentNode(node) { const previousNode = node.prev(); - if (!previousNode || _.get(previousNode, 'type') !== 'comment') { + if (!previousNode || previousNode.type !== 'comment') { return previousNode; } diff --git a/lib/utils/isAfterStandardPropertyDeclaration.js b/lib/utils/isAfterStandardPropertyDeclaration.js index 0aba7af52b..4d2271c337 100644 --- a/lib/utils/isAfterStandardPropertyDeclaration.js +++ b/lib/utils/isAfterStandardPropertyDeclaration.js @@ -1,6 +1,5 @@ 'use strict'; -const _ = require('lodash'); const getPreviousNonSharedLineCommentNode = require('./getPreviousNonSharedLineCommentNode'); const isCustomProperty = require('./isCustomProperty'); const isStandardSyntaxDeclaration = require('./isStandardSyntaxDeclaration'); @@ -15,6 +14,6 @@ module.exports = function (node) { prevNode !== undefined && prevNode.type === 'decl' && isStandardSyntaxDeclaration(prevNode) && - !isCustomProperty(_.get(prevNode, 'prop', '')) + !isCustomProperty(prevNode.prop || '') ); }; diff --git a/lib/utils/isBlocklessAtRuleAfterSameNameBlocklessAtRule.js b/lib/utils/isBlocklessAtRuleAfterSameNameBlocklessAtRule.js index 0e4fd1d1fb..14cae60b8b 100644 --- a/lib/utils/isBlocklessAtRuleAfterSameNameBlocklessAtRule.js +++ b/lib/utils/isBlocklessAtRuleAfterSameNameBlocklessAtRule.js @@ -1,6 +1,5 @@ 'use strict'; -const _ = require('lodash'); const getPreviousNonSharedLineCommentNode = require('./getPreviousNonSharedLineCommentNode'); const isBlocklessAtRuleAfterBlocklessAtRule = require('./isBlocklessAtRuleAfterBlocklessAtRule'); @@ -15,5 +14,9 @@ module.exports = function (atRule) { const previousNode = getPreviousNonSharedLineCommentNode(atRule); - return _.get(previousNode, 'name') === atRule.name; + if (previousNode && 'name' in previousNode) { + return previousNode.name === atRule.name; + } + + return false; }; diff --git a/lib/utils/report.js b/lib/utils/report.js index aee2bfc5f7..b35c42cf43 100644 --- a/lib/utils/report.js +++ b/lib/utils/report.js @@ -1,7 +1,5 @@ 'use strict'; -const _ = require('lodash'); - /** @typedef {{ ruleName: string, result: import('stylelint').PostcssResult, @@ -83,7 +81,7 @@ module.exports = function (violation) { } } - const severity = _.get(result.stylelint, ['ruleSeverities', ruleName]); + const severity = result.stylelint.ruleSeverities && result.stylelint.ruleSeverities[ruleName]; if (!result.stylelint.stylelintError && severity === 'error') { result.stylelint.stylelintError = true; @@ -107,7 +105,8 @@ module.exports = function (violation) { warningProperties.word = word; } - const warningMessage = _.get(result.stylelint, ['customMessages', ruleName], message); + const warningMessage = + (result.stylelint.customMessages && result.stylelint.customMessages[ruleName]) || message; result.warn(warningMessage, warningProperties); }; diff --git a/lib/utils/validateOptions.js b/lib/utils/validateOptions.js index 0d06ae441c..631c537be5 100644 --- a/lib/utils/validateOptions.js +++ b/lib/utils/validateOptions.js @@ -42,7 +42,12 @@ module.exports = function (result, ruleName, ...optionDescriptions) { result.warn(message, { stylelintType: 'invalidOption', }); - _.set(result, 'stylelint.stylelintError', true); + result.stylelint = result.stylelint || { + disabledRanges: {}, + ruleSeverities: {}, + customMessages: {}, + }; + result.stylelint.stylelintError = true; } return noErrors; diff --git a/types/stylelint/index.d.ts b/types/stylelint/index.d.ts index 41660f759c..631f14ede9 100644 --- a/types/stylelint/index.d.ts +++ b/types/stylelint/index.d.ts @@ -1,5 +1,6 @@ declare module 'stylelint' { import { Comment, Result, ResultMessage, Root, Syntax, WarningOptions, Warning } from 'postcss'; + import { GlobbyOptions } from 'globby'; export type Severity = 'warning' | 'error'; @@ -140,11 +141,13 @@ declare module 'stylelint' { export type StylelintPluginContext = { fix?: boolean; newline?: string }; - export type StylelintRule = ( + export type StylelintRule = (( primaryOption: any, secondaryOptions: object, context: StylelintPluginContext, - ) => (root: Root, result: PostcssResult) => Promise | void; + ) => (root: Root, result: PostcssResult) => Promise | void) & { + primaryOptionArray?: boolean; + }; export type GetPostcssOptions = { code?: string; @@ -183,7 +186,7 @@ declare module 'stylelint' { export type StylelintStandaloneOptions = { files?: string | Array; - globbyOptions?: Object; + globbyOptions?: GlobbyOptions; cache?: boolean; cacheLocation?: string; code?: string; From ea107d7e7e9f7c9a6fa1950593b1fdd285a35e93 Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Sat, 29 May 2021 09:21:41 +0100 Subject: [PATCH 026/194] Add color-hex-alpha rule (#5316) --- docs/user-guide/rules/list.md | 1 + lib/rules/color-hex-alpha/README.md | 66 ++++++++++++++ lib/rules/color-hex-alpha/__tests__/index.js | 92 ++++++++++++++++++++ lib/rules/color-hex-alpha/index.js | 68 +++++++++++++++ lib/rules/index.js | 1 + 5 files changed, 228 insertions(+) create mode 100644 lib/rules/color-hex-alpha/README.md create mode 100644 lib/rules/color-hex-alpha/__tests__/index.js create mode 100644 lib/rules/color-hex-alpha/index.js diff --git a/docs/user-guide/rules/list.md b/docs/user-guide/rules/list.md index 8a841475b9..86926c1ed9 100644 --- a/docs/user-guide/rules/list.md +++ b/docs/user-guide/rules/list.md @@ -93,6 +93,7 @@ Grouped first by the following categories and then by the [_thing_](http://apps. ### Color - [`color-function-notation`](../../../lib/rules/color-function-notation/README.md): Specify modern or legacy notation for applicable color-functions (Autofixable). +- [`color-hex-alpha`](../../../lib/rules/color-hex-alpha/README.md): Require or disallow alpha channel for hex colors. - [`color-named`](../../../lib/rules/color-named/README.md): Require (where possible) or disallow named colors. - [`color-no-hex`](../../../lib/rules/color-no-hex/README.md): Disallow hex colors. diff --git a/lib/rules/color-hex-alpha/README.md b/lib/rules/color-hex-alpha/README.md new file mode 100644 index 0000000000..0f0499a6ac --- /dev/null +++ b/lib/rules/color-hex-alpha/README.md @@ -0,0 +1,66 @@ +# color-hex-alpha + +Require or disallow alpha channel for hex colors. + + +```css +a { color: #fffa } +/** ↑ + * This alpha channel */ +``` + +## Options + +`string`: `"always"|"never"` + +### `"always"` + +The following patterns are considered violations: + + +```css +a { color: #fff; } +``` + + +```css +a { color: #ffffff; } +``` + +The following patterns are _not_ considered violations: + + +```css +a { color: #fffa; } +``` + + +```css +a { color: #ffffffaa; } +``` + +### `"never"` + +The following patterns are considered violations: + + +```css +a { color: #fffa; } +``` + + +```css +a { color: #ffffffaa; } +``` + +The following patterns are _not_ considered violations: + + +```css +a { color: #fff; } +``` + + +```css +a { color: #ffffff; } +``` diff --git a/lib/rules/color-hex-alpha/__tests__/index.js b/lib/rules/color-hex-alpha/__tests__/index.js new file mode 100644 index 0000000000..9dfae00e37 --- /dev/null +++ b/lib/rules/color-hex-alpha/__tests__/index.js @@ -0,0 +1,92 @@ +'use strict'; + +const postcssScss = require('postcss-scss'); + +const { messages, ruleName } = require('..'); + +testRule({ + ruleName, + config: 'always', + accept: [ + { + code: 'a { color: #ffff; }', + }, + { + code: 'a { color: #ffffffff; }', + }, + { + code: 'a { background: linear-gradient(to left, #fffa, #000000aa 100%); }', + }, + { + code: 'a { background: url(#fff); }', + }, + ], + reject: [ + { + code: 'a { color: #fff; }', + message: messages.expected('#fff'), + line: 1, + column: 12, + }, + { + code: 'a { color: #ffffff; }', + message: messages.expected('#ffffff'), + line: 1, + column: 12, + }, + { + code: 'a { background: linear-gradient(to left, #fff, #000000 100%); }', + warnings: [ + { message: messages.expected('#fff'), line: 1, column: 42 }, + { message: messages.expected('#000000'), line: 1, column: 48 }, + ], + }, + ], +}); + +testRule({ + ruleName, + config: 'never', + accept: [ + { + code: 'a { color: #fff; }', + }, + { + code: 'a { color: #ffffff; }', + }, + ], + reject: [ + { + code: 'a { color: #ffff; }', + message: messages.unexpected('#ffff'), + line: 1, + column: 12, + }, + ], +}); + +testRule({ + ruleName, + config: 'always', + customSyntax: postcssScss, + + accept: [ + { + code: 'a { color: #{f}; }', + description: 'scss interpolation of 3 characters', + }, + { + code: '$var: #ffff;', + description: 'alpha channel scss variable', + }, + ], + reject: [ + { + code: '$var: #fff', + message: messages.expected('#fff'), + line: 1, + column: 7, + description: 'no alpha channel scss variable', + }, + ], +}); diff --git a/lib/rules/color-hex-alpha/index.js b/lib/rules/color-hex-alpha/index.js new file mode 100644 index 0000000000..99d917e69b --- /dev/null +++ b/lib/rules/color-hex-alpha/index.js @@ -0,0 +1,68 @@ +// @ts-nocheck +'use strict'; + +const declarationValueIndex = require('../../utils/declarationValueIndex'); +const report = require('../../utils/report'); +const ruleMessages = require('../../utils/ruleMessages'); +const validateOptions = require('../../utils/validateOptions'); +const valueParser = require('postcss-value-parser'); + +const ruleName = 'color-hex-alpha'; + +const messages = ruleMessages(ruleName, { + expected: (hex) => `Expected alpha channel in "${hex}"`, + unexpected: (hex) => `Unexpected alpha channel in "${hex}"`, +}); + +const HEX = /^#([\da-f]{3,4}|[\da-f]{6}|[\da-f]{8})$/i; + +function rule(primary) { + return (root, result) => { + const validOptions = validateOptions(result, ruleName, { + actual: primary, + possible: ['always', 'never'], + }); + + if (!validOptions) return; + + root.walkDecls((decl) => { + const parsedValue = valueParser(decl.value); + + parsedValue.walk((node) => { + if (isUrlFunction(node)) return false; + + if (!isHexColor(node)) return; + + const { value } = node; + + if (primary === 'always' && hasAlphaChannel(value)) return; + + if (primary === 'never' && !hasAlphaChannel(value)) return; + + report({ + message: primary === 'never' ? messages.unexpected(value) : messages.expected(value), + node: decl, + index: declarationValueIndex(decl) + node.sourceIndex, + result, + ruleName, + }); + }); + }); + }; +} + +function isUrlFunction({ type, value }) { + return type === 'function' && value === 'url'; +} + +function isHexColor({ type, value }) { + return type === 'word' && HEX.test(value); +} + +function hasAlphaChannel(hex) { + return hex.length === 5 || hex.length === 9; +} + +rule.ruleName = ruleName; +rule.messages = messages; +module.exports = rule; diff --git a/lib/rules/index.js b/lib/rules/index.js index a18a2d4fcb..f7345e7a08 100644 --- a/lib/rules/index.js +++ b/lib/rules/index.js @@ -51,6 +51,7 @@ const rules = { require('./block-opening-brace-space-before'), )(), 'color-function-notation': importLazy(() => require('./color-function-notation'))(), + 'color-hex-alpha': importLazy(() => require('./color-hex-alpha'))(), 'color-hex-case': importLazy(() => require('./color-hex-case'))(), 'color-hex-length': importLazy(() => require('./color-hex-length'))(), 'color-named': importLazy(() => require('./color-named'))(), From e7c655f389d7d7d207f83984016ca52244cad4c1 Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Sat, 29 May 2021 09:23:11 +0100 Subject: [PATCH 027/194] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b05699d9c2..5f96c3e63a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ All notable changes to this project are documented in this file. - Removed: rules deprecated in 13.7.0 ([#5295](https://github.com/stylelint/stylelint/pull/5295)). - Removed: `function-calc-no-invalid` ([#5296](https://github.com/stylelint/stylelint/pull/5296)). - Removed: Drop Node 10 support ([#5303](https://github.com/stylelint/stylelint/pull/5303)). +- Added: `color-hex-alpha` rule ([#5316](https://github.com/stylelint/stylelint/pull/5316)). - Added: `function-calc-no-unspaced-operator` autofix ([#5273](https://github.com/stylelint/stylelint/pull/5273)). - Added: `ignoreFunctions: []` to `length-zero-no-unit` ([#5314](https://github.com/stylelint/stylelint/pull/5314)). - Fixed: `length-zero-no-unit` false positives for `flex` property ([#5315](https://github.com/stylelint/stylelint/pull/5315)). From a3cc2c4ca34b7348135fe987cc5907bda3e9929b Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Sat, 29 May 2021 09:25:02 +0100 Subject: [PATCH 028/194] Add custom-property-no-missing-var-function rule (#5317) --- docs/user-guide/rules/list.md | 4 + .../README.md | 45 ++++++ .../__tests__/index.js | 136 ++++++++++++++++++ .../index.js | 76 ++++++++++ lib/rules/index.js | 3 + 5 files changed, 264 insertions(+) create mode 100644 lib/rules/custom-property-no-missing-var-function/README.md create mode 100644 lib/rules/custom-property-no-missing-var-function/__tests__/index.js create mode 100644 lib/rules/custom-property-no-missing-var-function/index.js diff --git a/docs/user-guide/rules/list.md b/docs/user-guide/rules/list.md index 86926c1ed9..171f9e3015 100644 --- a/docs/user-guide/rules/list.md +++ b/docs/user-guide/rules/list.md @@ -34,6 +34,10 @@ Grouped first by the following categories and then by the [_thing_](http://apps. - [`unit-no-unknown`](../../../lib/rules/unit-no-unknown/README.md): Disallow unknown units. +### Custom property + +- [`custom-property-no-missing-var-function`](../../../lib/rules/custom-property-no-missing-var-function/README.md): Disallow missing `var` function for custom properties. + ### Property - [`property-no-unknown`](../../../lib/rules/property-no-unknown/README.md): Disallow unknown properties. diff --git a/lib/rules/custom-property-no-missing-var-function/README.md b/lib/rules/custom-property-no-missing-var-function/README.md new file mode 100644 index 0000000000..e91ebb1cfa --- /dev/null +++ b/lib/rules/custom-property-no-missing-var-function/README.md @@ -0,0 +1,45 @@ +# custom-property-no-missing-var-function + +Disallow missing `var` function for custom properties. + + +```css + :root { --foo: red; } + a { color: --foo; } +/** ↑ + * This custom property */ +``` + +This rule only reports custom properties that are defined within the same source. + +## Options + +### `true` + +The following patterns are considered violations: + + +```css +:root { --foo: red; } +a { color: --foo; } +``` + + +```css +@property --foo {} +a { color: --foo; } +``` + +The following patterns are _not_ considered violations: + + +```css +:root { --foo: red; } +a { color: var(--foo); } +``` + + +```css +@property --foo {} +a { color: var(--foo); } +``` diff --git a/lib/rules/custom-property-no-missing-var-function/__tests__/index.js b/lib/rules/custom-property-no-missing-var-function/__tests__/index.js new file mode 100644 index 0000000000..1a927fc32c --- /dev/null +++ b/lib/rules/custom-property-no-missing-var-function/__tests__/index.js @@ -0,0 +1,136 @@ +'use strict'; + +const stripIndent = require('common-tags').stripIndent; + +const { messages, ruleName } = require('..'); + +testRule({ + ruleName, + config: true, + + accept: [ + { + code: 'a { color: --foo; }', + description: 'undeclared dashed-ident', + }, + { + code: 'a { color: var(--foo); }', + description: 'undeclared dashed-ident in var', + }, + { + code: 'a { color: env(--foo); }', + description: 'undeclared dashed-ident in env', + }, + { + code: 'a { color: color(--foo 0% 0% 0% 0%); }', + description: 'undeclared dashed-ident in color', + }, + { + code: 'a { color: calc(var(--foo) + var(--bar)); }', + description: 'undeclared dashed-idents in vars in calc', + }, + { + code: 'a { color: var(--foo, red); }', + description: 'undeclared dashed-idents in var with fallback', + }, + { + code: 'a { --foo: var(--bar); }', + description: 'undeclared dashed-idents in vars assigned to custom property', + }, + { + code: ':root { --foo: red; } a { color: var(--foo); }', + description: 'declared custom property in var', + }, + { + code: '@property --foo {} a { color: var(--foo); }', + description: 'declared via at-property custom property in var', + }, + { + code: ':--foo {}', + description: 'custom selector', + }, + { + code: '@media(--foo) {}', + description: 'custom media query', + }, + ], + + reject: [ + { + code: 'a { --foo: red; color: --foo; }', + message: messages.rejected('--foo'), + line: 1, + column: 24, + description: 'declared custom property', + }, + { + code: '@property --foo {} a { color: --foo; }', + message: messages.rejected('--foo'), + line: 1, + column: 31, + description: 'declared via at-property custom property', + }, + { + code: ':root { --bar: 0; } a { --foo: --bar; }', + message: messages.rejected('--bar'), + line: 1, + column: 32, + description: 'declared in :root custom property', + }, + { + code: ':root { --bar: 0px; } a { color: calc(var(--foo) + --bar)); }', + message: messages.rejected('--bar'), + line: 1, + column: 52, + description: 'declared custom property and used inside calc', + }, + { + code: ':root { --foo: pink; } a { color: --foo, red; }', + message: messages.rejected('--foo'), + line: 1, + column: 36, + description: 'declared custom property and used with fall back', + }, + { + code: ':root { --bar: 0; } a { color: --foo(--bar); }', + message: messages.rejected('--bar'), + line: 1, + column: 38, + description: 'declared custom property used inside custom function', + }, + { + code: stripIndent` + :root { + --bar: 0; + --baz: 0; + } + + a { + --foo: --bar; + color: --baz; + } + `, + warnings: [ + { message: messages.rejected('--bar'), line: 7, column: 9 }, + { message: messages.rejected('--baz'), line: 8, column: 9 }, + ], + description: 'two declared custom properties', + }, + { + code: stripIndent` + @property --bar {} + @property --baz {} + + a { + --foo: --bar; + color: --baz; + } + `, + warnings: [ + { message: messages.rejected('--bar'), line: 5, column: 9 }, + { message: messages.rejected('--baz'), line: 6, column: 9 }, + ], + description: 'two declared via at-property custom properties', + }, + ], +}); diff --git a/lib/rules/custom-property-no-missing-var-function/index.js b/lib/rules/custom-property-no-missing-var-function/index.js new file mode 100644 index 0000000000..bc2e15bb34 --- /dev/null +++ b/lib/rules/custom-property-no-missing-var-function/index.js @@ -0,0 +1,76 @@ +// @ts-nocheck + +'use strict'; + +const valueParser = require('postcss-value-parser'); + +const declarationValueIndex = require('../../utils/declarationValueIndex'); +const isCustomProperty = require('../../utils/isCustomProperty'); +const report = require('../../utils/report'); +const ruleMessages = require('../../utils/ruleMessages'); +const validateOptions = require('../../utils/validateOptions'); + +const ruleName = 'custom-property-no-missing-var-function'; + +const messages = ruleMessages(ruleName, { + rejected: (customProperty) => `Unexpected missing var function for "${customProperty}"`, +}); + +function rule(actual) { + return (root, result) => { + const validOptions = validateOptions(result, ruleName, { + actual, + }); + + if (!validOptions) return; + + const customProperties = new Set(); + + root.walkAtRules(/^property$/i, (atRule) => { + customProperties.add(atRule.params); + }); + + root.walkDecls(({ prop }) => { + if (isCustomProperty(prop)) customProperties.add(prop); + }); + + root.walkDecls((decl) => { + const { value } = decl; + const parsedValue = valueParser(value); + + parsedValue.walk((node) => { + if (isVarFunction(node)) return false; + + if (!isDashedIdent(node)) return; + + if (!isKnownCustomProperty(node)) return; + + report({ + message: messages.rejected(node.value), + node: decl, + index: declarationValueIndex(decl) + node.sourceIndex, + result, + ruleName, + }); + + return false; + }); + }); + + function isKnownCustomProperty({ value }) { + return customProperties.has(value); + } + }; +} + +function isDashedIdent({ type, value }) { + return type === 'word' && value.startsWith('--'); +} + +function isVarFunction({ type, value }) { + return type === 'function' && value === 'var'; +} + +rule.ruleName = ruleName; +rule.messages = messages; +module.exports = rule; diff --git a/lib/rules/index.js b/lib/rules/index.js index f7345e7a08..c140ce59c3 100644 --- a/lib/rules/index.js +++ b/lib/rules/index.js @@ -66,6 +66,9 @@ const rules = { 'custom-property-empty-line-before': importLazy(() => require('./custom-property-empty-line-before'), )(), + 'custom-property-no-missing-var-function': importLazy(() => + require('./custom-property-no-missing-var-function'), + )(), 'custom-property-pattern': importLazy(() => require('./custom-property-pattern'))(), 'declaration-bang-space-after': importLazy(() => require('./declaration-bang-space-after'))(), 'declaration-bang-space-before': importLazy(() => require('./declaration-bang-space-before'))(), From 71cb4fb72b4a894e5b2962d67b492271818b0437 Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Sat, 29 May 2021 09:26:29 +0100 Subject: [PATCH 029/194] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f96c3e63a..f4d5069748 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ All notable changes to this project are documented in this file. - Removed: `function-calc-no-invalid` ([#5296](https://github.com/stylelint/stylelint/pull/5296)). - Removed: Drop Node 10 support ([#5303](https://github.com/stylelint/stylelint/pull/5303)). - Added: `color-hex-alpha` rule ([#5316](https://github.com/stylelint/stylelint/pull/5316)). +- Added: `custom-property-no-missing-var-function` rule ([#5317](https://github.com/stylelint/stylelint/pull/5317)). - Added: `function-calc-no-unspaced-operator` autofix ([#5273](https://github.com/stylelint/stylelint/pull/5273)). - Added: `ignoreFunctions: []` to `length-zero-no-unit` ([#5314](https://github.com/stylelint/stylelint/pull/5314)). - Fixed: `length-zero-no-unit` false positives for `flex` property ([#5315](https://github.com/stylelint/stylelint/pull/5315)). From 99f9d3793259dfc26cfa8f7f11915b0b59e2d80f Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Sun, 30 May 2021 03:13:12 -0400 Subject: [PATCH 030/194] Refactor to remove remaining uses of `_.get` and `_.set` (#5328) --- lib/lintPostcssResult.js | 15 +++++------- lib/postcssPlugin.js | 7 +++--- lib/rules/function-whitespace-after/index.js | 3 +-- lib/rules/linebreaks/index.js | 14 ++++++----- lib/rules/max-empty-lines/index.js | 18 +++++++------- lib/rules/media-feature-name-case/index.js | 5 ++-- .../index.js | 3 +-- .../index.js | 24 +++++++++++++------ .../index.js | 23 +++++++++++++----- .../index.js | 13 ++++++---- lib/rules/selector-type-case/index.js | 4 ++-- lib/utils/declarationValueIndex.js | 16 +++++++------ lib/utils/getAtRuleParams.js | 8 ++++--- lib/utils/getDeclarationValue.js | 8 ++++--- lib/utils/getNextNonSharedLineCommentNode.js | 6 ++--- .../getPreviousNonSharedLineCommentNode.js | 4 +--- lib/utils/getRuleSelector.js | 8 ++++--- lib/utils/isCustomPropertySet.js | 7 ++++-- lib/utils/isSharedLineComment.js | 6 +++-- lib/utils/isStandardSyntaxRule.js | 7 ++++-- lib/utils/setAtRuleParams.js | 10 ++++---- lib/utils/setDeclarationValue.js | 13 +++++----- 22 files changed, 130 insertions(+), 92 deletions(-) diff --git a/lib/lintPostcssResult.js b/lib/lintPostcssResult.js index 14930322bf..527627e03d 100644 --- a/lib/lintPostcssResult.js +++ b/lib/lintPostcssResult.js @@ -1,7 +1,6 @@ 'use strict'; const assignDisabledRanges = require('./assignDisabledRanges'); -const get = require('lodash/get'); const getOsEol = require('./utils/getOsEol'); const reportUnknownRuleNames = require('./reportUnknownRuleNames'); const rulesOrder = require('./rules'); @@ -64,7 +63,8 @@ function lintPostcssResult(stylelintOptions, postcssResult, config) { : []; rules.forEach((ruleName) => { - const ruleFunction = rulesOrder[ruleName] || get(config, ['pluginFunctions', ruleName]); + const ruleFunction = + rulesOrder[ruleName] || (config.pluginFunctions && config.pluginFunctions[ruleName]); if (ruleFunction === undefined) { performRules.push( @@ -78,7 +78,7 @@ function lintPostcssResult(stylelintOptions, postcssResult, config) { return; } - const ruleSettings = get(config, ['rules', ruleName]); + const ruleSettings = config.rules && config.rules[ruleName]; if (ruleSettings === null || ruleSettings[0] === null) { return; @@ -90,12 +90,9 @@ function lintPostcssResult(stylelintOptions, postcssResult, config) { // Log the rule's severity in the PostCSS result const defaultSeverity = config.defaultSeverity || 'error'; - postcssResult.stylelint.ruleSeverities[ruleName] = get( - secondaryOptions, - 'severity', - defaultSeverity, - ); - postcssResult.stylelint.customMessages[ruleName] = get(secondaryOptions, 'message'); + postcssResult.stylelint.ruleSeverities[ruleName] = + (secondaryOptions && secondaryOptions.severity) || defaultSeverity; + postcssResult.stylelint.customMessages[ruleName] = secondaryOptions && secondaryOptions.message; performRules.push( Promise.all( diff --git a/lib/postcssPlugin.js b/lib/postcssPlugin.js index 292ac9edc4..35da0b3d2f 100644 --- a/lib/postcssPlugin.js +++ b/lib/postcssPlugin.js @@ -1,6 +1,5 @@ 'use strict'; -const _ = require('lodash'); const createStylelint = require('./createStylelint'); const path = require('path'); const postcss = require('postcss'); @@ -11,9 +10,11 @@ module.exports = postcss.plugin('stylelint', (options = {}) => { const stylelint = createStylelint(tailoredOptions); return (root, result) => { - let filePath = options.from || _.get(root, 'source.input.file'); + let filePath = options.from; - if (filePath !== undefined && !path.isAbsolute(filePath)) { + if (!filePath) filePath = root.source && root.source.input.file; + + if (filePath && !path.isAbsolute(filePath)) { filePath = path.join(process.cwd(), filePath); } diff --git a/lib/rules/function-whitespace-after/index.js b/lib/rules/function-whitespace-after/index.js index 0ab3f8e287..7048a045d1 100644 --- a/lib/rules/function-whitespace-after/index.js +++ b/lib/rules/function-whitespace-after/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const atRuleParamIndex = require('../../utils/atRuleParamIndex'); const declarationValueIndex = require('../../utils/declarationValueIndex'); const getDeclarationValue = require('../../utils/getDeclarationValue'); @@ -136,7 +135,7 @@ function rule(expectation, options, context) { } root.walkAtRules(/^import$/i, (atRule) => { - const param = _.get(atRule, 'raws.params.raw', atRule.params); + const param = (atRule.raws.params && atRule.raws.params.raw) || atRule.params; const fixer = context.fix && createFixer(param); check(atRule, param, atRuleParamIndex, fixer && fixer.applyFix); diff --git a/lib/rules/linebreaks/index.js b/lib/rules/linebreaks/index.js index a3c7577b9d..575fd30621 100644 --- a/lib/rules/linebreaks/index.js +++ b/lib/rules/linebreaks/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const postcss = require('postcss'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); @@ -28,14 +27,17 @@ function rule(actual, secondary, context) { const shouldHaveCR = actual === 'windows'; if (context.fix) { - const propertiesToUpdate = ['selector', 'raws.before', 'raws.after', 'value', 'text']; + const propertiesToUpdate = ['selector', 'value', 'text']; + const rawsPropertiesToUpdate = ['before', 'after']; root.walk((node) => { - propertiesToUpdate.forEach((property) => { - const fixedData = fixData(_.get(node, property)); + for (const property of propertiesToUpdate) { + node[property] = fixData(node[property]); + } - _.set(node, property, fixedData); - }); + for (const property of rawsPropertiesToUpdate) { + node.raws[property] = fixData(node.raws[property]); + } }); root.raws.after = fixData(root.raws.after); diff --git a/lib/rules/max-empty-lines/index.js b/lib/rules/max-empty-lines/index.js index e6b6d383f1..4c073deafb 100644 --- a/lib/rules/max-empty-lines/index.js +++ b/lib/rules/max-empty-lines/index.js @@ -71,23 +71,23 @@ function rule(max, options, context) { }); // first node - const firstNodeRawsBefore = _.get(root, 'first.raws.before'); + const firstNodeRawsBefore = root.first && root.first.raws.before; // root raws - const rootRawsAfter = _.get(root, 'raws.after'); + const rootRawsAfter = root.raws.after; // not document node - if (_.get(root, 'document.constructor.name') !== 'Document') { + if ((root.document && root.document.constructor.name) !== 'Document') { if (firstNodeRawsBefore) { - _.set(root, 'first.raws.before', getChars(firstNodeRawsBefore, true)); + root.first.raws.before = getChars(firstNodeRawsBefore, true); } if (rootRawsAfter) { // when max setted 0, should be treated as 1 in this situation. - _.set(root, 'raws.after', replaceEmptyLines(max === 0 ? 1 : max, rootRawsAfter, true)); + root.raws.after = replaceEmptyLines(max === 0 ? 1 : max, rootRawsAfter, true); } } else if (rootRawsAfter) { // `css in js` or `html` - _.set(root, 'raws.after', replaceEmptyLines(max === 0 ? 1 : max, rootRawsAfter)); + root.raws.after = replaceEmptyLines(max === 0 ? 1 : max, rootRawsAfter); } return; @@ -194,11 +194,13 @@ function isEofNode(document, root) { let after; if (root === document.last) { - after = _.get(document, 'raws.afterEnd'); + after = document.raws && document.raws.afterEnd; } else { const rootIndex = document.index(root); - after = _.get(document.nodes[rootIndex + 1], 'raws.beforeStart'); + const nextNode = document.nodes[rootIndex + 1]; + + after = nextNode && nextNode.raws && nextNode.raws.beforeStart; } return !String(after).trim(); diff --git a/lib/rules/media-feature-name-case/index.js b/lib/rules/media-feature-name-case/index.js index bd86c569a7..5d57177e7a 100644 --- a/lib/rules/media-feature-name-case/index.js +++ b/lib/rules/media-feature-name-case/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const atRuleParamIndex = require('../../utils/atRuleParamIndex'); const isCustomMediaQuery = require('../../utils/isCustomMediaQuery'); const isRangeContextMediaFeature = require('../../utils/isRangeContextMediaFeature'); @@ -31,7 +30,7 @@ function rule(expectation, options, context) { } root.walkAtRules(/^media$/i, (atRule) => { - let hasComments = _.get(atRule, 'raws.params.raw'); + let hasComments = atRule.raws.params && atRule.raws.params.raw; const mediaRule = hasComments ? hasComments : atRule.params; mediaParser(mediaRule).walk(/^media-feature$/i, (mediaFeatureNode) => { @@ -68,7 +67,7 @@ function rule(expectation, options, context) { hasComments.slice(0, sourceIndex) + expectedFeatureName + hasComments.slice(sourceIndex + expectedFeatureName.length); - _.set(atRule, 'raws.params.raw', hasComments); + atRule.raws.params.raw = hasComments; } else { atRule.params = atRule.params.slice(0, sourceIndex) + diff --git a/lib/rules/media-feature-parentheses-space-inside/index.js b/lib/rules/media-feature-parentheses-space-inside/index.js index 7381153775..32631d756e 100644 --- a/lib/rules/media-feature-parentheses-space-inside/index.js +++ b/lib/rules/media-feature-parentheses-space-inside/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const atRuleParamIndex = require('../../utils/atRuleParamIndex'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); @@ -32,7 +31,7 @@ function rule(expectation, options, context) { root.walkAtRules(/^media$/i, (atRule) => { // If there are comments in the params, the complete string // will be at atRule.raws.params.raw - const params = _.get(atRule, 'raws.params.raw', atRule.params); + const params = (atRule.raws.params && atRule.raws.params.raw) || atRule.params; const indexBoost = atRuleParamIndex(atRule); const violations = []; diff --git a/lib/rules/selector-attribute-brackets-space-inside/index.js b/lib/rules/selector-attribute-brackets-space-inside/index.js index f05ad1a863..04c6298b6d 100644 --- a/lib/rules/selector-attribute-brackets-space-inside/index.js +++ b/lib/rules/selector-attribute-brackets-space-inside/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); const parseSelector = require('../../utils/parseSelector'); const report = require('../../utils/report'); @@ -123,7 +122,10 @@ function rule(expectation, options, context) { }; function fixBefore(attributeNode) { - const rawAttrBefore = _.get(attributeNode, 'raws.spaces.attribute.before'); + const rawAttrBefore = + attributeNode.raws.spaces && + attributeNode.raws.spaces.attribute && + attributeNode.raws.spaces.attribute.before; const { attrBefore, setAttrBefore } = rawAttrBefore ? { attrBefore: rawAttrBefore, @@ -132,9 +134,12 @@ function rule(expectation, options, context) { }, } : { - attrBefore: _.get(attributeNode, 'spaces.attribute.before', ''), + attrBefore: + (attributeNode.spaces.attribute && attributeNode.spaces.attribute.before) || '', setAttrBefore(fixed) { - _.set(attributeNode, 'spaces.attribute.before', fixed); + if (!attributeNode.spaces.attribute) attributeNode.spaces.attribute = {}; + + attributeNode.spaces.attribute.before = fixed; }, }; @@ -154,7 +159,10 @@ function rule(expectation, options, context) { key = 'attribute'; } - const rawAfter = _.get(attributeNode, `raws.spaces.${key}.after`); + const rawAfter = + attributeNode.raws.spaces && + attributeNode.raws.spaces[key] && + attributeNode.raws.spaces[key].after; const { after, setAfter } = rawAfter ? { after: rawAfter, @@ -163,9 +171,11 @@ function rule(expectation, options, context) { }, } : { - after: _.get(attributeNode, `spaces.${key}.after`, ''), + after: (attributeNode.spaces[key] && attributeNode.spaces[key].after) || '', setAfter(fixed) { - _.set(attributeNode, `spaces.${key}.after`, fixed); + if (!attributeNode.spaces[key]) attributeNode.spaces[key] = {}; + + attributeNode.spaces[key].after = fixed; }, }; diff --git a/lib/rules/selector-attribute-operator-space-after/index.js b/lib/rules/selector-attribute-operator-space-after/index.js index f4fccaa10e..4304cfcde3 100644 --- a/lib/rules/selector-attribute-operator-space-after/index.js +++ b/lib/rules/selector-attribute-operator-space-after/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const ruleMessages = require('../../utils/ruleMessages'); const selectorAttributeOperatorSpaceChecker = require('../selectorAttributeOperatorSpaceChecker'); const validateOptions = require('../../utils/validateOptions'); @@ -36,19 +35,28 @@ function rule(expectation, options, context) { fix: context.fix ? (attributeNode) => { const { operatorAfter, setOperatorAfter } = (() => { - const rawOperator = _.get(attributeNode, 'raws.operator'); + const rawOperator = attributeNode.raws.operator; if (rawOperator) { return { operatorAfter: rawOperator.slice(attributeNode.operator.length), setOperatorAfter(fixed) { delete attributeNode.raws.operator; - _.set(attributeNode, 'raws.spaces.operator.after', fixed); + + if (!attributeNode.raws.spaces) attributeNode.raws.spaces = {}; + + if (!attributeNode.raws.spaces.operator) + attributeNode.raws.spaces.operator = {}; + + attributeNode.raws.spaces.operator.after = fixed; }, }; } - const rawOperatorAfter = _.get(attributeNode, 'raws.spaces.operator.after'); + const rawOperatorAfter = + attributeNode.raws.spaces && + attributeNode.raws.spaces.operator && + attributeNode.raws.spaces.operator.after; if (rawOperatorAfter) { return { @@ -60,9 +68,12 @@ function rule(expectation, options, context) { } return { - operatorAfter: _.get(attributeNode, 'spaces.operator.after', ''), + operatorAfter: + (attributeNode.spaces.operator && attributeNode.spaces.operator.after) || '', setOperatorAfter(fixed) { - _.set(attributeNode, 'spaces.operator.after', fixed); + if (!attributeNode.spaces.operator) attributeNode.spaces.operator = {}; + + attributeNode.spaces.operator.after = fixed; }, }; })(); diff --git a/lib/rules/selector-attribute-operator-space-before/index.js b/lib/rules/selector-attribute-operator-space-before/index.js index 0f0a189129..63218b05bf 100644 --- a/lib/rules/selector-attribute-operator-space-before/index.js +++ b/lib/rules/selector-attribute-operator-space-before/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const ruleMessages = require('../../utils/ruleMessages'); const selectorAttributeOperatorSpaceChecker = require('../selectorAttributeOperatorSpaceChecker'); const validateOptions = require('../../utils/validateOptions'); @@ -36,7 +35,10 @@ function rule(expectation, options, context) { checkBeforeOperator: true, fix: context.fix ? (attributeNode) => { - const rawAttrAfter = _.get(attributeNode, 'raws.spaces.attribute.after'); + const rawAttrAfter = + attributeNode.raws.spaces && + attributeNode.raws.spaces.attribute && + attributeNode.raws.spaces.attribute.after; const { attrAfter, setAttrAfter } = rawAttrAfter ? { attrAfter: rawAttrAfter, @@ -45,9 +47,12 @@ function rule(expectation, options, context) { }, } : { - attrAfter: _.get(attributeNode, 'spaces.attribute.after', ''), + attrAfter: + (attributeNode.spaces.attribute && attributeNode.spaces.attribute.after) || '', setAttrAfter(fixed) { - _.set(attributeNode, 'spaces.attribute.after', fixed); + if (!attributeNode.spaces.attribute) attributeNode.spaces.attribute = {}; + + attributeNode.spaces.attribute.after = fixed; }, }; diff --git a/lib/rules/selector-type-case/index.js b/lib/rules/selector-type-case/index.js index 30d59757fc..e28fdf9933 100644 --- a/lib/rules/selector-type-case/index.js +++ b/lib/rules/selector-type-case/index.js @@ -41,7 +41,7 @@ function rule(expectation, options, context) { } root.walkRules((ruleNode) => { - let hasComments = _.get(ruleNode, 'raws.selector.raw'); + let hasComments = ruleNode.raws.selector && ruleNode.raws.selector.raw; const selector = hasComments ? hasComments : ruleNode.selector; const selectors = ruleNode.selectors; @@ -78,7 +78,7 @@ function rule(expectation, options, context) { hasComments.slice(0, sourceIndex) + expectedValue + hasComments.slice(sourceIndex + value.length); - _.set(ruleNode, 'raws.selector.raw', hasComments); + ruleNode.raws.selector.raw = hasComments; } else { ruleNode.selector = ruleNode.selector.slice(0, sourceIndex) + diff --git a/lib/utils/declarationValueIndex.js b/lib/utils/declarationValueIndex.js index 52eb89cde7..abc02f890f 100644 --- a/lib/utils/declarationValueIndex.js +++ b/lib/utils/declarationValueIndex.js @@ -1,7 +1,5 @@ 'use strict'; -const _ = require('lodash'); - /** * Get the index of a declaration's value * @@ -10,12 +8,16 @@ const _ = require('lodash'); * @returns {number} */ module.exports = function (decl) { + // Casting this to any because 'prop' and 'value' do not exist on type 'NodeRaws' + /** @type {any} */ + const raws = decl.raws; + return [ - _.get(decl, 'raws.prop.prefix'), - _.get(decl, 'raws.prop.raw', decl.prop), - _.get(decl, 'raws.prop.suffix'), - _.get(decl, 'raws.between', ':'), - _.get(decl, 'raws.value.prefix'), + raws.prop && raws.prop.prefix, + (raws.prop && raws.prop.raw) || decl.prop, + raws.prop && raws.prop.suffix, + raws.between || ':', + raws.value && raws.value.prefix, ].reduce((count, str) => { if (str) { return count + str.length; diff --git a/lib/utils/getAtRuleParams.js b/lib/utils/getAtRuleParams.js index ea891dcecc..d099530622 100644 --- a/lib/utils/getAtRuleParams.js +++ b/lib/utils/getAtRuleParams.js @@ -1,11 +1,13 @@ 'use strict'; -const _ = require('lodash'); - /** * @param {import('postcss').AtRule} atRule * @returns {string} */ module.exports = function getAtRuleParams(atRule) { - return _.get(atRule, 'raws.params.raw', atRule.params); + // Casting this to any because 'params' does not exist on type 'NodeRaws' + /** @type {any} */ + const raws = atRule.raws; + + return (raws.params && raws.params.raw) || atRule.params; }; diff --git a/lib/utils/getDeclarationValue.js b/lib/utils/getDeclarationValue.js index e8bc5d1830..8273c0365f 100644 --- a/lib/utils/getDeclarationValue.js +++ b/lib/utils/getDeclarationValue.js @@ -1,11 +1,13 @@ 'use strict'; -const _ = require('lodash'); - /** * @param {import('postcss').Declaration} decl * @returns {string} */ module.exports = function getDeclarationValue(decl) { - return _.get(decl, 'raws.value.raw', decl.value); + // Casting this to any because 'value' does not exist on type 'NodeRaws' + /** @type {any} */ + const raws = decl.raws; + + return (raws.value && raws.value.raw) || decl.value; }; diff --git a/lib/utils/getNextNonSharedLineCommentNode.js b/lib/utils/getNextNonSharedLineCommentNode.js index 86081aa6ba..c93cd91905 100644 --- a/lib/utils/getNextNonSharedLineCommentNode.js +++ b/lib/utils/getNextNonSharedLineCommentNode.js @@ -1,14 +1,12 @@ 'use strict'; -const _ = require('lodash'); - /** @typedef {import('postcss').Node} Node */ /** * @param {Node | void} node */ function getNodeLine(node) { - return _.get(node, 'source.start.line'); + return node && node.source && node.source.start && node.source.start.line; } /** @@ -29,7 +27,7 @@ module.exports = function getNextNonSharedLineCommentNode(node) { if ( getNodeLine(node) === getNodeLine(nextNode) || - (nextNode !== undefined && getNodeLine(nextNode) === getNodeLine(nextNode.next())) + getNodeLine(nextNode) === getNodeLine(nextNode.next()) ) { return getNextNonSharedLineCommentNode(nextNode); } diff --git a/lib/utils/getPreviousNonSharedLineCommentNode.js b/lib/utils/getPreviousNonSharedLineCommentNode.js index b6a8cb8d41..5933af9db4 100644 --- a/lib/utils/getPreviousNonSharedLineCommentNode.js +++ b/lib/utils/getPreviousNonSharedLineCommentNode.js @@ -1,14 +1,12 @@ 'use strict'; -const _ = require('lodash'); - /** @typedef {import('postcss').Node} Node */ /** * @param {Node} node */ function getNodeLine(node) { - return _.get(node, 'source.start.line'); + return node.source && node.source.start && node.source.start.line; } /** diff --git a/lib/utils/getRuleSelector.js b/lib/utils/getRuleSelector.js index 715cf1e350..24505234fa 100644 --- a/lib/utils/getRuleSelector.js +++ b/lib/utils/getRuleSelector.js @@ -1,13 +1,15 @@ 'use strict'; -const _ = require('lodash'); - /** * @param {import('postcss').Rule} ruleNode * @returns {string} */ function getRuleSelector(ruleNode) { - return _.get(ruleNode, 'raws.selector.raw', ruleNode.selector); + // Casting this to any because 'value' does not exist on type 'NodeRaws' + /** @type {any} */ + const raws = ruleNode.raws; + + return (raws.selector && raws.selector.raw) || ruleNode.selector; } module.exports = getRuleSelector; diff --git a/lib/utils/isCustomPropertySet.js b/lib/utils/isCustomPropertySet.js index 31abdfc108..786076cf02 100644 --- a/lib/utils/isCustomPropertySet.js +++ b/lib/utils/isCustomPropertySet.js @@ -1,6 +1,5 @@ 'use strict'; -const _ = require('lodash'); const hasBlock = require('../utils/hasBlock'); /** @@ -10,7 +9,11 @@ const hasBlock = require('../utils/hasBlock'); * @returns {boolean} */ module.exports = function (node) { - const selector = _.get(node, 'raws.selector.raw', node.selector); + // Casting this to any because 'selector' does not exist on type 'NodeRaws' + /** @type {any} */ + const raws = node.raws; + + const selector = (raws.selector && raws.selector.raw) || node.selector; return ( node.type === 'rule' && hasBlock(node) && selector.startsWith('--') && selector.endsWith(':') diff --git a/lib/utils/isSharedLineComment.js b/lib/utils/isSharedLineComment.js index 1cfda15df8..5eb177fe81 100644 --- a/lib/utils/isSharedLineComment.js +++ b/lib/utils/isSharedLineComment.js @@ -1,6 +1,5 @@ 'use strict'; -const _ = require('lodash'); const getNextNonSharedLineCommentNode = require('./getNextNonSharedLineCommentNode'); const getPreviousNonSharedLineCommentNode = require('./getPreviousNonSharedLineCommentNode'); @@ -12,7 +11,10 @@ const getPreviousNonSharedLineCommentNode = require('./getPreviousNonSharedLineC * @param {PostcssNode | void} b */ function nodesShareLines(a, b) { - return _.get(a, 'source.end.line') === _.get(b, 'source.start.line'); + const aLine = a && a.source && a.source.end && a.source.end.line; + const bLine = b && b.source && b.source.start && b.source.start.line; + + return aLine === bLine; } /** diff --git a/lib/utils/isStandardSyntaxRule.js b/lib/utils/isStandardSyntaxRule.js index bca92da849..ada3d75350 100644 --- a/lib/utils/isStandardSyntaxRule.js +++ b/lib/utils/isStandardSyntaxRule.js @@ -1,6 +1,5 @@ 'use strict'; -const _ = require('lodash'); const isCustomPropertySet = require('../utils/isCustomPropertySet'); const isStandardSyntaxSelector = require('../utils/isStandardSyntaxSelector'); @@ -15,8 +14,12 @@ module.exports = function (rule) { return false; } + // Casting this to any because 'selector' does not exist on type 'NodeRaws' + /** @type {any} */ + const raws = rule.raws; + // Get full selector - const selector = _.get(rule, 'raws.selector.raw', rule.selector); + const selector = (raws.selector && raws.selector.raw) || rule.selector; if (!isStandardSyntaxSelector(rule.selector)) { return false; diff --git a/lib/utils/setAtRuleParams.js b/lib/utils/setAtRuleParams.js index 7ccfff199a..8ec711a686 100644 --- a/lib/utils/setAtRuleParams.js +++ b/lib/utils/setAtRuleParams.js @@ -1,7 +1,5 @@ 'use strict'; -const _ = require('lodash'); - /** @typedef {import('postcss').AtRule} AtRule */ /** @@ -10,8 +8,12 @@ const _ = require('lodash'); * @returns {AtRule} The atRulearation that was passed in. */ module.exports = function setAtRuleParams(atRule, params) { - if (_.has(atRule, 'raws.params')) { - _.set(atRule, 'raws.params.raw', params); + // Casting this to any because 'params' does not exist on type 'NodeRaws' + /** @type {any} */ + const raws = atRule.raws; + + if (raws.params) { + raws.params.raw = params; } else { atRule.params = params; } diff --git a/lib/utils/setDeclarationValue.js b/lib/utils/setDeclarationValue.js index f714545058..038e818d55 100644 --- a/lib/utils/setDeclarationValue.js +++ b/lib/utils/setDeclarationValue.js @@ -1,7 +1,5 @@ 'use strict'; -const _ = require('lodash'); - /** @typedef {import('postcss').Declaration} Declaration */ /** @@ -10,11 +8,12 @@ const _ = require('lodash'); * @returns {Declaration} The declaration that was passed in. */ module.exports = function setDeclarationValue(decl, value) { - // Lodash is necessary here because the declaration may not strictly adhere - // to the current version of PostCSS's Declaration interface. - // See also: https://github.com/stylelint/stylelint/pull/5183/files#r588047494 - if (_.has(decl, 'raws.value')) { - _.set(decl, 'raws.value.raw', value); + // Casting this to any because 'value' does not exist on type 'NodeRaws' + /** @type {any} */ + const raws = decl.raws; + + if (raws.value) { + raws.value.raw = value; } else { decl.value = value; } From d56ab948eb3ae2bbb5bd1e85eab917567211f579 Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Mon, 31 May 2021 04:34:36 -0400 Subject: [PATCH 031/194] Remove `_.remove` (#5329) --- lib/createPartialStylelintResult.js | 30 ++++++++++++++++------------- lib/needlessDisables.js | 10 +++++----- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/lib/createPartialStylelintResult.js b/lib/createPartialStylelintResult.js index b7a0a059ef..744403f639 100644 --- a/lib/createPartialStylelintResult.js +++ b/lib/createPartialStylelintResult.js @@ -1,7 +1,5 @@ 'use strict'; -const _ = require('lodash'); - /** @typedef {import('stylelint').PostcssResult} PostcssResult */ /** @typedef {import('postcss').NodeSource} NodeSource */ /** @typedef {import('stylelint').StylelintResult} StylelintResult */ @@ -26,10 +24,9 @@ module.exports = function (postcssResult, cssSyntaxError) { } } - // Strip out deprecation warnings from the messages - const deprecationMessages = _.remove(postcssResult.messages, { - stylelintType: 'deprecation', - }); + const deprecationMessages = postcssResult.messages.filter( + (message) => message.stylelintType === 'deprecation', + ); const deprecations = deprecationMessages.map((deprecationMessage) => { return { text: deprecationMessage.text, @@ -37,19 +34,26 @@ module.exports = function (postcssResult, cssSyntaxError) { }; }); - // Also strip out invalid options - const invalidOptionMessages = _.remove(postcssResult.messages, { - stylelintType: 'invalidOption', - }); + const invalidOptionMessages = postcssResult.messages.filter( + (message) => message.stylelintType === 'invalidOption', + ); const invalidOptionWarnings = invalidOptionMessages.map((invalidOptionMessage) => { return { text: invalidOptionMessage.text, }; }); - const parseErrors = _.remove(postcssResult.messages, { - stylelintType: 'parseError', - }); + const parseErrors = postcssResult.messages.filter( + (message) => message.stylelintType === 'parseError', + ); + + // Remove deprecation warnings, invalid options, and parse errors from the messages + postcssResult.messages = postcssResult.messages.filter( + (message) => + message.stylelintType !== 'deprecation' && + message.stylelintType !== 'invalidOption' && + message.stylelintType !== 'parseError', + ); // This defines the stylelint result object that formatters receive stylelintResult = { diff --git a/lib/needlessDisables.js b/lib/needlessDisables.js index f0d2fe036e..0ba693672a 100644 --- a/lib/needlessDisables.js +++ b/lib/needlessDisables.js @@ -55,19 +55,19 @@ module.exports = function (results) { } } - const rangeEntries = Object.entries(rangeData); - // Get rid of the duplicated ranges for each `all` rule. We only care // if the entire `all` rule is useful as a whole or not. for (const range of rangeData.all) { - for (const [rule, ranges] of rangeEntries) { + for (const rule of Object.keys(rangeData)) { if (rule === 'all') continue; - _.remove(ranges, (otherRange) => range.comment === otherRange.comment); + rangeData[rule] = rangeData[rule].filter( + (otherRange) => range.comment !== otherRange.comment, + ); } } - for (const [rule, ranges] of rangeEntries) { + for (const [rule, ranges] of Object.entries(rangeData)) { for (const range of ranges) { if (enabled === optionsMatches(options, 'except', rule)) continue; From 21f1e3a8f95ab0a42e30cb75c31fc5c55785ffa9 Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Mon, 31 May 2021 04:35:03 -0400 Subject: [PATCH 032/194] Remove `_.isNil` (#5330) --- lib/normalizeRuleSettings.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/normalizeRuleSettings.js b/lib/normalizeRuleSettings.js index d11ec42083..a5683f25e4 100644 --- a/lib/normalizeRuleSettings.js +++ b/lib/normalizeRuleSettings.js @@ -30,7 +30,7 @@ module.exports = function ( // rules themselves, which will not work for plugins primaryOptionArray, ) { - if (_.isNil(rawSettings)) { + if (rawSettings === null || rawSettings === undefined) { return null; } @@ -39,7 +39,7 @@ module.exports = function ( } // Everything below is an array ... - if (rawSettings.length > 0 && _.isNil(rawSettings[0])) { + if (rawSettings.length > 0 && (rawSettings[0] === null || rawSettings[0] === undefined)) { return null; } From 0ac3f4b028bb8bed8520f7ead607f22108356c08 Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Mon, 31 May 2021 04:35:35 -0400 Subject: [PATCH 033/194] Remove `_.flatMap` (#5331) --- lib/formatters/compactFormatter.js | 24 ++++++++++++------------ lib/formatters/stringFormatter.js | 6 +++--- lib/formatters/unixFormatter.js | 4 +--- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/lib/formatters/compactFormatter.js b/lib/formatters/compactFormatter.js index 3b60e0b4de..667c3b52e7 100644 --- a/lib/formatters/compactFormatter.js +++ b/lib/formatters/compactFormatter.js @@ -1,20 +1,20 @@ 'use strict'; -const _ = require('lodash'); - /** * @type {import('stylelint').Formatter} */ const formatter = (results) => - _.flatMap(results, (result) => - result.warnings.map( - (warning) => - `${result.source}: ` + - `line ${warning.line}, ` + - `col ${warning.column}, ` + - `${warning.severity} - ` + - `${warning.text}`, - ), - ).join('\n'); + results + .flatMap((result) => + result.warnings.map( + (warning) => + `${result.source}: ` + + `line ${warning.line}, ` + + `col ${warning.column}, ` + + `${warning.severity} - ` + + `${warning.text}`, + ), + ) + .join('\n'); module.exports = formatter; diff --git a/lib/formatters/stringFormatter.js b/lib/formatters/stringFormatter.js index 58493df198..8494a4245d 100644 --- a/lib/formatters/stringFormatter.js +++ b/lib/formatters/stringFormatter.js @@ -21,7 +21,7 @@ const levelColors = { * @returns {string} */ function deprecationsFormatter(results) { - const allDeprecationWarnings = _.flatMap(results, 'deprecations'); + const allDeprecationWarnings = results.flatMap((result) => result.deprecations); const uniqueDeprecationWarnings = _.uniqBy(allDeprecationWarnings, 'text'); if (!uniqueDeprecationWarnings || !uniqueDeprecationWarnings.length) { @@ -46,8 +46,8 @@ function deprecationsFormatter(results) { * @return {string} */ function invalidOptionsFormatter(results) { - const allInvalidOptionWarnings = _.flatMap(results, (r) => - r.invalidOptionWarnings.map((w) => w.text), + const allInvalidOptionWarnings = results.flatMap((result) => + result.invalidOptionWarnings.map((warning) => warning.text), ); const uniqueInvalidOptionWarnings = [...new Set(allInvalidOptionWarnings)]; diff --git a/lib/formatters/unixFormatter.js b/lib/formatters/unixFormatter.js index 6e89f87adc..6a362874ba 100644 --- a/lib/formatters/unixFormatter.js +++ b/lib/formatters/unixFormatter.js @@ -1,12 +1,10 @@ 'use strict'; -const _ = require('lodash'); - /** * @type {import('stylelint').Formatter} */ const unixFormatter = (results) => { - const lines = _.flatMap(results, (result) => + const lines = results.flatMap((result) => result.warnings.map( (warning) => `${result.source}:${warning.line}:${warning.column}: ` + From 9ac4f9268bbf42546895684b167bf06098ffd10e Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Tue, 1 Jun 2021 07:35:12 -0400 Subject: [PATCH 034/194] Remove `_.isPlainObject` (#5336) --- lib/normalizeRuleSettings.js | 5 ++--- lib/utils/validateObjectWithArrayProps.js | 6 ++---- lib/utils/validateOptions.js | 4 ++-- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/lib/normalizeRuleSettings.js b/lib/normalizeRuleSettings.js index a5683f25e4..844f80e716 100644 --- a/lib/normalizeRuleSettings.js +++ b/lib/normalizeRuleSettings.js @@ -1,6 +1,5 @@ 'use strict'; -const _ = require('lodash'); const rules = require('./rules'); // Rule settings can take a number of forms, e.g. @@ -64,8 +63,8 @@ module.exports = function ( if ( rawSettings.length === 2 && - !_.isPlainObject(rawSettings[0]) && - _.isPlainObject(rawSettings[1]) + Object.prototype.toString.call(rawSettings[0]) !== '[object Object]' && + Object.prototype.toString.call(rawSettings[1]) === '[object Object]' ) { return rawSettings; } diff --git a/lib/utils/validateObjectWithArrayProps.js b/lib/utils/validateObjectWithArrayProps.js index 3150dc3ada..b5f6de54d1 100644 --- a/lib/utils/validateObjectWithArrayProps.js +++ b/lib/utils/validateObjectWithArrayProps.js @@ -1,14 +1,12 @@ 'use strict'; -const _ = require('lodash'); - /** * @template T * @typedef {(i: T) => boolean} Validator */ /** - * Check whether the variable is an object and all it's properties are arrays of string values: + * Check whether the variable is an object and all its properties are arrays of string values: * * ignoreProperties = { * value1: ["item11", "item12", "item13"], @@ -20,7 +18,7 @@ const _ = require('lodash'); * @returns {(value: {[k: any]: T|T[]}) => boolean} */ module.exports = (validator) => (value) => { - if (!_.isPlainObject(value)) { + if (Object.prototype.toString.call(value) !== '[object Object]') { return false; } diff --git a/lib/utils/validateOptions.js b/lib/utils/validateOptions.js index 631c537be5..19b520f533 100644 --- a/lib/utils/validateOptions.js +++ b/lib/utils/validateOptions.js @@ -108,7 +108,7 @@ function validate(opts, ruleName, complain) { } // If `possible` is an array instead of an object ... - if (!_.isPlainObject(possible)) { + if (Array.isArray(possible)) { [].concat(actual).forEach((a) => { if (isValid(possible, a)) { return; @@ -121,7 +121,7 @@ function validate(opts, ruleName, complain) { } // If actual is NOT an object ... - if (typeof actual !== 'object') { + if (Object.prototype.toString.call(actual) !== '[object Object]') { complain( `Invalid option value ${JSON.stringify(actual)} for rule "${ruleName}": should be an object`, ); From acfaad4035a354f72b404eb01141e01561dddca2 Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Tue, 1 Jun 2021 07:36:05 -0400 Subject: [PATCH 035/194] Refactor to remove `_.partial` (#5334) --- lib/createStylelint.js | 27 +++++++++++++-------------- lib/rules/max-empty-lines/index.js | 2 +- lib/standalone.js | 3 +-- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/lib/createStylelint.js b/lib/createStylelint.js index 310c0526b3..da236f1e89 100644 --- a/lib/createStylelint.js +++ b/lib/createStylelint.js @@ -1,6 +1,5 @@ 'use strict'; -const _ = require('lodash'); const augmentConfig = require('./augmentConfig'); const createStylelintResult = require('./createStylelintResult'); const getConfigForFile = require('./getConfigForFile'); @@ -48,16 +47,16 @@ module.exports = function (options = {}) { // function whose results are cached by cosmiconfig stylelint._fullExplorer = cosmiconfig('stylelint', { // @ts-ignore TODO TYPES found out which cosmiconfig types are valid - transform: _.partial( - augmentConfig.augmentConfigFull, + transform: augmentConfig.augmentConfigFull.bind( + null, /** @type{StylelintInternalApi} */ (stylelint), ), stopDir: STOP_DIR, }); // @ts-ignore TODO TYPES found out which cosmiconfig types are valid stylelint._extendExplorer = cosmiconfig(null, { - transform: _.partial( - augmentConfig.augmentConfigExtended, + transform: augmentConfig.augmentConfigExtended.bind( + null, /** @type{StylelintInternalApi} */ (stylelint), ), stopDir: STOP_DIR, @@ -65,22 +64,22 @@ module.exports = function (options = {}) { stylelint._specifiedConfigCache = new Map(); stylelint._postcssResultCache = new Map(); - stylelint._createStylelintResult = _.partial( - createStylelintResult, + stylelint._createStylelintResult = createStylelintResult.bind( + null, /** @type{StylelintInternalApi} */ (stylelint), ); - stylelint._getPostcssResult = _.partial( - getPostcssResult, + stylelint._getPostcssResult = getPostcssResult.bind( + null, /** @type{StylelintInternalApi} */ (stylelint), ); - stylelint._lintSource = _.partial(lintSource, /** @type{StylelintInternalApi} */ (stylelint)); + stylelint._lintSource = lintSource.bind(null, /** @type{StylelintInternalApi} */ (stylelint)); - stylelint.getConfigForFile = _.partial( - getConfigForFile, + stylelint.getConfigForFile = getConfigForFile.bind( + null, /** @type{StylelintInternalApi} */ (stylelint), ); - stylelint.isPathIgnored = _.partial( - isPathIgnored, + stylelint.isPathIgnored = isPathIgnored.bind( + null, /** @type{StylelintInternalApi} */ (stylelint), ); diff --git a/lib/rules/max-empty-lines/index.js b/lib/rules/max-empty-lines/index.js index 4c073deafb..df283293cf 100644 --- a/lib/rules/max-empty-lines/index.js +++ b/lib/rules/max-empty-lines/index.js @@ -41,7 +41,7 @@ function rule(max, options, context) { } const ignoreComments = optionsMatches(options, 'ignore', 'comments'); - const getChars = _.partial(replaceEmptyLines, max); + const getChars = replaceEmptyLines.bind(null, max); /** * 1. walk nodes & replace enterchar diff --git a/lib/standalone.js b/lib/standalone.js index 097196ebdd..2d36b74344 100644 --- a/lib/standalone.js +++ b/lib/standalone.js @@ -1,6 +1,5 @@ 'use strict'; -const _ = require('lodash'); const createStylelint = require('./createStylelint'); const createStylelintResult = require('./createStylelintResult'); const debug = require('debug')('stylelint:standalone'); @@ -146,7 +145,7 @@ module.exports = function (options) { return stylelint._createStylelintResult(postcssResult); }); }) - .catch(_.partial(handleError, stylelint)) + .catch((error) => handleError(stylelint, error)) .then((stylelintResult) => { const postcssResult = stylelintResult._postcssResult; const returnValue = prepareReturnValue([stylelintResult], options, formatterFunction); From e741baea0ab6387adaa8796d549468c0ddb1d9d8 Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Wed, 2 Jun 2021 02:43:45 -0400 Subject: [PATCH 036/194] Refactor to remove `_.flatten` (#5337) --- lib/formatters/verboseFormatter.js | 2 +- .../utils/findNotContiguousOrRectangular.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/formatters/verboseFormatter.js b/lib/formatters/verboseFormatter.js index a418e31a0e..abbd8fc379 100644 --- a/lib/formatters/verboseFormatter.js +++ b/lib/formatters/verboseFormatter.js @@ -41,7 +41,7 @@ module.exports = function (results) { output += formatting(` ${sourceText}\n`); }); - const warnings = _.flatten(results.map((r) => r.warnings)); + const warnings = results.flatMap((r) => r.warnings); const warningsBySeverity = _.groupBy(warnings, 'severity'); const problemWord = warnings.length === 1 ? 'problem' : 'problems'; diff --git a/lib/rules/named-grid-areas-no-invalid/utils/findNotContiguousOrRectangular.js b/lib/rules/named-grid-areas-no-invalid/utils/findNotContiguousOrRectangular.js index 338cc3cac9..dc73099c13 100644 --- a/lib/rules/named-grid-areas-no-invalid/utils/findNotContiguousOrRectangular.js +++ b/lib/rules/named-grid-areas-no-invalid/utils/findNotContiguousOrRectangular.js @@ -42,7 +42,7 @@ function isContiguousAndRectangular(areas, name) { * @returns {string[]} */ function namedAreas(areas) { - const names = new Set(_.flatten(areas)); + const names = new Set(areas.flat()); names.delete('.'); From ffdf6af5f96963146e4eff5d5236beab89b1574e Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Wed, 2 Jun 2021 02:44:39 -0400 Subject: [PATCH 037/194] Refactor to remove `_.uniqueId` (#5338) --- lib/__tests__/standalone-fix.test.js | 4 ++-- lib/testUtils/uniqueId.js | 7 +++++++ system-tests/systemTestUtils.js | 4 ++-- 3 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 lib/testUtils/uniqueId.js diff --git a/lib/__tests__/standalone-fix.test.js b/lib/__tests__/standalone-fix.test.js index 0fef10791e..dd1dde9032 100644 --- a/lib/__tests__/standalone-fix.test.js +++ b/lib/__tests__/standalone-fix.test.js @@ -1,6 +1,5 @@ 'use strict'; -const _ = require('lodash'); const os = require('os'); const path = require('path'); const stripIndent = require('common-tags').stripIndent; @@ -8,6 +7,7 @@ const { existsSync, promises: fs } = require('fs'); const replaceBackslashes = require('../testUtils/replaceBackslashes'); const standalone = require('../standalone'); +const uniqueId = require('../testUtils/uniqueId'); const fixturesPath = (...elems) => replaceBackslashes(path.join(__dirname, 'fixtures', ...elems)); @@ -156,7 +156,7 @@ describe('writing fixes to files', () => { beforeEach(async () => { tmpDir = os.tmpdir(); - tempFile = replaceBackslashes(path.join(tmpDir, `stylesheet-${_.uniqueId()}.css`)); + tempFile = replaceBackslashes(path.join(tmpDir, `stylesheet-${uniqueId()}.css`)); await fs.copyFile(fixturesPath('fix.css'), tempFile); }); diff --git a/lib/testUtils/uniqueId.js b/lib/testUtils/uniqueId.js new file mode 100644 index 0000000000..df8f08fdbd --- /dev/null +++ b/lib/testUtils/uniqueId.js @@ -0,0 +1,7 @@ +'use strict'; + +let latestId = 0; + +module.exports = function uniqueId() { + return ++latestId; +}; diff --git a/system-tests/systemTestUtils.js b/system-tests/systemTestUtils.js index 59962b731b..a5f5bbab9b 100644 --- a/system-tests/systemTestUtils.js +++ b/system-tests/systemTestUtils.js @@ -1,11 +1,11 @@ 'use strict'; -const _ = require('lodash'); const os = require('os'); const path = require('path'); const { promises: fs } = require('fs'); const replaceBackslashes = require('../lib/testUtils/replaceBackslashes'); +const uniqueId = require('../lib/testUtils/uniqueId'); function caseFilePath(caseNumber, fileName = 'stylesheet') { return replaceBackslashes(path.join(__dirname, caseNumber, fileName)); @@ -28,7 +28,7 @@ async function caseCode(caseNumber, ext = 'css') { } async function caseFilesForFix(caseNumber, ext = 'css') { - const tempPath = replaceBackslashes(path.join(os.tmpdir(), `stylesheet-${_.uniqueId()}.${ext}`)); + const tempPath = replaceBackslashes(path.join(os.tmpdir(), `stylesheet-${uniqueId()}.${ext}`)); await fs.copyFile(path.join(__dirname, caseNumber, `stylesheet.${ext}`), tempPath); From ec2dcd9cc38bb7987449f9a2c40ce4e9bd0f1ea7 Mon Sep 17 00:00:00 2001 From: Matt Wang Date: Sat, 5 Jun 2021 10:18:03 -0700 Subject: [PATCH 038/194] Remove DisableReportRange.unusedRule from types (#5345) --- types/stylelint/index.d.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/types/stylelint/index.d.ts b/types/stylelint/index.d.ts index 631f14ede9..dd55e90e27 100644 --- a/types/stylelint/index.d.ts +++ b/types/stylelint/index.d.ts @@ -256,11 +256,6 @@ declare module 'stylelint' { rule: string; start: number; end?: number; - - // This is for backwards-compatibility with formatters that were written - // when this name was used instead of `rule`. It should be avoided for new - // formatters. - unusedRule: string; }; export type RangeType = DisabledRange & { used?: boolean }; From d16743836542b34d615cd542dc1164364fd49ad5 Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Sat, 5 Jun 2021 13:18:37 -0400 Subject: [PATCH 039/194] Refactor to remove `_.uniqBy` (#5339) --- lib/formatters/stringFormatter.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/formatters/stringFormatter.js b/lib/formatters/stringFormatter.js index 8494a4245d..44f8d93098 100644 --- a/lib/formatters/stringFormatter.js +++ b/lib/formatters/stringFormatter.js @@ -22,13 +22,18 @@ const levelColors = { */ function deprecationsFormatter(results) { const allDeprecationWarnings = results.flatMap((result) => result.deprecations); - const uniqueDeprecationWarnings = _.uniqBy(allDeprecationWarnings, 'text'); - if (!uniqueDeprecationWarnings || !uniqueDeprecationWarnings.length) { + if (allDeprecationWarnings.length === 0) { return ''; } - return uniqueDeprecationWarnings.reduce((output, warning) => { + const seenText = new Set(); + + return allDeprecationWarnings.reduce((output, warning) => { + if (seenText.has(warning.text)) return output; + + seenText.add(warning.text); + output += chalk.yellow('Deprecation Warning: '); output += warning.text; From 1a3d5c49b37c3bcdcc8f79e117eb87e6666aa5bf Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Sat, 5 Jun 2021 13:25:22 -0400 Subject: [PATCH 040/194] Refactor to remove type validation functions (#5341) --- lib/normalizeRuleSettings.js | 7 +-- lib/rules/alpha-value-notation/index.js | 4 +- lib/rules/at-rule-allowed-list/index.js | 4 +- lib/rules/at-rule-disallowed-list/index.js | 4 +- lib/rules/at-rule-empty-line-before/index.js | 4 +- lib/rules/at-rule-no-unknown/index.js | 4 +- .../at-rule-property-required-list/index.js | 4 +- .../index.js | 4 +- lib/rules/block-no-empty/index.js | 4 +- .../block-opening-brace-space-before/index.js | 6 +-- lib/rules/color-named/index.js | 4 +- lib/rules/comment-empty-line-before/index.js | 4 +- lib/rules/comment-pattern/index.js | 6 +-- .../comment-word-disallowed-list/index.js | 4 +- lib/rules/custom-media-pattern/index.js | 6 +-- lib/rules/custom-property-pattern/index.js | 6 +-- .../index.js | 4 +- .../index.js | 3 +- .../index.js | 4 +- .../index.js | 3 +- .../index.js | 3 +- .../index.js | 3 +- .../index.js | 3 +- .../font-family-no-duplicate-names/index.js | 4 +- .../index.js | 5 +-- lib/rules/function-allowed-list/index.js | 4 +- lib/rules/function-disallowed-list/index.js | 4 +- lib/rules/function-max-empty-lines/index.js | 4 +- lib/rules/function-name-case/index.js | 4 +- .../function-url-scheme-allowed-list/index.js | 3 +- .../index.js | 3 +- lib/rules/indentation/index.js | 12 ++--- lib/rules/keyframes-name-pattern/index.js | 6 +-- lib/rules/length-zero-no-unit/index.js | 4 +- lib/rules/max-empty-lines/index.js | 4 +- lib/rules/max-line-length/index.js | 6 +-- lib/rules/max-nesting-depth/index.js | 6 +-- .../media-feature-name-allowed-list/index.js | 4 +- .../index.js | 4 +- .../media-feature-name-no-unknown/index.js | 4 +- .../index.js | 3 +- lib/rules/no-duplicate-selectors/index.js | 3 +- lib/rules/number-max-precision/index.js | 6 +-- lib/rules/property-allowed-list/index.js | 4 +- lib/rules/property-disallowed-list/index.js | 4 +- lib/rules/property-no-unknown/index.js | 10 ++--- lib/rules/property-no-vendor-prefix/index.js | 4 +- .../index.js | 4 +- .../index.js | 4 +- .../index.js | 4 +- lib/rules/selector-class-pattern/index.js | 8 ++-- .../selector-combinator-allowed-list/index.js | 4 +- .../index.js | 4 +- lib/rules/selector-disallowed-list/index.js | 4 +- lib/rules/selector-id-pattern/index.js | 6 +-- lib/rules/selector-max-attribute/index.js | 4 +- lib/rules/selector-max-empty-lines/index.js | 4 +- lib/rules/selector-max-id/index.js | 4 +- lib/rules/selector-max-specificity/index.js | 4 +- lib/rules/selector-max-type/index.js | 4 +- lib/rules/selector-nested-pattern/index.js | 6 +-- lib/rules/selector-no-vendor-prefix/index.js | 4 +- .../index.js | 4 +- .../index.js | 4 +- .../selector-pseudo-class-no-unknown/index.js | 4 +- .../index.js | 4 +- .../index.js | 4 +- .../index.js | 4 +- lib/rules/selector-type-case/index.js | 4 +- lib/rules/selector-type-no-unknown/index.js | 6 +-- lib/rules/string-quotes/index.js | 4 +- lib/rules/time-min-milliseconds/index.js | 4 +- lib/rules/unit-allowed-list/index.js | 6 +-- lib/rules/unit-disallowed-list/index.js | 8 ++-- lib/rules/unit-no-unknown/index.js | 6 +-- lib/rules/value-keyword-case/index.js | 8 ++-- lib/rules/value-list-max-empty-lines/index.js | 4 +- lib/rules/value-no-vendor-prefix/index.js | 4 +- lib/utils/containsString.js | 4 +- lib/utils/validateObjectWithArrayProps.js | 4 +- lib/utils/validateOptions.js | 3 +- lib/utils/validateTypes.js | 44 +++++++++++++++++++ lib/validateDisableSettings.js | 4 +- package-lock.json | 14 ++++++ package.json | 1 + 85 files changed, 250 insertions(+), 183 deletions(-) create mode 100644 lib/utils/validateTypes.js diff --git a/lib/normalizeRuleSettings.js b/lib/normalizeRuleSettings.js index 844f80e716..3db45fa973 100644 --- a/lib/normalizeRuleSettings.js +++ b/lib/normalizeRuleSettings.js @@ -1,6 +1,7 @@ 'use strict'; const rules = require('./rules'); +const { isPlainObject } = require('is-plain-object'); // Rule settings can take a number of forms, e.g. // a. "rule-name": null @@ -61,11 +62,7 @@ module.exports = function ( return rawSettings; } - if ( - rawSettings.length === 2 && - Object.prototype.toString.call(rawSettings[0]) !== '[object Object]' && - Object.prototype.toString.call(rawSettings[1]) === '[object Object]' - ) { + if (rawSettings.length === 2 && !isPlainObject(rawSettings[0]) && isPlainObject(rawSettings[1])) { return rawSettings; } diff --git a/lib/rules/alpha-value-notation/index.js b/lib/rules/alpha-value-notation/index.js index 066e957fb5..18bbc83dc7 100644 --- a/lib/rules/alpha-value-notation/index.js +++ b/lib/rules/alpha-value-notation/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const valueParser = require('postcss-value-parser'); const declarationValueIndex = require('../../utils/declarationValueIndex'); @@ -13,6 +12,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const setDeclarationValue = require('../../utils/setDeclarationValue'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'alpha-value-notation'; @@ -35,7 +35,7 @@ function rule(primary, options, context) { { actual: options, possible: { - exceptProperties: [_.isString, _.isRegExp], + exceptProperties: [isString, isRegExp], }, optional: true, }, diff --git a/lib/rules/at-rule-allowed-list/index.js b/lib/rules/at-rule-allowed-list/index.js index 6f0ec3a717..f2b76b87e5 100644 --- a/lib/rules/at-rule-allowed-list/index.js +++ b/lib/rules/at-rule-allowed-list/index.js @@ -2,12 +2,12 @@ 'use strict'; -const _ = require('lodash'); const isStandardSyntaxAtRule = require('../../utils/isStandardSyntaxAtRule'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const vendor = require('../../utils/vendor'); +const { isString } = require('../../utils/validateTypes'); const ruleName = 'at-rule-allowed-list'; @@ -22,7 +22,7 @@ function rule(listInput) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isString], + possible: [isString], }); if (!validOptions) { diff --git a/lib/rules/at-rule-disallowed-list/index.js b/lib/rules/at-rule-disallowed-list/index.js index 48da6ebecf..da4f082921 100644 --- a/lib/rules/at-rule-disallowed-list/index.js +++ b/lib/rules/at-rule-disallowed-list/index.js @@ -2,12 +2,12 @@ 'use strict'; -const _ = require('lodash'); const isStandardSyntaxAtRule = require('../../utils/isStandardSyntaxAtRule'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const vendor = require('../../utils/vendor'); +const { isString } = require('../../utils/validateTypes'); const ruleName = 'at-rule-disallowed-list'; @@ -22,7 +22,7 @@ function rule(listInput) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isString], + possible: [isString], }); if (!validOptions) { diff --git a/lib/rules/at-rule-empty-line-before/index.js b/lib/rules/at-rule-empty-line-before/index.js index e02cb20b5c..faca2ff966 100644 --- a/lib/rules/at-rule-empty-line-before/index.js +++ b/lib/rules/at-rule-empty-line-before/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const addEmptyLineBefore = require('../../utils/addEmptyLineBefore'); const getPreviousNonSharedLineCommentNode = require('../../utils/getPreviousNonSharedLineCommentNode'); const hasEmptyLine = require('../../utils/hasEmptyLine'); @@ -17,6 +16,7 @@ const removeEmptyLinesBefore = require('../../utils/removeEmptyLinesBefore'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isString } = require('../../utils/validateTypes'); const ruleName = 'at-rule-empty-line-before'; @@ -51,7 +51,7 @@ function rule(expectation, options, context) { 'blockless-after-same-name-blockless', 'blockless-after-blockless', ], - ignoreAtRules: [_.isString], + ignoreAtRules: [isString], }, optional: true, }, diff --git a/lib/rules/at-rule-no-unknown/index.js b/lib/rules/at-rule-no-unknown/index.js index b0dee3d3b2..fd0574e9db 100644 --- a/lib/rules/at-rule-no-unknown/index.js +++ b/lib/rules/at-rule-no-unknown/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const isStandardSyntaxAtRule = require('../../utils/isStandardSyntaxAtRule'); const keywordSets = require('../../reference/keywordSets'); const optionsMatches = require('../../utils/optionsMatches'); @@ -10,6 +9,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const vendor = require('../../utils/vendor'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'at-rule-no-unknown'; @@ -26,7 +26,7 @@ function rule(actual, options) { { actual: options, possible: { - ignoreAtRules: [_.isString, _.isRegExp], + ignoreAtRules: [isString, isRegExp], }, optional: true, }, diff --git a/lib/rules/at-rule-property-required-list/index.js b/lib/rules/at-rule-property-required-list/index.js index e6f0fbe04b..0d2470ac0d 100644 --- a/lib/rules/at-rule-property-required-list/index.js +++ b/lib/rules/at-rule-property-required-list/index.js @@ -2,11 +2,11 @@ 'use strict'; -const _ = require('lodash'); const isStandardSyntaxAtRule = require('../../utils/isStandardSyntaxAtRule'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isPlainObject } = require('is-plain-object'); const ruleName = 'at-rule-property-required-list'; @@ -18,7 +18,7 @@ function rule(list) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isObject], + possible: [isPlainObject], }); if (!validOptions) { diff --git a/lib/rules/block-closing-brace-newline-after/index.js b/lib/rules/block-closing-brace-newline-after/index.js index 45d09e026d..962bd9504c 100644 --- a/lib/rules/block-closing-brace-newline-after/index.js +++ b/lib/rules/block-closing-brace-newline-after/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const blockString = require('../../utils/blockString'); const hasBlock = require('../../utils/hasBlock'); const optionsMatches = require('../../utils/optionsMatches'); @@ -11,6 +10,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const whitespaceChecker = require('../../utils/whitespaceChecker'); +const { isString } = require('../../utils/validateTypes'); const ruleName = 'block-closing-brace-newline-after'; @@ -42,7 +42,7 @@ function rule(expectation, options, context) { { actual: options, possible: { - ignoreAtRules: [_.isString], + ignoreAtRules: [isString], }, optional: true, }, diff --git a/lib/rules/block-no-empty/index.js b/lib/rules/block-no-empty/index.js index cad11ec659..59a1ef4983 100644 --- a/lib/rules/block-no-empty/index.js +++ b/lib/rules/block-no-empty/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const beforeBlockString = require('../../utils/beforeBlockString'); const hasBlock = require('../../utils/hasBlock'); const hasEmptyBlock = require('../../utils/hasEmptyBlock'); @@ -10,6 +9,7 @@ const optionsMatches = require('../../utils/optionsMatches'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isBoolean } = require('../../utils/validateTypes'); const ruleName = 'block-no-empty'; @@ -24,7 +24,7 @@ function rule(primary, options = {}) { ruleName, { actual: primary, - possible: _.isBoolean, + possible: isBoolean, }, { actual: options, diff --git a/lib/rules/block-opening-brace-space-before/index.js b/lib/rules/block-opening-brace-space-before/index.js index f4d6a63cea..373c2f1fe3 100644 --- a/lib/rules/block-opening-brace-space-before/index.js +++ b/lib/rules/block-opening-brace-space-before/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const beforeBlockString = require('../../utils/beforeBlockString'); const blockString = require('../../utils/blockString'); const hasBlock = require('../../utils/hasBlock'); @@ -12,6 +11,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const whitespaceChecker = require('../../utils/whitespaceChecker'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'block-opening-brace-space-before'; @@ -45,8 +45,8 @@ function rule(expectation, options, context) { { actual: options, possible: { - ignoreAtRules: [_.isString, _.isRegExp], - ignoreSelectors: [_.isString, _.isRegExp], + ignoreAtRules: [isString, isRegExp], + ignoreSelectors: [isString, isRegExp], }, optional: true, }, diff --git a/lib/rules/color-named/index.js b/lib/rules/color-named/index.js index 23dba11c0e..6f03589fc3 100644 --- a/lib/rules/color-named/index.js +++ b/lib/rules/color-named/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const declarationValueIndex = require('../../utils/declarationValueIndex'); const isStandardSyntaxFunction = require('../../utils/isStandardSyntaxFunction'); const isStandardSyntaxValue = require('../../utils/isStandardSyntaxValue'); @@ -14,6 +13,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const valueParser = require('postcss-value-parser'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const generateColorFuncs = require('./generateColorFuncs'); @@ -39,7 +39,7 @@ function rule(expectation, options) { { actual: options, possible: { - ignoreProperties: [_.isString, _.isRegExp], + ignoreProperties: [isString, isRegExp], ignore: ['inside-function'], }, optional: true, diff --git a/lib/rules/comment-empty-line-before/index.js b/lib/rules/comment-empty-line-before/index.js index c587155b59..058ba25082 100644 --- a/lib/rules/comment-empty-line-before/index.js +++ b/lib/rules/comment-empty-line-before/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const addEmptyLineBefore = require('../../utils/addEmptyLineBefore'); const hasEmptyLine = require('../../utils/hasEmptyLine'); const isAfterComment = require('../../utils/isAfterComment'); @@ -14,6 +13,7 @@ const removeEmptyLinesBefore = require('../../utils/removeEmptyLinesBefore'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'comment-empty-line-before'; @@ -38,7 +38,7 @@ function rule(expectation, options, context) { possible: { except: ['first-nested'], ignore: ['stylelint-commands', 'after-comment'], - ignoreComments: [_.isString, _.isRegExp], + ignoreComments: [isString, isRegExp], }, optional: true, }, diff --git a/lib/rules/comment-pattern/index.js b/lib/rules/comment-pattern/index.js index c78aa4aa45..e6fc1d4b4a 100644 --- a/lib/rules/comment-pattern/index.js +++ b/lib/rules/comment-pattern/index.js @@ -2,10 +2,10 @@ 'use strict'; -const _ = require('lodash'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'comment-pattern'; @@ -17,14 +17,14 @@ function rule(pattern) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: pattern, - possible: [_.isRegExp, _.isString], + possible: [isRegExp, isString], }); if (!validOptions) { return; } - const normalizedPattern = _.isString(pattern) ? new RegExp(pattern) : pattern; + const normalizedPattern = isString(pattern) ? new RegExp(pattern) : pattern; root.walkComments((comment) => { const text = comment.text; diff --git a/lib/rules/comment-word-disallowed-list/index.js b/lib/rules/comment-word-disallowed-list/index.js index fab060c50a..9d6e78f8a3 100644 --- a/lib/rules/comment-word-disallowed-list/index.js +++ b/lib/rules/comment-word-disallowed-list/index.js @@ -2,12 +2,12 @@ 'use strict'; -const _ = require('lodash'); const containsString = require('../../utils/containsString'); const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'comment-word-disallowed-list'; @@ -19,7 +19,7 @@ function rule(list) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isString, _.isRegExp], + possible: [isString, isRegExp], }); if (!validOptions) { diff --git a/lib/rules/custom-media-pattern/index.js b/lib/rules/custom-media-pattern/index.js index b57bb5458e..362499bd1c 100644 --- a/lib/rules/custom-media-pattern/index.js +++ b/lib/rules/custom-media-pattern/index.js @@ -2,11 +2,11 @@ 'use strict'; -const _ = require('lodash'); const atRuleParamIndex = require('../../utils/atRuleParamIndex'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'custom-media-pattern'; @@ -18,14 +18,14 @@ function rule(pattern) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: pattern, - possible: [_.isRegExp, _.isString], + possible: [isRegExp, isString], }); if (!validOptions) { return; } - const regexpPattern = _.isString(pattern) ? new RegExp(pattern) : pattern; + const regexpPattern = isString(pattern) ? new RegExp(pattern) : pattern; root.walkAtRules((atRule) => { if (atRule.name.toLowerCase() !== 'custom-media') { diff --git a/lib/rules/custom-property-pattern/index.js b/lib/rules/custom-property-pattern/index.js index 57ccb3417a..cebaa7e7ed 100644 --- a/lib/rules/custom-property-pattern/index.js +++ b/lib/rules/custom-property-pattern/index.js @@ -2,11 +2,11 @@ 'use strict'; -const _ = require('lodash'); const isCustomProperty = require('../../utils/isCustomProperty'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'custom-property-pattern'; @@ -18,14 +18,14 @@ function rule(pattern) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: pattern, - possible: [_.isRegExp, _.isString], + possible: [isRegExp, isString], }); if (!validOptions) { return; } - const regexpPattern = _.isString(pattern) ? new RegExp(pattern) : pattern; + const regexpPattern = isString(pattern) ? new RegExp(pattern) : pattern; root.walkDecls((decl) => { const prop = decl.prop; diff --git a/lib/rules/declaration-block-no-duplicate-properties/index.js b/lib/rules/declaration-block-no-duplicate-properties/index.js index 10ce4eb4b2..5668bd6e91 100644 --- a/lib/rules/declaration-block-no-duplicate-properties/index.js +++ b/lib/rules/declaration-block-no-duplicate-properties/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const eachDeclarationBlock = require('../../utils/eachDeclarationBlock'); const isCustomProperty = require('../../utils/isCustomProperty'); const isStandardSyntaxProperty = require('../../utils/isStandardSyntaxProperty'); @@ -10,6 +9,7 @@ const optionsMatches = require('../../utils/optionsMatches'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isString } = require('../../utils/validateTypes'); const ruleName = 'declaration-block-no-duplicate-properties'; @@ -27,7 +27,7 @@ function rule(on, options) { actual: options, possible: { ignore: ['consecutive-duplicates', 'consecutive-duplicates-with-different-values'], - ignoreProperties: [_.isString], + ignoreProperties: [isString], }, optional: true, }, diff --git a/lib/rules/declaration-block-no-redundant-longhand-properties/index.js b/lib/rules/declaration-block-no-redundant-longhand-properties/index.js index 0ceb887b25..d3f2ff15da 100644 --- a/lib/rules/declaration-block-no-redundant-longhand-properties/index.js +++ b/lib/rules/declaration-block-no-redundant-longhand-properties/index.js @@ -10,6 +10,7 @@ const ruleMessages = require('../../utils/ruleMessages'); const shorthandData = require('../../reference/shorthandData'); const validateOptions = require('../../utils/validateOptions'); const vendor = require('../../utils/vendor'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'declaration-block-no-redundant-longhand-properties'; @@ -26,7 +27,7 @@ function rule(actual, options) { { actual: options, possible: { - ignoreShorthands: [_.isString, _.isRegExp], + ignoreShorthands: [isString, isRegExp], }, optional: true, }, diff --git a/lib/rules/declaration-block-single-line-max-declarations/index.js b/lib/rules/declaration-block-single-line-max-declarations/index.js index d9c8301b6b..37e73e888f 100644 --- a/lib/rules/declaration-block-single-line-max-declarations/index.js +++ b/lib/rules/declaration-block-single-line-max-declarations/index.js @@ -2,13 +2,13 @@ 'use strict'; -const _ = require('lodash'); const beforeBlockString = require('../../utils/beforeBlockString'); const blockString = require('../../utils/blockString'); const isSingleLineString = require('../../utils/isSingleLineString'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isNumber } = require('../../utils/validateTypes'); const ruleName = 'declaration-block-single-line-max-declarations'; @@ -20,7 +20,7 @@ function rule(quantity) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: quantity, - possible: [_.isNumber], + possible: [isNumber], }); if (!validOptions) { diff --git a/lib/rules/declaration-property-unit-allowed-list/index.js b/lib/rules/declaration-property-unit-allowed-list/index.js index a1df3bf6dd..717e26e849 100644 --- a/lib/rules/declaration-property-unit-allowed-list/index.js +++ b/lib/rules/declaration-property-unit-allowed-list/index.js @@ -12,6 +12,7 @@ const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const valueParser = require('postcss-value-parser'); const vendor = require('../../utils/vendor'); +const { isPlainObject } = require('is-plain-object'); const ruleName = 'declaration-property-unit-allowed-list'; @@ -26,7 +27,7 @@ function rule(list, options) { ruleName, { actual: list, - possible: [_.isObject], + possible: [isPlainObject], }, { actual: options, diff --git a/lib/rules/declaration-property-unit-disallowed-list/index.js b/lib/rules/declaration-property-unit-disallowed-list/index.js index 2f0f37cf12..c435d2ea24 100644 --- a/lib/rules/declaration-property-unit-disallowed-list/index.js +++ b/lib/rules/declaration-property-unit-disallowed-list/index.js @@ -11,6 +11,7 @@ const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const valueParser = require('postcss-value-parser'); const vendor = require('../../utils/vendor'); +const { isPlainObject } = require('is-plain-object'); const ruleName = 'declaration-property-unit-disallowed-list'; @@ -22,7 +23,7 @@ function rule(list) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isObject], + possible: [isPlainObject], }); if (!validOptions) { diff --git a/lib/rules/declaration-property-value-allowed-list/index.js b/lib/rules/declaration-property-value-allowed-list/index.js index 37b062cd21..82821366a1 100644 --- a/lib/rules/declaration-property-value-allowed-list/index.js +++ b/lib/rules/declaration-property-value-allowed-list/index.js @@ -8,6 +8,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const vendor = require('../../utils/vendor'); +const { isPlainObject } = require('is-plain-object'); const ruleName = 'declaration-property-value-allowed-list'; @@ -19,7 +20,7 @@ function rule(list) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isObject], + possible: [isPlainObject], }); if (!validOptions) { diff --git a/lib/rules/declaration-property-value-disallowed-list/index.js b/lib/rules/declaration-property-value-disallowed-list/index.js index 5e01dc1945..5228c8af3c 100644 --- a/lib/rules/declaration-property-value-disallowed-list/index.js +++ b/lib/rules/declaration-property-value-disallowed-list/index.js @@ -8,6 +8,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const vendor = require('../../utils/vendor'); +const { isPlainObject } = require('is-plain-object'); const ruleName = 'declaration-property-value-disallowed-list'; @@ -19,7 +20,7 @@ function rule(list) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isObject], + possible: [isPlainObject], }); if (!validOptions) { diff --git a/lib/rules/font-family-no-duplicate-names/index.js b/lib/rules/font-family-no-duplicate-names/index.js index 2ae966e79f..0604d70a18 100644 --- a/lib/rules/font-family-no-duplicate-names/index.js +++ b/lib/rules/font-family-no-duplicate-names/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const declarationValueIndex = require('../../utils/declarationValueIndex'); const findFontFamily = require('../../utils/findFontFamily'); const keywordSets = require('../../reference/keywordSets'); @@ -10,6 +9,7 @@ const optionsMatches = require('../../utils/optionsMatches'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'font-family-no-duplicate-names'; @@ -29,7 +29,7 @@ function rule(actual, options) { { actual: options, possible: { - ignoreFontFamilyNames: [_.isString, _.isRegExp], + ignoreFontFamilyNames: [isString, isRegExp], }, optional: true, }, diff --git a/lib/rules/font-family-no-missing-generic-family-keyword/index.js b/lib/rules/font-family-no-missing-generic-family-keyword/index.js index c1abda31be..1ee0201ef6 100644 --- a/lib/rules/font-family-no-missing-generic-family-keyword/index.js +++ b/lib/rules/font-family-no-missing-generic-family-keyword/index.js @@ -12,8 +12,7 @@ const postcss = require('postcss'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); - -const _ = require('lodash'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'font-family-no-missing-generic-family-keyword'; @@ -39,7 +38,7 @@ function rule(actual, options) { { actual: options, possible: { - ignoreFontFamilies: [_.isString, _.isRegExp], + ignoreFontFamilies: [isString, isRegExp], }, optional: true, }, diff --git a/lib/rules/function-allowed-list/index.js b/lib/rules/function-allowed-list/index.js index 4ff2a0c067..faae319533 100644 --- a/lib/rules/function-allowed-list/index.js +++ b/lib/rules/function-allowed-list/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const declarationValueIndex = require('../../utils/declarationValueIndex'); const isStandardSyntaxFunction = require('../../utils/isStandardSyntaxFunction'); const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); @@ -11,6 +10,7 @@ const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const valueParser = require('postcss-value-parser'); const vendor = require('../../utils/vendor'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'function-allowed-list'; @@ -24,7 +24,7 @@ function rule(listInput) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isString, _.isRegExp], + possible: [isString, isRegExp], }); if (!validOptions) { diff --git a/lib/rules/function-disallowed-list/index.js b/lib/rules/function-disallowed-list/index.js index 5b7cdea5d2..c0a671c28d 100644 --- a/lib/rules/function-disallowed-list/index.js +++ b/lib/rules/function-disallowed-list/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const declarationValueIndex = require('../../utils/declarationValueIndex'); const isStandardSyntaxFunction = require('../../utils/isStandardSyntaxFunction'); const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); @@ -11,6 +10,7 @@ const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const valueParser = require('postcss-value-parser'); const vendor = require('../../utils/vendor'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'function-disallowed-list'; @@ -22,7 +22,7 @@ function rule(list) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isString, _.isRegExp], + possible: [isString, isRegExp], }); if (!validOptions) { diff --git a/lib/rules/function-max-empty-lines/index.js b/lib/rules/function-max-empty-lines/index.js index 9533c142c5..6f0fad3f48 100644 --- a/lib/rules/function-max-empty-lines/index.js +++ b/lib/rules/function-max-empty-lines/index.js @@ -2,13 +2,13 @@ 'use strict'; -const _ = require('lodash'); const getDeclarationValue = require('../../utils/getDeclarationValue'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const setDeclarationValue = require('../../utils/setDeclarationValue'); const validateOptions = require('../../utils/validateOptions'); const valueParser = require('postcss-value-parser'); +const { isNumber } = require('../../utils/validateTypes'); const ruleName = 'function-max-empty-lines'; @@ -26,7 +26,7 @@ function rule(max, options, context) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: max, - possible: _.isNumber, + possible: isNumber, }); if (!validOptions) { diff --git a/lib/rules/function-name-case/index.js b/lib/rules/function-name-case/index.js index e5e865144d..cb1c80b841 100644 --- a/lib/rules/function-name-case/index.js +++ b/lib/rules/function-name-case/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const declarationValueIndex = require('../../utils/declarationValueIndex'); const getDeclarationValue = require('../../utils/getDeclarationValue'); const isStandardSyntaxFunction = require('../../utils/isStandardSyntaxFunction'); @@ -13,6 +12,7 @@ const ruleMessages = require('../../utils/ruleMessages'); const setDeclarationValue = require('../../utils/setDeclarationValue'); const validateOptions = require('../../utils/validateOptions'); const valueParser = require('postcss-value-parser'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'function-name-case'; @@ -38,7 +38,7 @@ function rule(expectation, options, context) { { actual: options, possible: { - ignoreFunctions: [_.isString, _.isRegExp], + ignoreFunctions: [isString, isRegExp], }, optional: true, }, diff --git a/lib/rules/function-url-scheme-allowed-list/index.js b/lib/rules/function-url-scheme-allowed-list/index.js index 224cba8baa..b13ee08eab 100644 --- a/lib/rules/function-url-scheme-allowed-list/index.js +++ b/lib/rules/function-url-scheme-allowed-list/index.js @@ -10,6 +10,7 @@ const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'function-url-scheme-allowed-list'; @@ -21,7 +22,7 @@ function rule(list) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isString, _.isRegExp], + possible: [isString, isRegExp], }); if (!validOptions) { diff --git a/lib/rules/function-url-scheme-disallowed-list/index.js b/lib/rules/function-url-scheme-disallowed-list/index.js index 18f7af4c23..5e18d27188 100644 --- a/lib/rules/function-url-scheme-disallowed-list/index.js +++ b/lib/rules/function-url-scheme-disallowed-list/index.js @@ -10,6 +10,7 @@ const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'function-url-scheme-disallowed-list'; @@ -21,7 +22,7 @@ function rule(list) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isString, _.isRegExp], + possible: [isString, isRegExp], }); if (!validOptions) { diff --git a/lib/rules/indentation/index.js b/lib/rules/indentation/index.js index 8241d7e021..b743cf0666 100644 --- a/lib/rules/indentation/index.js +++ b/lib/rules/indentation/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const beforeBlockString = require('../../utils/beforeBlockString'); const hasBlock = require('../../utils/hasBlock'); const optionsMatches = require('../../utils/optionsMatches'); @@ -10,6 +9,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const styleSearch = require('style-search'); const validateOptions = require('../../utils/validateOptions'); +const { isBoolean, isNumber, isString } = require('../../utils/validateTypes'); const ruleName = 'indentation'; const messages = ruleMessages(ruleName, { @@ -32,16 +32,16 @@ function rule(space, options = {}, context) { ruleName, { actual: space, - possible: [_.isNumber, 'tab'], + possible: [isNumber, 'tab'], }, { actual: options, possible: { - baseIndentLevel: [_.isNumber, 'auto'], + baseIndentLevel: [isNumber, 'auto'], except: ['block', 'value', 'param'], ignore: ['value', 'param', 'inside-parens'], indentInsideParens: ['twice', 'once-at-root-twice-in-block'], - indentClosingBrace: [_.isBoolean], + indentClosingBrace: [isBoolean], }, optional: true, }, @@ -85,7 +85,7 @@ function rule(space, options = {}, context) { before.slice(lastIndexOfNewline + 1) !== expectedOpeningBraceIndentation ) { if (context.fix) { - if (isFirstChild && _.isString(node.raws.before)) { + if (isFirstChild && isString(node.raws.before)) { node.raws.before = node.raws.before.replace( /^[ \t]*(?=\S|$)/, expectedOpeningBraceIndentation, @@ -595,7 +595,7 @@ function inferRootIndentLevel(root, baseIndentLevel, indentSize) { } function fixIndentation(str, whitespace) { - if (!_.isString(str)) { + if (!isString(str)) { return str; } diff --git a/lib/rules/keyframes-name-pattern/index.js b/lib/rules/keyframes-name-pattern/index.js index 3fbe55225e..c1ba1a2ab2 100644 --- a/lib/rules/keyframes-name-pattern/index.js +++ b/lib/rules/keyframes-name-pattern/index.js @@ -2,11 +2,11 @@ 'use strict'; -const _ = require('lodash'); const atRuleParamIndex = require('../../utils/atRuleParamIndex'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'keyframes-name-pattern'; @@ -19,14 +19,14 @@ function rule(pattern) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: pattern, - possible: [_.isRegExp, _.isString], + possible: [isRegExp, isString], }); if (!validOptions) { return; } - const regex = _.isString(pattern) ? new RegExp(pattern) : pattern; + const regex = isString(pattern) ? new RegExp(pattern) : pattern; root.walkAtRules(/keyframes/i, (keyframesNode) => { const value = keyframesNode.params; diff --git a/lib/rules/length-zero-no-unit/index.js b/lib/rules/length-zero-no-unit/index.js index aad1ea58f2..b89dc7bfe8 100644 --- a/lib/rules/length-zero-no-unit/index.js +++ b/lib/rules/length-zero-no-unit/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const valueParser = require('postcss-value-parser'); const atRuleParamIndex = require('../../utils/atRuleParamIndex'); @@ -19,6 +18,7 @@ const ruleMessages = require('../../utils/ruleMessages'); const setAtRuleParams = require('../../utils/setAtRuleParams'); const setDeclarationValue = require('../../utils/setDeclarationValue'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'length-zero-no-unit'; @@ -38,7 +38,7 @@ function rule(primary, secondary, context) { actual: secondary, possible: { ignore: ['custom-properties'], - ignoreFunctions: [_.isString, _.isRegExp], + ignoreFunctions: [isString, isRegExp], }, optional: true, }, diff --git a/lib/rules/max-empty-lines/index.js b/lib/rules/max-empty-lines/index.js index df283293cf..b545457c82 100644 --- a/lib/rules/max-empty-lines/index.js +++ b/lib/rules/max-empty-lines/index.js @@ -2,12 +2,12 @@ 'use strict'; -const _ = require('lodash'); const optionsMatches = require('../../utils/optionsMatches'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const styleSearch = require('style-search'); const validateOptions = require('../../utils/validateOptions'); +const { isNumber } = require('../../utils/validateTypes'); const ruleName = 'max-empty-lines'; @@ -25,7 +25,7 @@ function rule(max, options, context) { ruleName, { actual: max, - possible: _.isNumber, + possible: isNumber, }, { actual: options, diff --git a/lib/rules/max-line-length/index.js b/lib/rules/max-line-length/index.js index 355d746e91..6190bfec01 100644 --- a/lib/rules/max-line-length/index.js +++ b/lib/rules/max-line-length/index.js @@ -2,13 +2,13 @@ 'use strict'; -const _ = require('lodash'); const execall = require('execall'); const optionsMatches = require('../../utils/optionsMatches'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const styleSearch = require('style-search'); const validateOptions = require('../../utils/validateOptions'); +const { isNumber, isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'max-line-length'; const EXCLUDED_PATTERNS = [ @@ -28,13 +28,13 @@ function rule(maxLength, options, context) { ruleName, { actual: maxLength, - possible: _.isNumber, + possible: isNumber, }, { actual: options, possible: { ignore: ['non-comments', 'comments'], - ignorePattern: [_.isString, _.isRegExp], + ignorePattern: [isString, isRegExp], }, optional: true, }, diff --git a/lib/rules/max-nesting-depth/index.js b/lib/rules/max-nesting-depth/index.js index f375d101a9..884763add7 100644 --- a/lib/rules/max-nesting-depth/index.js +++ b/lib/rules/max-nesting-depth/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const hasBlock = require('../../utils/hasBlock'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); const optionsMatches = require('../../utils/optionsMatches'); @@ -10,6 +9,7 @@ const parser = require('postcss-selector-parser'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isNumber, isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'max-nesting-depth'; @@ -27,14 +27,14 @@ function rule(max, options) { ruleName, { actual: max, - possible: [_.isNumber], + possible: [isNumber], }, { optional: true, actual: options, possible: { ignore: ['blockless-at-rules', 'pseudo-classes'], - ignoreAtRules: [_.isString, _.isRegExp], + ignoreAtRules: [isString, isRegExp], }, }, ); diff --git a/lib/rules/media-feature-name-allowed-list/index.js b/lib/rules/media-feature-name-allowed-list/index.js index 66da909ff2..ada99793c0 100644 --- a/lib/rules/media-feature-name-allowed-list/index.js +++ b/lib/rules/media-feature-name-allowed-list/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const atRuleParamIndex = require('../../utils/atRuleParamIndex'); const isCustomMediaQuery = require('../../utils/isCustomMediaQuery'); const isRangeContextMediaFeature = require('../../utils/isRangeContextMediaFeature'); @@ -13,6 +12,7 @@ const rangeContextNodeParser = require('../rangeContextNodeParser'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'media-feature-name-allowed-list'; @@ -24,7 +24,7 @@ function rule(list) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isString, _.isRegExp], + possible: [isString, isRegExp], }); if (!validOptions) { diff --git a/lib/rules/media-feature-name-disallowed-list/index.js b/lib/rules/media-feature-name-disallowed-list/index.js index cf05074f7b..9a06cba4a2 100644 --- a/lib/rules/media-feature-name-disallowed-list/index.js +++ b/lib/rules/media-feature-name-disallowed-list/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const atRuleParamIndex = require('../../utils/atRuleParamIndex'); const isCustomMediaQuery = require('../../utils/isCustomMediaQuery'); const isRangeContextMediaFeature = require('../../utils/isRangeContextMediaFeature'); @@ -13,6 +12,7 @@ const rangeContextNodeParser = require('../rangeContextNodeParser'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'media-feature-name-disallowed-list'; @@ -24,7 +24,7 @@ function rule(list) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isString, _.isRegExp], + possible: [isString, isRegExp], }); if (!validOptions) { diff --git a/lib/rules/media-feature-name-no-unknown/index.js b/lib/rules/media-feature-name-no-unknown/index.js index 491542d9ad..68b327a948 100644 --- a/lib/rules/media-feature-name-no-unknown/index.js +++ b/lib/rules/media-feature-name-no-unknown/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const atRuleParamIndex = require('../../utils/atRuleParamIndex'); const isCustomMediaQuery = require('../../utils/isCustomMediaQuery'); const isRangeContextMediaFeature = require('../../utils/isRangeContextMediaFeature'); @@ -15,6 +14,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const vendor = require('../../utils/vendor'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'media-feature-name-no-unknown'; @@ -31,7 +31,7 @@ function rule(actual, options) { { actual: options, possible: { - ignoreMediaFeatureNames: [_.isString, _.isRegExp], + ignoreMediaFeatureNames: [isString, isRegExp], }, optional: true, }, diff --git a/lib/rules/media-feature-name-value-allowed-list/index.js b/lib/rules/media-feature-name-value-allowed-list/index.js index 801551a29a..8b6b01da73 100644 --- a/lib/rules/media-feature-name-value-allowed-list/index.js +++ b/lib/rules/media-feature-name-value-allowed-list/index.js @@ -12,6 +12,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const vendor = require('../../utils/vendor'); +const { isPlainObject } = require('is-plain-object'); const ruleName = 'media-feature-name-value-allowed-list'; @@ -23,7 +24,7 @@ function rule(list) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isObject], + possible: [isPlainObject], }); if (!validOptions) { diff --git a/lib/rules/no-duplicate-selectors/index.js b/lib/rules/no-duplicate-selectors/index.js index ceebe24a3b..06b983a9ee 100644 --- a/lib/rules/no-duplicate-selectors/index.js +++ b/lib/rules/no-duplicate-selectors/index.js @@ -12,6 +12,7 @@ const report = require('../../utils/report'); const resolvedNestedSelector = require('postcss-resolve-nested-selector'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isBoolean } = require('../../utils/validateTypes'); const ruleName = 'no-duplicate-selectors'; @@ -29,7 +30,7 @@ function rule(actual, options) { { actual: options, possible: { - disallowInList: _.isBoolean, + disallowInList: isBoolean, }, optional: true, }, diff --git a/lib/rules/number-max-precision/index.js b/lib/rules/number-max-precision/index.js index 311d107538..9907539e73 100644 --- a/lib/rules/number-max-precision/index.js +++ b/lib/rules/number-max-precision/index.js @@ -9,8 +9,8 @@ const optionsMatches = require('../../utils/optionsMatches'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isNumber, isRegExp, isString } = require('../../utils/validateTypes'); -const _ = require('lodash'); const valueParser = require('postcss-value-parser'); const ruleName = 'number-max-precision'; @@ -26,13 +26,13 @@ function rule(precision, options) { ruleName, { actual: precision, - possible: [_.isNumber], + possible: [isNumber], }, { optional: true, actual: options, possible: { - ignoreUnits: [_.isString, _.isRegExp], + ignoreUnits: [isString, isRegExp], }, }, ); diff --git a/lib/rules/property-allowed-list/index.js b/lib/rules/property-allowed-list/index.js index e94029db71..9744e65661 100644 --- a/lib/rules/property-allowed-list/index.js +++ b/lib/rules/property-allowed-list/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const isCustomProperty = require('../../utils/isCustomProperty'); const isStandardSyntaxProperty = require('../../utils/isStandardSyntaxProperty'); const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); @@ -10,6 +9,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const vendor = require('../../utils/vendor'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'property-allowed-list'; @@ -21,7 +21,7 @@ function rule(list) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isString, _.isRegExp], + possible: [isString, isRegExp], }); if (!validOptions) { diff --git a/lib/rules/property-disallowed-list/index.js b/lib/rules/property-disallowed-list/index.js index ca4bf45ab2..fffdb29ef7 100644 --- a/lib/rules/property-disallowed-list/index.js +++ b/lib/rules/property-disallowed-list/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const isCustomProperty = require('../../utils/isCustomProperty'); const isStandardSyntaxProperty = require('../../utils/isStandardSyntaxProperty'); const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); @@ -10,6 +9,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const vendor = require('../../utils/vendor'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'property-disallowed-list'; @@ -21,7 +21,7 @@ function rule(list) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isString, _.isRegExp], + possible: [isString, isRegExp], }); if (!validOptions) { diff --git a/lib/rules/property-no-unknown/index.js b/lib/rules/property-no-unknown/index.js index 12a87f5013..b9a520b326 100644 --- a/lib/rules/property-no-unknown/index.js +++ b/lib/rules/property-no-unknown/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const isCustomProperty = require('../../utils/isCustomProperty'); const isStandardSyntaxDeclaration = require('../../utils/isStandardSyntaxDeclaration'); const isStandardSyntaxProperty = require('../../utils/isStandardSyntaxProperty'); @@ -12,6 +11,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const vendor = require('../../utils/vendor'); +const { isBoolean, isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'property-no-unknown'; @@ -30,10 +30,10 @@ function rule(actual, options) { { actual: options, possible: { - ignoreProperties: [_.isString, _.isRegExp], - checkPrefixed: _.isBoolean, - ignoreSelectors: [_.isString, _.isRegExp], - ignoreAtRules: [_.isString, _.isRegExp], + ignoreProperties: [isString, isRegExp], + checkPrefixed: isBoolean, + ignoreSelectors: [isString, isRegExp], + ignoreAtRules: [isString, isRegExp], }, optional: true, }, diff --git a/lib/rules/property-no-vendor-prefix/index.js b/lib/rules/property-no-vendor-prefix/index.js index 8dcfc3c565..9fd1316fbf 100644 --- a/lib/rules/property-no-vendor-prefix/index.js +++ b/lib/rules/property-no-vendor-prefix/index.js @@ -2,13 +2,13 @@ 'use strict'; -const _ = require('lodash'); const isAutoprefixable = require('../../utils/isAutoprefixable'); const optionsMatches = require('../../utils/optionsMatches'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const vendor = require('../../utils/vendor'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'property-no-vendor-prefix'; @@ -26,7 +26,7 @@ function rule(actual, options, context) { optional: true, actual: options, possible: { - ignoreProperties: [_.isString, _.isRegExp], + ignoreProperties: [isString, isRegExp], }, }, ); diff --git a/lib/rules/selector-attribute-name-disallowed-list/index.js b/lib/rules/selector-attribute-name-disallowed-list/index.js index 799cacb0bd..c89ac0fd3a 100644 --- a/lib/rules/selector-attribute-name-disallowed-list/index.js +++ b/lib/rules/selector-attribute-name-disallowed-list/index.js @@ -2,13 +2,13 @@ 'use strict'; -const _ = require('lodash'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); const parseSelector = require('../../utils/parseSelector'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'selector-attribute-name-disallowed-list'; @@ -22,7 +22,7 @@ function rule(listInput) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isString, _.isRegExp], + possible: [isString, isRegExp], }); if (!validOptions) { diff --git a/lib/rules/selector-attribute-operator-allowed-list/index.js b/lib/rules/selector-attribute-operator-allowed-list/index.js index 3c32071d2e..8818dd2f85 100644 --- a/lib/rules/selector-attribute-operator-allowed-list/index.js +++ b/lib/rules/selector-attribute-operator-allowed-list/index.js @@ -2,12 +2,12 @@ 'use strict'; -const _ = require('lodash'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); const parseSelector = require('../../utils/parseSelector'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isString } = require('../../utils/validateTypes'); const ruleName = 'selector-attribute-operator-allowed-list'; @@ -21,7 +21,7 @@ function rule(listInput) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isString], + possible: [isString], }); if (!validOptions) { diff --git a/lib/rules/selector-attribute-operator-disallowed-list/index.js b/lib/rules/selector-attribute-operator-disallowed-list/index.js index a8a1ac9c76..c8c14182ec 100644 --- a/lib/rules/selector-attribute-operator-disallowed-list/index.js +++ b/lib/rules/selector-attribute-operator-disallowed-list/index.js @@ -2,12 +2,12 @@ 'use strict'; -const _ = require('lodash'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); const parseSelector = require('../../utils/parseSelector'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isString } = require('../../utils/validateTypes'); const ruleName = 'selector-attribute-operator-disallowed-list'; @@ -21,7 +21,7 @@ function rule(listInput) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isString], + possible: [isString], }); if (!validOptions) { diff --git a/lib/rules/selector-class-pattern/index.js b/lib/rules/selector-class-pattern/index.js index 60ee35544d..a194b37b41 100644 --- a/lib/rules/selector-class-pattern/index.js +++ b/lib/rules/selector-class-pattern/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const isKeyframeSelector = require('../../utils/isKeyframeSelector'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); const isStandardSyntaxSelector = require('../../utils/isStandardSyntaxSelector'); @@ -11,6 +10,7 @@ const report = require('../../utils/report'); const resolveNestedSelector = require('postcss-resolve-nested-selector'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isBoolean, isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'selector-class-pattern'; @@ -26,12 +26,12 @@ function rule(pattern, options) { ruleName, { actual: pattern, - possible: [_.isRegExp, _.isString], + possible: [isRegExp, isString], }, { actual: options, possible: { - resolveNestedSelectors: _.isBoolean, + resolveNestedSelectors: isBoolean, }, optional: true, }, @@ -42,7 +42,7 @@ function rule(pattern, options) { } const shouldResolveNestedSelectors = options && options.resolveNestedSelectors; - const normalizedPattern = _.isString(pattern) ? new RegExp(pattern) : pattern; + const normalizedPattern = isString(pattern) ? new RegExp(pattern) : pattern; root.walkRules((ruleNode) => { const selector = ruleNode.selector; diff --git a/lib/rules/selector-combinator-allowed-list/index.js b/lib/rules/selector-combinator-allowed-list/index.js index 18d042b84e..c26f73b5ca 100644 --- a/lib/rules/selector-combinator-allowed-list/index.js +++ b/lib/rules/selector-combinator-allowed-list/index.js @@ -2,13 +2,13 @@ 'use strict'; -const _ = require('lodash'); const isStandardSyntaxCombinator = require('../../utils/isStandardSyntaxCombinator'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); const parseSelector = require('../../utils/parseSelector'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isString } = require('../../utils/validateTypes'); const ruleName = 'selector-combinator-allowed-list'; @@ -20,7 +20,7 @@ function rule(list) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isString], + possible: [isString], }); if (!validOptions) { diff --git a/lib/rules/selector-combinator-disallowed-list/index.js b/lib/rules/selector-combinator-disallowed-list/index.js index 4af0a8b97a..b61f558921 100644 --- a/lib/rules/selector-combinator-disallowed-list/index.js +++ b/lib/rules/selector-combinator-disallowed-list/index.js @@ -2,13 +2,13 @@ 'use strict'; -const _ = require('lodash'); const isStandardSyntaxCombinator = require('../../utils/isStandardSyntaxCombinator'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); const parseSelector = require('../../utils/parseSelector'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isString } = require('../../utils/validateTypes'); const ruleName = 'selector-combinator-disallowed-list'; @@ -20,7 +20,7 @@ function rule(list) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isString], + possible: [isString], }); if (!validOptions) { diff --git a/lib/rules/selector-disallowed-list/index.js b/lib/rules/selector-disallowed-list/index.js index 9505314f4d..afbc09fb87 100644 --- a/lib/rules/selector-disallowed-list/index.js +++ b/lib/rules/selector-disallowed-list/index.js @@ -2,12 +2,12 @@ 'use strict'; -const _ = require('lodash'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'selector-disallowed-list'; @@ -21,7 +21,7 @@ function rule(listInput) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isString, _.isRegExp], + possible: [isString, isRegExp], }); if (!validOptions) { diff --git a/lib/rules/selector-id-pattern/index.js b/lib/rules/selector-id-pattern/index.js index 77912cbf9d..4f5ab654ab 100644 --- a/lib/rules/selector-id-pattern/index.js +++ b/lib/rules/selector-id-pattern/index.js @@ -2,12 +2,12 @@ 'use strict'; -const _ = require('lodash'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); const parseSelector = require('../../utils/parseSelector'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'selector-id-pattern'; @@ -20,14 +20,14 @@ function rule(pattern) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: pattern, - possible: [_.isRegExp, _.isString], + possible: [isRegExp, isString], }); if (!validOptions) { return; } - const normalizedPattern = _.isString(pattern) ? new RegExp(pattern) : pattern; + const normalizedPattern = isString(pattern) ? new RegExp(pattern) : pattern; root.walkRules((ruleNode) => { if (!isStandardSyntaxRule(ruleNode)) { diff --git a/lib/rules/selector-max-attribute/index.js b/lib/rules/selector-max-attribute/index.js index a30e663ddc..39ca04e375 100644 --- a/lib/rules/selector-max-attribute/index.js +++ b/lib/rules/selector-max-attribute/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const isContextFunctionalPseudoClass = require('../../utils/isContextFunctionalPseudoClass'); const isNonNegativeInteger = require('../../utils/isNonNegativeInteger'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); @@ -12,6 +11,7 @@ const report = require('../../utils/report'); const resolvedNestedSelector = require('postcss-resolve-nested-selector'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'selector-max-attribute'; @@ -34,7 +34,7 @@ function rule(max, options) { { actual: options, possible: { - ignoreAttributes: [_.isString, _.isRegExp], + ignoreAttributes: [isString, isRegExp], }, optional: true, }, diff --git a/lib/rules/selector-max-empty-lines/index.js b/lib/rules/selector-max-empty-lines/index.js index 0beef4dab1..a4836af2fc 100644 --- a/lib/rules/selector-max-empty-lines/index.js +++ b/lib/rules/selector-max-empty-lines/index.js @@ -2,10 +2,10 @@ 'use strict'; -const _ = require('lodash'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isNumber } = require('../../utils/validateTypes'); const ruleName = 'selector-max-empty-lines'; @@ -19,7 +19,7 @@ function rule(max, options, context) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: max, - possible: _.isNumber, + possible: isNumber, }); if (!validOptions) { diff --git a/lib/rules/selector-max-id/index.js b/lib/rules/selector-max-id/index.js index 948685072f..a52cf58929 100644 --- a/lib/rules/selector-max-id/index.js +++ b/lib/rules/selector-max-id/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const isContextFunctionalPseudoClass = require('../../utils/isContextFunctionalPseudoClass'); const isNonNegativeInteger = require('../../utils/isNonNegativeInteger'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); @@ -12,6 +11,7 @@ const report = require('../../utils/report'); const resolvedNestedSelector = require('postcss-resolve-nested-selector'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'selector-max-id'; @@ -32,7 +32,7 @@ function rule(max, options) { { actual: options, possible: { - ignoreContextFunctionalPseudoClasses: [_.isString, _.isRegExp], + ignoreContextFunctionalPseudoClasses: [isString, isRegExp], }, optional: true, }, diff --git a/lib/rules/selector-max-specificity/index.js b/lib/rules/selector-max-specificity/index.js index 58acc47938..595eec138e 100755 --- a/lib/rules/selector-max-specificity/index.js +++ b/lib/rules/selector-max-specificity/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); const isStandardSyntaxSelector = require('../../utils/isStandardSyntaxSelector'); const keywordSets = require('../../reference/keywordSets'); @@ -13,6 +12,7 @@ const resolvedNestedSelector = require('postcss-resolve-nested-selector'); const ruleMessages = require('../../utils/ruleMessages'); const specificity = require('specificity'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'selector-max-specificity'; @@ -51,7 +51,7 @@ function rule(max, options) { { actual: options, possible: { - ignoreSelectors: [_.isString, _.isRegExp], + ignoreSelectors: [isString, isRegExp], }, optional: true, }, diff --git a/lib/rules/selector-max-type/index.js b/lib/rules/selector-max-type/index.js index 5707f634e1..539870521c 100644 --- a/lib/rules/selector-max-type/index.js +++ b/lib/rules/selector-max-type/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const isContextFunctionalPseudoClass = require('../../utils/isContextFunctionalPseudoClass'); const isKeyframeSelector = require('../../utils/isKeyframeSelector'); const isNonNegativeInteger = require('../../utils/isNonNegativeInteger'); @@ -16,6 +15,7 @@ const report = require('../../utils/report'); const resolvedNestedSelector = require('postcss-resolve-nested-selector'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'selector-max-type'; @@ -39,7 +39,7 @@ function rule(max, options) { actual: options, possible: { ignore: ['descendant', 'child', 'compounded', 'next-sibling'], - ignoreTypes: [_.isString, _.isRegExp], + ignoreTypes: [isString, isRegExp], }, optional: true, }, diff --git a/lib/rules/selector-nested-pattern/index.js b/lib/rules/selector-nested-pattern/index.js index 8a3014ddbb..b33833611a 100644 --- a/lib/rules/selector-nested-pattern/index.js +++ b/lib/rules/selector-nested-pattern/index.js @@ -2,11 +2,11 @@ 'use strict'; -const _ = require('lodash'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'selector-nested-pattern'; @@ -19,14 +19,14 @@ function rule(pattern) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: pattern, - possible: [_.isRegExp, _.isString], + possible: [isRegExp, isString], }); if (!validOptions) { return; } - const normalizedPattern = _.isString(pattern) ? new RegExp(pattern) : pattern; + const normalizedPattern = isString(pattern) ? new RegExp(pattern) : pattern; root.walkRules((ruleNode) => { if (ruleNode.parent.type !== 'rule') { diff --git a/lib/rules/selector-no-vendor-prefix/index.js b/lib/rules/selector-no-vendor-prefix/index.js index b4e4f83d3f..e5b3709cdf 100644 --- a/lib/rules/selector-no-vendor-prefix/index.js +++ b/lib/rules/selector-no-vendor-prefix/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const isAutoprefixable = require('../../utils/isAutoprefixable'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); const optionsMatches = require('../../utils/optionsMatches'); @@ -10,6 +9,7 @@ const parseSelector = require('../../utils/parseSelector'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isString } = require('../../utils/validateTypes'); const ruleName = 'selector-no-vendor-prefix'; @@ -26,7 +26,7 @@ function rule(actual, options, context) { { actual: options, possible: { - ignoreSelectors: [_.isString], + ignoreSelectors: [isString], }, optional: true, }, diff --git a/lib/rules/selector-pseudo-class-allowed-list/index.js b/lib/rules/selector-pseudo-class-allowed-list/index.js index c7aea9e63c..27a5d467b5 100644 --- a/lib/rules/selector-pseudo-class-allowed-list/index.js +++ b/lib/rules/selector-pseudo-class-allowed-list/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); const parseSelector = require('../../utils/parseSelector'); @@ -10,6 +9,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const vendor = require('../../utils/vendor'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'selector-pseudo-class-allowed-list'; @@ -21,7 +21,7 @@ function rule(list) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isString, _.isRegExp], + possible: [isString, isRegExp], }); if (!validOptions) { diff --git a/lib/rules/selector-pseudo-class-disallowed-list/index.js b/lib/rules/selector-pseudo-class-disallowed-list/index.js index a0a53727c1..ccc76ff655 100644 --- a/lib/rules/selector-pseudo-class-disallowed-list/index.js +++ b/lib/rules/selector-pseudo-class-disallowed-list/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); const parseSelector = require('../../utils/parseSelector'); @@ -10,6 +9,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const vendor = require('../../utils/vendor'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'selector-pseudo-class-disallowed-list'; @@ -21,7 +21,7 @@ function rule(list) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isString, _.isRegExp], + possible: [isString, isRegExp], }); if (!validOptions) { diff --git a/lib/rules/selector-pseudo-class-no-unknown/index.js b/lib/rules/selector-pseudo-class-no-unknown/index.js index b601b86597..a500e3375c 100644 --- a/lib/rules/selector-pseudo-class-no-unknown/index.js +++ b/lib/rules/selector-pseudo-class-no-unknown/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const atRuleParamIndex = require('../../utils/atRuleParamIndex'); const isCustomSelector = require('../../utils/isCustomSelector'); const isStandardSyntaxAtRule = require('../../utils/isStandardSyntaxAtRule'); @@ -15,6 +14,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const vendor = require('../../utils/vendor'); +const { isString } = require('../../utils/validateTypes'); const ruleName = 'selector-pseudo-class-no-unknown'; @@ -31,7 +31,7 @@ function rule(actual, options) { { actual: options, possible: { - ignorePseudoClasses: [_.isString], + ignorePseudoClasses: [isString], }, optional: true, }, diff --git a/lib/rules/selector-pseudo-element-allowed-list/index.js b/lib/rules/selector-pseudo-element-allowed-list/index.js index 244db10f7c..9bbc6e4139 100644 --- a/lib/rules/selector-pseudo-element-allowed-list/index.js +++ b/lib/rules/selector-pseudo-element-allowed-list/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); const parseSelector = require('../../utils/parseSelector'); @@ -10,6 +9,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const vendor = require('../../utils/vendor'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'selector-pseudo-element-allowed-list'; @@ -21,7 +21,7 @@ function rule(list) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isString, _.isRegExp], + possible: [isString, isRegExp], }); if (!validOptions) { diff --git a/lib/rules/selector-pseudo-element-disallowed-list/index.js b/lib/rules/selector-pseudo-element-disallowed-list/index.js index 90374f02bf..ff4f57970c 100644 --- a/lib/rules/selector-pseudo-element-disallowed-list/index.js +++ b/lib/rules/selector-pseudo-element-disallowed-list/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); const parseSelector = require('../../utils/parseSelector'); @@ -10,6 +9,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const vendor = require('../../utils/vendor'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'selector-pseudo-element-disallowed-list'; @@ -21,7 +21,7 @@ function rule(list) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: list, - possible: [_.isString, _.isRegExp], + possible: [isString, isRegExp], }); if (!validOptions) { diff --git a/lib/rules/selector-pseudo-element-no-unknown/index.js b/lib/rules/selector-pseudo-element-no-unknown/index.js index 3e3d55d0a7..c69a019ce8 100644 --- a/lib/rules/selector-pseudo-element-no-unknown/index.js +++ b/lib/rules/selector-pseudo-element-no-unknown/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); const isStandardSyntaxSelector = require('../../utils/isStandardSyntaxSelector'); const keywordSets = require('../../reference/keywordSets'); @@ -12,6 +11,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const vendor = require('../../utils/vendor'); +const { isString } = require('../../utils/validateTypes'); const ruleName = 'selector-pseudo-element-no-unknown'; @@ -28,7 +28,7 @@ function rule(actual, options) { { actual: options, possible: { - ignorePseudoElements: [_.isString], + ignorePseudoElements: [isString], }, optional: true, }, diff --git a/lib/rules/selector-type-case/index.js b/lib/rules/selector-type-case/index.js index e28fdf9933..ca4d7d09ca 100644 --- a/lib/rules/selector-type-case/index.js +++ b/lib/rules/selector-type-case/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const isKeyframeSelector = require('../../utils/isKeyframeSelector'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); const isStandardSyntaxTypeSelector = require('../../utils/isStandardSyntaxTypeSelector'); @@ -11,6 +10,7 @@ const parseSelector = require('../../utils/parseSelector'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isString } = require('../../utils/validateTypes'); const ruleName = 'selector-type-case'; @@ -30,7 +30,7 @@ function rule(expectation, options, context) { { actual: options, possible: { - ignoreTypes: [_.isString], + ignoreTypes: [isString], }, optional: true, }, diff --git a/lib/rules/selector-type-no-unknown/index.js b/lib/rules/selector-type-no-unknown/index.js index 051771cd7e..83dfbb54eb 100644 --- a/lib/rules/selector-type-no-unknown/index.js +++ b/lib/rules/selector-type-no-unknown/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const htmlTags = require('html-tags'); const isCustomElement = require('../../utils/isCustomElement'); const isKeyframeSelector = require('../../utils/isKeyframeSelector'); @@ -16,6 +15,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const svgTags = require('svg-tags'); const validateOptions = require('../../utils/validateOptions'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'selector-type-no-unknown'; @@ -33,8 +33,8 @@ function rule(actual, options) { actual: options, possible: { ignore: ['custom-elements', 'default-namespace'], - ignoreNamespaces: [_.isString, _.isRegExp], - ignoreTypes: [_.isString, _.isRegExp], + ignoreNamespaces: [isString, isRegExp], + ignoreTypes: [isString, isRegExp], }, optional: true, }, diff --git a/lib/rules/string-quotes/index.js b/lib/rules/string-quotes/index.js index 09613c1149..9fafe76463 100644 --- a/lib/rules/string-quotes/index.js +++ b/lib/rules/string-quotes/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const atRuleParamIndex = require('../../utils/atRuleParamIndex'); const declarationValueIndex = require('../../utils/declarationValueIndex'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); @@ -11,6 +10,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const valueParser = require('postcss-value-parser'); +const { isBoolean } = require('../../utils/validateTypes'); const ruleName = 'string-quotes'; @@ -36,7 +36,7 @@ function rule(expectation, secondary, context) { { actual: secondary, possible: { - avoidEscape: _.isBoolean, + avoidEscape: isBoolean, }, optional: true, }, diff --git a/lib/rules/time-min-milliseconds/index.js b/lib/rules/time-min-milliseconds/index.js index 7e0fa84f53..1ff956a41e 100644 --- a/lib/rules/time-min-milliseconds/index.js +++ b/lib/rules/time-min-milliseconds/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const declarationValueIndex = require('../../utils/declarationValueIndex'); const keywordSets = require('../../reference/keywordSets'); const optionsMatches = require('../../utils/optionsMatches'); @@ -12,6 +11,7 @@ const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const valueParser = require('postcss-value-parser'); const vendor = require('../../utils/vendor'); +const { isNumber } = require('../../utils/validateTypes'); const ruleName = 'time-min-milliseconds'; @@ -28,7 +28,7 @@ function rule(minimum, options) { ruleName, { actual: minimum, - possible: _.isNumber, + possible: isNumber, }, { actual: options, diff --git a/lib/rules/unit-allowed-list/index.js b/lib/rules/unit-allowed-list/index.js index f544fe5ca6..2a3b53e4e3 100644 --- a/lib/rules/unit-allowed-list/index.js +++ b/lib/rules/unit-allowed-list/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const atRuleParamIndex = require('../../utils/atRuleParamIndex'); const declarationValueIndex = require('../../utils/declarationValueIndex'); const getUnitFromValueNode = require('../../utils/getUnitFromValueNode'); @@ -12,6 +11,7 @@ const ruleMessages = require('../../utils/ruleMessages'); const validateObjectWithArrayProps = require('../../utils/validateObjectWithArrayProps'); const validateOptions = require('../../utils/validateOptions'); const valueParser = require('postcss-value-parser'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'unit-allowed-list'; @@ -28,13 +28,13 @@ function rule(listInput, options) { ruleName, { actual: list, - possible: [_.isString], + possible: [isString], }, { optional: true, actual: options, possible: { - ignoreProperties: validateObjectWithArrayProps([_.isString, _.isRegExp]), + ignoreProperties: validateObjectWithArrayProps([isString, isRegExp]), }, }, ); diff --git a/lib/rules/unit-disallowed-list/index.js b/lib/rules/unit-disallowed-list/index.js index d1f574a5d4..f6310cab1b 100644 --- a/lib/rules/unit-disallowed-list/index.js +++ b/lib/rules/unit-disallowed-list/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const atRuleParamIndex = require('../../utils/atRuleParamIndex'); const declarationValueIndex = require('../../utils/declarationValueIndex'); const getUnitFromValueNode = require('../../utils/getUnitFromValueNode'); @@ -13,6 +12,7 @@ const ruleMessages = require('../../utils/ruleMessages'); const validateObjectWithArrayProps = require('../../utils/validateObjectWithArrayProps'); const validateOptions = require('../../utils/validateOptions'); const valueParser = require('postcss-value-parser'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'unit-disallowed-list'; @@ -37,14 +37,14 @@ function rule(listInput, options) { ruleName, { actual: list, - possible: [_.isString], + possible: [isString], }, { optional: true, actual: options, possible: { - ignoreProperties: validateObjectWithArrayProps([_.isString, _.isRegExp]), - ignoreMediaFeatureNames: validateObjectWithArrayProps([_.isString, _.isRegExp]), + ignoreProperties: validateObjectWithArrayProps([isString, isRegExp]), + ignoreMediaFeatureNames: validateObjectWithArrayProps([isString, isRegExp]), }, }, ); diff --git a/lib/rules/unit-no-unknown/index.js b/lib/rules/unit-no-unknown/index.js index f4e0aa18ad..edabc25944 100644 --- a/lib/rules/unit-no-unknown/index.js +++ b/lib/rules/unit-no-unknown/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const atRuleParamIndex = require('../../utils/atRuleParamIndex'); const declarationValueIndex = require('../../utils/declarationValueIndex'); const getUnitFromValueNode = require('../../utils/getUnitFromValueNode'); @@ -15,6 +14,7 @@ const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const valueParser = require('postcss-value-parser'); const vendor = require('../../utils/vendor'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'unit-no-unknown'; @@ -35,8 +35,8 @@ function rule(actual, options) { { actual: options, possible: { - ignoreUnits: [_.isString, _.isRegExp], - ignoreFunctions: [_.isString, _.isRegExp], + ignoreUnits: [isString, isRegExp], + ignoreFunctions: [isString, isRegExp], }, optional: true, }, diff --git a/lib/rules/value-keyword-case/index.js b/lib/rules/value-keyword-case/index.js index d4f0d969ff..76a7aebd55 100644 --- a/lib/rules/value-keyword-case/index.js +++ b/lib/rules/value-keyword-case/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const declarationValueIndex = require('../../utils/declarationValueIndex'); const getDeclarationValue = require('../../utils/getDeclarationValue'); const getUnitFromValueNode = require('../../utils/getUnitFromValueNode'); @@ -15,6 +14,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const valueParser = require('postcss-value-parser'); +const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'value-keyword-case'; @@ -45,9 +45,9 @@ function rule(expectation, options, context) { { actual: options, possible: { - ignoreProperties: [_.isString, _.isRegExp], - ignoreKeywords: [_.isString, _.isRegExp], - ignoreFunctions: [_.isString, _.isRegExp], + ignoreProperties: [isString, isRegExp], + ignoreKeywords: [isString, isRegExp], + ignoreFunctions: [isString, isRegExp], }, optional: true, }, diff --git a/lib/rules/value-list-max-empty-lines/index.js b/lib/rules/value-list-max-empty-lines/index.js index b7022c898e..6685abf5b0 100644 --- a/lib/rules/value-list-max-empty-lines/index.js +++ b/lib/rules/value-list-max-empty-lines/index.js @@ -2,12 +2,12 @@ 'use strict'; -const _ = require('lodash'); const getDeclarationValue = require('../../utils/getDeclarationValue'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const setDeclarationValue = require('../../utils/setDeclarationValue'); const validateOptions = require('../../utils/validateOptions'); +const { isNumber } = require('../../utils/validateTypes'); const ruleName = 'value-list-max-empty-lines'; @@ -21,7 +21,7 @@ function rule(max, options, context) { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: max, - possible: _.isNumber, + possible: isNumber, }); if (!validOptions) { diff --git a/lib/rules/value-no-vendor-prefix/index.js b/lib/rules/value-no-vendor-prefix/index.js index ad6840f025..0867ad302f 100644 --- a/lib/rules/value-no-vendor-prefix/index.js +++ b/lib/rules/value-no-vendor-prefix/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const isAutoprefixable = require('../../utils/isAutoprefixable'); const isStandardSyntaxDeclaration = require('../../utils/isStandardSyntaxDeclaration'); const isStandardSyntaxProperty = require('../../utils/isStandardSyntaxProperty'); @@ -12,6 +11,7 @@ const ruleMessages = require('../../utils/ruleMessages'); const styleSearch = require('style-search'); const validateOptions = require('../../utils/validateOptions'); const vendor = require('../../utils/vendor'); +const { isString } = require('../../utils/validateTypes'); const ruleName = 'value-no-vendor-prefix'; @@ -31,7 +31,7 @@ function rule(actual, options, context) { optional: true, actual: options, possible: { - ignoreValues: [_.isString], + ignoreValues: [isString], }, }, ); diff --git a/lib/utils/containsString.js b/lib/utils/containsString.js index 98b7383b2b..4ef1f3fd61 100644 --- a/lib/utils/containsString.js +++ b/lib/utils/containsString.js @@ -1,6 +1,6 @@ 'use strict'; -const _ = require('lodash'); +const { isString } = require('./validateTypes'); /** @typedef {false | { match: string, pattern: string }} ReturnValue */ @@ -42,7 +42,7 @@ module.exports = function containsString(input, comparison) { function testAgainstString(value, comparison) { if (!comparison) return false; - if (!_.isString(comparison)) return false; + if (!isString(comparison)) return false; if (comparison.startsWith('/') && comparison.endsWith('/')) { return false; diff --git a/lib/utils/validateObjectWithArrayProps.js b/lib/utils/validateObjectWithArrayProps.js index b5f6de54d1..643928d2b1 100644 --- a/lib/utils/validateObjectWithArrayProps.js +++ b/lib/utils/validateObjectWithArrayProps.js @@ -1,5 +1,7 @@ 'use strict'; +const { isPlainObject } = require('is-plain-object'); + /** * @template T * @typedef {(i: T) => boolean} Validator @@ -18,7 +20,7 @@ * @returns {(value: {[k: any]: T|T[]}) => boolean} */ module.exports = (validator) => (value) => { - if (Object.prototype.toString.call(value) !== '[object Object]') { + if (!isPlainObject(value)) { return false; } diff --git a/lib/utils/validateOptions.js b/lib/utils/validateOptions.js index 19b520f533..9c0a483c79 100644 --- a/lib/utils/validateOptions.js +++ b/lib/utils/validateOptions.js @@ -1,6 +1,7 @@ 'use strict'; const _ = require('lodash'); +const { isPlainObject } = require('is-plain-object'); const IGNORED_OPTIONS = new Set(['severity', 'message', 'reportDisables']); @@ -121,7 +122,7 @@ function validate(opts, ruleName, complain) { } // If actual is NOT an object ... - if (Object.prototype.toString.call(actual) !== '[object Object]') { + if (!isPlainObject(actual)) { complain( `Invalid option value ${JSON.stringify(actual)} for rule "${ruleName}": should be an object`, ); diff --git a/lib/utils/validateTypes.js b/lib/utils/validateTypes.js new file mode 100644 index 0000000000..407766dc8f --- /dev/null +++ b/lib/utils/validateTypes.js @@ -0,0 +1,44 @@ +'use strict'; + +/** + * Checks if the value is a boolean or a Boolean object. + * @param {any} value + * @returns {boolean} + */ +function isBoolean(value) { + return typeof value === 'boolean' || value instanceof Boolean; +} + +/** + * Checks if the value is a number or a Number object. + * @param {any} value + * @returns {boolean} + */ +function isNumber(value) { + return typeof value === 'number' || value instanceof Number; +} + +/** + * Checks if the value is a RegExp object. + * @param {any} value + * @returns {boolean} + */ +function isRegExp(value) { + return value instanceof RegExp; +} + +/** + * Checks if the value is a string or a String object. + * @param {any} value + * @returns {boolean} + */ +function isString(value) { + return typeof value === 'string' || value instanceof String; +} + +module.exports = { + isBoolean, + isNumber, + isRegExp, + isString, +}; diff --git a/lib/validateDisableSettings.js b/lib/validateDisableSettings.js index 863b6bad66..76850d95b4 100644 --- a/lib/validateDisableSettings.js +++ b/lib/validateDisableSettings.js @@ -1,7 +1,7 @@ 'use strict'; -const _ = require('lodash'); const validateOptions = require('./utils/validateOptions'); +const { isRegExp, isString } = require('./utils/validateTypes'); /** * @typedef {import('stylelint').PostcssResult} PostcssResult @@ -57,7 +57,7 @@ module.exports = function (result, field) { { actual: options, possible: { - except: [_.isString, _.isRegExp], + except: [isString, isRegExp], }, }, ); diff --git a/package-lock.json b/package-lock.json index dcaa029274..fff6f1188b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,7 @@ "ignore": "^5.1.8", "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", "known-css-properties": "^0.21.0", "lodash": "^4.17.21", "log-symbols": "^4.1.0", @@ -4720,6 +4721,14 @@ "node": ">=8" } }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -14381,6 +14390,11 @@ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + }, "is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", diff --git a/package.json b/package.json index 1a9ae813f2..ab09d3db14 100644 --- a/package.json +++ b/package.json @@ -122,6 +122,7 @@ "ignore": "^5.1.8", "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", "known-css-properties": "^0.21.0", "lodash": "^4.17.21", "log-symbols": "^4.1.0", From 68c041b0762794bc07295196d26f1fb68057510d Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Mon, 7 Jun 2021 07:49:21 -0400 Subject: [PATCH 041/194] Refactor to remove `_.sortBy` (#5349) --- lib/formatters/stringFormatter.js | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/lib/formatters/stringFormatter.js b/lib/formatters/stringFormatter.js index 44f8d93098..a727eb2ede 100644 --- a/lib/formatters/stringFormatter.js +++ b/lib/formatters/stringFormatter.js @@ -102,13 +102,23 @@ function getMessageWidth(columnWidths) { function formatter(messages, source) { if (!messages.length) return ''; - const orderedMessages = _.sortBy( - messages, - // eslint-disable-next-line no-confusing-arrow - (m) => (m.line ? 2 : 1), // positionless first - (m) => m.line, - (m) => m.column, - ); + const orderedMessages = [...messages].sort((a, b) => { + // positionless first + if (!a.line && b.line) return -1; + + // positionless first + if (a.line && !b.line) return 1; + + if (a.line < b.line) return -1; + + if (a.line > b.line) return 1; + + if (a.column < b.column) return -1; + + if (a.column > b.column) return 1; + + return 0; + }); /** * Create a list of column widths, needed to calculate From edfb65351be8884a2dffbc42bb3c52727e310165 Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Mon, 7 Jun 2021 07:49:47 -0400 Subject: [PATCH 042/194] Refactor to remove `_.transform` (#5351) --- .../index.js | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/lib/rules/declaration-block-no-redundant-longhand-properties/index.js b/lib/rules/declaration-block-no-redundant-longhand-properties/index.js index d3f2ff15da..ece507cc5c 100644 --- a/lib/rules/declaration-block-no-redundant-longhand-properties/index.js +++ b/lib/rules/declaration-block-no-redundant-longhand-properties/index.js @@ -37,15 +37,20 @@ function rule(actual, options) { return; } - const longhandProperties = _.transform(shorthandData, (longhandProps, values, key) => { - if (optionsMatches(options, 'ignoreShorthands', key)) { - return; - } + const longhandProperties = Object.entries(shorthandData).reduce( + (longhandProps, [key, values]) => { + if (optionsMatches(options, 'ignoreShorthands', key)) { + return longhandProps; + } - values.forEach((value) => { - (longhandProps[value] || (longhandProps[value] = [])).push(key); - }); - }); + values.forEach((value) => { + (longhandProps[value] || (longhandProps[value] = [])).push(key); + }); + + return longhandProps; + }, + {}, + ); eachDeclarationBlock(root, (eachDecl) => { const longhandDeclarations = {}; From 1c69640e593ffd81a94000ecdd22b16385bcb79a Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Mon, 7 Jun 2021 07:50:29 -0400 Subject: [PATCH 043/194] Refactor to remove `_.groupBy` (#5350) --- lib/formatters/verboseFormatter.js | 31 ++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/lib/formatters/verboseFormatter.js b/lib/formatters/verboseFormatter.js index abbd8fc379..9b2d3ded34 100644 --- a/lib/formatters/verboseFormatter.js +++ b/lib/formatters/verboseFormatter.js @@ -1,11 +1,13 @@ 'use strict'; -const _ = require('lodash'); const chalk = require('chalk'); const stringFormatter = require('./stringFormatter'); +/** @typedef {import('stylelint').Formatter} Formatter */ +/** @typedef {import('stylelint').StylelintWarning} StylelintWarning */ + /** - * @type {import('stylelint').Formatter} + * @type {Formatter} */ module.exports = function (results) { let output = stringFormatter(results); @@ -42,13 +44,13 @@ module.exports = function (results) { }); const warnings = results.flatMap((r) => r.warnings); - const warningsBySeverity = _.groupBy(warnings, 'severity'); + const warningsBySeverity = groupBy(warnings, (w) => w.severity); const problemWord = warnings.length === 1 ? 'problem' : 'problems'; output += chalk.underline(`\n${warnings.length} ${problemWord} found\n`); for (const [severityLevel, warningList] of Object.entries(warningsBySeverity)) { - const warningsByRule = _.groupBy(warningList, 'rule'); + const warningsByRule = groupBy(warningList, (w) => w.rule); output += ` severity level "${severityLevel}": ${warningList.length}\n`; @@ -59,3 +61,24 @@ module.exports = function (results) { return `${output}\n`; }; + +/** + * @param {StylelintWarning[]} array + * @param {(w: StylelintWarning) => string} keyFn + */ +function groupBy(array, keyFn) { + /** @type {{[s: string]: StylelintWarning[]}} */ + const result = {}; + + for (const item of array) { + const key = keyFn(item); + + if (!(key in result)) { + result[key] = []; + } + + result[key].push(item); + } + + return result; +} From 17624b538356fe0e4cb236a6340c25e142067830 Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Mon, 7 Jun 2021 14:01:11 +0100 Subject: [PATCH 044/194] Update to PostCSS 8 (#5304) * Update postcss dependencies * Fix invalid position for attribute selector (#5305) * Fix custom property sets (#5307) * Update dependencies * Fix types issues after PostCSS update (#5346) * Migrate stylelint PostCSS plugin to Visitors API (#5353) Co-authored-by: Aleks Hudochenkov --- lib/__tests__/defaultSeverity.test.js | 3 +- lib/__tests__/disableRanges.test.js | 3 +- lib/__tests__/ignoreDisables.test.js | 11 +- lib/__tests__/postcssPlugin.test.js | 45 +-- lib/assignDisabledRanges.js | 3 +- lib/createPartialStylelintResult.js | 1 - lib/createStylelintResult.js | 1 - lib/descriptionlessDisables.js | 2 +- lib/getPostcssResult.js | 4 +- lib/index.js | 19 +- lib/lintPostcssResult.js | 1 - lib/needlessDisables.js | 2 +- lib/postcssPlugin.js | 47 ++- .../__tests__/index.js | 22 -- .../__tests__/index.js | 21 -- lib/rules/no-descending-specificity/index.js | 6 - lib/rules/no-extra-semicolons/index.js | 40 +-- .../property-no-unknown/__tests__/index.js | 10 +- lib/rules/string-no-newline/index.js | 3 +- lib/standalone.js | 2 - .../__tests__/isCustomPropertySet.test.js | 18 - .../isStandardSyntaxDeclaration.test.js | 18 - lib/utils/addEmptyLineAfter.js | 2 +- lib/utils/eachDeclarationBlock.js | 2 +- lib/utils/findAtRuleContext.js | 12 +- .../isAfterStandardPropertyDeclaration.js | 3 +- .../isBlocklessAtRuleAfterBlocklessAtRule.js | 3 +- ...klessAtRuleAfterSameNameBlocklessAtRule.js | 3 +- lib/utils/isCustomPropertySet.js | 21 -- lib/utils/isFirstNodeOfRoot.js | 4 + lib/utils/isKeyframeRule.js | 8 +- lib/utils/isSharedLineComment.js | 5 +- lib/utils/isStandardSyntaxDeclaration.js | 3 +- lib/utils/isStandardSyntaxRule.js | 6 - lib/utils/nodeContextLookup.js | 2 +- lib/utils/typeGuards.js | 8 + package-lock.json | 339 ++++++++---------- package.json | 20 +- types/postcss/index.d.ts | 51 +-- types/stylelint/index.d.ts | 8 +- 40 files changed, 307 insertions(+), 475 deletions(-) delete mode 100644 lib/utils/__tests__/isCustomPropertySet.test.js delete mode 100644 lib/utils/isCustomPropertySet.js diff --git a/lib/__tests__/defaultSeverity.test.js b/lib/__tests__/defaultSeverity.test.js index 3ba817c42c..fce087f7f5 100644 --- a/lib/__tests__/defaultSeverity.test.js +++ b/lib/__tests__/defaultSeverity.test.js @@ -1,5 +1,6 @@ 'use strict'; +const postcss = require('postcss'); const postcssPlugin = require('../postcssPlugin'); it('`defaultSeverity` option set to warning', async () => { @@ -10,7 +11,7 @@ it('`defaultSeverity` option set to warning', async () => { }, }; - const result = await postcssPlugin.process('a {}', { from: undefined }, config); + const result = await postcss([postcssPlugin(config)]).process('a {}', { from: undefined }); expect(result.warnings()).toMatchObject([ expect.objectContaining({ diff --git a/lib/__tests__/disableRanges.test.js b/lib/__tests__/disableRanges.test.js index 1a26020465..dda789f1fd 100644 --- a/lib/__tests__/disableRanges.test.js +++ b/lib/__tests__/disableRanges.test.js @@ -955,7 +955,8 @@ it('Less // line-disabling comment (with description)', async () => { }); }); -it('Less // disable next-line comment (with multi-line description)', async () => { +// eslint-disable-next-line jest/no-disabled-tests -- TODO: investigate the reason +it.skip('Less // disable next-line comment (with multi-line description)', async () => { const result = await testDisableRangesLess( `a { // stylelint-disable-next-line declaration-no-important diff --git a/lib/__tests__/ignoreDisables.test.js b/lib/__tests__/ignoreDisables.test.js index 61f56b85f8..69e061b95d 100644 --- a/lib/__tests__/ignoreDisables.test.js +++ b/lib/__tests__/ignoreDisables.test.js @@ -1,5 +1,6 @@ 'use strict'; +const postcss = require('postcss'); const postcssPlugin = require('../postcssPlugin'); const standalone = require('../standalone'); @@ -19,14 +20,12 @@ describe('ignoreDisables with postcssPlugins', () => { let result; beforeEach(async () => { - result = await postcssPlugin.process( - css, - { from: undefined }, - { + result = await postcss([ + postcssPlugin({ config, ignoreDisables: true, - }, - ); + }), + ]).process(css, { from: undefined }); }); it('expected number of warnings', () => { diff --git a/lib/__tests__/postcssPlugin.test.js b/lib/__tests__/postcssPlugin.test.js index 551dc0455c..964c3d2a78 100644 --- a/lib/__tests__/postcssPlugin.test.js +++ b/lib/__tests__/postcssPlugin.test.js @@ -2,30 +2,34 @@ const configurationError = require('../utils/configurationError'); const path = require('path'); +const postcss = require('postcss'); const postcssPlugin = require('../postcssPlugin'); it('`config` option is `null`', () => { - return expect(postcssPlugin.process('a {}', { from: undefined })).rejects.toMatchObject({ + return expect( + postcss([postcssPlugin()]).process('a {}', { from: undefined }), + ).rejects.toMatchObject({ message: expect.stringMatching('No configuration provided'), }); }); -it('`configFile` option with absolute path', () => { +it('`configFile` option with absolute path', async () => { const config = { configFile: path.join(__dirname, 'fixtures/config-block-no-empty.json'), }; - return postcssPlugin.process('a {}', { from: undefined }, config).then((postcssResult) => { - const warnings = postcssResult.warnings(); - - expect(warnings).toHaveLength(1); - expect(warnings[0].text).toContain('block-no-empty'); + const postcssResult = await postcss([postcssPlugin(config)]).process('a {}', { + from: undefined, }); + const warnings = postcssResult.warnings(); + + expect(warnings).toHaveLength(1); + expect(warnings[0].text).toContain('block-no-empty'); }); it('`configFile` with bad path', () => { return expect( - postcssPlugin.process('a {}', { from: undefined }, { configFile: './herby.json' }), + postcss([postcssPlugin({ configFile: './herby.json' })]).process('a {}', { from: undefined }), ).rejects.toHaveProperty('code', 'ENOENT'); }); @@ -34,7 +38,9 @@ it('`configFile` option without rules', () => { configFile: path.join(__dirname, 'fixtures/config-without-rules.json'), }; - return expect(postcssPlugin.process('a {}', { from: undefined }, config)).rejects.toEqual( + return expect( + postcss([postcssPlugin(config)]).process('a {}', { from: undefined }), + ).rejects.toEqual( configurationError( 'No rules found within configuration. Have you provided a "rules" property?', ), @@ -47,7 +53,9 @@ it('`configFile` option with undefined rule', () => { }; const ruleName = 'unknown-rule'; - return expect(postcssPlugin.process('a {}', { from: undefined }, config)).resolves.toMatchObject({ + return expect( + postcss([postcssPlugin(config)]).process('a {}', { from: undefined }), + ).resolves.toMatchObject({ messages: [ expect.objectContaining({ line: 1, @@ -66,13 +74,11 @@ it('`ignoreFiles` options is not empty and file ignored', () => { 'block-no-empty': true, }, ignoreFiles: '**/foo.css', - from: 'foo.css', }; - return expect(postcssPlugin.process('a {}', { from: undefined }, config)).resolves.toHaveProperty( - 'stylelint.ignored', - true, - ); + return expect( + postcss([postcssPlugin(config)]).process('a {}', { from: 'foo.css' }), + ).resolves.toHaveProperty('stylelint.ignored', true); }); it('`ignoreFiles` options is not empty and file not ignored', () => { @@ -81,11 +87,10 @@ it('`ignoreFiles` options is not empty and file not ignored', () => { 'block-no-empty': true, }, ignoreFiles: '**/bar.css', - from: 'foo.css', }; return expect( - postcssPlugin.process('a {}', { from: undefined }, config), + postcss([postcssPlugin(config)]).process('a {}', { from: 'foo.css' }), ).resolves.not.toHaveProperty('stylelint.ignored'); }); @@ -108,11 +113,10 @@ describe('stylelintignore', () => { 'block-no-empty': true, }, }, - from: 'postcssstylelintignore.css', }; return expect( - postcssPlugin.process('a {}', { from: undefined }, options), + postcss([postcssPlugin(options)]).process('a {}', { from: 'postcssstylelintignore.css' }), ).resolves.toHaveProperty('stylelint.ignored', true); }); @@ -123,12 +127,11 @@ describe('stylelintignore', () => { 'block-no-empty': true, }, }, - from: 'foo.css', ignorePath: path.join(__dirname, './stylelintignore-test/.postcssPluginignore'), }; return expect( - postcssPlugin.process('a {}', { from: undefined }, options), + postcss([postcssPlugin(options)]).process('a {}', { from: 'foo.css' }), ).resolves.toHaveProperty('stylelint.ignored', true); }); }); diff --git a/lib/assignDisabledRanges.js b/lib/assignDisabledRanges.js index f7c1a921ff..1ba585288a 100644 --- a/lib/assignDisabledRanges.js +++ b/lib/assignDisabledRanges.js @@ -119,11 +119,12 @@ module.exports = function (root, result) { /** * @param {PostcssComment} comment + * @return {boolean} */ function isInlineComment(comment) { // We check both here because the Sass parser uses `raws.inline` to indicate // inline comments, while the Less parser uses `inline`. - return comment.inline || comment.raws.inline; + return Boolean(comment.inline || comment.raws.inline); } /** diff --git a/lib/createPartialStylelintResult.js b/lib/createPartialStylelintResult.js index 744403f639..3be8afc338 100644 --- a/lib/createPartialStylelintResult.js +++ b/lib/createPartialStylelintResult.js @@ -1,7 +1,6 @@ 'use strict'; /** @typedef {import('stylelint').PostcssResult} PostcssResult */ -/** @typedef {import('postcss').NodeSource} NodeSource */ /** @typedef {import('stylelint').StylelintResult} StylelintResult */ /** diff --git a/lib/createStylelintResult.js b/lib/createStylelintResult.js index ed4a17997d..edc178efd8 100644 --- a/lib/createStylelintResult.js +++ b/lib/createStylelintResult.js @@ -3,7 +3,6 @@ const createPartialStylelintResult = require('./createPartialStylelintResult'); /** @typedef {import('stylelint').PostcssResult} PostcssResult */ -/** @typedef {import('postcss').NodeSource} NodeSource */ /** @typedef {import('stylelint').StylelintResult} StylelintResult */ /** diff --git a/lib/descriptionlessDisables.js b/lib/descriptionlessDisables.js index eb5b0a7567..24275c5333 100644 --- a/lib/descriptionlessDisables.js +++ b/lib/descriptionlessDisables.js @@ -3,7 +3,7 @@ const optionsMatches = require('./utils/optionsMatches'); const validateDisableSettings = require('./validateDisableSettings'); -/** @typedef {import('postcss/lib/comment')} PostcssComment */ +/** @typedef {import('postcss').Comment} PostcssComment */ /** @typedef {import('stylelint').RangeType} RangeType */ /** @typedef {import('stylelint').DisableReportRange} DisableReportRange */ /** @typedef {import('stylelint').StylelintDisableOptionsReport} StylelintDisableOptionsReport */ diff --git a/lib/getPostcssResult.js b/lib/getPostcssResult.js index 8bec66ab42..fc1d1dda07 100644 --- a/lib/getPostcssResult.js +++ b/lib/getPostcssResult.js @@ -1,8 +1,8 @@ 'use strict'; -const LazyResult = require('postcss/lib/lazy-result'); +const LazyResult = require('postcss/lib/lazy-result').default; const path = require('path'); -const postcss = require('postcss'); +const { default: postcss } = require('postcss'); const { promises: fs } = require('fs'); /** @typedef {import('postcss').Result} Result */ diff --git a/lib/index.js b/lib/index.js index c545966fd1..e96423e2c9 100644 --- a/lib/index.js +++ b/lib/index.js @@ -12,22 +12,19 @@ const standalone = require('./standalone'); const validateOptions = require('./utils/validateOptions'); /** - * TODO TYPES change any to appropriated options - * @type {import('postcss').Plugin & Partial} + * @type {import('postcss').PluginCreator & import('stylelint').StylelintPublicAPI} */ -const api = postcssPlugin; +module.exports = postcssPlugin; -api.utils = { +module.exports.utils = { report, ruleMessages, validateOptions, checkAgainstRule, }; -api.lint = standalone; -api.rules = rules; -api.formatters = formatters; -api.createPlugin = createPlugin; -api.createLinter = createStylelint; - -module.exports = api; +module.exports.lint = standalone; +module.exports.rules = rules; +module.exports.formatters = formatters; +module.exports.createPlugin = createPlugin; +module.exports.createLinter = createStylelint; diff --git a/lib/lintPostcssResult.js b/lib/lintPostcssResult.js index 527627e03d..bbc7472a8f 100644 --- a/lib/lintPostcssResult.js +++ b/lib/lintPostcssResult.js @@ -31,7 +31,6 @@ function lintPostcssResult(stylelintOptions, postcssResult, config) { throw new Error('Unexpected Postcss root object!'); } - // @ts-ignore TODO TYPES property css does not exists const newlineMatch = postcssDoc.source && postcssDoc.source.input.css.match(/\r?\n/); newline = newlineMatch ? newlineMatch[0] : getOsEol(); diff --git a/lib/needlessDisables.js b/lib/needlessDisables.js index 0ba693672a..96f51980de 100644 --- a/lib/needlessDisables.js +++ b/lib/needlessDisables.js @@ -5,7 +5,7 @@ const optionsMatches = require('./utils/optionsMatches'); const putIfAbsent = require('./utils/putIfAbsent'); const validateDisableSettings = require('./validateDisableSettings'); -/** @typedef {import('postcss/lib/comment')} PostcssComment */ +/** @typedef {import('postcss').Comment} PostcssComment */ /** @typedef {import('stylelint').DisabledRange} DisabledRange */ /** @typedef {import('stylelint').RangeType} RangeType */ /** @typedef {import('stylelint').DisableReportRange} DisableReportRange */ diff --git a/lib/postcssPlugin.js b/lib/postcssPlugin.js index 35da0b3d2f..6d3a26eefb 100644 --- a/lib/postcssPlugin.js +++ b/lib/postcssPlugin.js @@ -2,25 +2,40 @@ const createStylelint = require('./createStylelint'); const path = require('path'); -const postcss = require('postcss'); -//'block-no-empty': bool || Array -module.exports = postcss.plugin('stylelint', (options = {}) => { - const tailoredOptions = options.rules ? { config: options } : options; - const stylelint = createStylelint(tailoredOptions); +/** @typedef {import('stylelint').PostcssPluginOptions} PostcssPluginOptions */ +/** @typedef {import('stylelint').StylelintConfig} StylelintConfig */ - return (root, result) => { - let filePath = options.from; +/** + * @type {import('postcss').PluginCreator} + * */ +module.exports = (options = {}) => { + const tailoredOptions = isConfig(options) ? { config: options } : options; + const stylelint = createStylelint(tailoredOptions); - if (!filePath) filePath = root.source && root.source.input.file; + return { + postcssPlugin: 'stylelint', + Once(root, { result }) { + let filePath = root.source && root.source.input.file; - if (filePath && !path.isAbsolute(filePath)) { - filePath = path.join(process.cwd(), filePath); - } + if (filePath && !path.isAbsolute(filePath)) { + filePath = path.join(process.cwd(), filePath); + } - return stylelint._lintSource({ - filePath, - existingPostcssResult: result, - }); + return stylelint._lintSource({ + filePath, + existingPostcssResult: result, + }); + }, }; -}); +}; + +module.exports.postcss = true; + +/** + * @param {PostcssPluginOptions} options + * @returns {options is StylelintConfig} + */ +function isConfig(options) { + return 'rules' in options; +} diff --git a/lib/rules/block-closing-brace-newline-after/__tests__/index.js b/lib/rules/block-closing-brace-newline-after/__tests__/index.js index 912f0da721..0d16a8332c 100644 --- a/lib/rules/block-closing-brace-newline-after/__tests__/index.js +++ b/lib/rules/block-closing-brace-newline-after/__tests__/index.js @@ -114,28 +114,6 @@ testRule({ line: 1, column: 6, }, - { - code: ':root {\n --x { color: pink; } ; \n --y { color: red; };\n }', - fixed: ':root {\n --x { color: pink; } ;\n --y { color: red; };\n }', - message: messages.expectedAfter(), - line: 2, - column: 24, - }, - { - code: ':root {\n --x { color: pink; }; \n --y { color: red; };\n }', - fixed: ':root {\n --x { color: pink; };\n --y { color: red; };\n }', - message: messages.expectedAfter(), - line: 2, - column: 23, - }, - { - code: '.foo {\n --my-theme: { color: red; }; \n --toolbar-theme: { color: green; };\n }', - fixed: '.foo {\n --my-theme: { color: red; };\n --toolbar-theme: { color: green; };\n }', - description: 'Make sure trailing semicolon works well for blocks outside :root', - message: messages.expectedAfter(), - line: 2, - column: 30, - }, ], }); diff --git a/lib/rules/block-closing-brace-space-after/__tests__/index.js b/lib/rules/block-closing-brace-space-after/__tests__/index.js index 279760a18b..6f5f57af60 100644 --- a/lib/rules/block-closing-brace-space-after/__tests__/index.js +++ b/lib/rules/block-closing-brace-space-after/__tests__/index.js @@ -35,14 +35,6 @@ testRule({ { code: '.a {} /* stylelint-disable-line block-no-empty */', }, - { - code: ':root { --x { color: pink; }; --y { color: red; }; }', - description: 'Allow a trailing semicolon after the closing brace of a block', - }, - { - code: '.foo { --my-theme: { color: red; }; --toolbar-theme: { color: green; }; }', - description: 'Make sure trailing semicolon works well for blocks outside :root', - }, ], reject: [ @@ -89,19 +81,6 @@ testRule({ line: 1, column: 35, }, - { - code: ':root { --x { color: pink; };--y { color: red; }; }', - message: messages.expectedAfter(), - line: 1, - column: 30, - }, - { - code: '.foo { --my-theme: { color: red; };--toolbar-theme: { color: green; }; }', - description: 'Make sure trailing semicolon works well for blocks outside :root', - message: messages.expectedAfter(), - line: 1, - column: 36, - }, ], }); diff --git a/lib/rules/no-descending-specificity/index.js b/lib/rules/no-descending-specificity/index.js index 852cc92559..f5801d87cb 100644 --- a/lib/rules/no-descending-specificity/index.js +++ b/lib/rules/no-descending-specificity/index.js @@ -3,7 +3,6 @@ 'use strict'; const findAtRuleContext = require('../../utils/findAtRuleContext'); -const isCustomPropertySet = require('../../utils/isCustomPropertySet'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); const isStandardSyntaxSelector = require('../../utils/isStandardSyntaxSelector'); const keywordSets = require('../../reference/keywordSets'); @@ -46,11 +45,6 @@ function rule(on, options) { const selectorContextLookup = nodeContextLookup(); root.walkRules((ruleNode) => { - // Ignore custom property set `--foo: {};` - if (isCustomPropertySet(ruleNode)) { - return; - } - // Ignore nested property `foo: {};` if (!isStandardSyntaxRule(ruleNode)) { return; diff --git a/lib/rules/no-extra-semicolons/index.js b/lib/rules/no-extra-semicolons/index.js index bac109ef53..3bff6eb47e 100644 --- a/lib/rules/no-extra-semicolons/index.js +++ b/lib/rules/no-extra-semicolons/index.js @@ -2,7 +2,6 @@ 'use strict'; -const isCustomPropertySet = require('../../utils/isCustomPropertySet'); const isStandardSyntaxAtRule = require('../../utils/isStandardSyntaxAtRule'); const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); const report = require('../../utils/report'); @@ -79,7 +78,7 @@ function rule(actual, options, context) { return; } - if (node.type === 'rule' && !isCustomPropertySet(node) && !isStandardSyntaxRule(node)) { + if (node.type === 'rule' && !isStandardSyntaxRule(node)) { return; } @@ -88,34 +87,8 @@ function rule(actual, options, context) { if (rawBeforeNode && rawBeforeNode.trim().length !== 0) { let allowedSemi = 0; - const next = node.next(); - - // Ignore semicolon before comment if next node is custom properties sets or comment - if ( - node.type === 'comment' && - next && - isCustomPropertySet(next) && - node.parent.index(next) > 0 - ) { - allowedSemi = 1; - } - - const prev = node.prev(); - let rawBeforeIndexStart = 0; - // Adding previous node string to custom properties set if previous node is comment - if ( - isCustomPropertySet(node) && - node.parent.index(node) > 0 && - prev && - prev.type === 'comment' - ) { - rawBeforeNode = prev.toString() + rawBeforeNode; - allowedSemi = 0; - rawBeforeIndexStart = prev.toString().length; - } - const fixSemiIndices = []; styleSearch({ source: rawBeforeNode, target: ';' }, (match, count) => { @@ -146,12 +119,7 @@ function rule(actual, options, context) { * node.raws.after will be populated with that semicolon. * Since we ignore Less mixins, exit here */ - if ( - node.last && - node.last.type === 'atrule' && - !isCustomPropertySet(node.last) && - !isStandardSyntaxAtRule(node.last) - ) { + if (node.last && node.last.type === 'atrule' && !isStandardSyntaxAtRule(node.last)) { return; } @@ -185,10 +153,6 @@ function rule(actual, options, context) { if (rawOwnSemicolon) { let allowedSemi = 0; - if (isCustomPropertySet(node)) { - allowedSemi = 1; - } - const fixSemiIndices = []; styleSearch({ source: rawOwnSemicolon, target: ';' }, (match, count) => { diff --git a/lib/rules/property-no-unknown/__tests__/index.js b/lib/rules/property-no-unknown/__tests__/index.js index 7a569ee4c4..14bc4cbb64 100644 --- a/lib/rules/property-no-unknown/__tests__/index.js +++ b/lib/rules/property-no-unknown/__tests__/index.js @@ -37,6 +37,10 @@ testRule({ code: '.foo { *width: 100px; }', description: 'ignore CSS hacks', }, + { + code: '.foo { --custom-property-set: { colr: blue; } }', + description: 'ignore custom property sets', + }, ], reject: [ @@ -64,12 +68,6 @@ testRule({ line: 1, column: 8, }, - { - code: '.foo { --custom-property-set: { colr: blue; } }', - message: messages.rejected('colr'), - line: 1, - column: 33, - }, { code: ':export { my-property: red; }', message: messages.rejected('my-property'), diff --git a/lib/rules/string-no-newline/index.js b/lib/rules/string-no-newline/index.js index f43a8b3919..1a29e63ea8 100644 --- a/lib/rules/string-no-newline/index.js +++ b/lib/rules/string-no-newline/index.js @@ -66,7 +66,8 @@ function rule(actual) { ].reduce( (index, str) => index + str.length, // index of the start of our attribute node in our source - attributeNode.sourceIndex, + // plus 1 for the opening quotation mark + attributeNode.sourceIndex + 1, ); report({ diff --git a/lib/standalone.js b/lib/standalone.js index 2d36b74344..f075bb2c6d 100644 --- a/lib/standalone.js +++ b/lib/standalone.js @@ -253,13 +253,11 @@ module.exports = function (options) { options.fix && !postcssResult.stylelint.disableWritingFix ) { - // @ts-ignore TODO TYPES toString accepts 0 arguments const fixedCss = postcssResult.root.toString(postcssResult.opts.syntax); if ( postcssResult.root && postcssResult.root.source && - // @ts-ignore TODO TYPES css is unknown property postcssResult.root.source.input.css !== fixedCss ) { fixFile = writeFileAtomic(absoluteFilepath, fixedCss); diff --git a/lib/utils/__tests__/isCustomPropertySet.test.js b/lib/utils/__tests__/isCustomPropertySet.test.js deleted file mode 100644 index 0a3de8fc11..0000000000 --- a/lib/utils/__tests__/isCustomPropertySet.test.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -const isCustomPropertySet = require('../isCustomPropertySet'); -const postcss = require('postcss'); - -describe('isCustomPropertySet', () => { - it('accepts custom property set', () => { - expect(isCustomPropertySet(node('--foo: {};'))).toBeTruthy(); - }); - - it('rejects custom property', () => { - expect(isCustomPropertySet(node('--foo: red;'))).toBeFalsy(); - }); -}); - -function node(css) { - return postcss.parse(css).first; -} diff --git a/lib/utils/__tests__/isStandardSyntaxDeclaration.test.js b/lib/utils/__tests__/isStandardSyntaxDeclaration.test.js index bfc969d712..3007100ace 100644 --- a/lib/utils/__tests__/isStandardSyntaxDeclaration.test.js +++ b/lib/utils/__tests__/isStandardSyntaxDeclaration.test.js @@ -27,24 +27,6 @@ describe('isStandardSyntaxDeclaration', () => { expect(isStandardSyntaxDeclaration(decl('@page { size: A4 }'))).toBe(true); }); - it('custom property set in SASS parser', () => { - expect( - isStandardSyntaxDeclaration(sassDecl('a\n\t--custom-property-set:\n\t\tcolor: blue')), - ).toBe(true); - }); - - it('custom property set in SCSS parser', () => { - expect( - isStandardSyntaxDeclaration(scssDecl('a { --custom-property-set: { color: blue; } }')), - ).toBe(true); - }); - - it('custom property set in LESS parser', () => { - expect( - isStandardSyntaxDeclaration(lessDecl('a { --custom-property-set: { color: blue; } }')), - ).toBe(true); - }); - it('property with sass variable interpolation (only)', () => { expect(isStandardSyntaxDeclaration(sassDecl('a\n\t#{$var}: 10px'))).toBe(true); }); diff --git a/lib/utils/addEmptyLineAfter.js b/lib/utils/addEmptyLineAfter.js index c7b3cfe709..5fb25b9316 100644 --- a/lib/utils/addEmptyLineAfter.js +++ b/lib/utils/addEmptyLineAfter.js @@ -1,6 +1,6 @@ 'use strict'; -/** @typedef {import('postcss').ChildNode} ChildNode */ +/** @typedef {import('postcss').ChildNode & { raws: import('postcss').ChildNode['raws'] & { after?: string } }} ChildNode */ /** * Add an empty line after a node. Mutates the node. diff --git a/lib/utils/eachDeclarationBlock.js b/lib/utils/eachDeclarationBlock.js index dec329bda6..e28de36eed 100644 --- a/lib/utils/eachDeclarationBlock.js +++ b/lib/utils/eachDeclarationBlock.js @@ -5,7 +5,7 @@ const { isRoot, isAtRule, isRule } = require('./typeGuards'); /** @typedef {import('postcss').Root} Root */ /** @typedef {import('postcss').Root} Document */ /** @typedef {import('postcss').Node} PostcssNode */ -/** @typedef {import('postcss').ContainerBase} PostcssContainerNode */ +/** @typedef {import('postcss').Container} PostcssContainerNode */ /** * @param {PostcssNode} node diff --git a/lib/utils/findAtRuleContext.js b/lib/utils/findAtRuleContext.js index a1ee6b483b..08f2dba29a 100644 --- a/lib/utils/findAtRuleContext.js +++ b/lib/utils/findAtRuleContext.js @@ -1,5 +1,7 @@ 'use strict'; +const { isAtRule, isRule } = require('./typeGuards'); + /** * Find the at-rule in which a rule is nested. * @@ -11,13 +13,17 @@ module.exports = function findAtRuleContext(rule) { const parent = rule.parent; - if (parent.type === 'root') { + if (!parent) { return null; } - if (parent.type === 'atrule') { + if (isAtRule(parent)) { return parent; } - return findAtRuleContext(parent); + if (isRule(parent)) { + return findAtRuleContext(parent); + } + + return null; }; diff --git a/lib/utils/isAfterStandardPropertyDeclaration.js b/lib/utils/isAfterStandardPropertyDeclaration.js index 4d2271c337..05d5a2cd5b 100644 --- a/lib/utils/isAfterStandardPropertyDeclaration.js +++ b/lib/utils/isAfterStandardPropertyDeclaration.js @@ -3,6 +3,7 @@ const getPreviousNonSharedLineCommentNode = require('./getPreviousNonSharedLineCommentNode'); const isCustomProperty = require('./isCustomProperty'); const isStandardSyntaxDeclaration = require('./isStandardSyntaxDeclaration'); +const { isDeclaration } = require('./typeGuards'); /** * @param {import('postcss').Node} node @@ -12,7 +13,7 @@ module.exports = function (node) { return ( prevNode !== undefined && - prevNode.type === 'decl' && + isDeclaration(prevNode) && isStandardSyntaxDeclaration(prevNode) && !isCustomProperty(prevNode.prop || '') ); diff --git a/lib/utils/isBlocklessAtRuleAfterBlocklessAtRule.js b/lib/utils/isBlocklessAtRuleAfterBlocklessAtRule.js index e0998bd0c5..b21e55bdee 100644 --- a/lib/utils/isBlocklessAtRuleAfterBlocklessAtRule.js +++ b/lib/utils/isBlocklessAtRuleAfterBlocklessAtRule.js @@ -2,6 +2,7 @@ const getPreviousNonSharedLineCommentNode = require('./getPreviousNonSharedLineCommentNode'); const hasBlock = require('./hasBlock'); +const { isAtRule } = require('./typeGuards'); /** * @param {import('postcss').AtRule} atRule @@ -18,5 +19,5 @@ module.exports = function (atRule) { return false; } - return previousNode.type === 'atrule' && !hasBlock(previousNode) && !hasBlock(atRule); + return isAtRule(previousNode) && !hasBlock(previousNode) && !hasBlock(atRule); }; diff --git a/lib/utils/isBlocklessAtRuleAfterSameNameBlocklessAtRule.js b/lib/utils/isBlocklessAtRuleAfterSameNameBlocklessAtRule.js index 14cae60b8b..c731db4217 100644 --- a/lib/utils/isBlocklessAtRuleAfterSameNameBlocklessAtRule.js +++ b/lib/utils/isBlocklessAtRuleAfterSameNameBlocklessAtRule.js @@ -2,6 +2,7 @@ const getPreviousNonSharedLineCommentNode = require('./getPreviousNonSharedLineCommentNode'); const isBlocklessAtRuleAfterBlocklessAtRule = require('./isBlocklessAtRuleAfterBlocklessAtRule'); +const { isAtRule } = require('./typeGuards'); /** * @param {import('postcss').AtRule} atRule @@ -14,7 +15,7 @@ module.exports = function (atRule) { const previousNode = getPreviousNonSharedLineCommentNode(atRule); - if (previousNode && 'name' in previousNode) { + if (previousNode && isAtRule(previousNode)) { return previousNode.name === atRule.name; } diff --git a/lib/utils/isCustomPropertySet.js b/lib/utils/isCustomPropertySet.js deleted file mode 100644 index 786076cf02..0000000000 --- a/lib/utils/isCustomPropertySet.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -const hasBlock = require('../utils/hasBlock'); - -/** - * Check whether a Node is a custom property set - * - * @param {import('postcss').Rule} node - * @returns {boolean} - */ -module.exports = function (node) { - // Casting this to any because 'selector' does not exist on type 'NodeRaws' - /** @type {any} */ - const raws = node.raws; - - const selector = (raws.selector && raws.selector.raw) || node.selector; - - return ( - node.type === 'rule' && hasBlock(node) && selector.startsWith('--') && selector.endsWith(':') - ); -}; diff --git a/lib/utils/isFirstNodeOfRoot.js b/lib/utils/isFirstNodeOfRoot.js index 60e3a2b765..96df1a7913 100644 --- a/lib/utils/isFirstNodeOfRoot.js +++ b/lib/utils/isFirstNodeOfRoot.js @@ -11,5 +11,9 @@ module.exports = function (node) { const parentNode = node.parent; + if (!parentNode) { + return false; + } + return isRoot(parentNode) && node === parentNode.first; }; diff --git a/lib/utils/isKeyframeRule.js b/lib/utils/isKeyframeRule.js index 3b32d3e8fb..c9f62b36fd 100644 --- a/lib/utils/isKeyframeRule.js +++ b/lib/utils/isKeyframeRule.js @@ -1,5 +1,7 @@ 'use strict'; +const { isAtRule } = require('./typeGuards'); + /** * Check if a rule is a keyframe one * @@ -9,5 +11,9 @@ module.exports = function (rule) { const parent = rule.parent; - return parent.type === 'atrule' && parent.name.toLowerCase() === 'keyframes'; + if (!parent) { + return false; + } + + return isAtRule(parent) && parent.name.toLowerCase() === 'keyframes'; }; diff --git a/lib/utils/isSharedLineComment.js b/lib/utils/isSharedLineComment.js index 5eb177fe81..3f325cccaa 100644 --- a/lib/utils/isSharedLineComment.js +++ b/lib/utils/isSharedLineComment.js @@ -2,6 +2,7 @@ const getNextNonSharedLineCommentNode = require('./getNextNonSharedLineCommentNode'); const getPreviousNonSharedLineCommentNode = require('./getPreviousNonSharedLineCommentNode'); +const { isRoot, isComment } = require('./typeGuards'); /** @typedef {import('postcss').Node} PostcssNode */ @@ -22,7 +23,7 @@ function nodesShareLines(a, b) { * @returns {boolean} */ module.exports = function isSharedLineComment(node) { - if (node.type !== 'comment') { + if (!isComment(node)) { return false; } @@ -43,7 +44,7 @@ module.exports = function isSharedLineComment(node) { // It's a first child and located on the same line as block start if ( parentNode !== undefined && - parentNode.type !== 'root' && + !isRoot(parentNode) && parentNode.index(node) === 0 && node.raws.before !== undefined && !node.raws.before.includes('\n') diff --git a/lib/utils/isStandardSyntaxDeclaration.js b/lib/utils/isStandardSyntaxDeclaration.js index 7362513502..22380cfe04 100644 --- a/lib/utils/isStandardSyntaxDeclaration.js +++ b/lib/utils/isStandardSyntaxDeclaration.js @@ -21,10 +21,11 @@ module.exports = function (decl) { // Declarations belong in a declaration block or standard CSS source if ( + parent && isRoot(parent) && parent.source && !isStandardSyntaxLang( - /** @type {import('postcss').NodeSource & {lang?: string}} */ (parent.source).lang, + /** @type {import('postcss').Source & {lang?: string}} */ (parent.source).lang, ) ) { return false; diff --git a/lib/utils/isStandardSyntaxRule.js b/lib/utils/isStandardSyntaxRule.js index ada3d75350..dc999c52e0 100644 --- a/lib/utils/isStandardSyntaxRule.js +++ b/lib/utils/isStandardSyntaxRule.js @@ -1,6 +1,5 @@ 'use strict'; -const isCustomPropertySet = require('../utils/isCustomPropertySet'); const isStandardSyntaxSelector = require('../utils/isStandardSyntaxSelector'); /** @@ -25,11 +24,6 @@ module.exports = function (rule) { return false; } - // Custom property set (e.g. --custom-property-set: {}) - if (isCustomPropertySet(rule)) { - return false; - } - // Called Less mixin (e.g. a { .mixin() }) // @ts-ignore TODO TYPES support LESS and SASS types somehow if (rule.mixin) { diff --git a/lib/utils/nodeContextLookup.js b/lib/utils/nodeContextLookup.js index c49b5e943c..7fc65fce79 100644 --- a/lib/utils/nodeContextLookup.js +++ b/lib/utils/nodeContextLookup.js @@ -19,7 +19,7 @@ module.exports = function () { */ getContext(node, /** @type {any[]} */ ...subContexts) { // TODO TYPES node.source possible undefined - const nodeSource = /** @type {import('postcss').NodeSource} */ (node.source).input.from; + const nodeSource = /** @type {import('postcss').Source} */ (node.source).input.from; const baseContext = creativeGetMap(contextMap, nodeSource); return subContexts.reduce((result, context) => { diff --git a/lib/utils/typeGuards.js b/lib/utils/typeGuards.js index 76a29908d2..7f41b2be1e 100644 --- a/lib/utils/typeGuards.js +++ b/lib/utils/typeGuards.js @@ -35,6 +35,14 @@ module.exports.isComment = function isComment(node) { return node.type === 'comment'; }; +/** + * @param {Node} node + * @returns {node is import('postcss').Declaration} + */ +module.exports.isDeclaration = function isDeclaration(node) { + return node.type === 'decl'; +}; + /** * @param {Node} node * @returns {node is (Node & {source: NodeSource})} diff --git a/package-lock.json b/package-lock.json index fff6f1188b..9853fdcb8d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,11 +32,11 @@ "meow": "^9.0.0", "micromatch": "^4.0.4", "normalize-selector": "^0.2.0", - "postcss": "^7.0.35", + "postcss": "^8.3.0", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^4.0.2", - "postcss-selector-parser": "^6.0.5", + "postcss-safe-parser": "^5.0.2", + "postcss-selector-parser": "^6.0.6", "postcss-value-parser": "^4.1.0", "resolve-from": "^5.0.0", "slash": "^3.0.0", @@ -63,8 +63,8 @@ "@types/imurmurhash": "^0.1.1", "@types/lodash": "^4.14.168", "@types/micromatch": "^4.0.1", - "@types/postcss-less": "^3.1.1", - "@types/postcss-safe-parser": "^4.0.0", + "@types/postcss-less": "^4.0.0", + "@types/postcss-safe-parser": "^5.0.0", "@types/style-search": "^0.1.1", "@types/svg-tags": "^1.0.0", "@types/write-file-atomic": "^3.0.1", @@ -80,13 +80,13 @@ "lint-staged": "^10.5.4", "np": "^7.5.0", "npm-run-all": "^4.1.5", - "postcss-import": "^12.0.1", - "postcss-less": "^3.1.4", - "postcss-sass": "^0.4.4", - "postcss-scss": "^2.1.1", + "postcss-import": "^14.0.2", + "postcss-less": "^4.0.1", + "postcss-sass": "^0.5.0", + "postcss-scss": "^3.0.5", "prettier": "2.2.1", "remark-cli": "^9.0.0", - "sugarss": "^2.0.0", + "sugarss": "^3.0.3", "typescript": "^4.2.4" }, "engines": { @@ -1240,21 +1240,21 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "node_modules/@types/postcss-less": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/postcss-less/-/postcss-less-3.1.1.tgz", - "integrity": "sha512-q2JTciLRkA5zHzChlfk0qRH5tMzIM7fmnfasiSNNjQbBtX8n3fx5OCokfltr9M87ZCpwklNFLN6v2MmKC6/dhg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/postcss-less/-/postcss-less-4.0.0.tgz", + "integrity": "sha512-9yb3NxnrjMbLvlKNWJSllAZ6iB3slX6NiXrdBMS7dfKOg2s2sT0JghGEiPBjsFizQnf0lfDBzHP7flyKGfDuew==", "dev": true, "dependencies": { - "postcss": "^7.0.32" + "postcss": "^8.1.2" } }, "node_modules/@types/postcss-safe-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/postcss-safe-parser/-/postcss-safe-parser-4.0.0.tgz", - "integrity": "sha512-ugodq0ycpehQTRKoVybk7dmaoLDwK5M7nzTdCqlKErfEWIrp0R0UHRL4YEwS/4FIP1lM0rJ68ZCRAQpRc13vWA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/postcss-safe-parser/-/postcss-safe-parser-5.0.0.tgz", + "integrity": "sha512-ZVVjasBjRC3ZrXbrIZEd5fqSvdxAXKB2ise5Ysw+7XWKYPct/BiMwT8bZy8xbJiaZ5aqjn5s8RgtgoCbWmas4Q==", "dev": true, "dependencies": { - "postcss": "^7.0.30" + "postcss": "^8.1.0" } }, "node_modules/@types/prettier": { @@ -2418,8 +2418,7 @@ "node_modules/colorette": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" }, "node_modules/combined-stream": { "version": "1.0.8", @@ -6945,6 +6944,17 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "node_modules/nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -8102,49 +8112,49 @@ } }, "node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz", + "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==", "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" }, "engines": { - "node": ">=6.0.0" + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, "node_modules/postcss-import": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", - "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz", + "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==", "dev": true, "dependencies": { - "postcss": "^7.0.1", - "postcss-value-parser": "^3.2.3", + "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" }, "engines": { - "node": ">=6.0.0" + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" } }, - "node_modules/postcss-import/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-less": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", - "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-4.0.1.tgz", + "integrity": "sha512-C92S4sHlbDpefJ2QQJjrucCcypq3+KZPstjfuvgOCNnGx0tF9h8hXgAlOIATGAxMXZXaF+nVp+/Mi8pCAWdSmw==", "dev": true, "dependencies": { - "postcss": "^7.0.14" + "postcss": "^8.1.2" }, "engines": { - "node": ">=6.14.4" + "node": ">=10" } }, "node_modules/postcss-media-query-parser": { @@ -8158,42 +8168,53 @@ "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=" }, "node_modules/postcss-safe-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", - "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-5.0.2.tgz", + "integrity": "sha512-jDUfCPJbKOABhwpUKcqCVbbXiloe/QXMcbJ6Iipf3sDIihEzTqRCeMBfRaOHxhBuTYqtASrI1KJWxzztZU4qUQ==", "dependencies": { - "postcss": "^7.0.26" + "postcss": "^8.1.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, "node_modules/postcss-sass": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", - "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.5.0.tgz", + "integrity": "sha512-qtu8awh1NMF3o9j/x9j3EZnd+BlF66X6NZYl12BdKoG2Z4hmydOt/dZj2Nq+g0kfk2pQy3jeYFBmvG9DBwynGQ==", "dev": true, "dependencies": { "gonzales-pe": "^4.3.0", - "postcss": "^7.0.21" + "postcss": "^8.2.14" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, "node_modules/postcss-scss": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", - "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-3.0.5.tgz", + "integrity": "sha512-3e0qYk87eczfzg5P73ZVuuxEGCBfatRhPze6KrSaIbEKVtmnFI1RYp1Fv+AyZi+w8kcNRSPeNX6ap4b65zEkiA==", "dev": true, "dependencies": { - "postcss": "^7.0.6" + "postcss": "^8.2.7" }, "engines": { - "node": ">=6.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, "node_modules/postcss-selector-parser": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.5.tgz", - "integrity": "sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -8207,41 +8228,6 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" }, - "node_modules/postcss/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -9297,6 +9283,15 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", "engines": { "node": ">=0.10.0" } @@ -9596,12 +9591,19 @@ "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=" }, "node_modules/sugarss": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", - "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-3.0.3.tgz", + "integrity": "sha512-uxa2bbuc+w7ov7DyYIhF6bM0qZF3UkFT5/nE8AJgboiVnKsBDbwxs++dehEIe1JNhpMaGJc37wGQ2QrrWey2Sg==", "dev": true, "dependencies": { - "postcss": "^7.0.2" + "postcss": "^8.1.6" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, "node_modules/supports-color": { @@ -11690,21 +11692,21 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "@types/postcss-less": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/postcss-less/-/postcss-less-3.1.1.tgz", - "integrity": "sha512-q2JTciLRkA5zHzChlfk0qRH5tMzIM7fmnfasiSNNjQbBtX8n3fx5OCokfltr9M87ZCpwklNFLN6v2MmKC6/dhg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/postcss-less/-/postcss-less-4.0.0.tgz", + "integrity": "sha512-9yb3NxnrjMbLvlKNWJSllAZ6iB3slX6NiXrdBMS7dfKOg2s2sT0JghGEiPBjsFizQnf0lfDBzHP7flyKGfDuew==", "dev": true, "requires": { - "postcss": "^7.0.32" + "postcss": "^8.1.2" } }, "@types/postcss-safe-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/postcss-safe-parser/-/postcss-safe-parser-4.0.0.tgz", - "integrity": "sha512-ugodq0ycpehQTRKoVybk7dmaoLDwK5M7nzTdCqlKErfEWIrp0R0UHRL4YEwS/4FIP1lM0rJ68ZCRAQpRc13vWA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/postcss-safe-parser/-/postcss-safe-parser-5.0.0.tgz", + "integrity": "sha512-ZVVjasBjRC3ZrXbrIZEd5fqSvdxAXKB2ise5Ysw+7XWKYPct/BiMwT8bZy8xbJiaZ5aqjn5s8RgtgoCbWmas4Q==", "dev": true, "requires": { - "postcss": "^7.0.30" + "postcss": "^8.1.0" } }, "@types/prettier": { @@ -12614,8 +12616,7 @@ "colorette": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" }, "combined-stream": { "version": "1.0.8", @@ -16125,6 +16126,11 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==" + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -17027,72 +17033,33 @@ "dev": true }, "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz", + "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" } }, "postcss-import": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", - "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz", + "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==", "dev": true, "requires": { - "postcss": "^7.0.1", - "postcss-value-parser": "^3.2.3", + "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } } }, "postcss-less": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", - "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-4.0.1.tgz", + "integrity": "sha512-C92S4sHlbDpefJ2QQJjrucCcypq3+KZPstjfuvgOCNnGx0tF9h8hXgAlOIATGAxMXZXaF+nVp+/Mi8pCAWdSmw==", "dev": true, "requires": { - "postcss": "^7.0.14" + "postcss": "^8.1.2" } }, "postcss-media-query-parser": { @@ -17106,36 +17073,36 @@ "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=" }, "postcss-safe-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", - "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-5.0.2.tgz", + "integrity": "sha512-jDUfCPJbKOABhwpUKcqCVbbXiloe/QXMcbJ6Iipf3sDIihEzTqRCeMBfRaOHxhBuTYqtASrI1KJWxzztZU4qUQ==", "requires": { - "postcss": "^7.0.26" + "postcss": "^8.1.0" } }, "postcss-sass": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", - "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.5.0.tgz", + "integrity": "sha512-qtu8awh1NMF3o9j/x9j3EZnd+BlF66X6NZYl12BdKoG2Z4hmydOt/dZj2Nq+g0kfk2pQy3jeYFBmvG9DBwynGQ==", "dev": true, "requires": { "gonzales-pe": "^4.3.0", - "postcss": "^7.0.21" + "postcss": "^8.2.14" } }, "postcss-scss": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", - "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-3.0.5.tgz", + "integrity": "sha512-3e0qYk87eczfzg5P73ZVuuxEGCBfatRhPze6KrSaIbEKVtmnFI1RYp1Fv+AyZi+w8kcNRSPeNX6ap4b65zEkiA==", "dev": true, "requires": { - "postcss": "^7.0.6" + "postcss": "^8.2.7" } }, "postcss-selector-parser": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.5.tgz", - "integrity": "sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", "requires": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -17982,7 +17949,13 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==" }, "source-map-support": { "version": "0.5.19", @@ -18235,12 +18208,12 @@ "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=" }, "sugarss": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", - "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-3.0.3.tgz", + "integrity": "sha512-uxa2bbuc+w7ov7DyYIhF6bM0qZF3UkFT5/nE8AJgboiVnKsBDbwxs++dehEIe1JNhpMaGJc37wGQ2QrrWey2Sg==", "dev": true, "requires": { - "postcss": "^7.0.2" + "postcss": "^8.1.6" } }, "supports-color": { diff --git a/package.json b/package.json index ab09d3db14..722076f8a1 100644 --- a/package.json +++ b/package.json @@ -130,11 +130,11 @@ "meow": "^9.0.0", "micromatch": "^4.0.4", "normalize-selector": "^0.2.0", - "postcss": "^7.0.35", + "postcss": "^8.3.0", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^4.0.2", - "postcss-selector-parser": "^6.0.5", + "postcss-safe-parser": "^5.0.2", + "postcss-selector-parser": "^6.0.6", "postcss-value-parser": "^4.1.0", "resolve-from": "^5.0.0", "slash": "^3.0.0", @@ -158,8 +158,8 @@ "@types/imurmurhash": "^0.1.1", "@types/lodash": "^4.14.168", "@types/micromatch": "^4.0.1", - "@types/postcss-less": "^3.1.1", - "@types/postcss-safe-parser": "^4.0.0", + "@types/postcss-less": "^4.0.0", + "@types/postcss-safe-parser": "^5.0.0", "@types/style-search": "^0.1.1", "@types/svg-tags": "^1.0.0", "@types/write-file-atomic": "^3.0.1", @@ -175,13 +175,13 @@ "lint-staged": "^10.5.4", "np": "^7.5.0", "npm-run-all": "^4.1.5", - "postcss-import": "^12.0.1", - "postcss-less": "^3.1.4", - "postcss-sass": "^0.4.4", - "postcss-scss": "^2.1.1", + "postcss-import": "^14.0.2", + "postcss-less": "^4.0.1", + "postcss-sass": "^0.5.0", + "postcss-scss": "^3.0.5", "prettier": "2.2.1", "remark-cli": "^9.0.0", - "sugarss": "^2.0.0", + "sugarss": "^3.0.3", "typescript": "^4.2.4" }, "engines": { diff --git a/types/postcss/index.d.ts b/types/postcss/index.d.ts index 93e6a97875..985a78311d 100644 --- a/types/postcss/index.d.ts +++ b/types/postcss/index.d.ts @@ -1,51 +1,14 @@ declare module 'postcss/lib/comment' { - import { Comment, NodeRaws } from 'postcss'; + import { Comment } from 'postcss'; - interface NodeRawsExt extends NodeRaws { - // Used by the SCSS parser to indicate `//` comments. - inline?: boolean; - } - - interface CommentExt extends Comment { + interface CommentExtended extends Comment { // Used by the Less parser to indicate `//` comments. inline?: boolean; - raws: NodeRawsExt; + raws: Comment['raws'] & { + // Used by the SCSS parser to indicate `//` comments. + inline?: boolean; + }; } - export = CommentExt; -} - -declare module 'postcss/lib/lazy-result' { - import { - LazyResult, - Result, - Processor, - ResultMap, - ResultMessage, - ResultOptions, - Root, - Warning, - } from 'postcss'; - - class LazyResultImpl extends Promise implements LazyResult { - constructor(p: Processor, code: string, options: { from?: string; syntax: any }); - - content: string; - css: string; - map: ResultMap; - messages: ResultMessage[]; - opts: ResultOptions; - processor: Processor; - root: Root; - - warnings(): Warning[]; - } - - export = LazyResultImpl; -} - -declare module 'postcss/lib/result' { - import { Result } from 'postcss'; - - export = Result; + export = CommentExtended; } diff --git a/types/stylelint/index.d.ts b/types/stylelint/index.d.ts index dd55e90e27..3a483b0980 100644 --- a/types/stylelint/index.d.ts +++ b/types/stylelint/index.d.ts @@ -1,5 +1,5 @@ declare module 'stylelint' { - import { Comment, Result, ResultMessage, Root, Syntax, WarningOptions, Warning } from 'postcss'; + import { Comment, Result, Message, Root, Syntax, WarningOptions, Warning } from 'postcss'; import { GlobbyOptions } from 'globby'; export type Severity = 'warning' | 'error'; @@ -93,7 +93,7 @@ declare module 'stylelint' { }; }; }; - messages: ResultMessage[]; + messages: Message[]; opts: undefined; }; @@ -297,4 +297,8 @@ declare module 'stylelint' { }; export type StylelintDisableOptionsReport = Array; + + export type PostcssPluginOptions = + | Omit + | StylelintConfig; } From 3628be24fadb5e7e9ca6d6056701178e1146d53d Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Tue, 8 Jun 2021 05:49:04 -0400 Subject: [PATCH 045/194] Refactor to remove `_.trim` (#5360) * Remove `_.trim` * Update lib/rules/function-url-no-scheme-relative/index.js Co-authored-by: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Co-authored-by: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> --- lib/rules/function-url-no-scheme-relative/index.js | 3 +-- lib/rules/function-url-scheme-allowed-list/index.js | 5 ++--- lib/rules/function-url-scheme-disallowed-list/index.js | 5 ++--- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/lib/rules/function-url-no-scheme-relative/index.js b/lib/rules/function-url-no-scheme-relative/index.js index 632f32d594..85586f2b82 100644 --- a/lib/rules/function-url-no-scheme-relative/index.js +++ b/lib/rules/function-url-no-scheme-relative/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const functionArgumentsSearch = require('../../utils/functionArgumentsSearch'); const isStandardSyntaxUrl = require('../../utils/isStandardSyntaxUrl'); const report = require('../../utils/report'); @@ -25,7 +24,7 @@ function rule(actual) { root.walkDecls((decl) => { functionArgumentsSearch(decl.toString().toLowerCase(), 'url', (args, index) => { - const url = _.trim(args, ' \'"'); + const url = args.trim().replace(/^['"]+|['"]+$/g, ''); if (!isStandardSyntaxUrl(url) || !url.startsWith('//')) { return; diff --git a/lib/rules/function-url-scheme-allowed-list/index.js b/lib/rules/function-url-scheme-allowed-list/index.js index b13ee08eab..5f9018e1f4 100644 --- a/lib/rules/function-url-scheme-allowed-list/index.js +++ b/lib/rules/function-url-scheme-allowed-list/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const functionArgumentsSearch = require('../../utils/functionArgumentsSearch'); const getSchemeFromUrl = require('../../utils/getSchemeFromUrl'); const isStandardSyntaxUrl = require('../../utils/isStandardSyntaxUrl'); @@ -31,13 +30,13 @@ function rule(list) { root.walkDecls((decl) => { functionArgumentsSearch(decl.toString().toLowerCase(), 'url', (args, index) => { - const unspacedUrlString = _.trim(args, ' '); + const unspacedUrlString = args.trim(); if (!isStandardSyntaxUrl(unspacedUrlString)) { return; } - const urlString = _.trim(unspacedUrlString, '\'"'); + const urlString = unspacedUrlString.replace(/^['"]+|['"]+$/g, ''); const scheme = getSchemeFromUrl(urlString); if (scheme === null) { diff --git a/lib/rules/function-url-scheme-disallowed-list/index.js b/lib/rules/function-url-scheme-disallowed-list/index.js index 5e18d27188..0228fb03a1 100644 --- a/lib/rules/function-url-scheme-disallowed-list/index.js +++ b/lib/rules/function-url-scheme-disallowed-list/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const functionArgumentsSearch = require('../../utils/functionArgumentsSearch'); const getSchemeFromUrl = require('../../utils/getSchemeFromUrl'); const isStandardSyntaxUrl = require('../../utils/isStandardSyntaxUrl'); @@ -31,13 +30,13 @@ function rule(list) { root.walkDecls((decl) => { functionArgumentsSearch(decl.toString().toLowerCase(), 'url', (args, index) => { - const unspacedUrlString = _.trim(args, ' '); + const unspacedUrlString = args.trim(); if (!isStandardSyntaxUrl(unspacedUrlString)) { return; } - const urlString = _.trim(unspacedUrlString, '\'"'); + const urlString = unspacedUrlString.replace(/^['"]+|['"]+$/g, ''); const scheme = getSchemeFromUrl(urlString); if (scheme === null) { From 1fa371dab17fceb5e20d82f37ba174e39ccaf64d Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Tue, 8 Jun 2021 05:59:48 -0400 Subject: [PATCH 046/194] Refactor to remove `_.find` (#5359) --- lib/rules/declaration-property-unit-allowed-list/index.js | 4 ++-- .../declaration-property-unit-disallowed-list/index.js | 4 ++-- .../declaration-property-value-allowed-list/index.js | 4 ++-- .../declaration-property-value-disallowed-list/index.js | 4 ++-- lib/rules/media-feature-name-value-allowed-list/index.js | 8 ++++---- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/rules/declaration-property-unit-allowed-list/index.js b/lib/rules/declaration-property-unit-allowed-list/index.js index 717e26e849..07b6da13e5 100644 --- a/lib/rules/declaration-property-unit-allowed-list/index.js +++ b/lib/rules/declaration-property-unit-allowed-list/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const declarationValueIndex = require('../../utils/declarationValueIndex'); const getUnitFromValueNode = require('../../utils/getUnitFromValueNode'); const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); @@ -48,9 +47,10 @@ function rule(list, options) { const unprefixedProp = vendor.unprefixed(prop); - const propList = _.find(list, (units, propIdentifier) => + const propKey = Object.keys(list).find((propIdentifier) => matchesStringOrRegExp(unprefixedProp, propIdentifier), ); + const propList = list[propKey]; if (!propList) { return; diff --git a/lib/rules/declaration-property-unit-disallowed-list/index.js b/lib/rules/declaration-property-unit-disallowed-list/index.js index c435d2ea24..6d971aa93b 100644 --- a/lib/rules/declaration-property-unit-disallowed-list/index.js +++ b/lib/rules/declaration-property-unit-disallowed-list/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const declarationValueIndex = require('../../utils/declarationValueIndex'); const getUnitFromValueNode = require('../../utils/getUnitFromValueNode'); const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); @@ -36,9 +35,10 @@ function rule(list) { const unprefixedProp = vendor.unprefixed(prop); - const propList = _.find(list, (units, propIdentifier) => + const propKey = Object.keys(list).find((propIdentifier) => matchesStringOrRegExp(unprefixedProp, propIdentifier), ); + const propList = list[propKey]; if (!propList) { return; diff --git a/lib/rules/declaration-property-value-allowed-list/index.js b/lib/rules/declaration-property-value-allowed-list/index.js index 82821366a1..5b19224a79 100644 --- a/lib/rules/declaration-property-value-allowed-list/index.js +++ b/lib/rules/declaration-property-value-allowed-list/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); @@ -32,9 +31,10 @@ function rule(list) { const value = decl.value; const unprefixedProp = vendor.unprefixed(prop); - const propList = _.find(list, (values, propIdentifier) => + const propKey = Object.keys(list).find((propIdentifier) => matchesStringOrRegExp(unprefixedProp, propIdentifier), ); + const propList = list[propKey]; if (!propList || propList.length === 0) { return; diff --git a/lib/rules/declaration-property-value-disallowed-list/index.js b/lib/rules/declaration-property-value-disallowed-list/index.js index 5228c8af3c..dc69e1fd84 100644 --- a/lib/rules/declaration-property-value-disallowed-list/index.js +++ b/lib/rules/declaration-property-value-disallowed-list/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); @@ -32,9 +31,10 @@ function rule(list) { const value = decl.value; const unprefixedProp = vendor.unprefixed(prop); - const propList = _.find(list, (values, propIdentifier) => + const propKey = Object.keys(list).find((propIdentifier) => matchesStringOrRegExp(unprefixedProp, propIdentifier), ); + const propList = list[propKey]; if (!propList || propList.length === 0) { return; diff --git a/lib/rules/media-feature-name-value-allowed-list/index.js b/lib/rules/media-feature-name-value-allowed-list/index.js index 8b6b01da73..9c8ba6be5a 100644 --- a/lib/rules/media-feature-name-value-allowed-list/index.js +++ b/lib/rules/media-feature-name-value-allowed-list/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const atRuleParamIndex = require('../../utils/atRuleParamIndex'); const isRangeContextMediaFeature = require('../../utils/isRangeContextMediaFeature'); const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); @@ -40,7 +39,7 @@ function rule(list) { return; } - const mediaFeatureNode = _.find(node.nodes, { type: 'media-feature' }); + const mediaFeatureNode = node.nodes.find((n) => n.type === 'media-feature'); let mediaFeatureName; let values = []; @@ -52,7 +51,7 @@ function rule(list) { values = parsedRangeContext.values; } else { mediaFeatureName = mediaFeatureNode.value; - values.push(_.find(node.nodes, { type: 'value' })); + values.push(node.nodes.find((n) => n.type === 'value')); } for (let i = 0; i < values.length; i++) { @@ -60,9 +59,10 @@ function rule(list) { const value = valueNode.value; const unprefixedMediaFeatureName = vendor.unprefixed(mediaFeatureName); - const allowedValues = _.find(list, (v, featureName) => + const allowedValuesKey = Object.keys(list).find((featureName) => matchesStringOrRegExp(unprefixedMediaFeatureName, featureName), ); + const allowedValues = list[allowedValuesKey]; if (allowedValues === undefined) { return; From ebe85e1fdf9a33b654c18d971e1d8c59dbc40a18 Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Tue, 8 Jun 2021 06:00:44 -0400 Subject: [PATCH 047/194] Refactor to remove `_.compact` (#5358) * Remove `_.compact` * Update lib/rules/named-grid-areas-no-invalid/index.js Co-authored-by: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Co-authored-by: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> --- lib/rules/named-grid-areas-no-invalid/index.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/rules/named-grid-areas-no-invalid/index.js b/lib/rules/named-grid-areas-no-invalid/index.js index 3bdab0ef15..8d58a2fbc4 100644 --- a/lib/rules/named-grid-areas-no-invalid/index.js +++ b/lib/rules/named-grid-areas-no-invalid/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const declarationValueIndex = require('../../utils/declarationValueIndex'); const findNotContiguousOrRectangular = require('./utils/findNotContiguousOrRectangular'); const isRectangular = require('./utils/isRectangular'); @@ -45,7 +44,12 @@ function rule(actual) { return; } - areas.push(_.compact(tokenValue.trim().split(' '))); + areas.push( + tokenValue + .trim() + .split(' ') + .filter((s) => s.length > 0), + ); }); if (reportSent) return; From c11ff369f75804a6709abdc2f5836dc981496470 Mon Sep 17 00:00:00 2001 From: applemonkey496 <55333787+applemonkey496@users.noreply.github.com> Date: Tue, 8 Jun 2021 03:02:13 -0700 Subject: [PATCH 048/194] Fix styleline typos in docs and CLI (#5352) --- docs/user-guide/usage/cli.md | 2 +- docs/user-guide/usage/options.md | 2 +- lib/__tests__/__snapshots__/cli.test.js.snap | 2 +- lib/cli.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/user-guide/usage/cli.md b/docs/user-guide/usage/cli.md index 5e7d10b4da..1b0a7a3df6 100644 --- a/docs/user-guide/usage/cli.md +++ b/docs/user-guide/usage/cli.md @@ -54,7 +54,7 @@ Specify the formatter to format your results. More info about this option in [st ### `--ignore-disables, --id` -Ignore `styleline-disable` (e.g. `/* stylelint-disable block-no-empty */`) comments. More info about this option in [standard options](options.md#ignoreDisables). +Ignore `stylelint-disable` (e.g. `/* stylelint-disable block-no-empty */`) comments. More info about this option in [standard options](options.md#ignoreDisables). ### `--ignore-path, -i` diff --git a/docs/user-guide/usage/options.md b/docs/user-guide/usage/options.md index aa4a2572e7..348bf39699 100644 --- a/docs/user-guide/usage/options.md +++ b/docs/user-guide/usage/options.md @@ -115,7 +115,7 @@ A path to a file containing patterns describing files to ignore. The path can be CLI flags: `--ignore-disables, --id` -Ignore `styleline-disable` (e.g. `/* stylelint-disable block-no-empty */`) comments. +Ignore `stylelint-disable` (e.g. `/* stylelint-disable block-no-empty */`) comments. You can use this option to see what your linting results would be like without those exceptions. diff --git a/lib/__tests__/__snapshots__/cli.test.js.snap b/lib/__tests__/__snapshots__/cli.test.js.snap index 74552c2a47..a22fd7d7ac 100644 --- a/lib/__tests__/__snapshots__/cli.test.js.snap +++ b/lib/__tests__/__snapshots__/cli.test.js.snap @@ -65,7 +65,7 @@ exports[`CLI --help 1`] = ` --ignore-disables, --id - Ignore styleline-disable comments. + Ignore stylelint-disable comments. --disable-default-ignores, --di diff --git a/lib/cli.js b/lib/cli.js index 15cc64d3d6..3b49eb6c9e 100644 --- a/lib/cli.js +++ b/lib/cli.js @@ -148,7 +148,7 @@ const meowOptions = { --ignore-disables, --id - Ignore styleline-disable comments. + Ignore stylelint-disable comments. --disable-default-ignores, --di From 368be6a5c257f590b991cf42b30dc405ef520074 Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Wed, 9 Jun 2021 00:59:21 +0900 Subject: [PATCH 049/194] Refactor to remove custom PostCSS type definitions (#5362) This refactoring removes the custom PostCSS type definition file: `types/postcss/index.d.ts`. As a result, the internal use of `postcss/lib/comment` is no longer necessary. --- lib/assignDisabledRanges.js | 14 ++++++++++---- types/postcss/index.d.ts | 14 -------------- 2 files changed, 10 insertions(+), 18 deletions(-) delete mode 100644 types/postcss/index.d.ts diff --git a/lib/assignDisabledRanges.js b/lib/assignDisabledRanges.js index 1ba585288a..26f6c4f665 100644 --- a/lib/assignDisabledRanges.js +++ b/lib/assignDisabledRanges.js @@ -7,7 +7,7 @@ const disableLineCommand = `${COMMAND_PREFIX}disable-line`; const disableNextLineCommand = `${COMMAND_PREFIX}disable-next-line`; const ALL_RULES = 'all'; -/** @typedef {import('postcss/lib/comment')} PostcssComment */ +/** @typedef {import('postcss').Comment} PostcssComment */ /** @typedef {import('postcss').Root} PostcssRoot */ /** @typedef {import('stylelint').PostcssResult} PostcssResult */ /** @typedef {import('stylelint').DisabledRangeObject} DisabledRangeObject */ @@ -62,7 +62,7 @@ module.exports = function (root, result) { /** @type {PostcssComment?} */ let inlineEnd; - root.walkComments((/** @type {PostcssComment} */ comment) => { + root.walkComments((comment) => { if (inlineEnd) { // Ignore comments already processed by grouping with a previous one. if (inlineEnd === comment) inlineEnd = null; @@ -117,14 +117,20 @@ module.exports = function (root, result) { return result; + /** @typedef {import('postcss').Comment & { raws: { inline?: boolean } }} PostcssSassComment */ + /** - * @param {PostcssComment} comment + * @param {PostcssComment | import('postcss-less').Comment | PostcssSassComment} comment * @return {boolean} */ function isInlineComment(comment) { // We check both here because the Sass parser uses `raws.inline` to indicate // inline comments, while the Less parser uses `inline`. - return Boolean(comment.inline || comment.raws.inline); + if ('inline' in comment) return comment.inline; + + if ('inline' in comment.raws) return Boolean(comment.raws.inline); + + return false; } /** diff --git a/types/postcss/index.d.ts b/types/postcss/index.d.ts deleted file mode 100644 index 985a78311d..0000000000 --- a/types/postcss/index.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -declare module 'postcss/lib/comment' { - import { Comment } from 'postcss'; - - interface CommentExtended extends Comment { - // Used by the Less parser to indicate `//` comments. - inline?: boolean; - raws: Comment['raws'] & { - // Used by the SCSS parser to indicate `//` comments. - inline?: boolean; - }; - } - - export = CommentExtended; -} From 54e41655986f8ca72a33c67bd3adcbab228e0f21 Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Wed, 9 Jun 2021 01:06:19 +0900 Subject: [PATCH 050/194] Refactor to more specific function types (#5363) This refactoring makes abstract function types more specific, such as just `Function`. I believe this will help code changes for ESM. A part of #4496 --- lib/utils/checkAgainstRule.js | 4 +-- lib/utils/eachDeclarationBlock.js | 10 +++++--- lib/utils/functionArgumentsSearch.js | 4 +-- lib/utils/parseSelector.js | 7 +++--- lib/utils/ruleMessages.js | 37 +++++++++++----------------- lib/utils/transformSelector.js | 9 +++---- 6 files changed, 32 insertions(+), 39 deletions(-) diff --git a/lib/utils/checkAgainstRule.js b/lib/utils/checkAgainstRule.js index 6d80430e6a..75c3415ccc 100644 --- a/lib/utils/checkAgainstRule.js +++ b/lib/utils/checkAgainstRule.js @@ -14,10 +14,10 @@ const rules = require('../rules'); ruleSettings: import('stylelint').StylelintConfigRuleSettings, root: import('postcss').Root, }} options - * @param {Function} callback + * @param {(warning: import('postcss').Warning) => void} callback * @returns {void} */ -module.exports = function (options, callback) { +module.exports = function checkAgainstRule(options, callback) { if (!options) throw new Error( "checkAgainstRule requires an options object with 'ruleName', 'ruleSettings', and 'root' properties", diff --git a/lib/utils/eachDeclarationBlock.js b/lib/utils/eachDeclarationBlock.js index e28de36eed..66fac80b8f 100644 --- a/lib/utils/eachDeclarationBlock.js +++ b/lib/utils/eachDeclarationBlock.js @@ -6,6 +6,8 @@ const { isRoot, isAtRule, isRule } = require('./typeGuards'); /** @typedef {import('postcss').Root} Document */ /** @typedef {import('postcss').Node} PostcssNode */ /** @typedef {import('postcss').Container} PostcssContainerNode */ +/** @typedef {import('postcss').Declaration} Declaration */ +/** @typedef {(callbackFn: (decl: Declaration, index: number, decls: Declaration[]) => void) => void} EachDeclaration */ /** * @param {PostcssNode} node @@ -24,11 +26,11 @@ function isContainerNode(node) { * executes a provided function once for each declaration block. * * @param {Root | Document} root - root element of file. - * @param {function} cb - Function to execute for each declaration block + * @param {(eachDecl: EachDeclaration) => void} callback - Function to execute for each declaration block * * @returns {void} */ -module.exports = function (root, cb) { +module.exports = function eachDeclarationBlock(root, callback) { /** * @param {PostcssNode} statement * @@ -38,7 +40,7 @@ module.exports = function (root, cb) { if (!isContainerNode(statement)) return; if (statement.nodes && statement.nodes.length) { - /** @type {PostcssNode[]} */ + /** @type {Declaration[]} */ const decls = []; statement.nodes.forEach((node) => { @@ -50,7 +52,7 @@ module.exports = function (root, cb) { }); if (decls.length) { - cb(decls.forEach.bind(decls)); + callback(decls.forEach.bind(decls)); } } } diff --git a/lib/utils/functionArgumentsSearch.js b/lib/utils/functionArgumentsSearch.js index fac9aa647a..6ed078cfa6 100644 --- a/lib/utils/functionArgumentsSearch.js +++ b/lib/utils/functionArgumentsSearch.js @@ -15,9 +15,9 @@ const styleSearch = require('style-search'); * * @param {string} source * @param {string} functionName - * @param {Function} callback + * @param {(expression: string, expressionIndex: number) => void} callback */ -module.exports = function (source, functionName, callback) { +module.exports = function functionArgumentsSearch(source, functionName, callback) { styleSearch( { source, diff --git a/lib/utils/parseSelector.js b/lib/utils/parseSelector.js index a9c4bd1d1a..a131ed1abb 100644 --- a/lib/utils/parseSelector.js +++ b/lib/utils/parseSelector.js @@ -6,12 +6,11 @@ const selectorParser = require('postcss-selector-parser'); * @param {string} selector * @param {import('stylelint').PostcssResult} result * @param {import('postcss').Node} node - * @param {Function} cb + * @param {(root: import('postcss-selector-parser').Root) => void} callback */ -module.exports = function parseSelector(selector, result, node, cb) { +module.exports = function parseSelector(selector, result, node, callback) { try { - // @ts-ignore TODO TYPES wrong postcss-selector-parser types - return selectorParser(cb).processSync(selector); + return selectorParser(callback).processSync(selector); } catch { result.warn('Cannot parse selector', { node, stylelintType: 'parseError' }); } diff --git a/lib/utils/ruleMessages.js b/lib/utils/ruleMessages.js index 8abdb9093a..e1dc589347 100644 --- a/lib/utils/ruleMessages.js +++ b/lib/utils/ruleMessages.js @@ -1,35 +1,28 @@ 'use strict'; +/** @typedef {(...args: any[]) => string} MessageGenerator */ +/** @typedef {Record} Messages */ + /** * Given an object of violation messages, return another * that provides the same messages postfixed with the rule * that has been violated. * * @param {string} ruleName - * @param {{[k: string]: string|Function}} messages - Object whose keys are message identifiers + * @param {Messages} messages - Object whose keys are message identifiers * and values are either message strings or functions that return message strings - * @return {{[k: string]: string|Function}} New message object, whose messages will be marked with the rule name + * @returns {Messages} New message object, whose messages will be marked with the rule name */ -module.exports = function (ruleName, messages) { - return Object.keys(messages).reduce( - /** - * @param {{[k: string]: string|Function}} newMessages - * @param {string} messageId - * @return {{[k: string]: string|Function}} - */ - (newMessages, messageId) => { - const messageText = messages[messageId]; +module.exports = function ruleMessages(ruleName, messages) { + return Object.keys(messages).reduce((/** @type {Messages} */ newMessages, messageId) => { + const messageText = messages[messageId]; - if (typeof messageText === 'string') { - newMessages[messageId] = `${messageText} (${ruleName})`; - } else { - newMessages[messageId] = (/** @type {any[]} */ ...args) => { - return `${messageText(...args)} (${ruleName})`; - }; - } + if (typeof messageText === 'string') { + newMessages[messageId] = `${messageText} (${ruleName})`; + } else { + newMessages[messageId] = (...args) => `${messageText(...args)} (${ruleName})`; + } - return newMessages; - }, - {}, - ); + return newMessages; + }, {}); }; diff --git a/lib/utils/transformSelector.js b/lib/utils/transformSelector.js index 70bca0acaf..c9a9ffcdf2 100644 --- a/lib/utils/transformSelector.js +++ b/lib/utils/transformSelector.js @@ -4,13 +4,12 @@ const selectorParser = require('postcss-selector-parser'); /** * @param {import('stylelint').PostcssResult} result - * @param {import('postcss').Node} node - * @param {Function} cb + * @param {import('postcss').Rule} node + * @param {(root: import('postcss-selector-parser').Root) => void} callback */ -module.exports = function (result, node, cb) { +module.exports = function transformSelector(result, node, callback) { try { - // @ts-ignore TODO TYPES wrong postcss-selector-parser definitions - return selectorParser(cb).processSync(node, { updateSelector: true }); + return selectorParser(callback).processSync(node, { updateSelector: true }); } catch { result.warn('Cannot parse selector', { node, stylelintType: 'parseError' }); } From 342af1b0dc1df660993cd47348da07ad465039f1 Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Wed, 9 Jun 2021 04:04:17 -0400 Subject: [PATCH 051/194] Refactor to remove `_.union` (#5364) --- lib/rules/no-duplicate-selectors/index.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/rules/no-duplicate-selectors/index.js b/lib/rules/no-duplicate-selectors/index.js index 06b983a9ee..b6e51a341c 100644 --- a/lib/rules/no-duplicate-selectors/index.js +++ b/lib/rules/no-duplicate-selectors/index.js @@ -2,7 +2,6 @@ 'use strict'; -const _ = require('lodash'); const findAtRuleContext = require('../../utils/findAtRuleContext'); const isKeyframeRule = require('../../utils/isKeyframeRule'); const nodeContextLookup = require('../../utils/nodeContextLookup'); @@ -57,11 +56,14 @@ function rule(actual, options) { ruleNode, findAtRuleContext(ruleNode), ); - const resolvedSelectors = ruleNode.selectors.reduce((selectors, selector) => { - return _.union(selectors, resolvedNestedSelector(selector, ruleNode)); - }, []); + const resolvedSelectors = new Set(); - const normalizedSelectorList = resolvedSelectors.map(normalizeSelector); + ruleNode.selectors.forEach((selector) => { + resolvedNestedSelector(selector, ruleNode).forEach((s) => resolvedSelectors.add(s)); + }); + + const resolvedSelectorList = [...resolvedSelectors]; + const normalizedSelectorList = resolvedSelectorList.map(normalizeSelector); // Sort the selectors list so that the order of the constituents // doesn't matter @@ -95,9 +97,9 @@ function rule(actual, options) { if (previousDuplicatePosition) { // If the selector isn't nested we can use its raw value; otherwise, // we have to approximate something for the message -- which is close enough - const isNestedSelector = resolvedSelectors.join(',') !== ruleNode.selectors.join(','); + const isNestedSelector = resolvedSelectorList.join(',') !== ruleNode.selectors.join(','); const selectorForMessage = isNestedSelector - ? resolvedSelectors.join(', ') + ? resolvedSelectorList.join(', ') : ruleNode.selector; return report({ From 2388fbebf46b3acd7b912ad697059134128ee36f Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Wed, 9 Jun 2021 04:05:44 -0400 Subject: [PATCH 052/194] Refactor to remove `_.kebabCase` (#5365) --- lib/utils/checkInvalidCLIOptions.js | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/utils/checkInvalidCLIOptions.js b/lib/utils/checkInvalidCLIOptions.js index 9bb937669b..7d60042d57 100644 --- a/lib/utils/checkInvalidCLIOptions.js +++ b/lib/utils/checkInvalidCLIOptions.js @@ -1,6 +1,5 @@ 'use strict'; -const _ = require('lodash'); const chalk = require('chalk'); const EOL = require('os').EOL; const levenshtein = require('fastest-levenshtein'); @@ -45,6 +44,22 @@ const suggest = (all, invalid) => { return null; }; +/** + * Converts a string to kebab case. + * For example, `kebabCase('oneTwoThree') === 'one-two-three'`. + * @param {string} opt + * @returns {string} + */ +const kebabCase = (opt) => { + const matches = opt.match(/[A-Z]?[a-z]+|[A-Z]|[0-9]+/g); + + if (matches) { + return matches.map((s) => s.toLowerCase()).join('-'); + } + + return ''; +}; + /** * @param {string} opt * @return {string} @@ -54,7 +69,7 @@ const cliOption = (opt) => { return `"-${opt}"`; } - return `"--${_.kebabCase(opt)}"`; + return `"--${kebabCase(opt)}"`; }; /** @@ -82,7 +97,7 @@ module.exports = function checkInvalidCLIOptions(allowedOptions, inputOptions) { return Object.keys(inputOptions) .filter((opt) => !allOptions.includes(opt)) - .map(_.kebabCase) + .map(kebabCase) .reduce((msg, invalid) => { // NOTE: No suggestion for shortcut options because it's too difficult const suggestion = invalid.length >= 2 ? suggest(allOptions, invalid) : null; From d773547e5d2c581f9b3c48c3dd5b40da32b1790d Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Wed, 9 Jun 2021 04:06:56 -0400 Subject: [PATCH 053/194] Refactor to remove `_.isEqual` (#5366) --- .../index.js | 4 +-- .../utils/findNotContiguousOrRectangular.js | 4 +-- lib/utils/__tests__/arrayEqual.test.js | 25 +++++++++++++++++++ lib/utils/arrayEqual.js | 18 +++++++++++++ lib/utils/validateOptions.js | 3 ++- 5 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 lib/utils/__tests__/arrayEqual.test.js create mode 100644 lib/utils/arrayEqual.js diff --git a/lib/rules/declaration-block-no-redundant-longhand-properties/index.js b/lib/rules/declaration-block-no-redundant-longhand-properties/index.js index ece507cc5c..e394e7cea5 100644 --- a/lib/rules/declaration-block-no-redundant-longhand-properties/index.js +++ b/lib/rules/declaration-block-no-redundant-longhand-properties/index.js @@ -2,7 +2,7 @@ 'use strict'; -const _ = require('lodash'); +const arrayEqual = require('../../utils/arrayEqual'); const eachDeclarationBlock = require('../../utils/eachDeclarationBlock'); const optionsMatches = require('../../utils/optionsMatches'); const report = require('../../utils/report'); @@ -80,7 +80,7 @@ function rule(actual, options) { }); if ( - !_.isEqual( + !arrayEqual( prefixedShorthandData.sort(), longhandDeclarations[prefixedShorthandProperty].sort(), ) diff --git a/lib/rules/named-grid-areas-no-invalid/utils/findNotContiguousOrRectangular.js b/lib/rules/named-grid-areas-no-invalid/utils/findNotContiguousOrRectangular.js index dc73099c13..b9911f84bd 100644 --- a/lib/rules/named-grid-areas-no-invalid/utils/findNotContiguousOrRectangular.js +++ b/lib/rules/named-grid-areas-no-invalid/utils/findNotContiguousOrRectangular.js @@ -1,6 +1,6 @@ 'use strict'; -const _ = require('lodash'); +const arrayEqual = require('../../../utils/arrayEqual'); /** * @@ -27,7 +27,7 @@ function isContiguousAndRectangular(areas, name) { continue; } - if (!_.isEqual(indicesByRow[i], indicesByRow[j])) { + if (!arrayEqual(indicesByRow[i], indicesByRow[j])) { return false; } } diff --git a/lib/utils/__tests__/arrayEqual.test.js b/lib/utils/__tests__/arrayEqual.test.js new file mode 100644 index 0000000000..b02a46f627 --- /dev/null +++ b/lib/utils/__tests__/arrayEqual.test.js @@ -0,0 +1,25 @@ +'use strict'; + +const arrayEqual = require('../arrayEqual'); + +describe('arrayEqual', () => { + it('handles arrays', () => { + expect(arrayEqual([], [])).toBe(true); + expect(arrayEqual([1, 2], [1, 2])).toBe(true); + expect(arrayEqual([1, 2], [3, 4])).toBe(false); + expect(arrayEqual([1, 2], [1, 2, 3])).toBe(false); + expect(arrayEqual([1, 2], [])).toBe(false); + + const o1 = { a: 1, b: 2 }; + const o2 = { a: 1, b: 2 }; + const o1copy = o1; + + expect(arrayEqual([o1], [o2])).toBe(false); + expect(arrayEqual([o1], [o1copy])).toBe(true); + }); + + it('returns false for non-arrays', () => { + expect(arrayEqual({ a: 1 }, [1])).toBe(false); + expect(arrayEqual([1], /1/)).toBe(false); + }); +}); diff --git a/lib/utils/arrayEqual.js b/lib/utils/arrayEqual.js new file mode 100644 index 0000000000..34d00e0247 --- /dev/null +++ b/lib/utils/arrayEqual.js @@ -0,0 +1,18 @@ +'use strict'; + +/** + * Tests if two arrays are equal. + * + * @param {any} a + * @param {any} b + * @returns {boolean} + */ +function arrayEqual(a, b) { + if (!Array.isArray(a) || !Array.isArray(b)) return false; + + if (a.length !== b.length) return false; + + return a.every((elem, index) => elem === b[index]); +} + +module.exports = arrayEqual; diff --git a/lib/utils/validateOptions.js b/lib/utils/validateOptions.js index 9c0a483c79..4efddd6cf5 100644 --- a/lib/utils/validateOptions.js +++ b/lib/utils/validateOptions.js @@ -1,6 +1,7 @@ 'use strict'; const _ = require('lodash'); +const arrayEqual = require('./arrayEqual'); const { isPlainObject } = require('is-plain-object'); const IGNORED_OPTIONS = new Set(['severity', 'message', 'reportDisables']); @@ -64,7 +65,7 @@ function validate(opts, ruleName, complain) { const actual = opts.actual; const optional = opts.optional; - if (actual === null || _.isEqual(actual, [null])) { + if (actual === null || arrayEqual(actual, [null])) { return; } From 1cdade4ef79a77784a47d4ca40a3f7797336962a Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Thu, 10 Jun 2021 17:15:38 +0900 Subject: [PATCH 054/194] Refactor to improve types in `lib/utils/whitespaceChecker.js` (#5367) --- lib/utils/whitespaceChecker.js | 118 ++++++++++++++------------------- 1 file changed, 50 insertions(+), 68 deletions(-) diff --git a/lib/utils/whitespaceChecker.js b/lib/utils/whitespaceChecker.js index c7e7ca31de..ccc4a23066 100644 --- a/lib/utils/whitespaceChecker.js +++ b/lib/utils/whitespaceChecker.js @@ -5,29 +5,33 @@ const isSingleLineString = require('./isSingleLineString'); const isWhitespace = require('./isWhitespace'); /** - * @typedef {object} Messages - * @property {function} [expectedBefore] - * @property {function} [rejectedBefore] - * @property {function} [expectedAfter] - * @property {function} [rejectedAfter] - * @property {function} [expectedBeforeSingleLine] - * @property {function} [rejectedBeforeSingleLine] - * @property {function} [expectedBeforeMultiLine] - * @property {function} [rejectedBeforeMultiLine] - * @property {function} [expectedAfterSingleLine] - * @property {function} [rejectedAfterSingleLine] - * @property {function} [expectedAfterMultiLine] - * @property {function} [rejectedAfterMultiLine] + * @typedef {(message: string) => string} MessageFunction */ /** - * @typedef {object} WhitespaceCheckerArgs + * @typedef {Object} Messages + * @property {MessageFunction} [expectedBefore] + * @property {MessageFunction} [rejectedBefore] + * @property {MessageFunction} [expectedAfter] + * @property {MessageFunction} [rejectedAfter] + * @property {MessageFunction} [expectedBeforeSingleLine] + * @property {MessageFunction} [rejectedBeforeSingleLine] + * @property {MessageFunction} [expectedBeforeMultiLine] + * @property {MessageFunction} [rejectedBeforeMultiLine] + * @property {MessageFunction} [expectedAfterSingleLine] + * @property {MessageFunction} [rejectedAfterSingleLine] + * @property {MessageFunction} [expectedAfterMultiLine] + * @property {MessageFunction} [rejectedAfterMultiLine] + */ + +/** + * @typedef {Object} WhitespaceCheckerArgs * @property {string} source - The source string * @property {number} index - The index of the character to check before - * @property {function} err - If a violation is found, this callback + * @property {(message: string) => void} err - If a violation is found, this callback * will be invoked with the relevant warning message. * Typically this callback will report() the violation. - * @property {function} errTarget - If a violation is found, this string + * @property {string} errTarget - If a violation is found, this string * will be sent to the relevant warning message. * @property {string} [lineCheckStr] - Single- and multi-line checkers * will use this string to determine whether they should proceed, @@ -45,8 +49,16 @@ const isWhitespace = require('./isWhitespace'); */ /** - * @callback WhitespaceChecker - * @param {WhitespaceCheckerArgs} args + * @typedef {(args: WhitespaceCheckerArgs) => void} WhitespaceChecker + */ + +/** + * @typedef {{ + * before: WhitespaceChecker, + * beforeAllowingIndentation: WhitespaceChecker, + * after: WhitespaceChecker, + * afterOneOnly: WhitespaceChecker, + * }} WhitespaceCheckers */ /** @@ -59,27 +71,18 @@ const isWhitespace = require('./isWhitespace'); * @param {"space" | "newline"} targetWhitespace - This is a keyword instead * of the actual character (e.g. " ") in order to accommodate * different styles of newline ("\n" vs "\r\n") - * @param { "always" | "never" | "always-single-line" | "always-multi-line" | "never-single-line" | "never-multi-line" } expectation + * @param {"always" | "never" | "always-single-line" | "always-multi-line" | "never-single-line" | "never-multi-line"} expectation * @param {Messages} messages - An object of message functions; * calling `before*()` or `after*()` and the `expectation` that is passed * determines which message functions are required * - * @returns {object} The checker, with its exposed checking functions + * @returns {WhitespaceCheckers} The checker, with its exposed checking functions */ -module.exports = function (targetWhitespace, expectation, messages) { +module.exports = function whitespaceChecker(targetWhitespace, expectation, messages) { // Keep track of active arguments in order to avoid passing // too much stuff around, making signatures long and confusing. // This variable gets reset anytime a checking function is called. - /** - * @type {{ - source?: any, - index?: any, - err: any, - errTarget: any, - onlyOneChar: any, - allowIndentation?: any, - }} - */ + /** @type {WhitespaceCheckerArgs} */ let activeArgs; /** @@ -192,15 +195,12 @@ module.exports = function (targetWhitespace, expectation, messages) { } /** - * @param {WhitespaceCheckerArgs} obj + * @type {WhitespaceChecker} */ function beforeAllowingIndentation(obj) { before({ ...obj, allowIndentation: true }); } - /** - * @param {Function} [messageFunc] - */ function expectBefore(messageFunc = messages.expectedBefore) { if (activeArgs.allowIndentation) { expectBeforeAllowingIndentation(messageFunc); @@ -225,14 +225,10 @@ module.exports = function (targetWhitespace, expectation, messages) { } } - const msgFunc = assertFunction(messageFunc); - - activeArgs.err(msgFunc(activeArgs.errTarget ? activeArgs.errTarget : source[index])); + assertFunction(messageFunc); + activeArgs.err(messageFunc(activeArgs.errTarget || source[index])); } - /** - * @param {Function} [messageFunc] - */ function expectBeforeAllowingIndentation(messageFunc = messages.expectedBefore) { const _activeArgs2 = activeArgs; const source = _activeArgs2.source; @@ -252,17 +248,13 @@ module.exports = function (targetWhitespace, expectation, messages) { continue; } - const msgFunc = assertFunction(messageFunc); - - err(msgFunc(activeArgs.errTarget ? activeArgs.errTarget : source[index])); + assertFunction(messageFunc); + err(messageFunc(activeArgs.errTarget || source[index])); return; } } - /** - * @param {Function} [messageFunc] - */ function rejectBefore(messageFunc = messages.rejectedBefore) { const _activeArgs3 = activeArgs; const source = _activeArgs3.source; @@ -271,22 +263,18 @@ module.exports = function (targetWhitespace, expectation, messages) { const oneCharBefore = source[index - 1]; if (isValue(oneCharBefore) && isWhitespace(oneCharBefore)) { - const msgFunc = assertFunction(messageFunc); - - activeArgs.err(msgFunc(activeArgs.errTarget ? activeArgs.errTarget : source[index])); + assertFunction(messageFunc); + activeArgs.err(messageFunc(activeArgs.errTarget || source[index])); } } /** - * @param {WhitespaceCheckerArgs} obj + * @type {WhitespaceChecker} */ function afterOneOnly(obj) { after({ ...obj, onlyOneChar: true }); } - /** - * @param {Function} [messageFunc] - */ function expectAfter(messageFunc = messages.expectedAfter) { const _activeArgs4 = activeArgs; const source = _activeArgs4.source; @@ -321,14 +309,10 @@ module.exports = function (targetWhitespace, expectation, messages) { } } - const msgFunc = assertFunction(messageFunc); - - activeArgs.err(msgFunc(activeArgs.errTarget ? activeArgs.errTarget : source[index])); + assertFunction(messageFunc); + activeArgs.err(messageFunc(activeArgs.errTarget || source[index])); } - /** - * @param {Function} [messageFunc] - */ function rejectAfter(messageFunc = messages.rejectedAfter) { const _activeArgs5 = activeArgs; const source = _activeArgs5.source; @@ -337,9 +321,8 @@ module.exports = function (targetWhitespace, expectation, messages) { const oneCharAfter = source[index + 1]; if (isValue(oneCharAfter) && isWhitespace(oneCharAfter)) { - const msgFunc = assertFunction(messageFunc); - - activeArgs.err(msgFunc(activeArgs.errTarget ? activeArgs.errTarget : source[index])); + assertFunction(messageFunc); + activeArgs.err(messageFunc(activeArgs.errTarget || source[index])); } } @@ -352,7 +335,7 @@ module.exports = function (targetWhitespace, expectation, messages) { }; /** - * @param {any} x + * @param {unknown} x */ function isValue(x) { return x !== undefined && x !== null; @@ -360,11 +343,10 @@ function isValue(x) { /** * @param {unknown} x + * @returns {asserts x is Function} */ function assertFunction(x) { - if (typeof x === 'function') { - return x; + if (typeof x !== 'function') { + throw new Error(`\`${x}\` must be a function`); } - - throw new Error(`\`${x}\` must be a function`); } From dadcf7b407ed5cb09cac70e943713f94b4fae3a0 Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Thu, 10 Jun 2021 11:02:38 -0400 Subject: [PATCH 055/194] Refactor to remove `_.merge` and `_.mergeWith` (#5369) --- lib/augmentConfig.js | 18 ++++++++++++++++-- lib/testUtils/mergeTestDescriptions.js | 15 ++------------- package-lock.json | 5 ++--- package.json | 1 + 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/lib/augmentConfig.js b/lib/augmentConfig.js index 0bd4317a88..273fc744da 100644 --- a/lib/augmentConfig.js +++ b/lib/augmentConfig.js @@ -1,9 +1,9 @@ 'use strict'; -const _ = require('lodash'); const configurationError = require('./utils/configurationError'); const getModulePath = require('./utils/getModulePath'); const globjoin = require('globjoin'); +const merge = require('deepmerge'); const normalizeAllRuleSettings = require('./normalizeAllRuleSettings'); const path = require('path'); @@ -15,6 +15,20 @@ const path = require('path'); /** @typedef {import('stylelint').StylelintConfig} StylelintConfig */ /** @typedef {import('stylelint').CosmiconfigResult} CosmiconfigResult */ +/** @type {import('deepmerge').Options} */ +const MERGE_OPTIONS = { + arrayMerge: (target, source, options) => { + const destination = [...target]; + + source.forEach((item, index) => { + // @ts-expect-error -- The type definition is insufficient. See https://github.com/TehShrike/deepmerge/pull/231 + destination[index] = options.cloneUnlessOtherwiseSpecified(item, options); + }); + + return destination; + }, +}; + /** * - Merges config and configOverrides * - Makes all paths absolute @@ -30,7 +44,7 @@ function augmentConfigBasic(stylelint, config, configDir, allowOverrides) { .then(() => { if (!allowOverrides) return config; - return _.merge(config, stylelint._options.configOverrides); + return merge(config, stylelint._options.configOverrides || {}, MERGE_OPTIONS); }) .then((augmentedConfig) => { return extendConfig(stylelint, augmentedConfig, configDir); diff --git a/lib/testUtils/mergeTestDescriptions.js b/lib/testUtils/mergeTestDescriptions.js index 97a4039c23..d1fcd0037b 100644 --- a/lib/testUtils/mergeTestDescriptions.js +++ b/lib/testUtils/mergeTestDescriptions.js @@ -1,18 +1,7 @@ 'use strict'; -const _ = require('lodash'); +const merge = require('deepmerge'); module.exports = function (...args) { - const mergeWithArgs = [{}]; - - [...args].forEach((arg) => mergeWithArgs.push(arg)); - mergeWithArgs.push(mergeCustomizer); - - return _.mergeWith(...mergeWithArgs); + return merge.all(args); }; - -function mergeCustomizer(objValue, srcValue) { - if (Array.isArray(objValue, mergeCustomizer)) { - return objValue.concat(srcValue); - } -} diff --git a/package-lock.json b/package-lock.json index 9853fdcb8d..7f231fb6c2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "chalk": "^4.1.1", "cosmiconfig": "^7.0.0", "debug": "^4.3.1", + "deepmerge": "^4.2.2", "execall": "^2.0.0", "fast-glob": "^3.2.5", "fastest-levenshtein": "^1.0.12", @@ -2716,7 +2717,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -12854,8 +12854,7 @@ "deepmerge": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" }, "defer-to-connect": { "version": "2.0.0", diff --git a/package.json b/package.json index 5af0dc19ca..1ac5c11ded 100644 --- a/package.json +++ b/package.json @@ -111,6 +111,7 @@ "chalk": "^4.1.1", "cosmiconfig": "^7.0.0", "debug": "^4.3.1", + "deepmerge": "^4.2.2", "execall": "^2.0.0", "fast-glob": "^3.2.5", "fastest-levenshtein": "^1.0.12", From e5ef0a0c4f9808f871ef5ba39004b8069499e350 Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Sun, 13 Jun 2021 08:12:10 -0400 Subject: [PATCH 056/194] Refactor to remove `_.cloneDeep` (#5370) --- lib/__tests__/disableRanges.test.js | 11 +++++++---- lib/needlessDisables.js | 18 ++++-------------- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/lib/__tests__/disableRanges.test.js b/lib/__tests__/disableRanges.test.js index dda789f1fd..c464e1a7a8 100644 --- a/lib/__tests__/disableRanges.test.js +++ b/lib/__tests__/disableRanges.test.js @@ -1,7 +1,7 @@ 'use strict'; -const _ = require('lodash'); const assignDisabledRanges = require('../assignDisabledRanges'); +const merge = require('deepmerge'); const postcss = require('postcss'); const postcssLess = require('postcss-less'); const postcssScss = require('postcss-scss'); @@ -997,10 +997,13 @@ function expectDisableRanges(result, expected) { } function expectDisableRange(actual, expected) { - const actualMutable = _.cloneDeep(actual); + const expectedMutable = merge({}, expected); - delete actualMutable.comment; - expect(actualMutable).toEqual(expected); + if ('comment' in actual) { + expectedMutable.comment = actual.comment; + } + + expect(actual).toEqual(expectedMutable); } function testDisableRanges(source, options) { diff --git a/lib/needlessDisables.js b/lib/needlessDisables.js index 96f51980de..bd28da7647 100644 --- a/lib/needlessDisables.js +++ b/lib/needlessDisables.js @@ -1,6 +1,5 @@ 'use strict'; -const _ = require('lodash'); const optionsMatches = require('./utils/optionsMatches'); const putIfAbsent = require('./utils/putIfAbsent'); const validateDisableSettings = require('./validateDisableSettings'); @@ -21,8 +20,7 @@ module.exports = function (results) { const [enabled, options, stylelintResult] = settings; - /** @type {{[ruleName: string]: Array}} */ - const rangeData = _.cloneDeep(stylelintResult.disabledRanges); + const rangeData = stylelintResult.disabledRanges; if (!rangeData) return; @@ -55,20 +53,12 @@ module.exports = function (results) { } } - // Get rid of the duplicated ranges for each `all` rule. We only care - // if the entire `all` rule is useful as a whole or not. - for (const range of rangeData.all) { - for (const rule of Object.keys(rangeData)) { - if (rule === 'all') continue; - - rangeData[rule] = rangeData[rule].filter( - (otherRange) => range.comment !== otherRange.comment, - ); - } - } + const allRangeComments = new Set(rangeData.all.map((range) => range.comment)); for (const [rule, ranges] of Object.entries(rangeData)) { for (const range of ranges) { + if (rule !== 'all' && allRangeComments.has(range.comment)) continue; + if (enabled === optionsMatches(options, 'except', rule)) continue; const useful = usefulDisables.get(range.comment) || new Set(); From 6501daca3e0c90ac401c3c3cceac072755ec4f2e Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Sun, 13 Jun 2021 08:12:31 -0400 Subject: [PATCH 057/194] Refactor to remove `_.escapeRegExp` (#5371) --- .../__tests__/stringFormatter.test.js | 28 ++++ lib/formatters/stringFormatter.js | 29 +++- package-lock.json | 141 +++++++++++++++--- 3 files changed, 169 insertions(+), 29 deletions(-) diff --git a/lib/formatters/__tests__/stringFormatter.test.js b/lib/formatters/__tests__/stringFormatter.test.js index 393b43ea19..6f8c46d5c7 100644 --- a/lib/formatters/__tests__/stringFormatter.test.js +++ b/lib/formatters/__tests__/stringFormatter.test.js @@ -61,6 +61,34 @@ path/to/file.css ); }); + it('removes rule name from warning text', () => { + const results = [ + { + source: 'path/to/file.css', + errored: true, + warnings: [ + { + line: 1, + column: 1, + rule: 'rule-name', + severity: 'error', + text: 'Unexpected foo (rule-name)', + }, + ], + deprecations: [], + invalidOptionWarnings: [], + }, + ]; + + const output = prepareFormatterOutput(results, stringFormatter); + + expect(output).toBe( + ` +path/to/file.css + 1:1 × Unexpected foo rule-name`.trimStart(), + ); + }); + it('outputs warnings without stdout `TTY`', () => { process.stdout.isTTY = false; diff --git a/lib/formatters/stringFormatter.js b/lib/formatters/stringFormatter.js index a727eb2ede..91ac7062c5 100644 --- a/lib/formatters/stringFormatter.js +++ b/lib/formatters/stringFormatter.js @@ -1,6 +1,5 @@ 'use strict'; -const _ = require('lodash'); const chalk = require('chalk'); const path = require('path'); const stringWidth = require('string-width'); @@ -147,6 +146,27 @@ function formatter(messages, source) { output += `${chalk.underline(logFrom(source))}\n`; } + /** + * @param {import('stylelint').StylelintWarning} message + * @return {string} + */ + function formatMessageText(message) { + let result = message.text; + + result = result + // Remove all control characters (newline, tab and etc) + .replace(/[\u0001-\u001A]+/g, ' ') // eslint-disable-line no-control-regex + .replace(/\.$/, ''); + + const ruleString = ` (${message.rule})`; + + if (result.endsWith(ruleString)) { + result = result.slice(0, result.lastIndexOf(ruleString)); + } + + return result; + } + const cleanedMessages = orderedMessages.map((message) => { const { line, column } = message; const severity = /** @type {keyof import('log-symbols')} */ (message.severity); @@ -159,12 +179,7 @@ function formatter(messages, source) { symbols[severity] ? chalk[/** @type {'blue' | 'red' | 'yellow'} */ (levelColors[severity])](symbols[severity]) : severity, - message.text - // Remove all control characters (newline, tab and etc) - .replace(/[\u0001-\u001A]+/g, ' ') // eslint-disable-line no-control-regex - .replace(/\.$/, '') - // eslint-disable-next-line prefer-template - .replace(new RegExp(_.escapeRegExp('(' + message.rule + ')') + '$'), ''), + formatMessageText(message), chalk.dim(message.rule || ''), ]; diff --git a/package-lock.json b/package-lock.json index 7f231fb6c2..91fdc1f896 100644 --- a/package-lock.json +++ b/package-lock.json @@ -357,6 +357,14 @@ "node": ">=4" } }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/@babel/parser": { "version": "7.14.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", @@ -2984,11 +2992,15 @@ } }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/escodegen": { @@ -3179,6 +3191,15 @@ "node": ">=6.5.0" } }, + "node_modules/eslint-plugin-eslint-comments/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/eslint-plugin-jest": { "version": "24.3.6", "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.3.6.tgz", @@ -3626,6 +3647,15 @@ "node": ">=8" } }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -4335,6 +4365,15 @@ "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", "dev": true }, + "node_modules/inquirer-autosubmit-prompt/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/inquirer-autosubmit-prompt/node_modules/figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", @@ -6105,6 +6144,15 @@ "node": ">=0.10.0" } }, + "node_modules/listr-update-renderer/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/listr-update-renderer/node_modules/figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", @@ -6340,6 +6388,15 @@ "node": ">=4" } }, + "node_modules/listr-verbose-renderer/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/listr-verbose-renderer/node_modules/figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", @@ -7119,15 +7176,6 @@ "url": "https://github.com/sindresorhus/np?sponsor=1" } }, - "node_modules/np/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/np/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -7391,6 +7439,15 @@ "node": ">=4.8" } }, + "node_modules/npm-run-all/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/npm-run-all/node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", @@ -10936,6 +10993,11 @@ "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" } } }, @@ -13060,9 +13122,10 @@ "dev": true }, "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true }, "escodegen": { "version": "2.0.0", @@ -13239,6 +13302,14 @@ "requires": { "escape-string-regexp": "^1.0.5", "ignore": "^5.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + } } }, "eslint-plugin-jest": { @@ -13546,6 +13617,14 @@ "dev": true, "requires": { "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + } } }, "file-entry-cache": { @@ -14096,6 +14175,12 @@ "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", "dev": true }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", @@ -15475,6 +15560,12 @@ "string-width": "^1.0.1" } }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", @@ -15654,6 +15745,12 @@ "restore-cursor": "^2.0.0" } }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", @@ -16262,12 +16359,6 @@ "update-notifier": "^5.0.1" }, "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -16473,6 +16564,12 @@ "which": "^1.2.9" } }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", From 92c3feada7ada351410c88c2174fb90f68796455 Mon Sep 17 00:00:00 2001 From: Stephen Wade Date: Mon, 14 Jun 2021 06:11:21 -0400 Subject: [PATCH 058/194] Refactor to remove isFunction and lodash itself (#5372) * Remove `_.isFunction` * Remove lodash --- lib/utils/validateOptions.js | 4 +--- package-lock.json | 20 ++++---------------- package.json | 2 -- 3 files changed, 5 insertions(+), 21 deletions(-) diff --git a/lib/utils/validateOptions.js b/lib/utils/validateOptions.js index 4efddd6cf5..677664635d 100644 --- a/lib/utils/validateOptions.js +++ b/lib/utils/validateOptions.js @@ -1,6 +1,5 @@ 'use strict'; -const _ = require('lodash'); const arrayEqual = require('./arrayEqual'); const { isPlainObject } = require('is-plain-object'); @@ -100,8 +99,7 @@ function validate(opts, ruleName, complain) { return; } - // If `possible` is a function ... - if (_.isFunction(possible)) { + if (typeof possible === 'function') { if (!possible(actual)) { complain(`Invalid option "${JSON.stringify(actual)}" for rule ${ruleName}`); } diff --git a/package-lock.json b/package-lock.json index 91fdc1f896..94dda4ea65 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,6 @@ "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", "known-css-properties": "^0.21.0", - "lodash": "^4.17.21", "log-symbols": "^4.1.0", "mathml-tag-names": "^2.1.3", "meow": "^9.0.0", @@ -62,7 +61,6 @@ "@types/global-modules": "^2.0.0", "@types/globjoin": "^0.1.0", "@types/imurmurhash": "^0.1.1", - "@types/lodash": "^4.14.168", "@types/micromatch": "^4.0.1", "@types/postcss-less": "^4.0.0", "@types/postcss-safe-parser": "^5.0.0", @@ -1197,12 +1195,6 @@ "@types/node": "*" } }, - "node_modules/@types/lodash": { - "version": "4.14.168", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz", - "integrity": "sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==", - "dev": true - }, "node_modules/@types/mdast": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", @@ -6586,7 +6578,8 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "node_modules/lodash.clonedeep": { "version": "4.5.0", @@ -11702,12 +11695,6 @@ "@types/node": "*" } }, - "@types/lodash": { - "version": "4.14.168", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz", - "integrity": "sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==", - "dev": true - }, "@types/mdast": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", @@ -15892,7 +15879,8 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "lodash.clonedeep": { "version": "4.5.0", diff --git a/package.json b/package.json index 1ac5c11ded..18c4bb0e05 100644 --- a/package.json +++ b/package.json @@ -126,7 +126,6 @@ "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", "known-css-properties": "^0.21.0", - "lodash": "^4.17.21", "log-symbols": "^4.1.0", "mathml-tag-names": "^2.1.3", "meow": "^9.0.0", @@ -158,7 +157,6 @@ "@types/global-modules": "^2.0.0", "@types/globjoin": "^0.1.0", "@types/imurmurhash": "^0.1.1", - "@types/lodash": "^4.14.168", "@types/micromatch": "^4.0.1", "@types/postcss-less": "^4.0.0", "@types/postcss-safe-parser": "^5.0.0", From 336cf15242b7eb8b22edd54de55f1e08a10fc2f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=B8rch?= Date: Wed, 14 Jul 2021 14:49:16 +0200 Subject: [PATCH 059/194] Fix "No files matching the pattern" when using backslash paths on Windows (#5386) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Rewrite paths for globby to use forward slash * Remove stray comment * Extend tests to verify 'windows paths' * Use normalize-path for path normalization instead of regex * Amend tests as suggested in PR comments * Updated test description Co-authored-by: Thomas Bowman Mørch --- lib/__tests__/standalone-globs.test.js | 29 ++++++++++++++++++++++++++ lib/standalone.js | 3 ++- package-lock.json | 23 ++++++++++++++++---- package.json | 2 ++ 4 files changed, 52 insertions(+), 5 deletions(-) diff --git a/lib/__tests__/standalone-globs.test.js b/lib/__tests__/standalone-globs.test.js index 0d9d2c8255..e5fc550af6 100644 --- a/lib/__tests__/standalone-globs.test.js +++ b/lib/__tests__/standalone-globs.test.js @@ -112,6 +112,35 @@ describe('standalone globbing', () => { ); }); + describe('windows path style with backslash', () => { + // The tests fail on non-windows environments. + if (process.platform !== 'win32') { + return; + } + + it('should handle a backslash-separated file path', async () => { + const cssGlob = path.win32.join(fixturesPath, 'with spaces', 'styles.css'); + + const { results } = await standalone({ + files: cssGlob, + config: { + rules: { + 'block-no-empty': true, + }, + }, + }); + + expect(results).toHaveLength(1); + expect(results[0].errored).toEqual(true); + expect(results[0].warnings[0]).toEqual( + expect.objectContaining({ + rule: 'block-no-empty', + severity: 'error', + }), + ); + }); + }); + describe('mixed globs and paths with special chars', () => { it('manual escaping', async () => { const cssGlob = `${fixturesPath}/got\\[braces\\] and \\(spaces\\)/*.+(s|c)ss`; diff --git a/lib/standalone.js b/lib/standalone.js index f075bb2c6d..cd5b210a85 100644 --- a/lib/standalone.js +++ b/lib/standalone.js @@ -12,6 +12,7 @@ const getFormatterOptionsText = require('./utils/getFormatterOptionsText'); const globby = require('globby'); const hash = require('./utils/hash'); const NoFilesFoundError = require('./utils/noFilesFoundError'); +const normalizePath = require('normalize-path'); const path = require('path'); const pkg = require('../package.json'); const prepareReturnValue = require('./prepareReturnValue'); @@ -176,7 +177,7 @@ module.exports = function (options) { if (fs.existsSync(absolutePath)) { // This path points to a file. Return an escaped path to avoid globbing - return fastGlob.escapePath(entry); + return fastGlob.escapePath(normalizePath(entry)); } return entry; diff --git a/package-lock.json b/package-lock.json index 94dda4ea65..5d9190e5bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,6 +31,7 @@ "mathml-tag-names": "^2.1.3", "meow": "^9.0.0", "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", "normalize-selector": "^0.2.0", "postcss": "^8.3.0", "postcss-media-query-parser": "^0.2.3", @@ -62,6 +63,7 @@ "@types/globjoin": "^0.1.0", "@types/imurmurhash": "^0.1.1", "@types/micromatch": "^4.0.1", + "@types/normalize-path": "^3.0.0", "@types/postcss-less": "^4.0.0", "@types/postcss-safe-parser": "^5.0.0", "@types/style-search": "^0.1.1", @@ -1235,6 +1237,12 @@ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" }, + "node_modules/@types/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-Nd8y/5t/7CRakPYiyPzr/IAfYusy1FkcZYFEAcoMZkwpJv2n4Wm+olW+e7xBdHEXhOnWdG9ddbar0gqZWS4x5Q==", + "dev": true + }, "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", @@ -2151,6 +2159,7 @@ "dependencies": { "anymatch": "~3.1.1", "braces": "~3.0.2", + "fsevents": "~2.1.2", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", @@ -3004,7 +3013,8 @@ "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2", - "optionator": "^0.8.1" + "optionator": "^0.8.1", + "source-map": "~0.6.1" }, "bin": { "escodegen": "bin/escodegen.js", @@ -5226,6 +5236,7 @@ "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", "graceful-fs": "^4.2.4", "jest-regex-util": "^27.0.1", "jest-serializer": "^27.0.1", @@ -7091,7 +7102,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -11735,6 +11745,12 @@ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" }, + "@types/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-Nd8y/5t/7CRakPYiyPzr/IAfYusy1FkcZYFEAcoMZkwpJv2n4Wm+olW+e7xBdHEXhOnWdG9ddbar0gqZWS4x5Q==", + "dev": true + }, "@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", @@ -16286,8 +16302,7 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-selector": { "version": "0.2.0", diff --git a/package.json b/package.json index 18c4bb0e05..6239b4591c 100644 --- a/package.json +++ b/package.json @@ -130,6 +130,7 @@ "mathml-tag-names": "^2.1.3", "meow": "^9.0.0", "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", "normalize-selector": "^0.2.0", "postcss": "^8.3.0", "postcss-media-query-parser": "^0.2.3", @@ -158,6 +159,7 @@ "@types/globjoin": "^0.1.0", "@types/imurmurhash": "^0.1.1", "@types/micromatch": "^4.0.1", + "@types/normalize-path": "^3.0.0", "@types/postcss-less": "^4.0.0", "@types/postcss-safe-parser": "^5.0.0", "@types/style-search": "^0.1.1", From e64aeba35b33dd4230e0da019ec05636a072b3aa Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Wed, 14 Jul 2021 13:51:47 +0100 Subject: [PATCH 060/194] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f4d5069748..6ec04ee85c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ All notable changes to this project are documented in this file. - Added: `custom-property-no-missing-var-function` rule ([#5317](https://github.com/stylelint/stylelint/pull/5317)). - Added: `function-calc-no-unspaced-operator` autofix ([#5273](https://github.com/stylelint/stylelint/pull/5273)). - Added: `ignoreFunctions: []` to `length-zero-no-unit` ([#5314](https://github.com/stylelint/stylelint/pull/5314)). +- Fixed: "No files matching the pattern" when using backslash paths on Windows ([#5386](https://github.com/stylelint/stylelint/pull/5386)). - Fixed: `length-zero-no-unit` false positives for `flex` property ([#5315](https://github.com/stylelint/stylelint/pull/5315)). ## 13.13.1 From e7d61c1dbaefd5a310c02d1a09147f95a7abe34c Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Sat, 17 Jul 2021 17:33:05 +0900 Subject: [PATCH 061/194] Fix some type problems (#5389) * Fix some type problems - Avoid `any` as possible - Use `unknown` - Use `@ts-expect-error` (see ) * Use type guard for validateTypes.js --- lib/utils/arrayEqual.js | 10 ++++------ lib/utils/declarationValueIndex.js | 9 +++++---- lib/utils/getAtRuleParams.js | 2 -- lib/utils/getDeclarationValue.js | 2 -- lib/utils/getRuleSelector.js | 8 ++------ lib/utils/isStandardSyntaxRule.js | 6 ++---- lib/utils/setAtRuleParams.js | 2 -- lib/utils/setDeclarationValue.js | 2 -- lib/utils/validateTypes.js | 16 ++++++++-------- 9 files changed, 21 insertions(+), 36 deletions(-) diff --git a/lib/utils/arrayEqual.js b/lib/utils/arrayEqual.js index 34d00e0247..fae0e5a705 100644 --- a/lib/utils/arrayEqual.js +++ b/lib/utils/arrayEqual.js @@ -3,16 +3,14 @@ /** * Tests if two arrays are equal. * - * @param {any} a - * @param {any} b + * @param {unknown} a + * @param {unknown} b * @returns {boolean} */ -function arrayEqual(a, b) { +module.exports = function arrayEqual(a, b) { if (!Array.isArray(a) || !Array.isArray(b)) return false; if (a.length !== b.length) return false; return a.every((elem, index) => elem === b[index]); -} - -module.exports = arrayEqual; +}; diff --git a/lib/utils/declarationValueIndex.js b/lib/utils/declarationValueIndex.js index abc02f890f..0d079745f6 100644 --- a/lib/utils/declarationValueIndex.js +++ b/lib/utils/declarationValueIndex.js @@ -4,19 +4,20 @@ * Get the index of a declaration's value * * @param {import('postcss').Declaration} decl - * * @returns {number} */ -module.exports = function (decl) { - // Casting this to any because 'prop' and 'value' do not exist on type 'NodeRaws' - /** @type {any} */ +module.exports = function declarationValueIndex(decl) { const raws = decl.raws; return [ + // @ts-expect-error -- TODO TYPES `prop` is missing raws.prop && raws.prop.prefix, + // @ts-expect-error -- TODO TYPES `prop` is missing (raws.prop && raws.prop.raw) || decl.prop, + // @ts-expect-error -- TODO TYPES `prop` is missing raws.prop && raws.prop.suffix, raws.between || ':', + // @ts-expect-error -- TODO TYPES `prefix` is missing raws.value && raws.value.prefix, ].reduce((count, str) => { if (str) { diff --git a/lib/utils/getAtRuleParams.js b/lib/utils/getAtRuleParams.js index d099530622..7e56516b69 100644 --- a/lib/utils/getAtRuleParams.js +++ b/lib/utils/getAtRuleParams.js @@ -5,8 +5,6 @@ * @returns {string} */ module.exports = function getAtRuleParams(atRule) { - // Casting this to any because 'params' does not exist on type 'NodeRaws' - /** @type {any} */ const raws = atRule.raws; return (raws.params && raws.params.raw) || atRule.params; diff --git a/lib/utils/getDeclarationValue.js b/lib/utils/getDeclarationValue.js index 8273c0365f..f6ff980f7b 100644 --- a/lib/utils/getDeclarationValue.js +++ b/lib/utils/getDeclarationValue.js @@ -5,8 +5,6 @@ * @returns {string} */ module.exports = function getDeclarationValue(decl) { - // Casting this to any because 'value' does not exist on type 'NodeRaws' - /** @type {any} */ const raws = decl.raws; return (raws.value && raws.value.raw) || decl.value; diff --git a/lib/utils/getRuleSelector.js b/lib/utils/getRuleSelector.js index 24505234fa..ab84445b31 100644 --- a/lib/utils/getRuleSelector.js +++ b/lib/utils/getRuleSelector.js @@ -4,12 +4,8 @@ * @param {import('postcss').Rule} ruleNode * @returns {string} */ -function getRuleSelector(ruleNode) { - // Casting this to any because 'value' does not exist on type 'NodeRaws' - /** @type {any} */ +module.exports = function getRuleSelector(ruleNode) { const raws = ruleNode.raws; return (raws.selector && raws.selector.raw) || ruleNode.selector; -} - -module.exports = getRuleSelector; +}; diff --git a/lib/utils/isStandardSyntaxRule.js b/lib/utils/isStandardSyntaxRule.js index dc999c52e0..0772c19958 100644 --- a/lib/utils/isStandardSyntaxRule.js +++ b/lib/utils/isStandardSyntaxRule.js @@ -13,8 +13,6 @@ module.exports = function (rule) { return false; } - // Casting this to any because 'selector' does not exist on type 'NodeRaws' - /** @type {any} */ const raws = rule.raws; // Get full selector @@ -25,7 +23,7 @@ module.exports = function (rule) { } // Called Less mixin (e.g. a { .mixin() }) - // @ts-ignore TODO TYPES support LESS and SASS types somehow + // @ts-expect-error -- TODO TYPES support LESS and SASS types somehow if (rule.mixin) { return false; } @@ -42,7 +40,7 @@ module.exports = function (rule) { // Ignore mixin or &:extend rule // https://github.com/shellscape/postcss-less/blob/master/lib/less-parser.js#L52 - // @ts-ignore TODO TYPES support LESS and SASS types somehow + // @ts-expect-error -- TODO TYPES support LESS and SASS types somehow if (rule.params && rule.params[0]) { return false; } diff --git a/lib/utils/setAtRuleParams.js b/lib/utils/setAtRuleParams.js index 8ec711a686..eaf17c8776 100644 --- a/lib/utils/setAtRuleParams.js +++ b/lib/utils/setAtRuleParams.js @@ -8,8 +8,6 @@ * @returns {AtRule} The atRulearation that was passed in. */ module.exports = function setAtRuleParams(atRule, params) { - // Casting this to any because 'params' does not exist on type 'NodeRaws' - /** @type {any} */ const raws = atRule.raws; if (raws.params) { diff --git a/lib/utils/setDeclarationValue.js b/lib/utils/setDeclarationValue.js index 038e818d55..57b5fecf6d 100644 --- a/lib/utils/setDeclarationValue.js +++ b/lib/utils/setDeclarationValue.js @@ -8,8 +8,6 @@ * @returns {Declaration} The declaration that was passed in. */ module.exports = function setDeclarationValue(decl, value) { - // Casting this to any because 'value' does not exist on type 'NodeRaws' - /** @type {any} */ const raws = decl.raws; if (raws.value) { diff --git a/lib/utils/validateTypes.js b/lib/utils/validateTypes.js index 407766dc8f..d58372ddb6 100644 --- a/lib/utils/validateTypes.js +++ b/lib/utils/validateTypes.js @@ -2,8 +2,8 @@ /** * Checks if the value is a boolean or a Boolean object. - * @param {any} value - * @returns {boolean} + * @param {unknown} value + * @returns {value is boolean} */ function isBoolean(value) { return typeof value === 'boolean' || value instanceof Boolean; @@ -11,8 +11,8 @@ function isBoolean(value) { /** * Checks if the value is a number or a Number object. - * @param {any} value - * @returns {boolean} + * @param {unknown} value + * @returns {value is number} */ function isNumber(value) { return typeof value === 'number' || value instanceof Number; @@ -20,8 +20,8 @@ function isNumber(value) { /** * Checks if the value is a RegExp object. - * @param {any} value - * @returns {boolean} + * @param {unknown} value + * @returns {value is RegExp} */ function isRegExp(value) { return value instanceof RegExp; @@ -29,8 +29,8 @@ function isRegExp(value) { /** * Checks if the value is a string or a String object. - * @param {any} value - * @returns {boolean} + * @param {unknown} value + * @returns {value is string} */ function isString(value) { return typeof value === 'string' || value instanceof String; From 57a7a4f8a4d958871d2fb26fe6fa4ee87eaf4344 Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Sat, 17 Jul 2021 17:34:06 +0900 Subject: [PATCH 062/194] Run CI on v14 branch (#5390) --- .github/workflows/code-scanning.yml | 2 ++ .github/workflows/linting.yml | 1 + .github/workflows/testing.yml | 1 + 3 files changed, 4 insertions(+) diff --git a/.github/workflows/code-scanning.yml b/.github/workflows/code-scanning.yml index db3c0cc575..c41b949701 100644 --- a/.github/workflows/code-scanning.yml +++ b/.github/workflows/code-scanning.yml @@ -5,10 +5,12 @@ on: branches: - master - '!dependabot/**' + - v14 # TODO: Remove when releasing v14. pull_request: # The branches below must be a subset of the branches above branches: - master + - v14 # TODO: Remove when releasing v14. schedule: - cron: '0 7 * * 1' diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 1f6d397aee..d325a0bbad 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -5,6 +5,7 @@ on: branches: - master - 'dependabot/**' + - v14 # TODO: Remove when releasing v14. pull_request: branches: - '**' diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 6c4423d981..de06f1fb6b 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -5,6 +5,7 @@ on: branches: - master - 'dependabot/**' + - v14 # TODO: Remove when releasing v14. pull_request: branches: - '**' From 47716e5869bc2c119ba3e1a528c9590c3efb35fe Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Sat, 17 Jul 2021 17:35:52 +0900 Subject: [PATCH 063/194] Refactor `validateOptions()` utility (#5391) - Improve types avoiding `any` - Use `for...of` instead of `forEach` (`continue` is clearer than `return`) - Use `flat()` instead of `[].concat()` idiom (avoiding type errors) --- lib/utils/validateOptions.js | 49 ++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/lib/utils/validateOptions.js b/lib/utils/validateOptions.js index 677664635d..454b16c938 100644 --- a/lib/utils/validateOptions.js +++ b/lib/utils/validateOptions.js @@ -5,7 +5,11 @@ const { isPlainObject } = require('is-plain-object'); const IGNORED_OPTIONS = new Set(['severity', 'message', 'reportDisables']); -/** @typedef {{possible: any, actual: any, optional?: boolean}} Options */ +/** @typedef {(value: unknown) => boolean} PossibleFunc */ + +/** @typedef {boolean | number | string | PossibleFunc} Possible */ + +/** @typedef {{possible: (undefined | PossibleFunc | Possible[] | Record), actual: unknown, optional?: boolean}} Options */ /** * Validate a rule's options. @@ -27,8 +31,7 @@ const IGNORED_OPTIONS = new Set(['severity', 'message', 'reportDisables']); * - `optional` (optional): If this is `true`, `actual` can be undefined. * @return {boolean} Whether or not the options are valid (true = valid) */ - -module.exports = function (result, ruleName, ...optionDescriptions) { +module.exports = function validateOptions(result, ruleName, ...optionDescriptions) { let noErrors = true; optionDescriptions.forEach((optionDescription) => { @@ -57,7 +60,7 @@ module.exports = function (result, ruleName, ...optionDescriptions) { /** * @param {Options} opts * @param {string} ruleName - * @param {(s: string) => void} complain + * @param {(message: string) => void} complain */ function validate(opts, ruleName, complain) { const possible = opts.possible; @@ -109,19 +112,19 @@ function validate(opts, ruleName, complain) { // If `possible` is an array instead of an object ... if (Array.isArray(possible)) { - [].concat(actual).forEach((a) => { + for (const a of [actual].flat()) { if (isValid(possible, a)) { - return; + continue; } complain(`Invalid option value "${String(a)}" for rule "${ruleName}"`); - }); + } return; } // If actual is NOT an object ... - if (!isPlainObject(actual)) { + if (!isPlainObject(actual) || typeof actual !== 'object' || actual == null) { complain( `Invalid option value ${JSON.stringify(actual)} for rule "${ruleName}": should be an object`, ); @@ -129,38 +132,36 @@ function validate(opts, ruleName, complain) { return; } - Object.keys(actual).forEach((optionName) => { + for (const [optionName, optionValue] of Object.entries(actual)) { if (IGNORED_OPTIONS.has(optionName)) { - return; + continue; } - if (!possible[optionName]) { + const possibleValue = possible && possible[optionName]; + + if (!possibleValue) { complain(`Invalid option name "${optionName}" for rule "${ruleName}"`); - return; + continue; } - const actualOptionValue = actual[optionName]; - - [].concat(actualOptionValue).forEach((a) => { - if (isValid(possible[optionName], a)) { - return; + for (const a of [optionValue].flat()) { + if (isValid(possibleValue, a)) { + continue; } complain(`Invalid value "${a}" for option "${optionName}" of rule "${ruleName}"`); - }); - }); + } + } } /** - * @param {any|Function} possible - * @param {any} actual + * @param {Possible | Possible[]} possible + * @param {unknown} actual * @returns {boolean} */ function isValid(possible, actual) { - const possibleList = /** @type {Array} */ ([]).concat(possible); - - for (const possibility of possibleList) { + for (const possibility of [possible].flat()) { if (typeof possibility === 'function' && possibility(actual)) { return true; } From 97d51515a97c72b44ad888ac580112326086b30f Mon Sep 17 00:00:00 2001 From: Jaye Renzo Date: Mon, 26 Jul 2021 17:17:12 +0800 Subject: [PATCH 064/194] Fix false positives for Less maps in property-no-unknown (#5381) * fix false positives for Less maps * Add test to isStandardSyntaxDeclaration.test.js * Update lib/utils/isStandardSyntaxDeclaration.js Co-authored-by: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Co-authored-by: Jaye Co-authored-by: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> --- lib/rules/property-no-unknown/__tests__/index.js | 4 ++++ lib/utils/__tests__/isStandardSyntaxDeclaration.test.js | 4 ++++ lib/utils/isStandardSyntaxDeclaration.js | 5 +++++ 3 files changed, 13 insertions(+) diff --git a/lib/rules/property-no-unknown/__tests__/index.js b/lib/rules/property-no-unknown/__tests__/index.js index 14bc4cbb64..a5c6bb6900 100644 --- a/lib/rules/property-no-unknown/__tests__/index.js +++ b/lib/rules/property-no-unknown/__tests__/index.js @@ -124,6 +124,10 @@ testRule({ code: '.foo { transform+_: rotate(15deg); }', description: 'Append property value with space using +_', }, + { + code: '@foo: { prop: red; }', + description: 'ignore LESS map props', + }, ], }); diff --git a/lib/utils/__tests__/isStandardSyntaxDeclaration.test.js b/lib/utils/__tests__/isStandardSyntaxDeclaration.test.js index 3007100ace..7675150b89 100644 --- a/lib/utils/__tests__/isStandardSyntaxDeclaration.test.js +++ b/lib/utils/__tests__/isStandardSyntaxDeclaration.test.js @@ -134,6 +134,10 @@ describe('isStandardSyntaxDeclaration', () => { it('less &:extend', () => { expect(isStandardSyntaxDeclaration(lessDecl('a { &:extend(b) }'))).toBe(false); }); + + it('less map', () => { + expect(isStandardSyntaxDeclaration(lessDecl('@map: { key: value; }'))).toBe(false); + }); }); function decl(css, parser = postcss) { diff --git a/lib/utils/isStandardSyntaxDeclaration.js b/lib/utils/isStandardSyntaxDeclaration.js index 22380cfe04..0552a69138 100644 --- a/lib/utils/isStandardSyntaxDeclaration.js +++ b/lib/utils/isStandardSyntaxDeclaration.js @@ -41,6 +41,11 @@ module.exports = function (decl) { return false; } + // Less map declaration + if (parent && parent.type === 'atrule' && parent.raws.afterName === ':') { + return false; + } + // Sass nested properties (e.g. border: { style: solid; color: red; }) if ( // @ts-ignore TODO TYPES selector does not exists From 6d2e92aa552b263a592e3d3ae03830959861a284 Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Mon, 26 Jul 2021 10:19:15 +0100 Subject: [PATCH 065/194] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ec04ee85c..861f04355f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ All notable changes to this project are documented in this file. - Added: `ignoreFunctions: []` to `length-zero-no-unit` ([#5314](https://github.com/stylelint/stylelint/pull/5314)). - Fixed: "No files matching the pattern" when using backslash paths on Windows ([#5386](https://github.com/stylelint/stylelint/pull/5386)). - Fixed: `length-zero-no-unit` false positives for `flex` property ([#5315](https://github.com/stylelint/stylelint/pull/5315)). +- Fixed: `property-no-unknown` false positives for Less maps ([#5381](https://github.com/stylelint/stylelint/pull/5381)). ## 13.13.1 From 04be2a24de9503798562488b7e29e9e1f33fca59 Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Mon, 26 Jul 2021 18:27:32 +0900 Subject: [PATCH 066/194] Improve types for `at-rule-*` rules (#5418) This change removes `// @ts-nocheck` comments in `at-rule-*` rules. --- lib/lintPostcssResult.js | 2 +- lib/rules/alpha-value-notation/index.js | 92 +++++++++++++------ lib/rules/at-rule-allowed-list/index.js | 16 ++-- lib/rules/at-rule-disallowed-list/index.js | 16 ++-- lib/rules/at-rule-empty-line-before/index.js | 44 +++++---- lib/rules/at-rule-name-case/index.js | 12 ++- lib/rules/at-rule-name-newline-after/index.js | 11 +-- lib/rules/at-rule-name-space-after/index.js | 15 +-- lib/rules/at-rule-no-unknown/index.js | 13 ++- lib/rules/at-rule-no-vendor-prefix/index.js | 11 +-- .../at-rule-property-required-list/index.js | 14 +-- .../at-rule-semicolon-newline-after/index.js | 11 +-- .../at-rule-semicolon-space-before/index.js | 11 +-- lib/rules/atRuleNameSpaceChecker.js | 18 +++- lib/utils/addEmptyLineBefore.js | 15 ++- .../getPreviousNonSharedLineCommentNode.js | 4 +- lib/utils/hasEmptyLine.js | 3 +- lib/utils/removeEmptyLinesBefore.js | 12 +-- lib/utils/report.js | 7 +- lib/utils/ruleMessages.js | 20 ++-- lib/utils/validateOptions.js | 2 +- lib/utils/whitespaceChecker.js | 2 +- types/stylelint/index.d.ts | 11 ++- 23 files changed, 212 insertions(+), 150 deletions(-) diff --git a/lib/lintPostcssResult.js b/lib/lintPostcssResult.js index bbc7472a8f..648076d82d 100644 --- a/lib/lintPostcssResult.js +++ b/lib/lintPostcssResult.js @@ -22,7 +22,7 @@ function lintPostcssResult(stylelintOptions, postcssResult, config) { postcssResult.stylelint.quiet = config.quiet; postcssResult.stylelint.config = config; - /** @type {string} */ + /** @type {string | undefined} */ let newline; const postcssDoc = postcssResult.root; diff --git a/lib/rules/alpha-value-notation/index.js b/lib/rules/alpha-value-notation/index.js index 18bbc83dc7..5c4dcf0ae9 100644 --- a/lib/rules/alpha-value-notation/index.js +++ b/lib/rules/alpha-value-notation/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const valueParser = require('postcss-value-parser'); @@ -23,7 +21,8 @@ const messages = ruleMessages(ruleName, { const ALPHA_PROPS = new Set(['opacity', 'shape-image-threshold']); const ALPHA_FUNCS = new Set(['hsl', 'hsla', 'hwb', 'lab', 'lch', 'rgb', 'rgba']); -function rule(primary, options, context) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, secondaryOptions, context) => { return (root, result) => { const validOptions = validateOptions( result, @@ -33,7 +32,7 @@ function rule(primary, options, context) { possible: ['number', 'percentage'], }, { - actual: options, + actual: secondaryOptions, possible: { exceptProperties: [isString, isRegExp], }, @@ -43,11 +42,23 @@ function rule(primary, options, context) { if (!validOptions) return; + const optionFuncs = Object.freeze({ + number: { + expFunc: isNumber, + fixFunc: asNumber, + }, + percentage: { + expFunc: isPercentage, + fixFunc: asPercentage, + }, + }); + root.walkDecls((decl) => { let needsFix = false; const parsedValue = valueParser(getDeclarationValue(decl)); parsedValue.walk((node) => { + /** @type {import('postcss-value-parser').Node | undefined} */ let alpha; if (ALPHA_PROPS.has(decl.prop.toLowerCase())) { @@ -68,21 +79,15 @@ function rule(primary, options, context) { if (!isNumber(value) && !isPercentage(value)) return; - const optionFuncs = { - number: { - expFunc: isNumber, - fixFunc: asNumber, - }, - percentage: { - expFunc: isPercentage, - fixFunc: asPercentage, - }, - }; - + /** @type {'number' | 'percentage'} */ let expectation = primary; - if (optionsMatches(options, 'exceptProperties', decl.prop)) { - expectation = Object.keys(optionFuncs).filter((key) => key !== expectation); + if (optionsMatches(secondaryOptions, 'exceptProperties', decl.prop)) { + if (expectation === 'number') { + expectation = 'percentage'; + } else if (expectation === 'percentage') { + expectation = 'number'; + } } if (optionFuncs[expectation].expFunc(value)) return; @@ -91,7 +96,7 @@ function rule(primary, options, context) { const unfixed = value; if (context.fix) { - alpha.value = fixed; + alpha.value = String(fixed); needsFix = true; return; @@ -111,22 +116,45 @@ function rule(primary, options, context) { } }); }; -} +}; +/** + * @param {string} value + * @returns {string | undefined} + */ function asPercentage(value) { - return `${Number((value * 100).toPrecision(3))}%`; + const number = Number(value); + + return `${Number((number * 100).toPrecision(3))}%`; } +/** + * @param {string} value + * @returns {string | undefined} + */ function asNumber(value) { - const { number } = valueParser.unit(value); + const dimension = valueParser.unit(value); + + if (!dimension) return undefined; + + const number = Number(dimension.number); - return Number((number / 100).toPrecision(3)); + return Number((number / 100).toPrecision(3)).toString(); } +/** + * @template {import('postcss-value-parser').Node} T + * @param {T} node + * @returns {T | undefined} + */ function findAlphaInValue(node) { - return node.type === 'word' || node.type === 'function' ? node : false; + return node.type === 'word' || node.type === 'function' ? node : undefined; } +/** + * @param {import('postcss-value-parser').FunctionNode} node + * @returns {import('postcss-value-parser').Node | undefined} + */ function findAlphaInFunction(node) { const args = node.nodes.filter(({ type }) => type === 'word' || type === 'function'); @@ -140,19 +168,27 @@ function findAlphaInFunction(node) { return nodesAfterSlash.find(({ type }) => type === 'word'); } - return false; + return undefined; } +/** + * @param {string} value + * @returns {boolean} + */ function isPercentage(value) { - const { unit } = valueParser.unit(value); + const dimension = valueParser.unit(value); - return unit && unit === '%'; + return dimension && dimension.unit === '%'; } +/** + * @param {string} value + * @returns {boolean} + */ function isNumber(value) { - const { unit } = valueParser.unit(value); + const dimension = valueParser.unit(value); - return unit === ''; + return dimension && dimension.unit === ''; } rule.ruleName = ruleName; diff --git a/lib/rules/at-rule-allowed-list/index.js b/lib/rules/at-rule-allowed-list/index.js index f2b76b87e5..f0c1d481f9 100644 --- a/lib/rules/at-rule-allowed-list/index.js +++ b/lib/rules/at-rule-allowed-list/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const isStandardSyntaxAtRule = require('../../utils/isStandardSyntaxAtRule'); @@ -15,13 +13,14 @@ const messages = ruleMessages(ruleName, { rejected: (name) => `Unexpected at-rule "${name}"`, }); -function rule(listInput) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary) => { // To allow for just a string as a parameter (not only arrays of strings) - const list = [].concat(listInput); + const primaryValues = [primary].flat(); return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: list, + actual: primaryValues, possible: [isString], }); @@ -29,6 +28,9 @@ function rule(listInput) { return; } + /** @type {string[]} */ + const atRuleNames = primaryValues; + root.walkAtRules((atRule) => { const name = atRule.name; @@ -36,7 +38,7 @@ function rule(listInput) { return; } - if (list.includes(vendor.unprefixed(name).toLowerCase())) { + if (atRuleNames.includes(vendor.unprefixed(name).toLowerCase())) { return; } @@ -48,7 +50,7 @@ function rule(listInput) { }); }); }; -} +}; rule.primaryOptionArray = true; diff --git a/lib/rules/at-rule-disallowed-list/index.js b/lib/rules/at-rule-disallowed-list/index.js index da4f082921..f57dd8d50d 100644 --- a/lib/rules/at-rule-disallowed-list/index.js +++ b/lib/rules/at-rule-disallowed-list/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const isStandardSyntaxAtRule = require('../../utils/isStandardSyntaxAtRule'); @@ -15,13 +13,14 @@ const messages = ruleMessages(ruleName, { rejected: (name) => `Unexpected at-rule "${name}"`, }); -function rule(listInput) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary) => { // To allow for just a string as a parameter (not only arrays of strings) - const list = [].concat(listInput); + const primaryValues = [primary].flat(); return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: list, + actual: primaryValues, possible: [isString], }); @@ -29,6 +28,9 @@ function rule(listInput) { return; } + /** @type {string[]} */ + const atRuleNames = primaryValues; + root.walkAtRules((atRule) => { const name = atRule.name; @@ -36,7 +38,7 @@ function rule(listInput) { return; } - if (!list.includes(vendor.unprefixed(name).toLowerCase())) { + if (!atRuleNames.includes(vendor.unprefixed(name).toLowerCase())) { return; } @@ -48,7 +50,7 @@ function rule(listInput) { }); }); }; -} +}; rule.primaryOptionArray = true; diff --git a/lib/rules/at-rule-empty-line-before/index.js b/lib/rules/at-rule-empty-line-before/index.js index faca2ff966..17fdedb7f6 100644 --- a/lib/rules/at-rule-empty-line-before/index.js +++ b/lib/rules/at-rule-empty-line-before/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const addEmptyLineBefore = require('../../utils/addEmptyLineBefore'); @@ -25,17 +23,18 @@ const messages = ruleMessages(ruleName, { rejected: 'Unexpected empty line before at-rule', }); -function rule(expectation, options, context) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, secondaryOptions, context) => { return (root, result) => { const validOptions = validateOptions( result, ruleName, { - actual: expectation, + actual: primary, possible: ['always', 'never'], }, { - actual: options, + actual: secondaryOptions, possible: { except: [ 'after-same-name', @@ -61,8 +60,11 @@ function rule(expectation, options, context) { return; } + /** @type {'always' | 'never'} */ + const expectation = primary; + root.walkAtRules((atRule) => { - const isNested = atRule.parent.type !== 'root'; + const isNested = atRule.parent && atRule.parent.type !== 'root'; // Ignore the first node if (isFirstNodeOfRoot(atRule)) { @@ -74,39 +76,39 @@ function rule(expectation, options, context) { } // Return early if at-rule is to be ignored - if (optionsMatches(options, 'ignoreAtRules', atRule.name)) { + if (optionsMatches(secondaryOptions, 'ignoreAtRules', atRule.name)) { return; } // Optionally ignore the expectation if the node is blockless if ( - optionsMatches(options, 'ignore', 'blockless-after-blockless') && + optionsMatches(secondaryOptions, 'ignore', 'blockless-after-blockless') && isBlocklessAtRuleAfterBlocklessAtRule(atRule) ) { return; } // Optionally ignore the node if it is the first nested - if (optionsMatches(options, 'ignore', 'first-nested') && isFirstNested(atRule)) { + if (optionsMatches(secondaryOptions, 'ignore', 'first-nested') && isFirstNested(atRule)) { return; } // Optionally ignore the expectation if the node is blockless // and following another blockless at-rule with the same name if ( - optionsMatches(options, 'ignore', 'blockless-after-same-name-blockless') && + optionsMatches(secondaryOptions, 'ignore', 'blockless-after-same-name-blockless') && isBlocklessAtRuleAfterSameNameBlocklessAtRule(atRule) ) { return; } // Optionally ignore the expectation if the node is inside a block - if (optionsMatches(options, 'ignore', 'inside-block') && isNested) { + if (optionsMatches(secondaryOptions, 'ignore', 'inside-block') && isNested) { return; } // Optionally ignore the expectation if a comment precedes this node - if (optionsMatches(options, 'ignore', 'after-comment') && isAfterComment(atRule)) { + if (optionsMatches(secondaryOptions, 'ignore', 'after-comment') && isAfterComment(atRule)) { return; } @@ -115,13 +117,13 @@ function rule(expectation, options, context) { // Optionally reverse the expectation if any exceptions apply if ( - (optionsMatches(options, 'except', 'after-same-name') && + (optionsMatches(secondaryOptions, 'except', 'after-same-name') && isAtRuleAfterSameNameAtRule(atRule)) || - (optionsMatches(options, 'except', 'inside-block') && isNested) || - (optionsMatches(options, 'except', 'first-nested') && isFirstNested(atRule)) || - (optionsMatches(options, 'except', 'blockless-after-blockless') && + (optionsMatches(secondaryOptions, 'except', 'inside-block') && isNested) || + (optionsMatches(secondaryOptions, 'except', 'first-nested') && isFirstNested(atRule)) || + (optionsMatches(secondaryOptions, 'except', 'blockless-after-blockless') && isBlocklessAtRuleAfterBlocklessAtRule(atRule)) || - (optionsMatches(options, 'except', 'blockless-after-same-name-blockless') && + (optionsMatches(secondaryOptions, 'except', 'blockless-after-same-name-blockless') && isBlocklessAtRuleAfterSameNameBlocklessAtRule(atRule)) ) { expectEmptyLineBefore = !expectEmptyLineBefore; @@ -133,7 +135,7 @@ function rule(expectation, options, context) { } // Fix - if (context.fix) { + if (context.fix && context.newline) { if (expectEmptyLineBefore) { addEmptyLineBefore(atRule, context.newline); } else { @@ -148,11 +150,15 @@ function rule(expectation, options, context) { report({ message, node: atRule, result, ruleName }); }); }; -} +}; +/** + * @param {import('postcss').AtRule} atRule + */ function isAtRuleAfterSameNameAtRule(atRule) { const previousNode = getPreviousNonSharedLineCommentNode(atRule); + // @ts-expect-error -- TS2339: Property 'name' does not exist on type 'Node'. return previousNode && previousNode.type === 'atrule' && previousNode.name === atRule.name; } diff --git a/lib/rules/at-rule-name-case/index.js b/lib/rules/at-rule-name-case/index.js index 73d99e8555..994b28678d 100644 --- a/lib/rules/at-rule-name-case/index.js +++ b/lib/rules/at-rule-name-case/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const isStandardSyntaxAtRule = require('../../utils/isStandardSyntaxAtRule'); @@ -13,10 +11,11 @@ const messages = ruleMessages(ruleName, { expected: (actual, expected) => `Expected "${actual}" to be "${expected}"`, }); -function rule(expectation, options, context) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, _secondary, context) => { return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: ['lower', 'upper'], }); @@ -24,6 +23,9 @@ function rule(expectation, options, context) { return; } + /** @type {'lower' | 'upper'} */ + const expectation = primary; + root.walkAtRules((atRule) => { if (!isStandardSyntaxAtRule(atRule)) { return; @@ -51,7 +53,7 @@ function rule(expectation, options, context) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/at-rule-name-newline-after/index.js b/lib/rules/at-rule-name-newline-after/index.js index a1392c6c94..b207339c5e 100644 --- a/lib/rules/at-rule-name-newline-after/index.js +++ b/lib/rules/at-rule-name-newline-after/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const atRuleNameSpaceChecker = require('../atRuleNameSpaceChecker'); @@ -13,12 +11,13 @@ const messages = ruleMessages(ruleName, { expectedAfter: (name) => `Expected newline after at-rule name "${name}"`, }); -function rule(expectation) { - const checker = whitespaceChecker('newline', expectation, messages); +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary) => { + const checker = whitespaceChecker('newline', primary, messages); return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: ['always', 'always-multi-line'], }); @@ -33,7 +32,7 @@ function rule(expectation) { checkedRuleName: ruleName, }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/at-rule-name-space-after/index.js b/lib/rules/at-rule-name-space-after/index.js index 4fa15f7d49..c413312aad 100644 --- a/lib/rules/at-rule-name-space-after/index.js +++ b/lib/rules/at-rule-name-space-after/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const atRuleNameSpaceChecker = require('../atRuleNameSpaceChecker'); @@ -13,12 +11,13 @@ const messages = ruleMessages(ruleName, { expectedAfter: (name) => `Expected single space after at-rule name "${name}"`, }); -function rule(expectation, options, context) { - const checker = whitespaceChecker('space', expectation, messages); +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, _secondary, context) => { + const checker = whitespaceChecker('space', primary, messages); return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: ['always', 'always-single-line'], }); @@ -33,12 +32,14 @@ function rule(expectation, options, context) { checkedRuleName: ruleName, fix: context.fix ? (atRule) => { - atRule.raws.afterName = atRule.raws.afterName.replace(/^\s*/, ' '); + if (typeof atRule.raws.afterName === 'string') { + atRule.raws.afterName = atRule.raws.afterName.replace(/^\s*/, ' '); + } } : null, }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/at-rule-no-unknown/index.js b/lib/rules/at-rule-no-unknown/index.js index fd0574e9db..7a776a1ccb 100644 --- a/lib/rules/at-rule-no-unknown/index.js +++ b/lib/rules/at-rule-no-unknown/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const isStandardSyntaxAtRule = require('../../utils/isStandardSyntaxAtRule'); @@ -17,14 +15,15 @@ const messages = ruleMessages(ruleName, { rejected: (atRule) => `Unexpected unknown at-rule "${atRule}"`, }); -function rule(actual, options) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, secondaryOptions) => { return (root, result) => { const validOptions = validateOptions( result, ruleName, - { actual }, + { actual: primary }, { - actual: options, + actual: secondaryOptions, possible: { ignoreAtRules: [isString, isRegExp], }, @@ -44,7 +43,7 @@ function rule(actual, options) { const name = atRule.name; // Return early if at-rule is to be ignored - if (optionsMatches(options, 'ignoreAtRules', atRule.name)) { + if (optionsMatches(secondaryOptions, 'ignoreAtRules', atRule.name)) { return; } @@ -60,7 +59,7 @@ function rule(actual, options) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/at-rule-no-vendor-prefix/index.js b/lib/rules/at-rule-no-vendor-prefix/index.js index c3036f1974..2c61eca940 100644 --- a/lib/rules/at-rule-no-vendor-prefix/index.js +++ b/lib/rules/at-rule-no-vendor-prefix/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const isAutoprefixable = require('../../utils/isAutoprefixable'); @@ -14,9 +12,10 @@ const messages = ruleMessages(ruleName, { rejected: (p) => `Unexpected vendor-prefixed at-rule "@${p}"`, }); -function rule(actual, options, context) { - return function (root, result) { - const validOptions = validateOptions(result, ruleName, { actual }); +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, _secondary, context) => { + return (root, result) => { + const validOptions = validateOptions(result, ruleName, { actual: primary }); if (!validOptions) { return; @@ -51,7 +50,7 @@ function rule(actual, options, context) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/at-rule-property-required-list/index.js b/lib/rules/at-rule-property-required-list/index.js index 0d2470ac0d..d9b8c5095d 100644 --- a/lib/rules/at-rule-property-required-list/index.js +++ b/lib/rules/at-rule-property-required-list/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const isStandardSyntaxAtRule = require('../../utils/isStandardSyntaxAtRule'); @@ -14,10 +12,11 @@ const messages = ruleMessages(ruleName, { expected: (property, atRule) => `Expected property "${property}" for at-rule "${atRule}"`, }); -function rule(list) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary) => { return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: list, + actual: primary, possible: [isPlainObject], }); @@ -25,6 +24,9 @@ function rule(list) { return; } + /** @type {Record} */ + const list = primary; + root.walkAtRules((atRule) => { if (!isStandardSyntaxAtRule(atRule)) { return; @@ -41,7 +43,7 @@ function rule(list) { const propertyName = property.toLowerCase(); const hasProperty = nodes.find( - ({ type, prop }) => type === 'decl' && prop.toLowerCase() === propertyName, + (node) => node.type === 'decl' && node.prop.toLowerCase() === propertyName, ); if (hasProperty) { @@ -57,7 +59,7 @@ function rule(list) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/at-rule-semicolon-newline-after/index.js b/lib/rules/at-rule-semicolon-newline-after/index.js index c11d764dbb..c193d0eab7 100644 --- a/lib/rules/at-rule-semicolon-newline-after/index.js +++ b/lib/rules/at-rule-semicolon-newline-after/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const hasBlock = require('../../utils/hasBlock'); @@ -17,12 +15,13 @@ const messages = ruleMessages(ruleName, { expectedAfter: () => 'Expected newline after ";"', }); -function rule(actual, secondary, context) { - const checker = whitespaceChecker('newline', actual, messages); +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, _secondary, context) => { + const checker = whitespaceChecker('newline', primary, messages); return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual, + actual: primary, possible: ['always'], }); @@ -71,7 +70,7 @@ function rule(actual, secondary, context) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/at-rule-semicolon-space-before/index.js b/lib/rules/at-rule-semicolon-space-before/index.js index 460492d7d6..710de60d99 100644 --- a/lib/rules/at-rule-semicolon-space-before/index.js +++ b/lib/rules/at-rule-semicolon-space-before/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const hasBlock = require('../../utils/hasBlock'); @@ -17,12 +15,13 @@ const messages = ruleMessages(ruleName, { rejectedBefore: () => 'Unexpected whitespace before ";"', }); -function rule(expectation) { - const checker = whitespaceChecker('space', expectation, messages); +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary) => { + const checker = whitespaceChecker('space', primary, messages); return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: ['always', 'never'], }); @@ -56,7 +55,7 @@ function rule(expectation) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/atRuleNameSpaceChecker.js b/lib/rules/atRuleNameSpaceChecker.js index 559cb5ebac..e9213a453a 100644 --- a/lib/rules/atRuleNameSpaceChecker.js +++ b/lib/rules/atRuleNameSpaceChecker.js @@ -1,11 +1,18 @@ -// @ts-nocheck - 'use strict'; const isStandardSyntaxAtRule = require('../utils/isStandardSyntaxAtRule'); const report = require('../utils/report'); -module.exports = function (options) { +/** + * @param {{ + * root: import('postcss').Root, + * locationChecker: (opts: { source: string, index: number, err: (msg: string) => void, errTarget: string }) => void, + * result: import('stylelint').PostcssResult, + * checkedRuleName: string, + * fix?: ((atRule: import('postcss').AtRule) => void) | null, + * }} options + */ +module.exports = function atRuleNameSpaceChecker(options) { options.root.walkAtRules((atRule) => { if (!isStandardSyntaxAtRule(atRule)) { return; @@ -18,6 +25,11 @@ module.exports = function (options) { ); }); + /** + * @param {string} source + * @param {number} index + * @param {import('postcss').AtRule} node + */ function checkColon(source, index, node) { options.locationChecker({ source, diff --git a/lib/utils/addEmptyLineBefore.js b/lib/utils/addEmptyLineBefore.js index 3dd4b1c2a2..54fd1cf88e 100644 --- a/lib/utils/addEmptyLineBefore.js +++ b/lib/utils/addEmptyLineBefore.js @@ -1,15 +1,14 @@ 'use strict'; -/** @typedef {import('postcss').ChildNode} ChildNode */ - /** * Add an empty line before a node. Mutates the node. * - * @param {ChildNode} node - * @param {'\n' | '\r\n'} newline - * @returns {ChildNode} + * @template {import('postcss').ChildNode} T + * @param {T} node + * @param {string} newline + * @returns {T} */ -function addEmptyLineBefore(node, newline) { +module.exports = function addEmptyLineBefore(node, newline) { if (node.raws.before === undefined) { return node; } @@ -21,6 +20,4 @@ function addEmptyLineBefore(node, newline) { } return node; -} - -module.exports = addEmptyLineBefore; +}; diff --git a/lib/utils/getPreviousNonSharedLineCommentNode.js b/lib/utils/getPreviousNonSharedLineCommentNode.js index 5933af9db4..6528dd7e3a 100644 --- a/lib/utils/getPreviousNonSharedLineCommentNode.js +++ b/lib/utils/getPreviousNonSharedLineCommentNode.js @@ -10,8 +10,8 @@ function getNodeLine(node) { } /** - * @param {import('postcss').Node | void} node - * @returns {Node | void} + * @param {Node | undefined} node + * @returns {Node | undefined} */ module.exports = function getPreviousNonSharedLineCommentNode(node) { if (node === undefined) { diff --git a/lib/utils/hasEmptyLine.js b/lib/utils/hasEmptyLine.js index de05af4248..5f3780bc5c 100644 --- a/lib/utils/hasEmptyLine.js +++ b/lib/utils/hasEmptyLine.js @@ -3,8 +3,7 @@ /** * Check if a string contains at least one empty line * - * @param {string} string - * + * @param {string | undefined} string * @returns {boolean} */ module.exports = function (string) { diff --git a/lib/utils/removeEmptyLinesBefore.js b/lib/utils/removeEmptyLinesBefore.js index 160e258003..06b018e128 100644 --- a/lib/utils/removeEmptyLinesBefore.js +++ b/lib/utils/removeEmptyLinesBefore.js @@ -3,13 +3,13 @@ /** * Remove empty lines before a node. Mutates the node. * - * @param {import('postcss').Node} node - * @param {'\n' | '\r\n'} newline + * @template {import('postcss').Node} T + * @param {T} node + * @param {string} newline + * @returns {T} */ -function removeEmptyLinesBefore(node, newline) { +module.exports = function removeEmptyLinesBefore(node, newline) { node.raws.before = node.raws.before ? node.raws.before.replace(/(\r?\n\s*\r?\n)+/g, newline) : ''; return node; -} - -module.exports = removeEmptyLinesBefore; +}; diff --git a/lib/utils/report.js b/lib/utils/report.js index b35c42cf43..ce025d07fb 100644 --- a/lib/utils/report.js +++ b/lib/utils/report.js @@ -4,9 +4,7 @@ ruleName: string, result: import('stylelint').PostcssResult, message: string, - node: import('postcss').Node & { - positionBy(opts: { index?: number, word?: string }): { line: number, column: number } - }, + node: import('postcss').Node, index?: number, word?: string, line?: number @@ -25,7 +23,7 @@ * You *must* pass *either* a node or a line number. * @param {Violation} violation */ -module.exports = function (violation) { +module.exports = function report(violation) { const ruleName = violation.ruleName; const result = violation.result; const message = violation.message; @@ -46,6 +44,7 @@ module.exports = function (violation) { // If a line is not passed, use the node.positionBy method to get the // line number that the complaint pertains to + // @ts-expect-error -- The type of `Node.prototype.positionBy()` is not be exposed. const startLine = line || node.positionBy({ index }).line; const { ignoreDisables } = result.stylelint.config || {}; diff --git a/lib/utils/ruleMessages.js b/lib/utils/ruleMessages.js index e1dc589347..1c7ed5be37 100644 --- a/lib/utils/ruleMessages.js +++ b/lib/utils/ruleMessages.js @@ -1,28 +1,30 @@ 'use strict'; -/** @typedef {(...args: any[]) => string} MessageGenerator */ -/** @typedef {Record} Messages */ - /** * Given an object of violation messages, return another * that provides the same messages postfixed with the rule * that has been violated. * + * @template {import('stylelint').StylelintRuleMessages} T * @param {string} ruleName - * @param {Messages} messages - Object whose keys are message identifiers + * @param {T} messages - Object whose keys are message identifiers * and values are either message strings or functions that return message strings - * @returns {Messages} New message object, whose messages will be marked with the rule name + * @returns {T} New message object, whose messages will be marked with the rule name */ module.exports = function ruleMessages(ruleName, messages) { - return Object.keys(messages).reduce((/** @type {Messages} */ newMessages, messageId) => { - const messageText = messages[messageId]; + /** @type {T} */ + // @ts-expect-error -- TS2322: Type '{}' is not assignable to type 'T'. + const newMessages = {}; + for (const [messageId, messageText] of Object.entries(messages)) { if (typeof messageText === 'string') { + // @ts-expect-error -- TS2536: Type 'string' cannot be used to index type 'T'. newMessages[messageId] = `${messageText} (${ruleName})`; } else { + // @ts-expect-error -- TS2536: Type 'string' cannot be used to index type 'T'. newMessages[messageId] = (...args) => `${messageText(...args)} (${ruleName})`; } + } - return newMessages; - }, {}); + return newMessages; }; diff --git a/lib/utils/validateOptions.js b/lib/utils/validateOptions.js index 454b16c938..67fd8fb64a 100644 --- a/lib/utils/validateOptions.js +++ b/lib/utils/validateOptions.js @@ -9,7 +9,7 @@ const IGNORED_OPTIONS = new Set(['severity', 'message', 'reportDisables']); /** @typedef {boolean | number | string | PossibleFunc} Possible */ -/** @typedef {{possible: (undefined | PossibleFunc | Possible[] | Record), actual: unknown, optional?: boolean}} Options */ +/** @typedef {{possible?: (undefined | PossibleFunc | Possible[] | Record), actual: unknown, optional?: boolean}} Options */ /** * Validate a rule's options. diff --git a/lib/utils/whitespaceChecker.js b/lib/utils/whitespaceChecker.js index ccc4a23066..b8bd464c4e 100644 --- a/lib/utils/whitespaceChecker.js +++ b/lib/utils/whitespaceChecker.js @@ -31,7 +31,7 @@ const isWhitespace = require('./isWhitespace'); * @property {(message: string) => void} err - If a violation is found, this callback * will be invoked with the relevant warning message. * Typically this callback will report() the violation. - * @property {string} errTarget - If a violation is found, this string + * @property {string} [errTarget] - If a violation is found, this string * will be sent to the relevant warning message. * @property {string} [lineCheckStr] - Single- and multi-line checkers * will use this string to determine whether they should proceed, diff --git a/types/stylelint/index.d.ts b/types/stylelint/index.d.ts index 3a483b0980..8e83d41a5c 100644 --- a/types/stylelint/index.d.ts +++ b/types/stylelint/index.d.ts @@ -139,13 +139,20 @@ declare module 'stylelint' { fix?: boolean; }; - export type StylelintPluginContext = { fix?: boolean; newline?: string }; + export type StylelintPluginContext = { + fix?: boolean | undefined; + newline?: string | undefined; + }; + + export type StylelintRuleMessages = Record string)>; export type StylelintRule = (( primaryOption: any, - secondaryOptions: object, + secondaryOptions: Record, context: StylelintPluginContext, ) => (root: Root, result: PostcssResult) => Promise | void) & { + ruleName: string; + messages: StylelintRuleMessages; primaryOptionArray?: boolean; }; From 56e2453db914cc85b2c7f4d082c9ddc25cad14d7 Mon Sep 17 00:00:00 2001 From: Michael Tsulaya <31821568+immitsu@users.noreply.github.com> Date: Mon, 26 Jul 2021 12:36:37 +0300 Subject: [PATCH 067/194] Fix false positives for parametric mixins in selector-class-pattern (#5378) * Fix processing of less parametric mixins * Remove redundant conditionals * Fix not-rule test cases * Replace checks for selector * Add tests for selector --- .../__tests__/isStandardSyntaxRule.test.js | 23 ++++------- .../isStandardSyntaxSelector.test.js | 15 ++++++- lib/utils/isStandardSyntaxRule.js | 40 +------------------ lib/utils/isStandardSyntaxSelector.js | 15 +++++++ 4 files changed, 36 insertions(+), 57 deletions(-) diff --git a/lib/utils/__tests__/isStandardSyntaxRule.test.js b/lib/utils/__tests__/isStandardSyntaxRule.test.js index 025ab14a04..199bb5d079 100644 --- a/lib/utils/__tests__/isStandardSyntaxRule.test.js +++ b/lib/utils/__tests__/isStandardSyntaxRule.test.js @@ -35,11 +35,11 @@ describe('isStandardSyntaxRule', () => { it('custom-property-set', () => { expect(isStandardSyntaxRule(node('--custom-property-set: {}'))).toBeFalsy(); }); - it('Scss nested properties', () => { + it('scss nested properties', () => { expect(isStandardSyntaxRule(node('foo: {};'))).toBeFalsy(); }); - it('called Less class parametric mixin', () => { - expect(isStandardSyntaxRule(lessNode('.mixin-name(@var);'))).toBeFalsy(); + it('less class parametric mixin', () => { + expect(isStandardSyntaxRule(lessNode('.mixin-name(@var) {}'))).toBeFalsy(); }); it('non-outputting parametric Less class mixin definition', () => { expect(isStandardSyntaxRule(lessNode('.mixin-name() {}'))).toBeFalsy(); @@ -53,25 +53,13 @@ describe('isStandardSyntaxRule', () => { it('non-outputting Less ID mixin definition', () => { expect(isStandardSyntaxRule(lessNode('#mixin-name() {}'))).toBeFalsy(); }); - it('called Less ID mixin', () => { - expect(isStandardSyntaxRule(lessNode('#mixin-name;'))).toBeFalsy(); - }); - it('called namespaced Less mixin (child)', () => { - expect(isStandardSyntaxRule(lessNode('#namespace > .mixin-name;'))).toBeFalsy(); - }); - it('called namespaced Less mixin (descendant)', () => { - expect(isStandardSyntaxRule(lessNode('#namespace .mixin-name;'))).toBeFalsy(); - }); - it('called namespaced Less mixin (compound)', () => { - expect(isStandardSyntaxRule(lessNode('#namespace.mixin-name;'))).toBeFalsy(); - }); it('less mixin', () => { expect( isStandardSyntaxRule(lessNode('.box-shadow(@style, @c) when (iscolor(@c)) {}')), ).toBeFalsy(); }); it('less extend', () => { - expect(isStandardSyntaxRule(lessNode('&:extend(.inline);'))).toBeFalsy(); + expect(isStandardSyntaxRule(lessNode('&:extend(.inline) {}'))).toBeFalsy(); }); it('less detached rulesets', () => { expect(isStandardSyntaxRule(lessNode('@foo: {};'))).toBeFalsy(); @@ -79,6 +67,9 @@ describe('isStandardSyntaxRule', () => { it('less guarded namespaces', () => { expect(isStandardSyntaxRule(lessNode('#namespace when (@mode=huge) {}'))).toBeFalsy(); }); + it('less parametric mixins', () => { + expect(isStandardSyntaxRule(lessNode('.mixin (@variable: 5) {}'))).toBeFalsy(); + }); it('mixin guards', () => { expect( isStandardSyntaxRule(lessNode('.mixin (@variable) when (@variable = 10px) {}')), diff --git a/lib/utils/__tests__/isStandardSyntaxSelector.test.js b/lib/utils/__tests__/isStandardSyntaxSelector.test.js index d1cdc0050f..2f973e5845 100644 --- a/lib/utils/__tests__/isStandardSyntaxSelector.test.js +++ b/lib/utils/__tests__/isStandardSyntaxSelector.test.js @@ -42,6 +42,13 @@ describe('isStandardSyntaxSelector', () => { it('SCSS interpolation (pseudo)', () => { expect(isStandardSyntaxSelector(':n-#{$n}')).toBeFalsy(); }); + it('SCSS placeholder', () => { + expect(isStandardSyntaxSelector('%foo')).toBeFalsy(); + }); + it('SCSS nested properties', () => { + expect(isStandardSyntaxSelector('.a { .b }')).toBeFalsy(); + expect(isStandardSyntaxSelector('.a { &:hover }')).toBeFalsy(); + }); it('Less interpolation', () => { expect(isStandardSyntaxSelector('.n-@{n}')).toBeFalsy(); }); @@ -54,8 +61,8 @@ describe('isStandardSyntaxSelector', () => { it('Less extend inside ruleset', () => { expect(isStandardSyntaxSelector('a { &:extend(.a all) }')).toBeFalsy(); }); - it('SCSS placeholder', () => { - expect(isStandardSyntaxSelector('%foo')).toBeFalsy(); + it('Less mixin', () => { + expect(isStandardSyntaxSelector('.foo()')).toBeFalsy(); }); it('Less mixin with resolved nested selectors', () => { expect(isStandardSyntaxSelector('.foo().bar')).toBeFalsy(); @@ -69,6 +76,10 @@ describe('isStandardSyntaxSelector', () => { expect(isStandardSyntaxSelector('.foo()[bar]')).toBeFalsy(); expect(isStandardSyntaxSelector(".foo()[bar='baz']")).toBeFalsy(); }); + it('Less parametric mixin', () => { + expect(isStandardSyntaxSelector('.foo(@a)')).toBeFalsy(); + expect(isStandardSyntaxSelector('.foo(@a: 5px)')).toBeFalsy(); + }); it('ERB templates', () => { // E. g. like in https://github.com/stylelint/stylelint/issues/4489 diff --git a/lib/utils/isStandardSyntaxRule.js b/lib/utils/isStandardSyntaxRule.js index 0772c19958..cc28563494 100644 --- a/lib/utils/isStandardSyntaxRule.js +++ b/lib/utils/isStandardSyntaxRule.js @@ -13,50 +13,12 @@ module.exports = function (rule) { return false; } - const raws = rule.raws; - - // Get full selector - const selector = (raws.selector && raws.selector.raw) || rule.selector; - - if (!isStandardSyntaxSelector(rule.selector)) { - return false; - } - - // Called Less mixin (e.g. a { .mixin() }) - // @ts-expect-error -- TODO TYPES support LESS and SASS types somehow - if (rule.mixin) { - return false; - } - - // Less detached rulesets - if (selector.startsWith('@') && selector.endsWith(':')) { - return false; - } - // Ignore Less &:extend rule if ('extend' in rule && rule.extend) { return false; } - // Ignore mixin or &:extend rule - // https://github.com/shellscape/postcss-less/blob/master/lib/less-parser.js#L52 - // @ts-expect-error -- TODO TYPES support LESS and SASS types somehow - if (rule.params && rule.params[0]) { - return false; - } - - // Non-outputting Less mixin definition (e.g. .mixin() {}) - if (selector.endsWith(')') && !selector.includes(':')) { - return false; - } - - // Less guards - if (/when\s+(not\s+)*\(/.test(selector)) { - return false; - } - - // Ignore Scss nested properties - if (selector.endsWith(':')) { + if (!isStandardSyntaxSelector(rule.selector)) { return false; } diff --git a/lib/utils/isStandardSyntaxSelector.js b/lib/utils/isStandardSyntaxSelector.js index 7c446578b3..dd74d29e7d 100644 --- a/lib/utils/isStandardSyntaxSelector.js +++ b/lib/utils/isStandardSyntaxSelector.js @@ -19,6 +19,11 @@ module.exports = function (selector) { return false; } + // SCSS nested properties + if (selector.endsWith(':')) { + return false; + } + // Less :extend() if (/:extend(\(.*?\))?/.test(selector)) { return false; @@ -29,6 +34,16 @@ module.exports = function (selector) { return false; } + // Less non-outputting mixin definition (e.g. .mixin() {}) + if (selector.endsWith(')') && !selector.includes(':')) { + return false; + } + + // Less Parametric mixins (e.g. .mixin(@variable: x) {}) + if (/\(@.*\)$/.test(selector)) { + return false; + } + // ERB template tags if (selector.includes('<%') || selector.includes('%>')) { return false; From 14f5c21941290bc9ef1911f023c7cc3b2a58e77d Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Mon, 26 Jul 2021 10:37:51 +0100 Subject: [PATCH 068/194] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 861f04355f..7e006c18ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ All notable changes to this project are documented in this file. - Fixed: "No files matching the pattern" when using backslash paths on Windows ([#5386](https://github.com/stylelint/stylelint/pull/5386)). - Fixed: `length-zero-no-unit` false positives for `flex` property ([#5315](https://github.com/stylelint/stylelint/pull/5315)). - Fixed: `property-no-unknown` false positives for Less maps ([#5381](https://github.com/stylelint/stylelint/pull/5381)). +- Fixed: `selector-class-pattern` false positives for Less parametric mixins ([#5378](https://github.com/stylelint/stylelint/pull/5378)). ## 13.13.1 From 5e4d9a0a12718694e0d9c75d8da326ea2928828b Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Tue, 27 Jul 2021 00:35:02 +0900 Subject: [PATCH 069/194] Refactor function names for `removeEmptyLines{After,Before}` (#5424) This refactoring aims to unify the function names: `removeEmptyLinesAfter()` and `removeEmptyLinesBefore()`. --- lib/rules/block-closing-brace-empty-line-before/index.js | 4 ++-- ...veEmptyLineAfter.test.js => removeEmptyLinesAfter.test.js} | 0 ...EmptyLineBefore.test.js => removeEmptyLinesBefore.test.js} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename lib/utils/__tests__/{removeEmptyLineAfter.test.js => removeEmptyLinesAfter.test.js} (100%) rename lib/utils/__tests__/{removeEmptyLineBefore.test.js => removeEmptyLinesBefore.test.js} (100%) diff --git a/lib/rules/block-closing-brace-empty-line-before/index.js b/lib/rules/block-closing-brace-empty-line-before/index.js index d0edc02275..f83b839b7b 100644 --- a/lib/rules/block-closing-brace-empty-line-before/index.js +++ b/lib/rules/block-closing-brace-empty-line-before/index.js @@ -9,7 +9,7 @@ const hasEmptyBlock = require('../../utils/hasEmptyBlock'); const hasEmptyLine = require('../../utils/hasEmptyLine'); const isSingleLineString = require('../../utils/isSingleLineString'); const optionsMatches = require('../../utils/optionsMatches'); -const removeEmptyLineAfter = require('../../utils/removeEmptyLinesAfter'); +const removeEmptyLinesAfter = require('../../utils/removeEmptyLinesAfter'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); @@ -94,7 +94,7 @@ function rule(expectation, options, context) { if (expectEmptyLineBefore) { addEmptyLineAfter(statement, context.newline); } else { - removeEmptyLineAfter(statement, context.newline); + removeEmptyLinesAfter(statement, context.newline); } return; diff --git a/lib/utils/__tests__/removeEmptyLineAfter.test.js b/lib/utils/__tests__/removeEmptyLinesAfter.test.js similarity index 100% rename from lib/utils/__tests__/removeEmptyLineAfter.test.js rename to lib/utils/__tests__/removeEmptyLinesAfter.test.js diff --git a/lib/utils/__tests__/removeEmptyLineBefore.test.js b/lib/utils/__tests__/removeEmptyLinesBefore.test.js similarity index 100% rename from lib/utils/__tests__/removeEmptyLineBefore.test.js rename to lib/utils/__tests__/removeEmptyLinesBefore.test.js From 0d4a348c8b8e5557483bc1bf9d0d39ba45c692df Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Tue, 27 Jul 2021 17:29:45 +0900 Subject: [PATCH 070/194] Refactor `lib/utils/beforeBlockString.js` (#5425) - Remove extra type annotations. - Simplify the logic. --- lib/utils/beforeBlockString.js | 45 +++++++++------------------------- 1 file changed, 12 insertions(+), 33 deletions(-) diff --git a/lib/utils/beforeBlockString.js b/lib/utils/beforeBlockString.js index 36108448c9..b17b856abb 100644 --- a/lib/utils/beforeBlockString.js +++ b/lib/utils/beforeBlockString.js @@ -5,50 +5,29 @@ /** * @param {Rule | AtRule} statement - * @param {{ - * noRawBefore?: boolean - * }} options - * * @returns {string} */ -module.exports = function (statement, options = {}) { +module.exports = function beforeBlockString(statement, { noRawBefore } = { noRawBefore: false }) { let result = ''; - /** @type {Rule | undefined} */ - let rule; /*?: postcss$rule*/ - /** @type {AtRule | undefined} */ - let atRule; /*?: postcss$atRule*/ - - if (statement.type === 'rule') { - rule = statement; - } - - if (statement.type === 'atrule') { - atRule = statement; - } - - if (!rule && !atRule) { - return result; - } const before = statement.raws.before || ''; - if (!options.noRawBefore) { + if (!noRawBefore) { result += before; } - if (rule) { - result += rule.selector; - } - - if (atRule) { - result += `@${atRule.name}${atRule.raws.afterName || ''}${atRule.params}`; + switch (statement.type) { + case 'rule': + result += statement.selector; + break; + case 'atrule': + result += `@${statement.name}${statement.raws.afterName || ''}${statement.params}`; + break; + default: + return ''; } - const between = statement.raws.between; - - if (between !== undefined) { - result += between; - } + result += statement.raws.between || ''; return result; }; From 2fed08bcb94b511defe9459ee96168538ec8bb7c Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Wed, 28 Jul 2021 01:17:14 +0900 Subject: [PATCH 071/194] Refactor to improve types for `block-*` rules (#5426) This change removes `// @ts-nocheck` from the `block-*` rules. In addition, it improves the types of some utilities. --- .../index.js | 30 ++++++----- .../index.js | 37 +++++++++----- .../index.js | 43 +++++++++------- .../block-closing-brace-space-after/index.js | 14 ++--- .../block-closing-brace-space-before/index.js | 26 ++++++---- lib/rules/block-no-empty/index.js | 14 ++--- .../index.js | 51 ++++++++++++------- .../index.js | 32 +++++++----- .../block-opening-brace-space-after/index.js | 26 ++++++---- .../block-opening-brace-space-before/index.js | 30 +++++++---- lib/utils/__tests__/blockString.test.js | 4 ++ lib/utils/addEmptyLineAfter.js | 25 +++++---- lib/utils/addEmptyLineBefore.js | 10 ++-- lib/utils/blockString.js | 9 ++-- lib/utils/removeEmptyLinesAfter.js | 12 ++--- 15 files changed, 217 insertions(+), 146 deletions(-) diff --git a/lib/rules/block-closing-brace-empty-line-before/index.js b/lib/rules/block-closing-brace-empty-line-before/index.js index f83b839b7b..ee0d6bc721 100644 --- a/lib/rules/block-closing-brace-empty-line-before/index.js +++ b/lib/rules/block-closing-brace-empty-line-before/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const addEmptyLineAfter = require('../../utils/addEmptyLineAfter'); @@ -21,17 +19,18 @@ const messages = ruleMessages(ruleName, { rejected: 'Unexpected empty line before closing brace', }); -function rule(expectation, options, context) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, secondaryOptions, context) => { return (root, result) => { const validOptions = validateOptions( result, ruleName, { - actual: expectation, + actual: primary, possible: ['always-multi-line', 'never'], }, { - actual: options, + actual: secondaryOptions, possible: { except: ['after-closing-brace'], }, @@ -47,6 +46,9 @@ function rule(expectation, options, context) { root.walkRules(check); root.walkAtRules(check); + /** + * @param {import('postcss').Rule | import('postcss').AtRule} statement + */ function check(statement) { // Return early if blockless or has empty block if (!hasBlock(statement) || hasEmptyBlock(statement)) { @@ -70,16 +72,14 @@ function rule(expectation, options, context) { // Reverse the primary options if `after-closing-brace` is set if ( - optionsMatches(options, 'except', 'after-closing-brace') && + optionsMatches(secondaryOptions, 'except', 'after-closing-brace') && statement.type === 'atrule' && !childNodeTypes.includes('decl') ) { - return expectation === 'never'; + return primary === 'never'; } - return Boolean( - expectation === 'always-multi-line' && !isSingleLineString(blockString(statement)), - ); + return primary === 'always-multi-line' && !isSingleLineString(blockString(statement)); })(); // Check for at least one empty line @@ -91,10 +91,14 @@ function rule(expectation, options, context) { } if (context.fix) { + const { newline } = context; + + if (typeof newline !== 'string') return; + if (expectEmptyLineBefore) { - addEmptyLineAfter(statement, context.newline); + addEmptyLineAfter(statement, newline); } else { - removeEmptyLinesAfter(statement, context.newline); + removeEmptyLinesAfter(statement, newline); } return; @@ -111,7 +115,7 @@ function rule(expectation, options, context) { }); } }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/block-closing-brace-newline-after/index.js b/lib/rules/block-closing-brace-newline-after/index.js index 962bd9504c..81472eb84f 100644 --- a/lib/rules/block-closing-brace-newline-after/index.js +++ b/lib/rules/block-closing-brace-newline-after/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const blockString = require('../../utils/blockString'); @@ -22,15 +20,16 @@ const messages = ruleMessages(ruleName, { rejectedAfterMultiLine: () => 'Unexpected whitespace after "}" of a multi-line block', }); -function rule(expectation, options, context) { - const checker = whitespaceChecker('newline', expectation, messages); +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, secondaryOptions, context) => { + const checker = whitespaceChecker('newline', primary, messages); return (root, result) => { const validOptions = validateOptions( result, ruleName, { - actual: expectation, + actual: primary, possible: [ 'always', 'always-single-line', @@ -40,7 +39,7 @@ function rule(expectation, options, context) { ], }, { - actual: options, + actual: secondaryOptions, possible: { ignoreAtRules: [isString], }, @@ -56,12 +55,18 @@ function rule(expectation, options, context) { root.walkRules(check); root.walkAtRules(check); + /** + * @param {import('postcss').Rule | import('postcss').AtRule} statement + */ function check(statement) { if (!hasBlock(statement)) { return; } - if (optionsMatches(options, 'ignoreAtRules', statement.name)) { + if ( + statement.type === 'atrule' && + optionsMatches(secondaryOptions, 'ignoreAtRules', statement.name) + ) { return; } @@ -100,20 +105,24 @@ function rule(expectation, options, context) { lineCheckStr: blockString(statement), err: (msg) => { if (context.fix) { - if (expectation.startsWith('always')) { - const index = nodeToCheck.raws.before.search(/\r?\n/); + const nodeToCheckRaws = nodeToCheck.raws; + + if (typeof nodeToCheckRaws.before !== 'string') return; + + if (primary.startsWith('always')) { + const index = nodeToCheckRaws.before.search(/\r?\n/); if (index >= 0) { - nodeToCheck.raws.before = nodeToCheck.raws.before.slice(index); + nodeToCheckRaws.before = nodeToCheckRaws.before.slice(index); } else { - nodeToCheck.raws.before = context.newline + nodeToCheck.raws.before; + nodeToCheckRaws.before = context.newline + nodeToCheckRaws.before; } return; } - if (expectation.startsWith('never')) { - nodeToCheck.raws.before = ''; + if (primary.startsWith('never')) { + nodeToCheckRaws.before = ''; return; } @@ -130,7 +139,7 @@ function rule(expectation, options, context) { }); } }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/block-closing-brace-newline-before/index.js b/lib/rules/block-closing-brace-newline-before/index.js index e269924f99..8dd6c7eeb0 100644 --- a/lib/rules/block-closing-brace-newline-before/index.js +++ b/lib/rules/block-closing-brace-newline-before/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const blockString = require('../../utils/blockString'); @@ -18,10 +16,11 @@ const messages = ruleMessages(ruleName, { rejectedBeforeMultiLine: 'Unexpected whitespace before "}" of a multi-line block', }); -function rule(expectation, options, context) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, _secondaryOptions, context) => { return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: ['always', 'always-multi-line', 'never-multi-line'], }); @@ -33,6 +32,9 @@ function rule(expectation, options, context) { root.walkRules(check); root.walkAtRules(check); + /** + * @param {import('postcss').Rule | import('postcss').AtRule} statement + */ function check(statement) { // Return early if blockless or has empty block if (!hasBlock(statement) || hasEmptyBlock(statement)) { @@ -61,40 +63,47 @@ function rule(expectation, options, context) { // ignore any other whitespace between them, because that // will be checked by the indentation rule. if (!after.startsWith('\n') && !after.startsWith('\r\n')) { - if (expectation === 'always') { + if (primary === 'always') { complain(messages.expectedBefore); - } else if (blockIsMultiLine && expectation === 'always-multi-line') { + } else if (blockIsMultiLine && primary === 'always-multi-line') { complain(messages.expectedBeforeMultiLine); } } - if (after !== '' && blockIsMultiLine && expectation === 'never-multi-line') { + if (after !== '' && blockIsMultiLine && primary === 'never-multi-line') { complain(messages.rejectedBeforeMultiLine); } + /** + * @param {string} message + */ function complain(message) { if (context.fix) { - if (expectation.startsWith('always')) { - const firstWhitespaceIndex = statement.raws.after.search(/\s/); + const statementRaws = statement.raws; + + if (typeof statementRaws.after !== 'string') return; + + if (primary.startsWith('always')) { + const firstWhitespaceIndex = statementRaws.after.search(/\s/); const newlineBefore = firstWhitespaceIndex >= 0 - ? statement.raws.after.slice(0, firstWhitespaceIndex) - : statement.raws.after; + ? statementRaws.after.slice(0, firstWhitespaceIndex) + : statementRaws.after; const newlineAfter = - firstWhitespaceIndex >= 0 ? statement.raws.after.slice(firstWhitespaceIndex) : ''; + firstWhitespaceIndex >= 0 ? statementRaws.after.slice(firstWhitespaceIndex) : ''; const newlineIndex = newlineAfter.search(/\r?\n/); if (newlineIndex >= 0) { - statement.raws.after = newlineBefore + newlineAfter.slice(newlineIndex); + statementRaws.after = newlineBefore + newlineAfter.slice(newlineIndex); } else { - statement.raws.after = newlineBefore + context.newline + newlineAfter; + statementRaws.after = newlineBefore + context.newline + newlineAfter; } return; } - if (expectation === 'never-multi-line') { - statement.raws.after = statement.raws.after.replace(/\s/g, ''); + if (primary === 'never-multi-line') { + statementRaws.after = statementRaws.after.replace(/\s/g, ''); return; } @@ -110,7 +119,7 @@ function rule(expectation, options, context) { } } }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/block-closing-brace-space-after/index.js b/lib/rules/block-closing-brace-space-after/index.js index 430d24fbc7..8e872d6217 100644 --- a/lib/rules/block-closing-brace-space-after/index.js +++ b/lib/rules/block-closing-brace-space-after/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const blockString = require('../../utils/blockString'); @@ -21,12 +19,13 @@ const messages = ruleMessages(ruleName, { rejectedAfterMultiLine: () => 'Unexpected whitespace after "}" of a multi-line block', }); -function rule(expectation) { - const checker = whitespaceChecker('space', expectation, messages); +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary) => { + const checker = whitespaceChecker('space', primary, messages); return function (root, result) { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: [ 'always', 'never', @@ -45,6 +44,9 @@ function rule(expectation) { root.walkRules(check); root.walkAtRules(check); + /** + * @param {import('postcss').Rule | import('postcss').AtRule} statement + */ function check(statement) { const nextNode = statement.next(); @@ -81,7 +83,7 @@ function rule(expectation) { }); } }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/block-closing-brace-space-before/index.js b/lib/rules/block-closing-brace-space-before/index.js index 84ee74f249..fd714ee5e0 100644 --- a/lib/rules/block-closing-brace-space-before/index.js +++ b/lib/rules/block-closing-brace-space-before/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const blockString = require('../../utils/blockString'); @@ -21,12 +19,13 @@ const messages = ruleMessages(ruleName, { rejectedBeforeMultiLine: () => 'Unexpected whitespace before "}" of a multi-line block', }); -function rule(expectation, options, context) { - const checker = whitespaceChecker('space', expectation, messages); +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, _secondaryOptions, context) => { + const checker = whitespaceChecker('space', primary, messages); return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: [ 'always', 'never', @@ -45,6 +44,9 @@ function rule(expectation, options, context) { root.walkRules(check); root.walkAtRules(check); + /** + * @param {import('postcss').Rule | import('postcss').AtRule} statement + */ function check(statement) { // Return early if blockless or has empty block if (!hasBlock(statement) || hasEmptyBlock(statement)) { @@ -65,14 +67,18 @@ function rule(expectation, options, context) { index: source.length - 1, err: (msg) => { if (context.fix) { - if (expectation.startsWith('always')) { - statement.raws.after = statement.raws.after.replace(/\s*$/, ' '); + const statementRaws = statement.raws; + + if (typeof statementRaws.after !== 'string') return; + + if (primary.startsWith('always')) { + statementRaws.after = statementRaws.after.replace(/\s*$/, ' '); return; } - if (expectation.startsWith('never')) { - statement.raws.after = statement.raws.after.replace(/\s*$/, ''); + if (primary.startsWith('never')) { + statementRaws.after = statementRaws.after.replace(/\s*$/, ''); return; } @@ -89,7 +95,7 @@ function rule(expectation, options, context) { }); } }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/block-no-empty/index.js b/lib/rules/block-no-empty/index.js index 59a1ef4983..438deee732 100644 --- a/lib/rules/block-no-empty/index.js +++ b/lib/rules/block-no-empty/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const beforeBlockString = require('../../utils/beforeBlockString'); @@ -17,7 +15,8 @@ const messages = ruleMessages(ruleName, { rejected: 'Unexpected empty block', }); -function rule(primary, options = {}) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, secondaryOptions) => { return (root, result) => { const validOptions = validateOptions( result, @@ -27,7 +26,7 @@ function rule(primary, options = {}) { possible: isBoolean, }, { - actual: options, + actual: secondaryOptions, possible: { ignore: ['comments'], }, @@ -39,12 +38,15 @@ function rule(primary, options = {}) { return; } - const ignoreComments = optionsMatches(options, 'ignore', 'comments'); + const ignoreComments = optionsMatches(secondaryOptions, 'ignore', 'comments'); // Check both kinds of statements: rules and at-rules root.walkRules(check); root.walkAtRules(check); + /** + * @param {import('postcss').Rule | import('postcss').AtRule} statement + */ function check(statement) { if (!hasEmptyBlock(statement) && !ignoreComments) { return; @@ -76,7 +78,7 @@ function rule(primary, options = {}) { }); } }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/block-opening-brace-newline-after/index.js b/lib/rules/block-opening-brace-newline-after/index.js index c53e4ef927..78570e465a 100644 --- a/lib/rules/block-opening-brace-newline-after/index.js +++ b/lib/rules/block-opening-brace-newline-after/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const beforeBlockString = require('../../utils/beforeBlockString'); @@ -20,12 +18,13 @@ const messages = ruleMessages(ruleName, { rejectedAfterMultiLine: () => 'Unexpected whitespace after "{" of a multi-line block', }); -function rule(expectation, options, context) { - const checker = whitespaceChecker('newline', expectation, messages); +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, _secondaryOptions, context) => { + const checker = whitespaceChecker('newline', primary, messages); return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: ['always', 'always-multi-line', 'never-multi-line'], }); @@ -37,6 +36,9 @@ function rule(expectation, options, context) { root.walkRules(check); root.walkAtRules(check); + /** + * @param {import('postcss').Rule | import('postcss').AtRule} statement + */ function check(statement) { // Return early if blockless or has an empty block if (!hasBlock(statement) || hasEmptyBlock(statement)) { @@ -45,17 +47,22 @@ function rule(expectation, options, context) { const backupCommentNextBefores = new Map(); - // next node with checking newlines after comment + /** + * next node with checking newlines after comment + * + * @param {import('postcss').ChildNode | undefined} startNode + * @returns {import('postcss').ChildNode | undefined} + */ function nextNode(startNode) { - if (!startNode || !startNode.next) return null; + if (!startNode || !startNode.next) return; if (startNode.type === 'comment') { const reNewLine = /\r?\n/; - const newLineMatch = reNewLine.test(startNode.raws.before); + const newLineMatch = reNewLine.test(startNode.raws.before || ''); const next = startNode.next(); - if (next && newLineMatch && !reNewLine.test(next.raws.before)) { + if (next && newLineMatch && !reNewLine.test(next.raws.before || '')) { backupCommentNextBefores.set(next, next.raws.before); next.raws.before = startNode.raws.before; } @@ -79,13 +86,17 @@ function rule(expectation, options, context) { lineCheckStr: blockString(statement), err: (m) => { if (context.fix) { - if (expectation.startsWith('always')) { - const index = nodeToCheck.raws.before.search(/\r?\n/); + const nodeToCheckRaws = nodeToCheck.raws; + + if (typeof nodeToCheckRaws.before !== 'string') return; + + if (primary.startsWith('always')) { + const index = nodeToCheckRaws.before.search(/\r?\n/); if (index >= 0) { - nodeToCheck.raws.before = nodeToCheck.raws.before.slice(index); + nodeToCheckRaws.before = nodeToCheckRaws.before.slice(index); } else { - nodeToCheck.raws.before = context.newline + nodeToCheck.raws.before; + nodeToCheckRaws.before = context.newline + nodeToCheckRaws.before; } backupCommentNextBefores.delete(nodeToCheck); @@ -93,7 +104,7 @@ function rule(expectation, options, context) { return; } - if (expectation === 'never-multi-line') { + if (primary === 'never-multi-line') { // Restore the `before` of the node next to the comment node. backupCommentNextBefores.forEach((before, node) => { node.raws.before = before; @@ -105,8 +116,12 @@ function rule(expectation, options, context) { let fixTarget = statement.first; while (fixTarget) { - if (reNewLine.test(fixTarget.raws.before)) { - fixTarget.raws.before = fixTarget.raws.before.replace(/\r?\n/g, ''); + const fixTargetRaws = fixTarget.raws; + + if (typeof fixTargetRaws.before !== 'string') continue; + + if (reNewLine.test(fixTargetRaws.before || '')) { + fixTargetRaws.before = fixTargetRaws.before.replace(/\r?\n/g, ''); } if (fixTarget.type !== 'comment') { @@ -116,7 +131,7 @@ function rule(expectation, options, context) { fixTarget = fixTarget.next(); } - nodeToCheck.raws.before = ''; + nodeToCheckRaws.before = ''; return; } @@ -138,7 +153,7 @@ function rule(expectation, options, context) { }); } }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/block-opening-brace-newline-before/index.js b/lib/rules/block-opening-brace-newline-before/index.js index 69f02c1832..f5d70fc899 100644 --- a/lib/rules/block-opening-brace-newline-before/index.js +++ b/lib/rules/block-opening-brace-newline-before/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const beforeBlockString = require('../../utils/beforeBlockString'); @@ -21,12 +19,13 @@ const messages = ruleMessages(ruleName, { rejectedBeforeMultiLine: () => 'Unexpected whitespace before "{" of a multi-line block', }); -function rule(expectation, options, context) { - const checker = whitespaceChecker('newline', expectation, messages); +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, _secondaryOptions, context) => { + const checker = whitespaceChecker('newline', primary, messages); return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: [ 'always', 'always-single-line', @@ -44,6 +43,9 @@ function rule(expectation, options, context) { root.walkRules(check); root.walkAtRules(check); + /** + * @param {import('postcss').Rule | import('postcss').AtRule} statement + */ function check(statement) { // Return early if blockless or has an empty block if (!hasBlock(statement) || hasEmptyBlock(statement)) { @@ -67,23 +69,27 @@ function rule(expectation, options, context) { index: source.length, err: (m) => { if (context.fix) { - if (expectation.startsWith('always')) { - const spaceIndex = statement.raws.between.search(/\s+$/); + const statementRaws = statement.raws; + + if (typeof statementRaws.between !== 'string') return; + + if (primary.startsWith('always')) { + const spaceIndex = statementRaws.between.search(/\s+$/); if (spaceIndex >= 0) { statement.raws.between = - statement.raws.between.slice(0, spaceIndex) + + statementRaws.between.slice(0, spaceIndex) + context.newline + - statement.raws.between.slice(spaceIndex); + statementRaws.between.slice(spaceIndex); } else { - statement.raws.between += context.newline; + statementRaws.between += context.newline; } return; } - if (expectation.startsWith('never')) { - statement.raws.between = statement.raws.between.replace(/\s*$/, ''); + if (primary.startsWith('never')) { + statementRaws.between = statementRaws.between.replace(/\s*$/, ''); return; } @@ -100,7 +106,7 @@ function rule(expectation, options, context) { }); } }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/block-opening-brace-space-after/index.js b/lib/rules/block-opening-brace-space-after/index.js index 70945bf698..fb80c9ecfa 100644 --- a/lib/rules/block-opening-brace-space-after/index.js +++ b/lib/rules/block-opening-brace-space-after/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const beforeBlockString = require('../../utils/beforeBlockString'); @@ -22,12 +20,13 @@ const messages = ruleMessages(ruleName, { rejectedAfterMultiLine: () => 'Unexpected whitespace after "{" of a multi-line block', }); -function rule(expectation, options, context) { - const checker = whitespaceChecker('space', expectation, messages); +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, _secondaryOptions, context) => { + const checker = whitespaceChecker('space', primary, messages); return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: [ 'always', 'never', @@ -46,6 +45,9 @@ function rule(expectation, options, context) { root.walkRules(check); root.walkAtRules(check); + /** + * @param {import('postcss').Rule | import('postcss').AtRule} statement + */ function check(statement) { // Return early if blockless or has an empty block if (!hasBlock(statement) || hasEmptyBlock(statement)) { @@ -57,14 +59,18 @@ function rule(expectation, options, context) { index: 0, err: (m) => { if (context.fix) { - if (expectation.startsWith('always')) { - statement.first.raws.before = ' '; + const statementFirst = statement.first; + + if (statementFirst == null) return; + + if (primary.startsWith('always')) { + statementFirst.raws.before = ' '; return; } - if (expectation.startsWith('never')) { - statement.first.raws.before = ''; + if (primary.startsWith('never')) { + statementFirst.raws.before = ''; return; } @@ -81,7 +87,7 @@ function rule(expectation, options, context) { }); } }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/block-opening-brace-space-before/index.js b/lib/rules/block-opening-brace-space-before/index.js index 373c2f1fe3..df5f64b135 100644 --- a/lib/rules/block-opening-brace-space-before/index.js +++ b/lib/rules/block-opening-brace-space-before/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const beforeBlockString = require('../../utils/beforeBlockString'); @@ -24,15 +22,16 @@ const messages = ruleMessages(ruleName, { rejectedBeforeMultiLine: () => 'Unexpected whitespace before "{" of a multi-line block', }); -function rule(expectation, options, context) { - const checker = whitespaceChecker('space', expectation, messages); +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, secondaryOptions, context) => { + const checker = whitespaceChecker('space', primary, messages); return (root, result) => { const validOptions = validateOptions( result, ruleName, { - actual: expectation, + actual: primary, possible: [ 'always', 'never', @@ -43,7 +42,7 @@ function rule(expectation, options, context) { ], }, { - actual: options, + actual: secondaryOptions, possible: { ignoreAtRules: [isString, isRegExp], ignoreSelectors: [isString, isRegExp], @@ -60,6 +59,9 @@ function rule(expectation, options, context) { root.walkRules(check); root.walkAtRules(check); + /** + * @param {import('postcss').Rule | import('postcss').AtRule} statement + */ function check(statement) { // Return early if blockless or has an empty block if (!hasBlock(statement) || hasEmptyBlock(statement)) { @@ -67,12 +69,18 @@ function rule(expectation, options, context) { } // Return early if at-rule is to be ignored - if (optionsMatches(options, 'ignoreAtRules', statement.name)) { + if ( + statement.type === 'atrule' && + optionsMatches(secondaryOptions, 'ignoreAtRules', statement.name) + ) { return; } // Return early if selector is to be ignored - if (optionsMatches(options, 'ignoreSelectors', statement.selector)) { + if ( + statement.type === 'rule' && + optionsMatches(secondaryOptions, 'ignoreSelectors', statement.selector) + ) { return; } @@ -93,13 +101,13 @@ function rule(expectation, options, context) { lineCheckStr: blockString(statement), err: (m) => { if (context.fix) { - if (expectation.startsWith('always')) { + if (primary.startsWith('always')) { statement.raws.between = ' '; return; } - if (expectation.startsWith('never')) { + if (primary.startsWith('never')) { statement.raws.between = ''; return; @@ -117,7 +125,7 @@ function rule(expectation, options, context) { }); } }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/utils/__tests__/blockString.test.js b/lib/utils/__tests__/blockString.test.js index 89d0f377b2..225ef6f033 100644 --- a/lib/utils/__tests__/blockString.test.js +++ b/lib/utils/__tests__/blockString.test.js @@ -15,6 +15,10 @@ it('blockString at-rules', () => { ).toBe('{\n 0% {\n top: 0;\n}\n\n 100% {\n top: 10px;\n}\n}'); }); +it('blockString no block', () => { + expect(postcssCheck('@import url(foo.css);')).toBe(''); +}); + function postcssCheck(cssString) { const root = postcss.parse(cssString); diff --git a/lib/utils/addEmptyLineAfter.js b/lib/utils/addEmptyLineAfter.js index 5fb25b9316..afcd00eb74 100644 --- a/lib/utils/addEmptyLineAfter.js +++ b/lib/utils/addEmptyLineAfter.js @@ -1,29 +1,28 @@ 'use strict'; -/** @typedef {import('postcss').ChildNode & { raws: import('postcss').ChildNode['raws'] & { after?: string } }} ChildNode */ - /** * Add an empty line after a node. Mutates the node. * - * @param {ChildNode} node - * @param {'\n' | '\r\n'} newline - * @returns {ChildNode} + * @template {import('postcss').Rule | import('postcss').AtRule} T + * @param {T} node + * @param {string} newline + * @returns {T} */ -function addEmptyLineAfter(node, newline) { - if (node.raws.after === undefined) { +module.exports = function addEmptyLineAfter(node, newline) { + const { raws } = node; + + if (typeof raws.after !== 'string') { return node; } - const spaces = node.raws.after.split(';'); + const spaces = raws.after.split(';'); const after = spaces[spaces.length - 1] || ''; if (!/\r?\n/.test(after)) { - node.raws.after += newline.repeat(2); + raws.after += newline.repeat(2); } else { - node.raws.after = node.raws.after.replace(/(\r?\n)/, `${newline}$1`); + raws.after = raws.after.replace(/(\r?\n)/, `${newline}$1`); } return node; -} - -module.exports = addEmptyLineAfter; +}; diff --git a/lib/utils/addEmptyLineBefore.js b/lib/utils/addEmptyLineBefore.js index 54fd1cf88e..a2d3db4f46 100644 --- a/lib/utils/addEmptyLineBefore.js +++ b/lib/utils/addEmptyLineBefore.js @@ -9,14 +9,16 @@ * @returns {T} */ module.exports = function addEmptyLineBefore(node, newline) { - if (node.raws.before === undefined) { + const { raws } = node; + + if (typeof raws.before !== 'string') { return node; } - if (!/\r?\n/.test(node.raws.before)) { - node.raws.before = newline.repeat(2) + node.raws.before; + if (!/\r?\n/.test(raws.before)) { + raws.before = newline.repeat(2) + raws.before; } else { - node.raws.before = node.raws.before.replace(/(\r?\n)/, `${newline}$1`); + raws.before = raws.before.replace(/(\r?\n)/, `${newline}$1`); } return node; diff --git a/lib/utils/blockString.js b/lib/utils/blockString.js index 950eac0ed7..5a96442513 100644 --- a/lib/utils/blockString.js +++ b/lib/utils/blockString.js @@ -10,15 +10,14 @@ const rawNodeString = require('./rawNodeString'); /** * Return a CSS statement's block -- the string that starts and `{` and ends with `}`. * - * If the statement has no block (e.g. `@import url(foo.css);`), - * return false. + * If the statement has no block (e.g. `@import url(foo.css);`), returns an empty string. * * @param {Rule | AtRule} statement - postcss rule or at-rule node - * @return {string | boolean} + * @returns {string} */ -module.exports = function (statement) { +module.exports = function blockString(statement) { if (!hasBlock(statement)) { - return false; + return ''; } return rawNodeString(statement).slice(beforeBlockString(statement).length); diff --git a/lib/utils/removeEmptyLinesAfter.js b/lib/utils/removeEmptyLinesAfter.js index 971e78fe18..13ed803bd1 100644 --- a/lib/utils/removeEmptyLinesAfter.js +++ b/lib/utils/removeEmptyLinesAfter.js @@ -3,13 +3,13 @@ /** * Remove empty lines before a node. Mutates the node. * - * @param {import('postcss').Node} node - * @param {'\n' | '\r\n'} newline + * @template {import('postcss').Rule | import('postcss').AtRule} T + * @param {T} node + * @param {string} newline + * @returns {T} */ -function removeEmptyLinesAfter(node, newline) { +module.exports = function removeEmptyLinesAfter(node, newline) { node.raws.after = node.raws.after ? node.raws.after.replace(/(\r?\n\s*\r?\n)+/g, newline) : ''; return node; -} - -module.exports = removeEmptyLinesAfter; +}; From 1e83790a9e43d59176b1b5e10826b4da3e2f88d6 Mon Sep 17 00:00:00 2001 From: Dan Richman Date: Wed, 28 Jul 2021 04:26:54 -0400 Subject: [PATCH 072/194] Fix false positives for prefers-contrast in media-feature-name-no-unknown (#5428) * Added prefers-contrast media query This is a new media query added to CSS Media Queries Level 5 to utilize the contrast preference operating systems provide. Closes #5427 --- lib/reference/keywordSets.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/reference/keywordSets.js b/lib/reference/keywordSets.js index ade51390fb..dcb52f240a 100644 --- a/lib/reference/keywordSets.js +++ b/lib/reference/keywordSets.js @@ -608,6 +608,7 @@ keywordSets.mediaFeatureNames = uniteSets(keywordSets.deprecatedMediaFeatureName 'overflow-inline', 'pointer', 'prefers-color-scheme', + 'prefers-contrast', 'prefers-reduced-motion', 'prefers-reduced-transparency', 'resolution', From 6fe8a035a2e4bd260725878003d59e4b7e25bdc9 Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Wed, 28 Jul 2021 09:28:53 +0100 Subject: [PATCH 073/194] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e006c18ed..3fcf075ca2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ All notable changes to this project are documented in this file. - Added: `ignoreFunctions: []` to `length-zero-no-unit` ([#5314](https://github.com/stylelint/stylelint/pull/5314)). - Fixed: "No files matching the pattern" when using backslash paths on Windows ([#5386](https://github.com/stylelint/stylelint/pull/5386)). - Fixed: `length-zero-no-unit` false positives for `flex` property ([#5315](https://github.com/stylelint/stylelint/pull/5315)). +- Fixed: `media-feature-name-no-unknown` false positives for `prefers-contrast` ([#5428](https://github.com/stylelint/stylelint/pull/5428)). - Fixed: `property-no-unknown` false positives for Less maps ([#5381](https://github.com/stylelint/stylelint/pull/5381)). - Fixed: `selector-class-pattern` false positives for Less parametric mixins ([#5378](https://github.com/stylelint/stylelint/pull/5378)). From 421b07303cf9308893ec6198ea390aad4b099cc5 Mon Sep 17 00:00:00 2001 From: Boris Zhidkov Date: Tue, 10 Aug 2021 20:36:24 +0300 Subject: [PATCH 074/194] Add ignoreProperties: [] to number-max-precision (#5421) --- lib/rules/number-max-precision/README.md | 26 +++++ .../number-max-precision/__tests__/index.js | 100 ++++++++++++++++++ lib/rules/number-max-precision/index.js | 7 ++ 3 files changed, 133 insertions(+) diff --git a/lib/rules/number-max-precision/README.md b/lib/rules/number-max-precision/README.md index 415f27ba03..9415d59ccf 100644 --- a/lib/rules/number-max-precision/README.md +++ b/lib/rules/number-max-precision/README.md @@ -46,6 +46,32 @@ a { top: 3.24px; } ## Optional secondary options +### `ignoreProperties: ["/regex/", /regex/, "string"]` + +Ignore the precision of numbers for the specified properties. + +For example, with `0`. + +Given: + +```json +["transition"] +``` + +The following patterns are considered violations: + + +```css +a { top: 10.5px; } +``` + +The following patterns are _not_ considered violations: + + +```css +a { transition: all 4.5s ease; } +``` + ### `ignoreUnits: ["/regex/", /regex/, "string"]` Ignore the precision of numbers for values with the specified units. diff --git a/lib/rules/number-max-precision/__tests__/index.js b/lib/rules/number-max-precision/__tests__/index.js index 619b1ec084..cbf031d359 100644 --- a/lib/rules/number-max-precision/__tests__/index.js +++ b/lib/rules/number-max-precision/__tests__/index.js @@ -231,3 +231,103 @@ testRule({ }, ], }); + +testRule({ + ruleName, + config: [0, { ignoreProperties: ['letter-spacing', '/^my-/'] }], + + accept: [ + { + code: 'a { letter-spacing: 1.2px; }', + }, + { + code: 'a { my-prop: 3.1%; }', + }, + ], + + reject: [ + { + code: 'a { top: 3.1px; }', + message: messages.expected(3.1, 0), + line: 1, + column: 10, + }, + { + code: 'a { top: 3.123em; }', + message: messages.expected(3.123, 0), + line: 1, + column: 10, + }, + { + code: 'a { myprop: 6.123px 3.1234px; }', + warnings: [ + { + message: messages.expected(6.123, 0), + line: 1, + column: 13, + }, + { + message: messages.expected(3.1234, 0), + line: 1, + column: 21, + }, + ], + }, + ], +}); + +testRule({ + ruleName, + config: [ + 0, + { + ignoreProperties: ['letter-spacing', '/^my-/'], + ignoreUnits: ['%', '/^my-/'], + }, + ], + + accept: [ + { + code: 'a { letter-spacing: 1.2px; }', + }, + { + code: 'a { my-prop: 3.1%; }', + }, + { + code: 'a { top: 1.2%; }', + }, + { + code: 'a { top: 1.2my-unit; }', + }, + ], + + reject: [ + { + code: 'a { top: 3.1px; }', + message: messages.expected(3.1, 0), + line: 1, + column: 10, + }, + { + code: 'a { top: 3.123em; }', + message: messages.expected(3.123, 0), + line: 1, + column: 10, + }, + { + code: 'a { myprop: 6.123px 3.1234px; }', + warnings: [ + { + message: messages.expected(6.123, 0), + line: 1, + column: 13, + }, + { + message: messages.expected(3.1234, 0), + line: 1, + column: 21, + }, + ], + }, + ], +}); diff --git a/lib/rules/number-max-precision/index.js b/lib/rules/number-max-precision/index.js index 9907539e73..9377967ccf 100644 --- a/lib/rules/number-max-precision/index.js +++ b/lib/rules/number-max-precision/index.js @@ -32,6 +32,7 @@ function rule(precision, options) { optional: true, actual: options, possible: { + ignoreProperties: [isString, isRegExp], ignoreUnits: [isString, isRegExp], }, }, @@ -57,6 +58,12 @@ function rule(precision, options) { return; } + const prop = node.prop; + + if (optionsMatches(options, 'ignoreProperties', prop)) { + return; + } + valueParser(value).walk((valueNode) => { const unit = getUnitFromValueNode(valueNode); From 8da523fed4e761b98a253026948eef73758a3fac Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Tue, 10 Aug 2021 18:38:12 +0100 Subject: [PATCH 075/194] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3fcf075ca2..97b758059f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ All notable changes to this project are documented in this file. - Added: `custom-property-no-missing-var-function` rule ([#5317](https://github.com/stylelint/stylelint/pull/5317)). - Added: `function-calc-no-unspaced-operator` autofix ([#5273](https://github.com/stylelint/stylelint/pull/5273)). - Added: `ignoreFunctions: []` to `length-zero-no-unit` ([#5314](https://github.com/stylelint/stylelint/pull/5314)). +- Added: `ignoreProperties: []` to `number-max-precision` ([#5421](https://github.com/stylelint/stylelint/pull/5421)). - Fixed: "No files matching the pattern" when using backslash paths on Windows ([#5386](https://github.com/stylelint/stylelint/pull/5386)). - Fixed: `length-zero-no-unit` false positives for `flex` property ([#5315](https://github.com/stylelint/stylelint/pull/5315)). - Fixed: `media-feature-name-no-unknown` false positives for `prefers-contrast` ([#5428](https://github.com/stylelint/stylelint/pull/5428)). From ba36aaf9e43e54362ae6205c402790cdee2a59e2 Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Thu, 12 Aug 2021 00:11:16 +0900 Subject: [PATCH 076/194] Set `target-branch` for Dependabot (#5439) See also: https://docs.github.com/en/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/configuration-options-for-dependency-updates#target-branch --- .github/dependabot.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 51c9edbfb8..c67d1285ae 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -8,3 +8,4 @@ updates: labels: - 'pr: dependencies' versioning-strategy: increase + target-branch: 'v14' # TODO: Remove when releasing v14. From 28c7ffc3765c961d306357fe091a64f6434b45ec Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Thu, 12 Aug 2021 18:22:40 +0900 Subject: [PATCH 077/194] Refactor to improve types for `color-*` rules (#5440) --- lib/reference/namedColorData.js | 1 + lib/rules/color-function-notation/index.js | 22 +++++++++---- lib/rules/color-hex-alpha/index.js | 15 +++++++-- lib/rules/color-hex-case/index.js | 17 ++++++---- lib/rules/color-hex-length/index.js | 30 +++++++++++++----- lib/rules/color-named/generateColorFuncs.js | 35 +++++++++++++++++++-- lib/rules/color-named/index.js | 30 +++++++++--------- lib/rules/color-no-hex/index.js | 15 ++++++--- lib/rules/color-no-invalid-hex/index.js | 9 +++--- 9 files changed, 125 insertions(+), 49 deletions(-) diff --git a/lib/reference/namedColorData.js b/lib/reference/namedColorData.js index 4140eb82a2..d9c85c0b85 100644 --- a/lib/reference/namedColorData.js +++ b/lib/reference/namedColorData.js @@ -1,5 +1,6 @@ 'use strict'; +/** @type {Record} */ module.exports = { aliceblue: ['#f0f8ff', '#fff0f8ff'], antiquewhite: ['#faebd7', '#fffaebd7'], diff --git a/lib/rules/color-function-notation/index.js b/lib/rules/color-function-notation/index.js index 46c07ecf50..d48e7f289a 100644 --- a/lib/rules/color-function-notation/index.js +++ b/lib/rules/color-function-notation/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const valueParser = require('postcss-value-parser'); @@ -20,7 +18,8 @@ const messages = ruleMessages(ruleName, { const LEGACY_FUNCS = new Set(['rgba', 'hsla']); const LEGACY_NOTATION_FUNCS = new Set(['rgb', 'rgba', 'hsl', 'hsla']); -function rule(primary, secondary, context) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, _secondaryOptions, context) => { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: primary, @@ -34,9 +33,9 @@ function rule(primary, secondary, context) { const parsedValue = valueParser(getDeclarationValue(decl)); parsedValue.walk((node) => { - const { value, type, sourceIndex, nodes } = node; + if (node.type !== 'function') return; - if (type !== 'function') return; + const { value, sourceIndex, nodes } = node; if (!LEGACY_NOTATION_FUNCS.has(value.toLowerCase())) return; @@ -52,6 +51,7 @@ function rule(primary, secondary, context) { if (isComma(childNode)) { // Non-alpha commas to space and alpha commas to slashes if (commaCount < 2) { + // @ts-expect-error -- TS2322: Type '"space"' is not assignable to type '"div"'. childNode.type = 'space'; childNode.value = atLeastOneSpace(childNode.after); commaCount++; @@ -89,16 +89,26 @@ function rule(primary, secondary, context) { } }); }; -} +}; +/** + * @param {string} whitespace + */ function atLeastOneSpace(whitespace) { return whitespace !== '' ? whitespace : ' '; } +/** + * @param {import('postcss-value-parser').Node} node + * @returns {node is import('postcss-value-parser').DivNode} + */ function isComma(node) { return node.type === 'div' && node.value === ','; } +/** + * @param {import('postcss-value-parser').FunctionNode} node + */ function hasCommas(node) { return node.nodes && node.nodes.some((childNode) => isComma(childNode)); } diff --git a/lib/rules/color-hex-alpha/index.js b/lib/rules/color-hex-alpha/index.js index 99d917e69b..5c04e62ade 100644 --- a/lib/rules/color-hex-alpha/index.js +++ b/lib/rules/color-hex-alpha/index.js @@ -1,4 +1,3 @@ -// @ts-nocheck 'use strict'; const declarationValueIndex = require('../../utils/declarationValueIndex'); @@ -16,7 +15,8 @@ const messages = ruleMessages(ruleName, { const HEX = /^#([\da-f]{3,4}|[\da-f]{6}|[\da-f]{8})$/i; -function rule(primary) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary) => { return (root, result) => { const validOptions = validateOptions(result, ruleName, { actual: primary, @@ -49,16 +49,25 @@ function rule(primary) { }); }); }; -} +}; +/** + * @param {import('postcss-value-parser').Node} node + */ function isUrlFunction({ type, value }) { return type === 'function' && value === 'url'; } +/** + * @param {import('postcss-value-parser').Node} node + */ function isHexColor({ type, value }) { return type === 'word' && HEX.test(value); } +/** + * @param {string} hex + */ function hasAlphaChannel(hex) { return hex.length === 5 || hex.length === 9; } diff --git a/lib/rules/color-hex-case/index.js b/lib/rules/color-hex-case/index.js index dd628f468e..a99d484081 100644 --- a/lib/rules/color-hex-case/index.js +++ b/lib/rules/color-hex-case/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const valueParser = require('postcss-value-parser'); @@ -20,10 +18,11 @@ const messages = ruleMessages(ruleName, { const HEX = /^#[0-9A-Za-z]+/; const IGNORED_FUNCTIONS = new Set(['url']); -function rule(expectation, options, context) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, _secondaryOptions, context) => { return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: ['lower', 'upper'], }); @@ -42,7 +41,7 @@ function rule(expectation, options, context) { if (!isHexColor(node)) return; - const expected = expectation === 'lower' ? value.toLowerCase() : value.toUpperCase(); + const expected = primary === 'lower' ? value.toLowerCase() : value.toUpperCase(); if (value === expected) return; @@ -67,12 +66,18 @@ function rule(expectation, options, context) { } }); }; -} +}; +/** + * @param {import('postcss-value-parser').Node} node + */ function isIgnoredFunction({ type, value }) { return type === 'function' && IGNORED_FUNCTIONS.has(value.toLowerCase()); } +/** + * @param {import('postcss-value-parser').Node} node + */ function isHexColor({ type, value }) { return type === 'word' && HEX.test(value); } diff --git a/lib/rules/color-hex-length/index.js b/lib/rules/color-hex-length/index.js index 2d2ecefcbf..1b75a1e001 100644 --- a/lib/rules/color-hex-length/index.js +++ b/lib/rules/color-hex-length/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const valueParser = require('postcss-value-parser'); @@ -20,10 +18,11 @@ const messages = ruleMessages(ruleName, { const HEX = /^#[0-9A-Za-z]+/; const IGNORED_FUNCTIONS = new Set(['url']); -function rule(expectation, _, context) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, _secondaryOptions, context) => { return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: ['short', 'long'], }); @@ -42,15 +41,15 @@ function rule(expectation, _, context) { if (!isHexColor(node)) return; - if (expectation === 'long' && hexValue.length !== 4 && hexValue.length !== 5) { + if (primary === 'long' && hexValue.length !== 4 && hexValue.length !== 5) { return; } - if (expectation === 'short' && (hexValue.length < 6 || !canShrink(hexValue))) { + if (primary === 'short' && (hexValue.length < 6 || !canShrink(hexValue))) { return; } - const variant = expectation === 'long' ? longer : shorter; + const variant = primary === 'long' ? longer : shorter; const expectedHex = variant(hexValue); if (context.fix) { @@ -74,8 +73,11 @@ function rule(expectation, _, context) { } }); }; -} +}; +/** + * @param {string} hex + */ function canShrink(hex) { hex = hex.toLowerCase(); @@ -87,6 +89,9 @@ function canShrink(hex) { ); } +/** + * @param {string} hex + */ function shorter(hex) { let hexVariant = '#'; @@ -97,6 +102,9 @@ function shorter(hex) { return hexVariant; } +/** + * @param {string} hex + */ function longer(hex) { let hexVariant = '#'; @@ -107,10 +115,16 @@ function longer(hex) { return hexVariant; } +/** + * @param {import('postcss-value-parser').Node} node + */ function isIgnoredFunction({ type, value }) { return type === 'function' && IGNORED_FUNCTIONS.has(value.toLowerCase()); } +/** + * @param {import('postcss-value-parser').Node} node + */ function isHexColor({ type, value }) { return type === 'word' && HEX.test(value); } diff --git a/lib/rules/color-named/generateColorFuncs.js b/lib/rules/color-named/generateColorFuncs.js index ae8ae0e7d0..6b8b3f5073 100644 --- a/lib/rules/color-named/generateColorFuncs.js +++ b/lib/rules/color-named/generateColorFuncs.js @@ -1,9 +1,10 @@ -// @ts-nocheck - 'use strict'; // these algorithms are sourced from https://drafts.csswg.org/css-color/#color-conversion-code +/** + * @param {number[]} RGB + */ function lin_sRGB(RGB) { // convert an array of sRGB values in the range 0.0 - 1.0 // to linear light (un-companded) form. @@ -17,6 +18,10 @@ function lin_sRGB(RGB) { }); } +/** + * @param {number[][]} matrix + * @param {number[]} vector + */ function matrixMultiple3d(matrix, vector) { return [ matrix[0][0] * vector[0] + matrix[0][1] * vector[1] + matrix[0][2] * vector[2], @@ -25,6 +30,9 @@ function matrixMultiple3d(matrix, vector) { ]; } +/** + * @param {number[]} srgb + */ function srgb2xyz(srgb) { return matrixMultiple3d( [ @@ -36,6 +44,9 @@ function srgb2xyz(srgb) { ); } +/** + * @param {number[]} xyz + */ function chromaticAdaptationD65_D50(xyz) { return matrixMultiple3d( [ @@ -47,6 +58,9 @@ function chromaticAdaptationD65_D50(xyz) { ); } +/** + * @param {number[]} xyzIn + */ function xyz2lab(xyzIn) { // Assuming XYZ is relative to D50, convert to CIE Lab // from CIE standard, which now defines these as a rational fraction @@ -73,6 +87,11 @@ function xyz2lab(xyzIn) { ]; } +/** + * @param {number} r + * @param {number} g + * @param {number} b + */ function rgb2hsl(r, g, b) { r /= 255; g /= 255; @@ -110,6 +129,11 @@ function rgb2hsl(r, g, b) { return [Math.round(h), Math.round(s), Math.round(l)]; } +/** + * @param {number} rgb_r + * @param {number} rgb_g + * @param {number} rgb_b + */ function rgb2hwb(rgb_r, rgb_g, rgb_b) { rgb_r /= 255; rgb_g /= 255; @@ -134,10 +158,17 @@ function rgb2hwb(rgb_r, rgb_g, rgb_b) { ]; } +/** + * @param {number} value + */ function perc255(value) { return `${Math.round((value * 100) / 255)}%`; } +/** + * @param {string} hexString + * @returns {string[]} + */ function generateColorFuncs(hexString) { if (hexString.length !== 7) { throw new Error( diff --git a/lib/rules/color-named/index.js b/lib/rules/color-named/index.js index 6f03589fc3..afe5e2019f 100644 --- a/lib/rules/color-named/index.js +++ b/lib/rules/color-named/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const declarationValueIndex = require('../../utils/declarationValueIndex'); @@ -27,17 +25,18 @@ const messages = ruleMessages(ruleName, { // Todo tested on case insensitivity const NODE_TYPES = new Set(['word', 'function']); -function rule(expectation, options) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, secondaryOptions) => { return (root, result) => { const validOptions = validateOptions( result, ruleName, { - actual: expectation, + actual: primary, possible: ['never', 'always-where-possible'], }, { - actual: options, + actual: secondaryOptions, possible: { ignoreProperties: [isString, isRegExp], ignore: ['inside-function'], @@ -51,6 +50,8 @@ function rule(expectation, options) { } const namedColors = Object.keys(namedColorDataHex); + + /** @type {Record} */ const namedColorData = {}; namedColors.forEach((name) => { @@ -68,7 +69,7 @@ function rule(expectation, options) { } // Return early if the property is to be ignored - if (optionsMatches(options, 'ignoreProperties', decl.prop)) { + if (optionsMatches(secondaryOptions, 'ignoreProperties', decl.prop)) { return; } @@ -77,7 +78,7 @@ function rule(expectation, options) { const type = node.type; const sourceIndex = node.sourceIndex; - if (optionsMatches(options, 'ignore', 'inside-function') && type === 'function') { + if (optionsMatches(secondaryOptions, 'ignore', 'inside-function') && type === 'function') { return false; } @@ -95,18 +96,14 @@ function rule(expectation, options) { } // Check for named colors for "never" option - if ( - expectation === 'never' && - type === 'word' && - namedColors.includes(value.toLowerCase()) - ) { + if (primary === 'never' && type === 'word' && namedColors.includes(value.toLowerCase())) { complain(messages.rejected(value), decl, declarationValueIndex(decl) + sourceIndex); return; } // Check "always-where-possible" option ... - if (expectation !== 'always-where-possible') { + if (primary !== 'always-where-possible') { return; } @@ -152,6 +149,11 @@ function rule(expectation, options) { }); }); + /** + * @param {string} message + * @param {import('postcss').Node} node + * @param {number} index + */ function complain(message, node, index) { report({ result, @@ -162,7 +164,7 @@ function rule(expectation, options) { }); } }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/color-no-hex/index.js b/lib/rules/color-no-hex/index.js index 5eba7f36c4..65e49aa3f9 100644 --- a/lib/rules/color-no-hex/index.js +++ b/lib/rules/color-no-hex/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const valueParser = require('postcss-value-parser'); @@ -19,9 +17,10 @@ const messages = ruleMessages(ruleName, { const HEX = /^#[0-9A-Za-z]+/; const IGNORED_FUNCTIONS = new Set(['url']); -function rule(actual) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary) => { return (root, result) => { - const validOptions = validateOptions(result, ruleName, { actual }); + const validOptions = validateOptions(result, ruleName, { actual: primary }); if (!validOptions) { return; @@ -45,12 +44,18 @@ function rule(actual) { }); }); }; -} +}; +/** + * @param {import('postcss-value-parser').Node} node + */ function isIgnoredFunction({ type, value }) { return type === 'function' && IGNORED_FUNCTIONS.has(value.toLowerCase()); } +/** + * @param {import('postcss-value-parser').Node} node + */ function isHexColor({ type, value }) { return type === 'word' && HEX.test(value); } diff --git a/lib/rules/color-no-invalid-hex/index.js b/lib/rules/color-no-invalid-hex/index.js index a7eed667bc..e4a353f9d7 100644 --- a/lib/rules/color-no-invalid-hex/index.js +++ b/lib/rules/color-no-invalid-hex/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const declarationValueIndex = require('../../utils/declarationValueIndex'); @@ -15,9 +13,10 @@ const messages = ruleMessages(ruleName, { rejected: (hex) => `Unexpected invalid hex color "${hex}"`, }); -function rule(actual) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary) => { return (root, result) => { - const validOptions = validateOptions(result, ruleName, { actual }); + const validOptions = validateOptions(result, ruleName, { actual: primary }); if (!validOptions) { return; @@ -47,7 +46,7 @@ function rule(actual) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; From ecd9c39172a01aa1bb341d8c3dbdcc97bd7cc5c8 Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Thu, 12 Aug 2021 19:39:09 +0900 Subject: [PATCH 078/194] Refactor to improve types for `comment-*` rules (#5454) * Refactor to improve types for `comment-*` rules Also, this change extracts `lib/utils/isInlineComment.js` from `lib/assignDisabledRanges.js`. * Rename `isInlineComment` to `isStandardSyntaxComment` * Add test case for Sass comment --- lib/assignDisabledRanges.js | 22 ++------- lib/rules/comment-empty-line-before/index.js | 28 +++++------ lib/rules/comment-no-empty/index.js | 14 +++--- lib/rules/comment-pattern/index.js | 13 +++--- lib/rules/comment-whitespace-inside/index.js | 40 +++++++++++----- .../comment-word-disallowed-list/index.js | 11 ++--- .../__tests__/isStandardSyntaxComment.test.js | 46 +++++++++++++++++++ lib/utils/isStandardSyntaxComment.js | 15 ++++++ 8 files changed, 126 insertions(+), 63 deletions(-) mode change 100755 => 100644 lib/rules/comment-whitespace-inside/index.js create mode 100644 lib/utils/__tests__/isStandardSyntaxComment.test.js create mode 100644 lib/utils/isStandardSyntaxComment.js diff --git a/lib/assignDisabledRanges.js b/lib/assignDisabledRanges.js index 26f6c4f665..1255b49f00 100644 --- a/lib/assignDisabledRanges.js +++ b/lib/assignDisabledRanges.js @@ -1,5 +1,7 @@ 'use strict'; +const isStandardSyntaxComment = require('./utils/isStandardSyntaxComment'); + const COMMAND_PREFIX = 'stylelint-'; const disableCommand = `${COMMAND_PREFIX}disable`; const enableCommand = `${COMMAND_PREFIX}enable`; @@ -75,7 +77,7 @@ module.exports = function (root, result) { // If any of these conditions are not met, do not merge comments. if ( !( - isInlineComment(comment) && + !isStandardSyntaxComment(comment) && isStylelintCommand(comment) && nextComment && nextComment.type === 'comment' && @@ -92,7 +94,7 @@ module.exports = function (root, result) { let current = nextComment; - while (isInlineComment(current) && !isStylelintCommand(current)) { + while (!isStandardSyntaxComment(current) && !isStylelintCommand(current)) { const currentLine = (current.source && current.source.end && current.source.end.line) || 0; if (lastLine + 1 !== currentLine) break; @@ -117,22 +119,6 @@ module.exports = function (root, result) { return result; - /** @typedef {import('postcss').Comment & { raws: { inline?: boolean } }} PostcssSassComment */ - - /** - * @param {PostcssComment | import('postcss-less').Comment | PostcssSassComment} comment - * @return {boolean} - */ - function isInlineComment(comment) { - // We check both here because the Sass parser uses `raws.inline` to indicate - // inline comments, while the Less parser uses `inline`. - if ('inline' in comment) return comment.inline; - - if ('inline' in comment.raws) return Boolean(comment.raws.inline); - - return false; - } - /** * @param {PostcssComment} comment */ diff --git a/lib/rules/comment-empty-line-before/index.js b/lib/rules/comment-empty-line-before/index.js index 058ba25082..7f6eeea032 100644 --- a/lib/rules/comment-empty-line-before/index.js +++ b/lib/rules/comment-empty-line-before/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const addEmptyLineBefore = require('../../utils/addEmptyLineBefore'); @@ -8,6 +6,7 @@ const isAfterComment = require('../../utils/isAfterComment'); const isFirstNested = require('../../utils/isFirstNested'); const isFirstNodeOfRoot = require('../../utils/isFirstNodeOfRoot'); const isSharedLineComment = require('../../utils/isSharedLineComment'); +const isStandardSyntaxComment = require('../../utils/isStandardSyntaxComment'); const optionsMatches = require('../../utils/optionsMatches'); const removeEmptyLinesBefore = require('../../utils/removeEmptyLinesBefore'); const report = require('../../utils/report'); @@ -24,17 +23,18 @@ const messages = ruleMessages(ruleName, { const stylelintCommandPrefix = 'stylelint-'; -function rule(expectation, options, context) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, secondaryOptions, context) => { return (root, result) => { const validOptions = validateOptions( result, ruleName, { - actual: expectation, + actual: primary, possible: ['always', 'never'], }, { - actual: options, + actual: secondaryOptions, possible: { except: ['first-nested'], ignore: ['stylelint-commands', 'after-comment'], @@ -57,18 +57,18 @@ function rule(expectation, options, context) { // Optionally ignore stylelint commands if ( comment.text.startsWith(stylelintCommandPrefix) && - optionsMatches(options, 'ignore', 'stylelint-commands') + optionsMatches(secondaryOptions, 'ignore', 'stylelint-commands') ) { return; } // Optionally ignore newlines between comments - if (optionsMatches(options, 'ignore', 'after-comment') && isAfterComment(comment)) { + if (optionsMatches(secondaryOptions, 'ignore', 'after-comment') && isAfterComment(comment)) { return; } // Ignore comments matching the ignoreComments option. - if (optionsMatches(options, 'ignoreComments', comment.text)) { + if (optionsMatches(secondaryOptions, 'ignoreComments', comment.text)) { return; } @@ -77,17 +77,17 @@ function rule(expectation, options, context) { return; } - // Ignore SCSS comments - if (comment.raws.inline || comment.inline) { + // Ignore non-standard comments + if (!isStandardSyntaxComment(comment)) { return; } const expectEmptyLineBefore = (() => { - if (optionsMatches(options, 'except', 'first-nested') && isFirstNested(comment)) { + if (optionsMatches(secondaryOptions, 'except', 'first-nested') && isFirstNested(comment)) { return false; } - return expectation === 'always'; + return primary === 'always'; })(); const before = comment.raws.before || ''; @@ -100,6 +100,8 @@ function rule(expectation, options, context) { // Fix if (context.fix) { + if (typeof context.newline !== 'string') return; + if (expectEmptyLineBefore) { addEmptyLineBefore(comment, context.newline); } else { @@ -119,7 +121,7 @@ function rule(expectation, options, context) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/comment-no-empty/index.js b/lib/rules/comment-no-empty/index.js index ffe66ff4fb..57a9ebcf27 100644 --- a/lib/rules/comment-no-empty/index.js +++ b/lib/rules/comment-no-empty/index.js @@ -1,7 +1,6 @@ -// @ts-nocheck - 'use strict'; +const isStandardSyntaxComment = require('../../utils/isStandardSyntaxComment'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); @@ -12,17 +11,18 @@ const messages = ruleMessages(ruleName, { rejected: 'Unexpected empty comment', }); -function rule(actual) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary) => { return (root, result) => { - const validOptions = validateOptions(result, ruleName, { actual }); + const validOptions = validateOptions(result, ruleName, { actual: primary }); if (!validOptions) { return; } root.walkComments((comment) => { - // To ignore inline SCSS comments - if (comment.raws.inline || comment.inline) { + // To ignore non-standard comments + if (!isStandardSyntaxComment(comment)) { return; } @@ -39,7 +39,7 @@ function rule(actual) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/comment-pattern/index.js b/lib/rules/comment-pattern/index.js index e6fc1d4b4a..aacb46708e 100644 --- a/lib/rules/comment-pattern/index.js +++ b/lib/rules/comment-pattern/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const report = require('../../utils/report'); @@ -13,10 +11,11 @@ const messages = ruleMessages(ruleName, { expected: (pattern) => `Expected comment to match pattern "${pattern}"`, }); -function rule(pattern) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary) => { return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: pattern, + actual: primary, possible: [isRegExp, isString], }); @@ -24,7 +23,7 @@ function rule(pattern) { return; } - const normalizedPattern = isString(pattern) ? new RegExp(pattern) : pattern; + const normalizedPattern = isString(primary) ? new RegExp(primary) : primary; root.walkComments((comment) => { const text = comment.text; @@ -34,14 +33,14 @@ function rule(pattern) { } report({ - message: messages.expected(pattern), + message: messages.expected(primary), node: comment, result, ruleName, }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/comment-whitespace-inside/index.js b/lib/rules/comment-whitespace-inside/index.js old mode 100755 new mode 100644 index c9640ba234..e895a8ab38 --- a/lib/rules/comment-whitespace-inside/index.js +++ b/lib/rules/comment-whitespace-inside/index.js @@ -1,7 +1,6 @@ -// @ts-nocheck - 'use strict'; +const isStandardSyntaxComment = require('../../utils/isStandardSyntaxComment'); const isWhitespace = require('../../utils/isWhitespace'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); @@ -16,6 +15,9 @@ const messages = ruleMessages(ruleName, { rejectedClosing: 'Unexpected whitespace before "*/"', }); +/** + * @param {import('postcss').Comment} comment + */ function addWhitespaceBefore(comment) { if (comment.text.startsWith('*')) { comment.text = comment.text.replace(/^(\*+)/, `$1 `); @@ -24,6 +26,9 @@ function addWhitespaceBefore(comment) { } } +/** + * @param {import('postcss').Comment} comment + */ function addWhitespaceAfter(comment) { if (comment.text[comment.text.length - 1] === '*') { comment.text = comment.text.replace(/(\*+)$/, ` $1`); @@ -32,10 +37,11 @@ function addWhitespaceAfter(comment) { } } -function rule(expectation, options, context) { - return function (root, result) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, _secondaryOptions, context) => { + return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: ['always', 'never'], }); @@ -44,7 +50,7 @@ function rule(expectation, options, context) { } root.walkComments((comment) => { - if (comment.raws.inline || comment.inline) { + if (!isStandardSyntaxComment(comment)) { return; } @@ -57,31 +63,41 @@ function rule(expectation, options, context) { } const leftMatches = rawComment.match(/(^\/\*+)(\s)?/); + + if (leftMatches == null) throw new Error(`Invalid comment: "${rawComment}"`); + const rightMatches = rawComment.match(/(\s)?(\*+\/)$/); + + if (rightMatches == null) throw new Error(`Invalid comment: "${rawComment}"`); + const opener = leftMatches[1]; const leftSpace = leftMatches[2] || ''; const rightSpace = rightMatches[1] || ''; const closer = rightMatches[2]; - if (expectation === 'never' && leftSpace !== '') { + if (primary === 'never' && leftSpace !== '') { complain(messages.rejectedOpening, opener.length); } - if (expectation === 'always' && !isWhitespace(leftSpace)) { + if (primary === 'always' && !isWhitespace(leftSpace)) { complain(messages.expectedOpening, opener.length); } - if (expectation === 'never' && rightSpace !== '') { + if (primary === 'never' && rightSpace !== '') { complain(messages.rejectedClosing, comment.toString().length - closer.length - 1); } - if (expectation === 'always' && !isWhitespace(rightSpace)) { + if (primary === 'always' && !isWhitespace(rightSpace)) { complain(messages.expectedClosing, comment.toString().length - closer.length - 1); } + /** + * @param {string} message + * @param {number} index + */ function complain(message, index) { if (context.fix) { - if (expectation === 'never') { + if (primary === 'never') { comment.raws.left = ''; comment.raws.right = ''; comment.text = comment.text.replace(/^(\*+)(\s+)?/, '$1').replace(/(\s+)?(\*+)$/, '$2'); @@ -108,7 +124,7 @@ function rule(expectation, options, context) { } }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/comment-word-disallowed-list/index.js b/lib/rules/comment-word-disallowed-list/index.js index 9d6e78f8a3..c1802c33cf 100644 --- a/lib/rules/comment-word-disallowed-list/index.js +++ b/lib/rules/comment-word-disallowed-list/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const containsString = require('../../utils/containsString'); @@ -15,10 +13,11 @@ const messages = ruleMessages(ruleName, { rejected: (pattern) => `Unexpected word matching pattern "${pattern}"`, }); -function rule(list) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary) => { return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: list, + actual: primary, possible: [isString, isRegExp], }); @@ -36,7 +35,7 @@ function rule(list) { return; } - const matchesWord = matchesStringOrRegExp(text, list) || containsString(text, list); + const matchesWord = matchesStringOrRegExp(text, primary) || containsString(text, primary); if (!matchesWord) { return; @@ -50,7 +49,7 @@ function rule(list) { }); }); }; -} +}; rule.primaryOptionArray = true; diff --git a/lib/utils/__tests__/isStandardSyntaxComment.test.js b/lib/utils/__tests__/isStandardSyntaxComment.test.js new file mode 100644 index 0000000000..5d5e917dbf --- /dev/null +++ b/lib/utils/__tests__/isStandardSyntaxComment.test.js @@ -0,0 +1,46 @@ +'use strict'; + +const isStandardSyntaxComment = require('../isStandardSyntaxComment'); + +const postcss = require('postcss'); +const postcssLess = require('postcss-less'); +const postcssSass = require('postcss-sass'); +const postcssScss = require('postcss-scss'); + +describe('isStandardSyntaxComment', () => { + test('standard single-line comment', () => { + expect(isStandardSyntaxComment(css('/* foo */'))).toBe(true); + }); + + test('standard multi-line comment', () => { + expect(isStandardSyntaxComment(css('/*\n foo \n*/'))).toBe(true); + }); + + test('LESS inline comment', () => { + expect(isStandardSyntaxComment(less('// foo'))).toBe(false); + }); + + test('Sass inline comment', () => { + expect(isStandardSyntaxComment(sass('// foo'))).toBe(false); + }); + + test('SCSS inline comment', () => { + expect(isStandardSyntaxComment(scss('// foo'))).toBe(false); + }); +}); + +function css(code) { + return postcss.parse(code).first; +} + +function less(code) { + return postcssLess.parse(code).first; +} + +function sass(code) { + return postcssSass.parse(code).first; +} + +function scss(code) { + return postcssScss.parse(code).first; +} diff --git a/lib/utils/isStandardSyntaxComment.js b/lib/utils/isStandardSyntaxComment.js new file mode 100644 index 0000000000..0687814da0 --- /dev/null +++ b/lib/utils/isStandardSyntaxComment.js @@ -0,0 +1,15 @@ +'use strict'; + +/** + * @param {import('postcss').Comment} comment + * @returns {boolean} + */ +module.exports = function isStandardSyntaxComment(comment) { + // We check both here because the Sass parser uses `raws.inline` to indicate + // inline comments, while the Less parser uses `inline`. + if ('inline' in comment) return false; + + if ('inline' in comment.raws) return false; + + return true; +}; From 3811f0a1ec1ef7ae27b56a66242f99635f3b93ee Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 11:42:15 +0100 Subject: [PATCH 079/194] Bump @types/postcss-less from 4.0.0 to 4.0.1 (#5455) Bumps [@types/postcss-less](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/postcss-less) from 4.0.0 to 4.0.1. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/postcss-less) --- updated-dependencies: - dependency-name: "@types/postcss-less" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 19 ++++++++----------- package.json | 2 +- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5d9190e5bd..340533791d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -64,7 +64,7 @@ "@types/imurmurhash": "^0.1.1", "@types/micromatch": "^4.0.1", "@types/normalize-path": "^3.0.0", - "@types/postcss-less": "^4.0.0", + "@types/postcss-less": "^4.0.1", "@types/postcss-safe-parser": "^5.0.0", "@types/style-search": "^0.1.1", "@types/svg-tags": "^1.0.0", @@ -1249,9 +1249,9 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "node_modules/@types/postcss-less": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/postcss-less/-/postcss-less-4.0.0.tgz", - "integrity": "sha512-9yb3NxnrjMbLvlKNWJSllAZ6iB3slX6NiXrdBMS7dfKOg2s2sT0JghGEiPBjsFizQnf0lfDBzHP7flyKGfDuew==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/postcss-less/-/postcss-less-4.0.1.tgz", + "integrity": "sha512-ha/AILmAjxi81Gzqzvh1724EsPkreQYjwoml3j8MAjjNKbVIt7CU/x4nBgry4X+BJ2XivMGL+kxoW9b5SggNrg==", "dev": true, "dependencies": { "postcss": "^8.1.2" @@ -2159,7 +2159,6 @@ "dependencies": { "anymatch": "~3.1.1", "braces": "~3.0.2", - "fsevents": "~2.1.2", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", @@ -3013,8 +3012,7 @@ "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" + "optionator": "^0.8.1" }, "bin": { "escodegen": "bin/escodegen.js", @@ -5236,7 +5234,6 @@ "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", "graceful-fs": "^4.2.4", "jest-regex-util": "^27.0.1", "jest-serializer": "^27.0.1", @@ -11757,9 +11754,9 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "@types/postcss-less": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/postcss-less/-/postcss-less-4.0.0.tgz", - "integrity": "sha512-9yb3NxnrjMbLvlKNWJSllAZ6iB3slX6NiXrdBMS7dfKOg2s2sT0JghGEiPBjsFizQnf0lfDBzHP7flyKGfDuew==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/postcss-less/-/postcss-less-4.0.1.tgz", + "integrity": "sha512-ha/AILmAjxi81Gzqzvh1724EsPkreQYjwoml3j8MAjjNKbVIt7CU/x4nBgry4X+BJ2XivMGL+kxoW9b5SggNrg==", "dev": true, "requires": { "postcss": "^8.1.2" diff --git a/package.json b/package.json index 6239b4591c..7d2cf956d7 100644 --- a/package.json +++ b/package.json @@ -160,7 +160,7 @@ "@types/imurmurhash": "^0.1.1", "@types/micromatch": "^4.0.1", "@types/normalize-path": "^3.0.0", - "@types/postcss-less": "^4.0.0", + "@types/postcss-less": "^4.0.1", "@types/postcss-safe-parser": "^5.0.0", "@types/style-search": "^0.1.1", "@types/svg-tags": "^1.0.0", From 44bf0b4f7a0a3712a4829ed4095715d0ecca1b8a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 11:42:34 +0100 Subject: [PATCH 080/194] Bump known-css-properties from 0.21.0 to 0.23.0 (#5456) Bumps [known-css-properties](https://github.com/known-css/known-css-properties) from 0.21.0 to 0.23.0. - [Release notes](https://github.com/known-css/known-css-properties/releases) - [Commits](https://github.com/known-css/known-css-properties/compare/v0.21.0...v0.23.0) --- updated-dependencies: - dependency-name: known-css-properties dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 340533791d..30f8d56bd0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.21.0", + "known-css-properties": "^0.23.0", "log-symbols": "^4.1.0", "mathml-tag-names": "^2.1.3", "meow": "^9.0.0", @@ -5843,9 +5843,9 @@ } }, "node_modules/known-css-properties": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.21.0.tgz", - "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==" + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.23.0.tgz", + "integrity": "sha512-h9ivI88e1lFNmTT4HovBN33Ysn0OIJG7IPG2mkpx2uniQXFWqo35QdiX7w0TovlUFXfW8aPFblP5/q0jlOr2sA==" }, "node_modules/latest-version": { "version": "5.1.0", @@ -15316,9 +15316,9 @@ "dev": true }, "known-css-properties": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.21.0.tgz", - "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==" + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.23.0.tgz", + "integrity": "sha512-h9ivI88e1lFNmTT4HovBN33Ysn0OIJG7IPG2mkpx2uniQXFWqo35QdiX7w0TovlUFXfW8aPFblP5/q0jlOr2sA==" }, "latest-version": { "version": "5.1.0", diff --git a/package.json b/package.json index 7d2cf956d7..508c111899 100644 --- a/package.json +++ b/package.json @@ -125,7 +125,7 @@ "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.21.0", + "known-css-properties": "^0.23.0", "log-symbols": "^4.1.0", "mathml-tag-names": "^2.1.3", "meow": "^9.0.0", From d7bfefef3a6c0f3098a124d0ea8c6b3c67d55c4a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 12:31:05 +0100 Subject: [PATCH 081/194] Bump postcss-less from 4.0.1 to 5.0.0 (#5458) Bumps [postcss-less](https://github.com/shellscape/postcss-less) from 4.0.1 to 5.0.0. - [Release notes](https://github.com/shellscape/postcss-less/releases) - [Commits](https://github.com/shellscape/postcss-less/compare/v4.0.1...v5.0.0) --- updated-dependencies: - dependency-name: postcss-less dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 24 +++++++++--------------- package.json | 2 +- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 30f8d56bd0..f8650a4d09 100644 --- a/package-lock.json +++ b/package-lock.json @@ -82,7 +82,7 @@ "np": "^7.5.0", "npm-run-all": "^4.1.5", "postcss-import": "^14.0.2", - "postcss-less": "^4.0.1", + "postcss-less": "^5.0.0", "postcss-sass": "^0.5.0", "postcss-scss": "^3.0.5", "prettier": "2.2.1", @@ -8203,15 +8203,12 @@ } }, "node_modules/postcss-less": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-4.0.1.tgz", - "integrity": "sha512-C92S4sHlbDpefJ2QQJjrucCcypq3+KZPstjfuvgOCNnGx0tF9h8hXgAlOIATGAxMXZXaF+nVp+/Mi8pCAWdSmw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-5.0.0.tgz", + "integrity": "sha512-djK6NlApALJeBnNx7CzLatq64eMF3BCyzBH+faYPxrvNHHM/YCimJ6XQkgWgtim2G89EzdQG4Ed0lGNCXPfD7A==", "dev": true, - "dependencies": { - "postcss": "^8.1.2" - }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/postcss-media-query-parser": { @@ -17150,13 +17147,10 @@ } }, "postcss-less": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-4.0.1.tgz", - "integrity": "sha512-C92S4sHlbDpefJ2QQJjrucCcypq3+KZPstjfuvgOCNnGx0tF9h8hXgAlOIATGAxMXZXaF+nVp+/Mi8pCAWdSmw==", - "dev": true, - "requires": { - "postcss": "^8.1.2" - } + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-5.0.0.tgz", + "integrity": "sha512-djK6NlApALJeBnNx7CzLatq64eMF3BCyzBH+faYPxrvNHHM/YCimJ6XQkgWgtim2G89EzdQG4Ed0lGNCXPfD7A==", + "dev": true }, "postcss-media-query-parser": { "version": "0.2.3", diff --git a/package.json b/package.json index 508c111899..7d2a9c9c15 100644 --- a/package.json +++ b/package.json @@ -178,7 +178,7 @@ "np": "^7.5.0", "npm-run-all": "^4.1.5", "postcss-import": "^14.0.2", - "postcss-less": "^4.0.1", + "postcss-less": "^5.0.0", "postcss-sass": "^0.5.0", "postcss-scss": "^3.0.5", "prettier": "2.2.1", From 3d77ba364dbb39268c95b6ec3a09fedf9138eb50 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 12:31:23 +0100 Subject: [PATCH 082/194] Bump eslint from 7.25.0 to 7.32.0 (#5461) Bumps [eslint](https://github.com/eslint/eslint) from 7.25.0 to 7.32.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v7.25.0...v7.32.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 162 ++++++++++++++++++++++++++++++++-------------- package.json | 2 +- 2 files changed, 113 insertions(+), 51 deletions(-) diff --git a/package-lock.json b/package-lock.json index f8650a4d09..32d94417ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -71,7 +71,7 @@ "@types/write-file-atomic": "^3.0.1", "benchmark": "^2.1.4", "common-tags": "^1.8.0", - "eslint": "^7.25.0", + "eslint": "^7.32.0", "eslint-config-stylelint": "^13.1.1", "got": "^11.8.2", "husky": "^6.0.0", @@ -595,15 +595,15 @@ "dev": true }, "node_modules/@eslint/eslintrc": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", - "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.1.1", "espree": "^7.3.0", - "globals": "^12.1.0", + "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", @@ -615,12 +615,12 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", "dev": true, "dependencies": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" @@ -639,14 +639,37 @@ } }, "node_modules/@eslint/eslintrc/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": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -1471,9 +1494,9 @@ } }, "node_modules/acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -1523,6 +1546,10 @@ "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/ansi-align": { @@ -3086,28 +3113,31 @@ } }, "node_modules/eslint": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.25.0.tgz", - "integrity": "sha512-TVpSovpvCNpLURIScDRB6g5CYu/ZFq9GfX2hLNIV4dSBKxIWojeDODvYl3t0k0VtMxYeR8OXPCFE5+oHMlGfhw==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, "dependencies": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.0", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "espree": "^7.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", + "glob-parent": "^5.1.2", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", @@ -3116,7 +3146,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.21", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -3125,7 +3155,7 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^6.0.4", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -3868,9 +3898,9 @@ } }, "node_modules/glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { "is-glob": "^4.0.1" }, @@ -6605,6 +6635,12 @@ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", "dev": true }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -11187,15 +11223,15 @@ "dev": true }, "@eslint/eslintrc": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", - "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.1.1", "espree": "^7.3.0", - "globals": "^12.1.0", + "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", @@ -11204,12 +11240,12 @@ }, "dependencies": { "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" } }, "ignore": { @@ -11219,13 +11255,30 @@ "dev": true }, "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": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true } } }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -11920,9 +11973,9 @@ } }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "requires": {} }, @@ -13185,28 +13238,31 @@ } }, "eslint": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.25.0.tgz", - "integrity": "sha512-TVpSovpvCNpLURIScDRB6g5CYu/ZFq9GfX2hLNIV4dSBKxIWojeDODvYl3t0k0VtMxYeR8OXPCFE5+oHMlGfhw==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.0", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "espree": "^7.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", + "glob-parent": "^5.1.2", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", @@ -13215,7 +13271,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.21", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -13224,7 +13280,7 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^6.0.4", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -13795,9 +13851,9 @@ } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "requires": { "is-glob": "^4.0.1" } @@ -15908,6 +15964,12 @@ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", "dev": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", diff --git a/package.json b/package.json index 7d2a9c9c15..3d4781a58a 100644 --- a/package.json +++ b/package.json @@ -167,7 +167,7 @@ "@types/write-file-atomic": "^3.0.1", "benchmark": "^2.1.4", "common-tags": "^1.8.0", - "eslint": "^7.25.0", + "eslint": "^7.32.0", "eslint-config-stylelint": "^13.1.1", "got": "^11.8.2", "husky": "^6.0.0", From 9535568326d9462a92984e52afadb5fdb557117d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 12:32:26 +0100 Subject: [PATCH 083/194] Bump sugarss from 3.0.3 to 4.0.1 (#5459) Bumps [sugarss](https://github.com/postcss/sugarss) from 3.0.3 to 4.0.1. - [Release notes](https://github.com/postcss/sugarss/releases) - [Changelog](https://github.com/postcss/sugarss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/sugarss/commits/4.0.1) --- updated-dependencies: - dependency-name: sugarss dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 38 ++++++++++++++++++-------------------- package.json | 2 +- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/package-lock.json b/package-lock.json index 32d94417ae..8d97b679b0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -87,7 +87,7 @@ "postcss-scss": "^3.0.5", "prettier": "2.2.1", "remark-cli": "^9.0.0", - "sugarss": "^3.0.3", + "sugarss": "^4.0.1", "typescript": "^4.2.4" }, "engines": { @@ -8205,9 +8205,9 @@ } }, "node_modules/postcss": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz", - "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==", + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", + "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", "dependencies": { "colorette": "^1.2.2", "nanoid": "^3.1.23", @@ -9681,19 +9681,19 @@ "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=" }, "node_modules/sugarss": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-3.0.3.tgz", - "integrity": "sha512-uxa2bbuc+w7ov7DyYIhF6bM0qZF3UkFT5/nE8AJgboiVnKsBDbwxs++dehEIe1JNhpMaGJc37wGQ2QrrWey2Sg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-4.0.1.tgz", + "integrity": "sha512-WCjS5NfuVJjkQzK10s8WOBY+hhDxxNt/N6ZaGwxFZ+wN3/lKKFSaaKUNecULcTTvE4urLcKaZFQD8vO0mOZujw==", "dev": true, - "dependencies": { - "postcss": "^8.1.6" - }, "engines": { - "node": ">=10.0" + "node": ">=12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" } }, "node_modules/supports-color": { @@ -17188,9 +17188,9 @@ "dev": true }, "postcss": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz", - "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==", + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", + "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", "requires": { "colorette": "^1.2.2", "nanoid": "^3.1.23", @@ -18360,13 +18360,11 @@ "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=" }, "sugarss": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-3.0.3.tgz", - "integrity": "sha512-uxa2bbuc+w7ov7DyYIhF6bM0qZF3UkFT5/nE8AJgboiVnKsBDbwxs++dehEIe1JNhpMaGJc37wGQ2QrrWey2Sg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-4.0.1.tgz", + "integrity": "sha512-WCjS5NfuVJjkQzK10s8WOBY+hhDxxNt/N6ZaGwxFZ+wN3/lKKFSaaKUNecULcTTvE4urLcKaZFQD8vO0mOZujw==", "dev": true, - "requires": { - "postcss": "^8.1.6" - } + "requires": {} }, "supports-color": { "version": "5.5.0", diff --git a/package.json b/package.json index 3d4781a58a..c3e8f464d7 100644 --- a/package.json +++ b/package.json @@ -183,7 +183,7 @@ "postcss-scss": "^3.0.5", "prettier": "2.2.1", "remark-cli": "^9.0.0", - "sugarss": "^3.0.3", + "sugarss": "^4.0.1", "typescript": "^4.2.4" }, "engines": { From 2470f7fed86383ff47d3e6122fe2a5f3f3efa40f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 12:50:40 +0100 Subject: [PATCH 084/194] Bump postcss-safe-parser from 5.0.2 to 6.0.0 (#5457) Bumps [postcss-safe-parser](https://github.com/postcss/postcss-safe-parser) from 5.0.2 to 6.0.0. - [Release notes](https://github.com/postcss/postcss-safe-parser/releases) - [Changelog](https://github.com/postcss/postcss-safe-parser/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss-safe-parser/compare/5.0.2...6.0.0) --- updated-dependencies: - dependency-name: postcss-safe-parser dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 26 ++++++++++++-------------- package.json | 2 +- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8d97b679b0..72b8bc0c38 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,7 +36,7 @@ "postcss": "^8.3.0", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^5.0.2", + "postcss-safe-parser": "^6.0.0", "postcss-selector-parser": "^6.0.6", "postcss-value-parser": "^4.1.0", "resolve-from": "^5.0.0", @@ -8258,18 +8258,18 @@ "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=" }, "node_modules/postcss-safe-parser": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-5.0.2.tgz", - "integrity": "sha512-jDUfCPJbKOABhwpUKcqCVbbXiloe/QXMcbJ6Iipf3sDIihEzTqRCeMBfRaOHxhBuTYqtASrI1KJWxzztZU4qUQ==", - "dependencies": { - "postcss": "^8.1.0" - }, + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", "engines": { - "node": ">=10.0" + "node": ">=12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" } }, "node_modules/postcss-sass": { @@ -17225,12 +17225,10 @@ "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=" }, "postcss-safe-parser": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-5.0.2.tgz", - "integrity": "sha512-jDUfCPJbKOABhwpUKcqCVbbXiloe/QXMcbJ6Iipf3sDIihEzTqRCeMBfRaOHxhBuTYqtASrI1KJWxzztZU4qUQ==", - "requires": { - "postcss": "^8.1.0" - } + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "requires": {} }, "postcss-sass": { "version": "0.5.0", diff --git a/package.json b/package.json index c3e8f464d7..65befa80da 100644 --- a/package.json +++ b/package.json @@ -135,7 +135,7 @@ "postcss": "^8.3.0", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^5.0.2", + "postcss-safe-parser": "^6.0.0", "postcss-selector-parser": "^6.0.6", "postcss-value-parser": "^4.1.0", "resolve-from": "^5.0.0", From caaebde8ca135bb16516238ab789a9b41d98ff3e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 12:52:15 +0100 Subject: [PATCH 085/194] Bump postcss-scss from 3.0.5 to 4.0.0 (#5465) Bumps [postcss-scss](https://github.com/postcss/postcss-scss) from 3.0.5 to 4.0.0. - [Release notes](https://github.com/postcss/postcss-scss/releases) - [Changelog](https://github.com/postcss/postcss-scss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss-scss/compare/3.0.5...4.0.0) --- updated-dependencies: - dependency-name: postcss-scss dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 26 ++++++++++++-------------- package.json | 2 +- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index 72b8bc0c38..d4250193af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -84,7 +84,7 @@ "postcss-import": "^14.0.2", "postcss-less": "^5.0.0", "postcss-sass": "^0.5.0", - "postcss-scss": "^3.0.5", + "postcss-scss": "^4.0.0", "prettier": "2.2.1", "remark-cli": "^9.0.0", "sugarss": "^4.0.1", @@ -8286,19 +8286,19 @@ } }, "node_modules/postcss-scss": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-3.0.5.tgz", - "integrity": "sha512-3e0qYk87eczfzg5P73ZVuuxEGCBfatRhPze6KrSaIbEKVtmnFI1RYp1Fv+AyZi+w8kcNRSPeNX6ap4b65zEkiA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.0.tgz", + "integrity": "sha512-xakgIr5ukOEyXFcsnADKjQtrk8nQyqn5VIEAA+PmPP4kBOpknmjpJMxBNqCR1/x20AS0aSfZkWsSdbMx2Ozm5A==", "dev": true, - "dependencies": { - "postcss": "^8.2.7" - }, "engines": { - "node": ">=10.0" + "node": ">=12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" } }, "node_modules/postcss-selector-parser": { @@ -17241,13 +17241,11 @@ } }, "postcss-scss": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-3.0.5.tgz", - "integrity": "sha512-3e0qYk87eczfzg5P73ZVuuxEGCBfatRhPze6KrSaIbEKVtmnFI1RYp1Fv+AyZi+w8kcNRSPeNX6ap4b65zEkiA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.0.tgz", + "integrity": "sha512-xakgIr5ukOEyXFcsnADKjQtrk8nQyqn5VIEAA+PmPP4kBOpknmjpJMxBNqCR1/x20AS0aSfZkWsSdbMx2Ozm5A==", "dev": true, - "requires": { - "postcss": "^8.2.7" - } + "requires": {} }, "postcss-selector-parser": { "version": "6.0.6", diff --git a/package.json b/package.json index 65befa80da..3891b92b86 100644 --- a/package.json +++ b/package.json @@ -180,7 +180,7 @@ "postcss-import": "^14.0.2", "postcss-less": "^5.0.0", "postcss-sass": "^0.5.0", - "postcss-scss": "^3.0.5", + "postcss-scss": "^4.0.0", "prettier": "2.2.1", "remark-cli": "^9.0.0", "sugarss": "^4.0.1", From 7fc07ff6a8ab92727302398bd74a0d4794de88d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 12:52:38 +0100 Subject: [PATCH 086/194] Bump @types/micromatch from 4.0.1 to 4.0.2 (#5464) Bumps [@types/micromatch](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/micromatch) from 4.0.1 to 4.0.2. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/micromatch) --- updated-dependencies: - dependency-name: "@types/micromatch" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index d4250193af..203c71a95f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -62,7 +62,7 @@ "@types/global-modules": "^2.0.0", "@types/globjoin": "^0.1.0", "@types/imurmurhash": "^0.1.1", - "@types/micromatch": "^4.0.1", + "@types/micromatch": "^4.0.2", "@types/normalize-path": "^3.0.0", "@types/postcss-less": "^4.0.1", "@types/postcss-safe-parser": "^5.0.0", @@ -1230,9 +1230,9 @@ } }, "node_modules/@types/micromatch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.1.tgz", - "integrity": "sha512-my6fLBvpY70KattTNzYOK6KU1oR1+UCz9ug/JbcF5UrEmeCt9P7DV2t7L8+t18mMPINqGQCE4O8PLOPbI84gxw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-oqXqVb0ci19GtH0vOA/U2TmHTcRY9kuZl4mqUxe0QmJAlIW13kzhuK5pi1i9+ngav8FjpSb9FVS/GE00GLX1VA==", "dev": true, "dependencies": { "@types/braces": "*" @@ -11762,9 +11762,9 @@ } }, "@types/micromatch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.1.tgz", - "integrity": "sha512-my6fLBvpY70KattTNzYOK6KU1oR1+UCz9ug/JbcF5UrEmeCt9P7DV2t7L8+t18mMPINqGQCE4O8PLOPbI84gxw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-oqXqVb0ci19GtH0vOA/U2TmHTcRY9kuZl4mqUxe0QmJAlIW13kzhuK5pi1i9+ngav8FjpSb9FVS/GE00GLX1VA==", "dev": true, "requires": { "@types/braces": "*" diff --git a/package.json b/package.json index 3891b92b86..55127bae8d 100644 --- a/package.json +++ b/package.json @@ -158,7 +158,7 @@ "@types/global-modules": "^2.0.0", "@types/globjoin": "^0.1.0", "@types/imurmurhash": "^0.1.1", - "@types/micromatch": "^4.0.1", + "@types/micromatch": "^4.0.2", "@types/normalize-path": "^3.0.0", "@types/postcss-less": "^4.0.1", "@types/postcss-safe-parser": "^5.0.0", From f3a741637ad62596dcc334e80677b70ba80fcf30 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 14:02:41 +0100 Subject: [PATCH 087/194] Bump prettier from 2.2.1 to 2.3.2 (#5466) * Bump prettier from 2.2.1 to 2.3.2 Bumps [prettier](https://github.com/prettier/prettier) from 2.2.1 to 2.3.2. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/2.2.1...2.3.2) --- updated-dependencies: - dependency-name: prettier dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Fix formatting Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: jeddy3 --- .../disableRanges-integration.test.js | 9 ++-- lib/__tests__/standalone-fix.test.js | 3 +- lib/assignDisabledRanges.js | 6 +-- lib/createStylelintResult.js | 6 ++- .../__tests__/compactFormatter.test.js | 3 +- .../__tests__/stringFormatter.test.js | 3 +- lib/formatters/__tests__/tapFormatter.test.js | 3 +- .../__tests__/unixFormatter.test.js | 3 +- lib/getConfigForFile.js | 34 ++++++------- lib/lintPostcssResult.js | 7 ++- .../at-rule-name-case/__tests__/index.js | 36 +++++--------- .../at-rule-no-unknown/__tests__/index.js | 15 ++---- .../__tests__/index.js | 3 +- .../__tests__/index.js | 24 ++++------ .../__tests__/index.js | 6 +-- .../__tests__/index.js | 9 ++-- .../__tests__/index.js | 48 +++++++------------ .../__tests__/index.js | 12 ++--- .../__tests__/index.js | 45 ++++++----------- .../__tests__/index.js | 6 +-- .../__tests__/index.js | 6 +-- .../__tests__/index.js | 12 ++--- .../__tests__/index.js | 21 +++----- .../__tests__/index.js | 3 +- .../__tests__/index.js | 3 +- .../__tests__/index.js | 21 +++----- .../__tests__/index.js | 18 +++---- .../function-url-quotes/__tests__/index.js | 12 ++--- .../__tests__/index.js | 15 ++---- .../__tests__/index.js | 9 ++-- .../length-zero-no-unit/__tests__/index.js | 12 ++--- lib/rules/max-line-length/__tests__/index.js | 15 ++---- .../__tests__/index.js | 3 +- .../__tests__/index.js | 3 +- .../no-eol-whitespace/__tests__/index.js | 27 ++++------- .../no-extra-semicolons/__tests__/index.js | 15 ++---- .../property-no-unknown/__tests__/index.js | 9 ++-- lib/rules/selector-class-pattern/README.md | 1 - .../__tests__/index.js | 3 +- .../selector-max-attribute/__tests__/index.js | 3 +- .../__tests__/index.js | 12 ++--- lib/rules/selector-max-id/__tests__/index.js | 12 ++--- .../__tests__/index.js | 3 +- .../__tests__/index.js | 3 +- .../unit-disallowed-list/__tests__/index.js | 9 ++-- lib/rules/unit-no-unknown/__tests__/index.js | 24 ++++------ lib/standalone.js | 28 ++++++----- package-lock.json | 14 +++--- package.json | 2 +- 49 files changed, 218 insertions(+), 381 deletions(-) diff --git a/lib/__tests__/disableRanges-integration.test.js b/lib/__tests__/disableRanges-integration.test.js index eaff2e989c..d41ad5ea01 100644 --- a/lib/__tests__/disableRanges-integration.test.js +++ b/lib/__tests__/disableRanges-integration.test.js @@ -152,16 +152,13 @@ testRule({ accept: [ { - code: - '/* stylelint-disable declaration-no-important, selector-combinator-space-before */ a> b {}', + code: '/* stylelint-disable declaration-no-important, selector-combinator-space-before */ a> b {}', }, { - code: - '/* stylelint-disable-line declaration-no-important, selector-combinator-space-before */ a> b {}', + code: '/* stylelint-disable-line declaration-no-important, selector-combinator-space-before */ a> b {}', }, { - code: - 'a> b {} /* stylelint-disable-line declaration-no-important, selector-combinator-space-before */', + code: 'a> b {} /* stylelint-disable-line declaration-no-important, selector-combinator-space-before */', }, ], diff --git a/lib/__tests__/standalone-fix.test.js b/lib/__tests__/standalone-fix.test.js index dd1dde9032..2cd872286b 100644 --- a/lib/__tests__/standalone-fix.test.js +++ b/lib/__tests__/standalone-fix.test.js @@ -27,8 +27,7 @@ it('outputs fixed code when input is code string', async () => { it('apply indentation autofix at last', async () => { const result = await standalone({ - code: - 'a {\nbox-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.2), inset 0 1px 2px 0 rgba(0, 0, 0, 0.1);\n}', + code: 'a {\nbox-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.2), inset 0 1px 2px 0 rgba(0, 0, 0, 0.1);\n}', config: { rules: { indentation: 2, diff --git a/lib/assignDisabledRanges.js b/lib/assignDisabledRanges.js index 1255b49f00..8927787023 100644 --- a/lib/assignDisabledRanges.js +++ b/lib/assignDisabledRanges.js @@ -229,9 +229,9 @@ module.exports = function (root, result) { getCommandRules(enableCommand, comment.text).forEach((ruleToEnable) => { // TODO TYPES // need fallback if endLine will be undefined - const endLine = /** @type {number} */ (comment.source && - comment.source.end && - comment.source.end.line); + const endLine = /** @type {number} */ ( + comment.source && comment.source.end && comment.source.end.line + ); if (ruleToEnable === ALL_RULES) { if ( diff --git a/lib/createStylelintResult.js b/lib/createStylelintResult.js index edc178efd8..0f40c045d2 100644 --- a/lib/createStylelintResult.js +++ b/lib/createStylelintResult.js @@ -17,8 +17,10 @@ module.exports = function (stylelint, postcssResult, filePath, cssSyntaxError) { return stylelint.getConfigForFile(filePath).then((configForFile) => { // TODO TYPES handle possible null here - const config = /** @type {{ config: import('stylelint').StylelintConfig, filepath: string }} */ (configForFile) - .config; + const config = + /** @type {{ config: import('stylelint').StylelintConfig, filepath: string }} */ ( + configForFile + ).config; const file = stylelintResult.source || (cssSyntaxError && cssSyntaxError.file); if (config.resultProcessors) { diff --git a/lib/formatters/__tests__/compactFormatter.test.js b/lib/formatters/__tests__/compactFormatter.test.js index e8bb1521b8..1ab4a4c67a 100644 --- a/lib/formatters/__tests__/compactFormatter.test.js +++ b/lib/formatters/__tests__/compactFormatter.test.js @@ -98,8 +98,7 @@ describe('compactFormatter', () => { column: 1, rule: 'bar-very-very-very-very-very-long', severity: 'error', - text: - 'Unexpected very very very very very very very very very very very very very long foo', + text: 'Unexpected very very very very very very very very very very very very very long foo', }, ], deprecations: [], diff --git a/lib/formatters/__tests__/stringFormatter.test.js b/lib/formatters/__tests__/stringFormatter.test.js index 6f8c46d5c7..4cad4a9b81 100644 --- a/lib/formatters/__tests__/stringFormatter.test.js +++ b/lib/formatters/__tests__/stringFormatter.test.js @@ -134,8 +134,7 @@ path/to/file.css column: 1, rule: 'bar-very-very-very-very-very-long', severity: 'error', - text: - 'Unexpected very very very very very very very very very very very very very long foo', + text: 'Unexpected very very very very very very very very very very very very very long foo', }, ], deprecations: [], diff --git a/lib/formatters/__tests__/tapFormatter.test.js b/lib/formatters/__tests__/tapFormatter.test.js index 5b88806841..38796125b1 100644 --- a/lib/formatters/__tests__/tapFormatter.test.js +++ b/lib/formatters/__tests__/tapFormatter.test.js @@ -147,8 +147,7 @@ messages: column: 1, rule: 'bar-very-very-very-very-very-long', severity: 'error', - text: - 'Unexpected very very very very very very very very very very very very very long foo', + text: 'Unexpected very very very very very very very very very very very very very long foo', }, ], deprecations: [], diff --git a/lib/formatters/__tests__/unixFormatter.test.js b/lib/formatters/__tests__/unixFormatter.test.js index 92e0ae3a1f..44f663079d 100644 --- a/lib/formatters/__tests__/unixFormatter.test.js +++ b/lib/formatters/__tests__/unixFormatter.test.js @@ -116,8 +116,7 @@ path/to/file.css:1:1: Unexpected foo [error] column: 1, rule: 'bar-very-very-very-very-very-long', severity: 'error', - text: - 'Unexpected very very very very very very very very very very very very very long foo', + text: 'Unexpected very very very very very very very very very very very very very long foo', }, ], deprecations: [], diff --git a/lib/getConfigForFile.js b/lib/getConfigForFile.js index 33c6870226..2a5f0d179d 100644 --- a/lib/getConfigForFile.js +++ b/lib/getConfigForFile.js @@ -17,9 +17,9 @@ module.exports = function (stylelint, searchPath = process.cwd()) { const optionsConfig = stylelint._options.config; if (optionsConfig !== undefined) { - const cached = /** @type {ConfigPromise} */ (stylelint._specifiedConfigCache.get( - optionsConfig, - )); + const cached = /** @type {ConfigPromise} */ ( + stylelint._specifiedConfigCache.get(optionsConfig) + ); if (cached) return cached; @@ -42,20 +42,22 @@ module.exports = function (stylelint, searchPath = process.cwd()) { ? stylelint._fullExplorer.load(stylelint._options.configFile) : stylelint._fullExplorer.search(searchPath); - return /** @type {ConfigPromise} */ (searchForConfig - .then((config) => { - // If no config was found, try looking from process.cwd - if (!config) return stylelint._fullExplorer.search(process.cwd()); + return /** @type {ConfigPromise} */ ( + searchForConfig + .then((config) => { + // If no config was found, try looking from process.cwd + if (!config) return stylelint._fullExplorer.search(process.cwd()); - return config; - }) - .then((config) => { - if (!config) { - const ending = searchPath ? ` for ${searchPath}` : ''; + return config; + }) + .then((config) => { + if (!config) { + const ending = searchPath ? ` for ${searchPath}` : ''; - throw configurationError(`No configuration provided${ending}`); - } + throw configurationError(`No configuration provided${ending}`); + } - return config; - })); + return config; + }) + ); }; diff --git a/lib/lintPostcssResult.js b/lib/lintPostcssResult.js index 648076d82d..d0706049f9 100644 --- a/lib/lintPostcssResult.js +++ b/lib/lintPostcssResult.js @@ -44,10 +44,9 @@ function lintPostcssResult(stylelintOptions, postcssResult, config) { postcssResult.stylelint.disableWritingFix = true; } - const postcssRoots = /** @type {import('postcss').Root[]} */ (postcssDoc && - postcssDoc.constructor.name === 'Document' - ? postcssDoc.nodes - : [postcssDoc]); + const postcssRoots = /** @type {import('postcss').Root[]} */ ( + postcssDoc && postcssDoc.constructor.name === 'Document' ? postcssDoc.nodes : [postcssDoc] + ); // Promises for the rules. Although the rule code runs synchronously now, // the use of Promises makes it compatible with the possibility of async diff --git a/lib/rules/at-rule-name-case/__tests__/index.js b/lib/rules/at-rule-name-case/__tests__/index.js index a6d5704ab2..03e9c8bd28 100644 --- a/lib/rules/at-rule-name-case/__tests__/index.js +++ b/lib/rules/at-rule-name-case/__tests__/index.js @@ -27,15 +27,13 @@ testRule({ code: '@media (min-width: 50em) {}', }, { - code: - '@media only screen and (min-width: 415px) { @keyframes pace-anim { 100% { opacity: 0; } } }', + code: '@media only screen and (min-width: 415px) { @keyframes pace-anim { 100% { opacity: 0; } } }', }, { code: '@supports (animation-name: test) {}', }, { - code: - "@document url(http://www.w3.org/), url-prefix(http://www.w3.org/Style/), domain(mozilla.org), regexp('https:.*')", + code: "@document url(http://www.w3.org/), url-prefix(http://www.w3.org/Style/), domain(mozilla.org), regexp('https:.*')", }, { code: '@page :first { margin: 1cm; }', @@ -50,8 +48,7 @@ testRule({ code: '@viewport { orientation: landscape; }', }, { - code: - "@counter-style win-list { system: fixed; symbols: url(gold-medal.svg) url(silver-medal.svg) ; suffix: ' ';}", + code: "@counter-style win-list { system: fixed; symbols: url(gold-medal.svg) url(silver-medal.svg) ; suffix: ' ';}", }, { code: '@font-feature-values Font One { @styleset { nice-style: 12; } }', @@ -102,8 +99,7 @@ testRule({ column: 1, }, { - code: - '@media only screen and (min-width: 415px) { @Keyframes pace-anim { 100% { opacity: 0; } } }', + code: '@media only screen and (min-width: 415px) { @Keyframes pace-anim { 100% { opacity: 0; } } }', fixed: '@media only screen and (min-width: 415px) { @keyframes pace-anim { 100% { opacity: 0; } } }', message: messages.expected('Keyframes', 'keyframes'), @@ -111,8 +107,7 @@ testRule({ column: 45, }, { - code: - '@media only screen and (min-width: 415px) { @kEyFrAmEs pace-anim { 100% { opacity: 0; } } }', + code: '@media only screen and (min-width: 415px) { @kEyFrAmEs pace-anim { 100% { opacity: 0; } } }', fixed: '@media only screen and (min-width: 415px) { @keyframes pace-anim { 100% { opacity: 0; } } }', message: messages.expected('kEyFrAmEs', 'keyframes'), @@ -120,8 +115,7 @@ testRule({ column: 45, }, { - code: - '@media only screen and (min-width: 415px) { @KEYFRAMES pace-anim { 100% { opacity: 0; } } }', + code: '@media only screen and (min-width: 415px) { @KEYFRAMES pace-anim { 100% { opacity: 0; } } }', fixed: '@media only screen and (min-width: 415px) { @keyframes pace-anim { 100% { opacity: 0; } } }', message: messages.expected('KEYFRAMES', 'keyframes'), @@ -168,15 +162,13 @@ testRule({ code: '@MEDIA (min-width: 50em) {}', }, { - code: - '@MEDIA only screen and (min-width: 415px) { @KEYFRAMES pace-anim { 100% { opacity: 0; } } }', + code: '@MEDIA only screen and (min-width: 415px) { @KEYFRAMES pace-anim { 100% { opacity: 0; } } }', }, { code: '@SUPPORTS (animation-name: test) {}', }, { - code: - "@DOCUMENT url(http://www.w3.org/), url-prefix(http://www.w3.org/Style/), domain(mozilla.org), regexp('https:.*')", + code: "@DOCUMENT url(http://www.w3.org/), url-prefix(http://www.w3.org/Style/), domain(mozilla.org), regexp('https:.*')", }, { code: '@PAGE :first { margin: 1cm; }', @@ -191,8 +183,7 @@ testRule({ code: '@VIEWPORT { orientation: landscape; }', }, { - code: - "@COUNTER-STYLE win-list { system: fixed; symbols: url(gold-medal.svg) url(silver-medal.svg) ; suffix: ' ';}", + code: "@COUNTER-STYLE win-list { system: fixed; symbols: url(gold-medal.svg) url(silver-medal.svg) ; suffix: ' ';}", }, { code: '@FONT-FEATURE-VALUES Font One { @STYLESET { nice-style: 12; } }', @@ -243,8 +234,7 @@ testRule({ column: 1, }, { - code: - '@MEDIA only screen and (min-width: 415px) { @Keyframes pace-anim { 100% { opacity: 0; } } }', + code: '@MEDIA only screen and (min-width: 415px) { @Keyframes pace-anim { 100% { opacity: 0; } } }', fixed: '@MEDIA only screen and (min-width: 415px) { @KEYFRAMES pace-anim { 100% { opacity: 0; } } }', message: messages.expected('Keyframes', 'KEYFRAMES'), @@ -252,8 +242,7 @@ testRule({ column: 45, }, { - code: - '@MEDIA only screen and (min-width: 415px) { @kEyFrAmEs pace-anim { 100% { opacity: 0; } } }', + code: '@MEDIA only screen and (min-width: 415px) { @kEyFrAmEs pace-anim { 100% { opacity: 0; } } }', fixed: '@MEDIA only screen and (min-width: 415px) { @KEYFRAMES pace-anim { 100% { opacity: 0; } } }', message: messages.expected('kEyFrAmEs', 'KEYFRAMES'), @@ -261,8 +250,7 @@ testRule({ column: 45, }, { - code: - '@MEDIA only screen and (min-width: 415px) { @keyframes pace-anim { 100% { opacity: 0; } } }', + code: '@MEDIA only screen and (min-width: 415px) { @keyframes pace-anim { 100% { opacity: 0; } } }', fixed: '@MEDIA only screen and (min-width: 415px) { @KEYFRAMES pace-anim { 100% { opacity: 0; } } }', message: messages.expected('keyframes', 'KEYFRAMES'), diff --git a/lib/rules/at-rule-no-unknown/__tests__/index.js b/lib/rules/at-rule-no-unknown/__tests__/index.js index ccd8d97b30..8f0f522d33 100644 --- a/lib/rules/at-rule-no-unknown/__tests__/index.js +++ b/lib/rules/at-rule-no-unknown/__tests__/index.js @@ -53,8 +53,7 @@ testRule({ code: "@counter-style win-list { system: fixed; symbols: url(gold-medal.svg); suffix: ' ';}", }, { - code: - "@document url(http://www.w3.org/), url-prefix(http://www.w3.org/Style/), domain(mozilla.org), regexp('https:.*')", + code: "@document url(http://www.w3.org/), url-prefix(http://www.w3.org/Style/), domain(mozilla.org), regexp('https:.*')", }, { code: '@page :left { margin-left: 4cm; }', @@ -63,16 +62,13 @@ testRule({ code: '@page { @top-center { content: none } }', }, { - code: - '@font-face { font-family: MyHelvetica; src: local("Helvetica"), url(MgOpenModern.ttf); }', + code: '@font-face { font-family: MyHelvetica; src: local("Helvetica"), url(MgOpenModern.ttf); }', }, { - code: - '@keyframes identifier { 0% { top: 0; left: 0; } 30% { top: 50px; } 68%, 100% { top: 100px; left: 100%; } }', + code: '@keyframes identifier { 0% { top: 0; left: 0; } 30% { top: 50px; } 68%, 100% { top: 100px; left: 100%; } }', }, { - code: - '@-webkit-keyframes identifier { 0% { top: 0; left: 0; } 30% { top: 50px; } 68%, 100% { top: 100px; left: 100%; } }', + code: '@-webkit-keyframes identifier { 0% { top: 0; left: 0; } 30% { top: 50px; } 68%, 100% { top: 100px; left: 100%; } }', }, { code: '@viewport { min-width: 640px; max-width: 800px; }', @@ -81,8 +77,7 @@ testRule({ code: '@viewport { orientation: landscape; }', }, { - code: - '@counter-style winners-list { system: fixed; symbols: url(gold-medal.svg); suffix: " "; }', + code: '@counter-style winners-list { system: fixed; symbols: url(gold-medal.svg); suffix: " "; }', }, { code: '@font-feature-values Font One { @styleset { nice-style: 12; } }', diff --git a/lib/rules/at-rule-semicolon-space-before/__tests__/index.js b/lib/rules/at-rule-semicolon-space-before/__tests__/index.js index d398866d1b..d63dcf9e77 100644 --- a/lib/rules/at-rule-semicolon-space-before/__tests__/index.js +++ b/lib/rules/at-rule-semicolon-space-before/__tests__/index.js @@ -89,8 +89,7 @@ testRule({ code: '@font-face {\n font-family: "MyFont" ; src: url("myfont.woff2") format("woff2") ;\n}', }, { - code: - '@font-face {\n font-family: "MyFont" ; src: url("myfont.woff2") format("woff2") ;\n} ;', + code: '@font-face {\n font-family: "MyFont" ; src: url("myfont.woff2") format("woff2") ;\n} ;', }, { code: 'a { color: @brand-primary ; }', diff --git a/lib/rules/block-closing-brace-empty-line-before/__tests__/index.js b/lib/rules/block-closing-brace-empty-line-before/__tests__/index.js index ec1da5908e..aec615c397 100644 --- a/lib/rules/block-closing-brace-empty-line-before/__tests__/index.js +++ b/lib/rules/block-closing-brace-empty-line-before/__tests__/index.js @@ -41,8 +41,7 @@ testRule({ description: 'indentation after the newline before the closing braces', }, { - code: - '@media print {\n\ta {\n\t\tcolor: pink;\n\t\t&:hover{\n\t\t\tcolor: red;\n\n\t\t\t}\n\n\t\t}\n\n}', + code: '@media print {\n\ta {\n\t\tcolor: pink;\n\t\t&:hover{\n\t\t\tcolor: red;\n\n\t\t\t}\n\n\t\t}\n\n}', description: '3 level deep nesting with indentation after the newline before the closing braces', }, @@ -173,8 +172,7 @@ testRule({ description: 'indentation after the newline before the closing braces', }, { - code: - '@media print {\n\ta {\n\t\tcolor: pink;\n\t\t&:hover{\n\t\t\tcolor: red;\n\t\t\t}\n\t\t}\n}', + code: '@media print {\n\ta {\n\t\tcolor: pink;\n\t\t&:hover{\n\t\t\tcolor: red;\n\t\t\t}\n\t\t}\n}', description: '3 level deep nesting with indentation after the newline before the closing braces', }, @@ -276,8 +274,7 @@ testRule({ code: '@media print {\n\n\ta {\n\t\tcolor: aquamarine;\n\t}\n\n}', }, { - code: - '@font-face {\n\tfont-family: "MyFont";\n\tsrc: url("myfont.woff2") format("woff2");\n}', + code: '@font-face {\n\tfont-family: "MyFont";\n\tsrc: url("myfont.woff2") format("woff2");\n}', }, { code: '@supports (animation-name: test) {\n\n\ta {\n\t\tcolor: aquamarine;\n\t}\n\n}', @@ -303,8 +300,7 @@ testRule({ column: 1, }, { - code: - '@media print {\n\n\ta {\n\t\tcolor: aquamarine;\n\t}\n\n\tb {\n\t\tcolor: hotpink;\n\t}\n}', + code: '@media print {\n\n\ta {\n\t\tcolor: aquamarine;\n\t}\n\n\tb {\n\t\tcolor: hotpink;\n\t}\n}', fixed: '@media print {\n\n\ta {\n\t\tcolor: aquamarine;\n\t}\n\n\tb {\n\t\tcolor: hotpink;\n\t}\n\n}', warnings: [ @@ -316,8 +312,7 @@ testRule({ ], }, { - code: - '@media print {\n\n\ta {\n\t\tcolor: aquamarine;\n\t}\n\n\tb {\n\t\tcolor: hotpink;\n\n\t}\n}', + code: '@media print {\n\n\ta {\n\t\tcolor: aquamarine;\n\t}\n\n\tb {\n\t\tcolor: hotpink;\n\n\t}\n}', fixed: '@media print {\n\n\ta {\n\t\tcolor: aquamarine;\n\t}\n\n\tb {\n\t\tcolor: hotpink;\n\t}\n\n}', warnings: [ @@ -366,8 +361,7 @@ testRule({ code: '@media print {\n\n\ta {\n\t\tcolor: aquamarine;\n\n\t}\n}', }, { - code: - '@font-face {\n\tfont-family: "MyFont";\n\tsrc: url("myfont.woff2") format("woff2");\n\n}', + code: '@font-face {\n\tfont-family: "MyFont";\n\tsrc: url("myfont.woff2") format("woff2");\n\n}', }, { code: '@supports (animation-name: test) {\n\n\ta {\n\t\tcolor: aquamarine;\n\n\t}\n}', @@ -393,8 +387,7 @@ testRule({ column: 1, }, { - code: - '@media print {\n\n\ta {\n\t\tcolor: aquamarine;\n\n\t}\n\n\tb {\n\t\tcolor: hotpink;\n\n\t}\n\n}', + code: '@media print {\n\n\ta {\n\t\tcolor: aquamarine;\n\n\t}\n\n\tb {\n\t\tcolor: hotpink;\n\n\t}\n\n}', fixed: '@media print {\n\n\ta {\n\t\tcolor: aquamarine;\n\n\t}\n\n\tb {\n\t\tcolor: hotpink;\n\n\t}\n}', message: messages.rejected, @@ -402,8 +395,7 @@ testRule({ column: 1, }, { - code: - '@media print {\n\n\ta {\n\t\tcolor: aquamarine;\n\n\t}\n\n\tb {\n\t\tcolor: hotpink;\n\n\t}\n\n}', + code: '@media print {\n\n\ta {\n\t\tcolor: aquamarine;\n\n\t}\n\n\tb {\n\t\tcolor: hotpink;\n\n\t}\n\n}', fixed: '@media print {\n\n\ta {\n\t\tcolor: aquamarine;\n\n\t}\n\n\tb {\n\t\tcolor: hotpink;\n\n\t}\n}', message: messages.rejected, diff --git a/lib/rules/block-opening-brace-newline-before/__tests__/index.js b/lib/rules/block-opening-brace-newline-before/__tests__/index.js index 922dd64d8d..ca8b1d3fa5 100644 --- a/lib/rules/block-opening-brace-newline-before/__tests__/index.js +++ b/lib/rules/block-opening-brace-newline-before/__tests__/index.js @@ -44,13 +44,11 @@ testRule({ description: 'indentation after the newline before the opening braces', }, { - code: - '@media print\n\t{a\n\t\t{color: pink;\n\t\t&:hover\n\t\t\t{\n\t\t\t\tcolor:black;} } }', + code: '@media print\n\t{a\n\t\t{color: pink;\n\t\t&:hover\n\t\t\t{\n\t\t\t\tcolor:black;} } }', description: '3 level deep indentation after the newline before the opening braces', }, { - code: - '@media print\r\n\t{a\r\n\t\t{color: pink;\r\n\t\t&:hover\r\n\t\t\t{\r\n\t\t\t\tcolor:black;} } }', + code: '@media print\r\n\t{a\r\n\t\t{color: pink;\r\n\t\t&:hover\r\n\t\t\t{\r\n\t\t\t\tcolor:black;} } }', description: '3 level deep indentation after the newline before the opening braces and CRLF', }, { diff --git a/lib/rules/custom-property-empty-line-before/__tests__/index.js b/lib/rules/custom-property-empty-line-before/__tests__/index.js index e482ac8529..f48906acd9 100644 --- a/lib/rules/custom-property-empty-line-before/__tests__/index.js +++ b/lib/rules/custom-property-empty-line-before/__tests__/index.js @@ -367,8 +367,7 @@ testRule({ accept: [ { - code: - "a {\n --custom-prop: value; \n --custom-prop2: value; \n /* comment */ \n --custom-prop3: value;\n\n @extends 'x';\n\n --custom-prop4: value; \n & b {\n prop: value;\n } \n\n --custom-prop5: value; \n }", + code: "a {\n --custom-prop: value; \n --custom-prop2: value; \n /* comment */ \n --custom-prop3: value;\n\n @extends 'x';\n\n --custom-prop4: value; \n & b {\n prop: value;\n } \n\n --custom-prop5: value; \n }", }, ], }); @@ -386,8 +385,7 @@ testRule({ code: 'a {\r\n --custom-prop: value;\r\n}', }, { - code: - "a {\n --custom-prop: value; \n --custom-prop2: value; \n\n /* comment */ \n --custom-prop3: value; \n\n @extends 'x'; \n --custom-prop4: value; \n\n & b {\n prop: value; \n } \n --custom-prop5: value;\n }", + code: "a {\n --custom-prop: value; \n --custom-prop2: value; \n\n /* comment */ \n --custom-prop3: value; \n\n @extends 'x'; \n --custom-prop4: value; \n\n & b {\n prop: value; \n } \n --custom-prop5: value;\n }", }, { code: 'a{\n top: 10px;\n --custom-prop: value;}', @@ -568,8 +566,7 @@ testRule({ accept: [ { - code: - "a {\n\n --custom-prop: value; \n\n --custom-prop2: value; \n /* comment */ \n\n --custom-prop3: value;\n\n @extends 'x';\n --custom-prop4: value; \n & b {\n prop: value;\n } \n --custom-prop5: value; \n }", + code: "a {\n\n --custom-prop: value; \n\n --custom-prop2: value; \n /* comment */ \n\n --custom-prop3: value;\n\n @extends 'x';\n --custom-prop4: value; \n & b {\n prop: value;\n } \n --custom-prop5: value; \n }", }, ], }); diff --git a/lib/rules/declaration-block-no-duplicate-custom-properties/__tests__/index.js b/lib/rules/declaration-block-no-duplicate-custom-properties/__tests__/index.js index 493fac214c..aa9f43d8da 100644 --- a/lib/rules/declaration-block-no-duplicate-custom-properties/__tests__/index.js +++ b/lib/rules/declaration-block-no-duplicate-custom-properties/__tests__/index.js @@ -24,18 +24,15 @@ testRule({ description: 'nested', }, { - code: - 'a { --custom-property: pink; @media { --custom-property: orange; &::before { --custom-property: black; } } }', + code: 'a { --custom-property: pink; @media { --custom-property: orange; &::before { --custom-property: black; } } }', description: 'double nested', }, { - code: - 'a { --custom-property: pink; { &:hover { --custom-property: orange; --cUstOm-prOpErtY: black; } } }', + code: 'a { --custom-property: pink; { &:hover { --custom-property: orange; --cUstOm-prOpErtY: black; } } }', description: 'spec nested', }, { - code: - 'a { --cUstOm-prOpErtY: pink; { &:hover { --custom-property: orange; --cUstOm-prOpErtY: black; } } }', + code: 'a { --cUstOm-prOpErtY: pink; { &:hover { --custom-property: orange; --cUstOm-prOpErtY: black; } } }', description: 'spec nested', }, ], @@ -54,32 +51,27 @@ testRule({ message: messages.rejected('--cUstOm-prOpErtY'), }, { - code: - 'a { --custom-property: pink; { &:hover { --custom-property: orange; --custom-property: black; } } }', + code: 'a { --custom-property: pink; { &:hover { --custom-property: orange; --custom-property: black; } } }', description: 'spec nested', message: messages.rejected('--custom-property'), }, { - code: - 'a { --custom-property: pink; @media { --custom-property: orange; --custom-property: black; } }', + code: 'a { --custom-property: pink; @media { --custom-property: orange; --custom-property: black; } }', description: 'nested', message: messages.rejected('--custom-property'), }, { - code: - '@media { --custom-property: orange; .foo { --custom-property: black; --custom-property: white; } }', + code: '@media { --custom-property: orange; .foo { --custom-property: black; --custom-property: white; } }', description: 'nested', message: messages.rejected('--custom-property'), }, { - code: - 'a { --custom-property: pink; @media { --custom-property: orange; &::before { --custom-property: black; --custom-property: white; } } }', + code: 'a { --custom-property: pink; @media { --custom-property: orange; &::before { --custom-property: black; --custom-property: white; } } }', description: 'double nested', message: messages.rejected('--custom-property'), }, { - code: - 'a { --custom-property: pink; @media { --custom-property: orange; .foo { --custom-property: black; --custom-property: white; } } }', + code: 'a { --custom-property: pink; @media { --custom-property: orange; .foo { --custom-property: black; --custom-property: white; } } }', description: 'double nested again', message: messages.rejected('--custom-property'), }, @@ -101,15 +93,13 @@ testRule({ code: '', }, { - code: - '', + code: '', }, { code: '', }, { - code: - '', + code: '', }, ], @@ -119,8 +109,7 @@ testRule({ message: messages.rejected('--custom-property'), }, { - code: - '', + code: '', message: messages.rejected('--custom-property'), }, { @@ -128,8 +117,7 @@ testRule({ message: messages.rejected('--custom-property'), }, { - code: - '', + code: '', message: messages.rejected('--cUstOm-prOpErtY'), }, ], @@ -144,23 +132,19 @@ testRule({ accept: [ { - code: - "import styled from 'react-emotion'\nexport default styled.div` --custom-property: pink; `;", + code: "import styled from 'react-emotion'\nexport default styled.div` --custom-property: pink; `;", }, { - code: - "import styled from 'react-emotion'\nexport default styled.div` --custom-property: pink; --cUstOm-prOpErtY: pink; `;", + code: "import styled from 'react-emotion'\nexport default styled.div` --custom-property: pink; --cUstOm-prOpErtY: pink; `;", }, ], reject: [ { - code: - "import styled from 'styled-components';\nexport default styled.div` --custom-property: pink; --custom-property: orange; `;", + code: "import styled from 'styled-components';\nexport default styled.div` --custom-property: pink; --custom-property: orange; `;", message: messages.rejected('--custom-property'), }, { - code: - "import styled from 'react-emotion'\nexport default styled.div` --custom-property: pink; --custom-property: orange; `;", + code: "import styled from 'react-emotion'\nexport default styled.div` --custom-property: pink; --custom-property: orange; `;", message: messages.rejected('--custom-property'), }, ], diff --git a/lib/rules/declaration-block-no-duplicate-properties/__tests__/index.js b/lib/rules/declaration-block-no-duplicate-properties/__tests__/index.js index 8e70acfa83..c9e83018a3 100644 --- a/lib/rules/declaration-block-no-duplicate-properties/__tests__/index.js +++ b/lib/rules/declaration-block-no-duplicate-properties/__tests__/index.js @@ -94,8 +94,7 @@ testRule({ message: messages.rejected('color'), }, { - code: - 'a { color: pink; @media { color: orange; &::before { color: black; color: white; } } }', + code: 'a { color: pink; @media { color: orange; &::before { color: black; color: white; } } }', description: 'double nested', message: messages.rejected('color'), }, @@ -149,8 +148,7 @@ testRule({ message: messages.rejected('font-size'), }, { - code: - 'p { display: inline-block; font-size: 16px; font-weight: 400; font-size: 1rem; color: red; }', + code: 'p { display: inline-block; font-size: 16px; font-weight: 400; font-size: 1rem; color: red; }', message: messages.rejected('font-size'), }, ], @@ -282,13 +280,11 @@ testRule({ ], reject: [ { - code: - "import styled from 'styled-components';\nexport default styled.div` color: pink; color: orange; `;", + code: "import styled from 'styled-components';\nexport default styled.div` color: pink; color: orange; `;", message: messages.rejected('color'), }, { - code: - "import styled from 'react-emotion'\nexport default styled.div` color: pink; color: orange; `;", + code: "import styled from 'react-emotion'\nexport default styled.div` color: pink; color: orange; `;", message: messages.rejected('color'), }, ], diff --git a/lib/rules/declaration-block-no-redundant-longhand-properties/__tests__/index.js b/lib/rules/declaration-block-no-redundant-longhand-properties/__tests__/index.js index 773559125f..d02e44a199 100644 --- a/lib/rules/declaration-block-no-redundant-longhand-properties/__tests__/index.js +++ b/lib/rules/declaration-block-no-redundant-longhand-properties/__tests__/index.js @@ -17,17 +17,14 @@ testRule({ code: 'a { padding-left: 10px; margin-right: 10px; margin-top: 20px; margin-bottom: 30px; }', }, { - code: - 'a { padding-top: 1px; padding-bottom: 1px; } b { padding-left: 1px; padding-right: 1px; }', + code: 'a { padding-top: 1px; padding-bottom: 1px; } b { padding-left: 1px; padding-right: 1px; }', }, { - code: - 'a { transition-delay: 0.5s; -webkit-transition-duration: 2s; -webkit-transition-property: top; -webkit-transition-timing-function: ease; }', + code: 'a { transition-delay: 0.5s; -webkit-transition-duration: 2s; -webkit-transition-property: top; -webkit-transition-timing-function: ease; }', description: 'one of properties is unprefixed', }, { - code: - 'a { -webkit-transition-delay: 0.5s; transition-duration: 2s; transition-property: top; transition-timing-function: ease; }', + code: 'a { -webkit-transition-delay: 0.5s; transition-duration: 2s; transition-property: top; transition-timing-function: ease; }', description: 'one of properties is prefixed', }, ], @@ -46,13 +43,11 @@ testRule({ message: messages.expected('margin'), }, { - code: - 'a { padding-left: 10px; padding-right: 10px; padding-top: 20px; padding-bottom: 30px; }', + code: 'a { padding-left: 10px; padding-right: 10px; padding-top: 20px; padding-bottom: 30px; }', message: messages.expected('padding'), }, { - code: - 'a { font-style: italic; font-variant: normal; font-weight: bold; font-size: .8em; font-family: Arial; line-height: 1.2; font-stretch: normal; }', + code: 'a { font-style: italic; font-variant: normal; font-weight: bold; font-size: .8em; font-family: Arial; line-height: 1.2; font-stretch: normal; }', message: messages.expected('font'), }, { @@ -60,18 +55,15 @@ testRule({ message: messages.expected('border-top'), }, { - code: - 'a { -webkit-transition-delay: 0.5s; -webkit-transition-duration: 2s; -webkit-transition-property: top; -webkit-transition-timing-function: ease; }', + code: 'a { -webkit-transition-delay: 0.5s; -webkit-transition-duration: 2s; -webkit-transition-property: top; -webkit-transition-timing-function: ease; }', message: messages.expected('-webkit-transition'), }, { - code: - 'a { -WEBKIT-transition-delay: 0.5s; -webKIT-transition-duration: 2s; -webkit-TRANSITION-property: top; -webkit-transition-timing-function: ease; }', + code: 'a { -WEBKIT-transition-delay: 0.5s; -webKIT-transition-duration: 2s; -webkit-TRANSITION-property: top; -webkit-transition-timing-function: ease; }', message: messages.expected('-webkit-transition'), }, { - code: - 'a { border-top-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-right-width: 1px; }', + code: 'a { border-top-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-right-width: 1px; }', message: messages.expected('border-width'), }, ], @@ -86,8 +78,7 @@ testRule({ code: 'a { border-top-width: 7px; border-top-style: double; border-top-color: green; }', }, { - code: - 'a { padding-left: 10px; padding-right: 10px; padding-top: 20px; padding-bottom: 30px; }', + code: 'a { padding-left: 10px; padding-right: 10px; padding-top: 20px; padding-bottom: 30px; }', }, ], @@ -131,20 +122,17 @@ testRule({ code: '', }, { - code: - '', + code: '', }, ], reject: [ { - code: - '', + code: '', message: messages.expected('margin'), }, { - code: - '', + code: '', message: messages.expected('margin'), }, ], @@ -158,20 +146,17 @@ testRule({ accept: [ { - code: - "import styled from 'react-emotion'\nexport default styled.div` margin-right: 10px; margin-top: 20px; `;", + code: "import styled from 'react-emotion'\nexport default styled.div` margin-right: 10px; margin-top: 20px; `;", }, ], reject: [ { - code: - "import styled from 'styled-components';\nexport default styled.div` margin-left: 10px; margin-right: 10px; margin-top: 20px; margin-bottom: 30px; `;", + code: "import styled from 'styled-components';\nexport default styled.div` margin-left: 10px; margin-right: 10px; margin-top: 20px; margin-bottom: 30px; `;", message: messages.expected('margin'), }, { - code: - "import styled from 'react-emotion'\nexport default styled.div` margin-left: 10px; margin-right: 10px; margin-top: 20px; margin-bottom: 30px; `;", + code: "import styled from 'react-emotion'\nexport default styled.div` margin-left: 10px; margin-right: 10px; margin-top: 20px; margin-bottom: 30px; `;", message: messages.expected('margin'), }, ], diff --git a/lib/rules/declaration-block-no-shorthand-property-overrides/__tests__/index.js b/lib/rules/declaration-block-no-shorthand-property-overrides/__tests__/index.js index ebc944f536..66bbe5eecd 100644 --- a/lib/rules/declaration-block-no-shorthand-property-overrides/__tests__/index.js +++ b/lib/rules/declaration-block-no-shorthand-property-overrides/__tests__/index.js @@ -133,13 +133,11 @@ testRule({ reject: [ { - code: - "import styled from 'styled-components';\nexport default styled.div` padding-left: 10px; padding: 20px; `;", + code: "import styled from 'styled-components';\nexport default styled.div` padding-left: 10px; padding: 20px; `;", message: messages.rejected('padding', 'padding-left'), }, { - code: - "import styled from 'react-emotion';\nexport default styled.div` padding-left: 10px; padding: 20px; `;", + code: "import styled from 'react-emotion';\nexport default styled.div` padding-left: 10px; padding: 20px; `;", message: messages.rejected('padding', 'padding-left'), }, ], diff --git a/lib/rules/declaration-empty-line-before/__tests__/index.js b/lib/rules/declaration-empty-line-before/__tests__/index.js index 9752f0fac8..c4f6b397ab 100644 --- a/lib/rules/declaration-empty-line-before/__tests__/index.js +++ b/lib/rules/declaration-empty-line-before/__tests__/index.js @@ -651,8 +651,7 @@ testRule({ accept: [ { - code: - "a {\n top: 15px; \n bottom: 5px; \n /* comment */ \n prop: 15px;\n\n @extends 'x';\n\n prop: 15px; \n & b {\n prop: 15px;\n } \n\n prop: 15px; \n }", + code: "a {\n top: 15px; \n bottom: 5px; \n /* comment */ \n prop: 15px;\n\n @extends 'x';\n\n prop: 15px; \n & b {\n prop: 15px;\n } \n\n prop: 15px; \n }", }, ], }); @@ -896,8 +895,7 @@ testRule({ accept: [ { - code: - "a {\n\n top: 15px; \n\n bottom: 5px; \n /* comment */ \n\n prop: 15px;\n\n @extends 'x';\n prop: 15px; \n & b {\n\n prop: 15px;\n } \n prop: 15px; \n }", + code: "a {\n\n top: 15px; \n\n bottom: 5px; \n /* comment */ \n\n prop: 15px;\n\n @extends 'x';\n prop: 15px; \n & b {\n\n prop: 15px;\n } \n prop: 15px; \n }", }, ], }); diff --git a/lib/rules/declaration-property-unit-allowed-list/__tests__/index.js b/lib/rules/declaration-property-unit-allowed-list/__tests__/index.js index ccf613b065..94dd12b0af 100644 --- a/lib/rules/declaration-property-unit-allowed-list/__tests__/index.js +++ b/lib/rules/declaration-property-unit-allowed-list/__tests__/index.js @@ -155,8 +155,7 @@ testRule({ code: 'a { -webkit-animation-duration: 300ms; }', }, { - code: - 'a { animation: 3ms cubic-bezier(.17,.67,.83,.67) 1ms infinite alternate none running slidein; }', + code: 'a { animation: 3ms cubic-bezier(.17,.67,.83,.67) 1ms infinite alternate none running slidein; }', }, ], @@ -203,15 +202,13 @@ testRule({ code: 'a { border: 1px solid hsla(162deg, 51%, 35%, 0.8); }', }, { - code: - 'a { background-image: linear-gradient(hsla(162deg, 51%, 35%, 0.8), hsla(62deg, 51%, 35%, 0.8)); }', + code: 'a { background-image: linear-gradient(hsla(162deg, 51%, 35%, 0.8), hsla(62deg, 51%, 35%, 0.8)); }', }, { code: 'a { background-image: url("https://example.com/img.png"); }', }, { - code: - 'a { background: center center / 50% 50% linear-gradient(hsla(162deg, 51%, 35%, 0.8), hsla(62deg, 51%, 35%, 0.8)); }', + code: 'a { background: center center / 50% 50% linear-gradient(hsla(162deg, 51%, 35%, 0.8), hsla(62deg, 51%, 35%, 0.8)); }', }, { code: 'a { background-color: var(--bg-color); }', @@ -228,8 +225,7 @@ testRule({ message: messages.rejected('background-position', 'rem'), }, { - code: - 'a { background: center center / 50px 10% linear-gradient(hsla(162deg, 51%, 35%, 0.8), hsla(62deg, 51%, 35%, 0.8)); }', + code: 'a { background: center center / 50px 10% linear-gradient(hsla(162deg, 51%, 35%, 0.8), hsla(62deg, 51%, 35%, 0.8)); }', message: messages.rejected('background', 'px'), }, ], diff --git a/lib/rules/font-family-name-quotes/__tests__/index.js b/lib/rules/font-family-name-quotes/__tests__/index.js index 348a4c2113..b36413392b 100644 --- a/lib/rules/font-family-name-quotes/__tests__/index.js +++ b/lib/rules/font-family-name-quotes/__tests__/index.js @@ -40,8 +40,7 @@ testRule({ code: 'a { fOnT: 1em "Lucida Grande", "Arial", sans-serif; }', }, { - code: - 'a { font: italic small-caps bolder condensed 16px/3 "Lucida Grande", "Arial", sans-serif; }', + code: 'a { font: italic small-caps bolder condensed 16px/3 "Lucida Grande", "Arial", sans-serif; }', }, { code: 'a { fOnT-fAmIlY: "Lucida Grande", "Arial", sans-serif; }', @@ -71,8 +70,7 @@ testRule({ code: 'a { font-family: "Lucida Grande", \'Arial\', sans-serif; }', }, { - code: - "a { font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif; }", + code: "a { font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif; }", }, { code: 'a { fonts: "Arial", sans-serif; }', @@ -124,18 +122,15 @@ testRule({ message: messages.rejected('inherit'), }, { - code: - "a { font-family: 'system-ui', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif; }", + code: "a { font-family: 'system-ui', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif; }", message: messages.rejected('system-ui'), }, { - code: - "a { font-family: system-ui, '-apple-system', BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif; }", + code: "a { font-family: system-ui, '-apple-system', BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif; }", message: messages.rejected('-apple-system'), }, { - code: - "a { font-family: system-ui, -apple-system, 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', sans-serif; }", + code: "a { font-family: system-ui, -apple-system, 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', sans-serif; }", message: messages.rejected('BlinkMacSystemFont'), }, { @@ -289,13 +284,11 @@ testRule({ message: messages.rejected('Arial'), }, { - code: - "a { font-family: '-apple-system', BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; }", + code: "a { font-family: '-apple-system', BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; }", message: messages.rejected('-apple-system'), }, { - code: - "a { font-family: -apple-system, 'BlinkMacSystemFont', 'Segoe UI', Roboto, sans-serif; }", + code: "a { font-family: -apple-system, 'BlinkMacSystemFont', 'Segoe UI', Roboto, sans-serif; }", message: messages.rejected('BlinkMacSystemFont'), }, ], diff --git a/lib/rules/font-family-no-duplicate-names/__tests__/index.js b/lib/rules/font-family-no-duplicate-names/__tests__/index.js index 59e538c7cb..e0286b7749 100644 --- a/lib/rules/font-family-no-duplicate-names/__tests__/index.js +++ b/lib/rules/font-family-no-duplicate-names/__tests__/index.js @@ -56,8 +56,7 @@ testRule({ column: 39, }, { - code: - 'b { font: normal 14px/32px -apple-system, BlinkMacSystemFont, sans-serif, sans-serif; }', + code: 'b { font: normal 14px/32px -apple-system, BlinkMacSystemFont, sans-serif, sans-serif; }', message: messages.rejected('sans-serif'), line: 1, column: 75, diff --git a/lib/rules/function-comma-newline-after/__tests__/index.js b/lib/rules/function-comma-newline-after/__tests__/index.js index d9624a7b4e..6de646fd79 100644 --- a/lib/rules/function-comma-newline-after/__tests__/index.js +++ b/lib/rules/function-comma-newline-after/__tests__/index.js @@ -260,8 +260,7 @@ testRule({ column: 4, }, { - code: - 'a { background-image: repeating-linear-gradient(\n-45deg,\ntransparent, rgba(0, 0, 0, 1) 5px\n);}', + code: 'a { background-image: repeating-linear-gradient(\n-45deg,\ntransparent, rgba(0, 0, 0, 1) 5px\n);}', fixed: 'a { background-image: repeating-linear-gradient(\n-45deg,\ntransparent,\nrgba(0, 0, 0, 1) 5px\n);}', message: messages.expectedAfterMultiLine(), diff --git a/lib/rules/function-linear-gradient-no-nonstandard-direction/__tests__/index.js b/lib/rules/function-linear-gradient-no-nonstandard-direction/__tests__/index.js index 2dba67cf90..287f787a95 100644 --- a/lib/rules/function-linear-gradient-no-nonstandard-direction/__tests__/index.js +++ b/lib/rules/function-linear-gradient-no-nonstandard-direction/__tests__/index.js @@ -88,16 +88,13 @@ testRule({ code: '.foo { background: -o-linear-gradient(bottom, #fff, #000 ), url(foo.png); }', }, { - code: - '.foo { background: url(foo.png), -webkit-linear-gradient(bottom, #fff, #000 ), url(bar.png); }', + code: '.foo { background: url(foo.png), -webkit-linear-gradient(bottom, #fff, #000 ), url(bar.png); }', }, { - code: - '.foo { background: url(foo.png), -moz-linear-gradient(bottom, #fff, #000 ), url(bar.png); }', + code: '.foo { background: url(foo.png), -moz-linear-gradient(bottom, #fff, #000 ), url(bar.png); }', }, { - code: - '.foo { background: url(foo.png), -o-linear-gradient(bottom, #fff, #000 ), url(bar.png); }', + code: '.foo { background: url(foo.png), -o-linear-gradient(bottom, #fff, #000 ), url(bar.png); }', }, ], @@ -217,8 +214,7 @@ testRule({ column: 44, }, { - code: - '.foo { background: url(foo.png), -moz-linear-gradient(to bottom, #fff, #000), url(foo.png); }', + code: '.foo { background: url(foo.png), -moz-linear-gradient(to bottom, #fff, #000), url(foo.png); }', message: messages.rejected, line: 1, column: 55, @@ -230,22 +226,19 @@ testRule({ column: 39, }, { - code: - '.foo { background: url(foo.png), -webkit-linear-gradient(to bottom, #fff, #000), url(bar.png); }', + code: '.foo { background: url(foo.png), -webkit-linear-gradient(to bottom, #fff, #000), url(bar.png); }', message: messages.rejected, line: 1, column: 58, }, { - code: - '.foo { background: url(foo.png), -moz-linear-gradient(to bottom, #fff, #000), url(bar.png); }', + code: '.foo { background: url(foo.png), -moz-linear-gradient(to bottom, #fff, #000), url(bar.png); }', message: messages.rejected, line: 1, column: 55, }, { - code: - '.foo { background: url(foo.png), -o-linear-gradient(to bottom, #fff, #000), url(bar.png); }', + code: '.foo { background: url(foo.png), -o-linear-gradient(to bottom, #fff, #000), url(bar.png); }', message: messages.rejected, line: 1, column: 53, diff --git a/lib/rules/function-url-no-scheme-relative/__tests__/index.js b/lib/rules/function-url-no-scheme-relative/__tests__/index.js index 2f55e23038..5949a105b9 100644 --- a/lib/rules/function-url-no-scheme-relative/__tests__/index.js +++ b/lib/rules/function-url-no-scheme-relative/__tests__/index.js @@ -47,8 +47,7 @@ testRule({ code: "a { background: url('http://www.google.com/file.jpg'); }", }, { - code: - "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", + code: "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", }, { code: "@font-face { font-family: 'foo'; src: url('/path/to/foo.ttf'); }", @@ -131,8 +130,7 @@ testRule({ column: 37, }, { - code: - '', + code: '', message: messages.rejected, line: 1, column: 40, @@ -148,27 +146,23 @@ testRule({ accept: [ { - code: - "import styled from 'styled-components';\nexport default styled.div` background: url(${variable}) `;", + code: "import styled from 'styled-components';\nexport default styled.div` background: url(${variable}) `;", description: 'ignore variable', }, { - code: - "import styled from 'react-emotion';\nexport default styled.div` background: url(${variable}) `;", + code: "import styled from 'react-emotion';\nexport default styled.div` background: url(${variable}) `;", description: 'ignore variable', }, ], reject: [ { - code: - 'import styled from "styled-components";\nexport default styled.div` background: url(//www.google.com/file.jpg); `;', + code: 'import styled from "styled-components";\nexport default styled.div` background: url(//www.google.com/file.jpg); `;', message: messages.rejected, line: 2, column: 44, }, { - code: - 'import styled from "react-emotion";\nexport default styled.div` background: url(//www.google.com/file.jpg); `;', + code: 'import styled from "react-emotion";\nexport default styled.div` background: url(//www.google.com/file.jpg); `;', message: messages.rejected, line: 2, column: 44, diff --git a/lib/rules/function-url-quotes/__tests__/index.js b/lib/rules/function-url-quotes/__tests__/index.js index ea967fda52..9ae17bcaae 100644 --- a/lib/rules/function-url-quotes/__tests__/index.js +++ b/lib/rules/function-url-quotes/__tests__/index.js @@ -642,27 +642,23 @@ testRule({ accept: [ { - code: - "import styled from 'styled-components';\nexport default styled.div` background: url(${variable}); `;", + code: "import styled from 'styled-components';\nexport default styled.div` background: url(${variable}); `;", description: 'ignore variable', }, { - code: - "import styled from 'react-emotion';\nexport default styled.div` background: url(${variable}); `;", + code: "import styled from 'react-emotion';\nexport default styled.div` background: url(${variable}); `;", description: 'ignore variable', }, ], reject: [ { - code: - 'import styled from "styled-components";\nexport default styled.div` background: url(foo.css); `;', + code: 'import styled from "styled-components";\nexport default styled.div` background: url(foo.css); `;', message: messages.expected(), line: 2, column: 44, }, { - code: - 'import styled from "react-emotion";\nexport default styled.div` background: url(foo.css); `;', + code: 'import styled from "react-emotion";\nexport default styled.div` background: url(foo.css); `;', message: messages.expected(), line: 2, column: 44, diff --git a/lib/rules/function-url-scheme-allowed-list/__tests__/index.js b/lib/rules/function-url-scheme-allowed-list/__tests__/index.js index 6604deb821..e637888b59 100644 --- a/lib/rules/function-url-scheme-allowed-list/__tests__/index.js +++ b/lib/rules/function-url-scheme-allowed-list/__tests__/index.js @@ -59,8 +59,7 @@ testRule({ code: "a { background: url('https://www.example.com/file.jpg'); }", }, { - code: - "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", + code: "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", }, { code: "a { background-image: url('https://example.com:3000'); }", @@ -184,8 +183,7 @@ testRule({ column: 21, }, { - code: - "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", + code: "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", message: messages.rejected('data'), line: 1, column: 27, @@ -220,8 +218,7 @@ testRule({ column: 21, }, { - code: - "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", + code: "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", message: messages.rejected('data'), line: 1, column: 27, @@ -275,8 +272,7 @@ testRule({ column: 21, }, { - code: - "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", + code: "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", message: messages.rejected('data'), line: 1, column: 27, @@ -309,8 +305,7 @@ testRule({ column: 21, }, { - code: - "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", + code: "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", message: messages.rejected('data'), line: 1, column: 27, diff --git a/lib/rules/function-url-scheme-disallowed-list/__tests__/index.js b/lib/rules/function-url-scheme-disallowed-list/__tests__/index.js index 2cf73666e2..3c568e65a0 100644 --- a/lib/rules/function-url-scheme-disallowed-list/__tests__/index.js +++ b/lib/rules/function-url-scheme-disallowed-list/__tests__/index.js @@ -137,8 +137,7 @@ testRule({ reject: [ { - code: - "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", + code: "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", message: messages.rejected('data'), line: 1, column: 27, @@ -189,8 +188,7 @@ testRule({ accept: [ { - code: - "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", + code: "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", }, { code: 'a { background: url(./file.jpg); }', @@ -226,8 +224,7 @@ testRule({ accept: [ { - code: - "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", + code: "a { background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); }", }, { code: 'a { background: url(./file.jpg); }', diff --git a/lib/rules/length-zero-no-unit/__tests__/index.js b/lib/rules/length-zero-no-unit/__tests__/index.js index 9c0685890a..1f976d977a 100644 --- a/lib/rules/length-zero-no-unit/__tests__/index.js +++ b/lib/rules/length-zero-no-unit/__tests__/index.js @@ -170,23 +170,19 @@ testRule({ description: 'ignore dppx', }, { - code: - 'a { background: linear-gradient(0deg, rgba(7, 29, 73, 0.12) 0%, rgba(7, 29, 73, 0) 80%) #fff; }', + code: 'a { background: linear-gradient(0deg, rgba(7, 29, 73, 0.12) 0%, rgba(7, 29, 73, 0) 80%) #fff; }', description: 'ignore deg', }, { - code: - 'a { background: linear-gradient(0grad, rgba(7, 29, 73, 0.12) 0%, rgba(7, 29, 73, 0) 80%) #fff; }', + code: 'a { background: linear-gradient(0grad, rgba(7, 29, 73, 0.12) 0%, rgba(7, 29, 73, 0) 80%) #fff; }', description: 'ignore grad', }, { - code: - 'a { background: linear-gradient(0turn, rgba(7, 29, 73, 0.12) 0%, rgba(7, 29, 73, 0) 80%) #fff; }', + code: 'a { background: linear-gradient(0turn, rgba(7, 29, 73, 0.12) 0%, rgba(7, 29, 73, 0) 80%) #fff; }', description: 'ignore turn', }, { - code: - 'a { background: linear-gradient(0rad, rgba(7, 29, 73, 0.12) 0%, rgba(7, 29, 73, 0) 80%) #fff; }', + code: 'a { background: linear-gradient(0rad, rgba(7, 29, 73, 0.12) 0%, rgba(7, 29, 73, 0) 80%) #fff; }', description: 'ignore rad', }, { diff --git a/lib/rules/max-line-length/__tests__/index.js b/lib/rules/max-line-length/__tests__/index.js index c448131dca..7538fea016 100644 --- a/lib/rules/max-line-length/__tests__/index.js +++ b/lib/rules/max-line-length/__tests__/index.js @@ -158,8 +158,7 @@ testRule({ column: 70, }, { - code: - 'a {\n /* Lorem ipsum dolor sit amet. The comment Lorem ipsum dolor sit amet, consectetur adipisicing elit. Praesentium officia fugiat unde deserunt sit, tenetur! Incidunt similique blanditiis placeat ad quia possimus libero, reiciendis excepturi non esse deserunt a odit. */\n}', + code: 'a {\n /* Lorem ipsum dolor sit amet. The comment Lorem ipsum dolor sit amet, consectetur adipisicing elit. Praesentium officia fugiat unde deserunt sit, tenetur! Incidunt similique blanditiis placeat ad quia possimus libero, reiciendis excepturi non esse deserunt a odit. */\n}', message: messages.expected(20), line: 2, column: 272, @@ -319,8 +318,7 @@ testRule({ reject: [ { - code: - 'a {\n // Lorem ipsum dolor sit amet. The comment Lorem ipsum dolor sit amet, consectetur adipisicing elit. Praesentium officia fugiat unde deserunt sit, tenetur! Incidunt similique blanditiis placeat ad quia possimus libero, reiciendis excepturi non esse deserunt a odit.\n}', + code: 'a {\n // Lorem ipsum dolor sit amet. The comment Lorem ipsum dolor sit amet, consectetur adipisicing elit. Praesentium officia fugiat unde deserunt sit, tenetur! Incidunt similique blanditiis placeat ad quia possimus libero, reiciendis excepturi non esse deserunt a odit.\n}', message: messages.expected(20), line: 2, column: 269, @@ -423,8 +421,7 @@ testRule({ column: 49, }, { - code: - 'a {}\n/**\n * each line\n * short nuff\n * except this one which is too long\n */\nb {}', + code: 'a {}\n/**\n * each line\n * short nuff\n * except this one which is too long\n */\nb {}', message: messages.expected(20), line: 5, column: 36, @@ -507,8 +504,7 @@ testRule({ accept: [ { - code: - '@import "../../../something/something/something/something.css" screen, projection, tv;', + code: '@import "../../../something/something/something/something.css" screen, projection, tv;', }, ], @@ -520,8 +516,7 @@ testRule({ column: 47, }, { - code: - '@import "../../../something/something/something/something.css";\na { color: 0;\n top: 0; left: 0; right: 0; background: pink; \n bottom: 0; }', + code: '@import "../../../something/something/something/something.css";\na { color: 0;\n top: 0; left: 0; right: 0; background: pink; \n bottom: 0; }', message: messages.expected(30), line: 3, column: 47, diff --git a/lib/rules/no-descending-specificity/__tests__/index.js b/lib/rules/no-descending-specificity/__tests__/index.js index 58a29c9ac7..79593d21d4 100644 --- a/lib/rules/no-descending-specificity/__tests__/index.js +++ b/lib/rules/no-descending-specificity/__tests__/index.js @@ -81,8 +81,7 @@ testRule({ code: ':root { foo: {}; }', }, { - code: - ':global(.buildResultsSummaryTable) span {} :global(.buildResultsSummaryTable) span:nth-child(2) {}', + code: ':global(.buildResultsSummaryTable) span {} :global(.buildResultsSummaryTable) span:nth-child(2) {}', }, { code: 'a:hover {} a::before {}', diff --git a/lib/rules/no-duplicate-at-import-rules/__tests__/index.js b/lib/rules/no-duplicate-at-import-rules/__tests__/index.js index 9b8c38ede1..f3922a46ab 100644 --- a/lib/rules/no-duplicate-at-import-rules/__tests__/index.js +++ b/lib/rules/no-duplicate-at-import-rules/__tests__/index.js @@ -83,8 +83,7 @@ testRule({ column: 38, }, { - code: - '@import "a.css" tv, (min-width : 500px);@import url(a.css) ( min-width:500px ), tv;', + code: '@import "a.css" tv, (min-width : 500px);@import url(a.css) ( min-width:500px ), tv;', message: messages.rejected(`a.css`), line: 1, column: 41, diff --git a/lib/rules/no-eol-whitespace/__tests__/index.js b/lib/rules/no-eol-whitespace/__tests__/index.js index bf6117a277..ccded2568c 100644 --- a/lib/rules/no-eol-whitespace/__tests__/index.js +++ b/lib/rules/no-eol-whitespace/__tests__/index.js @@ -79,8 +79,7 @@ testRule({ code: 'a\n{\n\tcolor: pink;\n\ttop: 0;\n}', }, { - code: - '@media print {\n a {\n color: pink;\n }\n}\n\n@media screen {\n b { color: orange; }\n}', + code: '@media print {\n a {\n color: pink;\n }\n}\n\n@media screen {\n b { color: orange; }\n}', }, { code: '/* comment\n*/', @@ -253,8 +252,7 @@ testRule({ column: 10, }, { - code: - '@media print { \n a {\n color: pink;\n }\n}\n\n@media screen {\n b { color: orange; }\n}', + code: '@media print { \n a {\n color: pink;\n }\n}\n\n@media screen {\n b { color: orange; }\n}', fixed: '@media print {\n a {\n color: pink;\n }\n}\n\n@media screen {\n b { color: orange; }\n}', message: messages.rejected, @@ -262,8 +260,7 @@ testRule({ column: 15, }, { - code: - '@media print {\n a { \n color: pink;\n }\n}\n\n@media screen {\n b { color: orange; }\n}', + code: '@media print {\n a { \n color: pink;\n }\n}\n\n@media screen {\n b { color: orange; }\n}', fixed: '@media print {\n a {\n color: pink;\n }\n}\n\n@media screen {\n b { color: orange; }\n}', message: messages.rejected, @@ -271,8 +268,7 @@ testRule({ column: 6, }, { - code: - '@media print {\n a {\n color: pink; \n }\n}\n\n@media screen {\n b { color: orange; }\n}', + code: '@media print {\n a {\n color: pink; \n }\n}\n\n@media screen {\n b { color: orange; }\n}', fixed: '@media print {\n a {\n color: pink;\n }\n}\n\n@media screen {\n b { color: orange; }\n}', message: messages.rejected, @@ -280,8 +276,7 @@ testRule({ column: 15, }, { - code: - '@media print {\n a {\n color: pink;\n } \n}\n\n@media screen {\n b { color: orange; }\n}', + code: '@media print {\n a {\n color: pink;\n } \n}\n\n@media screen {\n b { color: orange; }\n}', fixed: '@media print {\n a {\n color: pink;\n }\n}\n\n@media screen {\n b { color: orange; }\n}', message: messages.rejected, @@ -289,8 +284,7 @@ testRule({ column: 4, }, { - code: - '@media print {\n a {\n color: pink;\n }\n} \n\n@media screen {\n b { color: orange; }\n}', + code: '@media print {\n a {\n color: pink;\n }\n} \n\n@media screen {\n b { color: orange; }\n}', fixed: '@media print {\n a {\n color: pink;\n }\n}\n\n@media screen {\n b { color: orange; }\n}', message: messages.rejected, @@ -298,8 +292,7 @@ testRule({ column: 2, }, { - code: - '@media print {\n a {\n color: pink;\n }\n}\n \n@media screen {\n b { color: orange; }\n}', + code: '@media print {\n a {\n color: pink;\n }\n}\n \n@media screen {\n b { color: orange; }\n}', fixed: '@media print {\n a {\n color: pink;\n }\n}\n\n@media screen {\n b { color: orange; }\n}', message: messages.rejected, @@ -307,8 +300,7 @@ testRule({ column: 1, }, { - code: - '@media print {\n a {\n color: pink;\n }\n}\n\n@media screen { \n b { color: orange; }\n}', + code: '@media print {\n a {\n color: pink;\n }\n}\n\n@media screen { \n b { color: orange; }\n}', fixed: '@media print {\n a {\n color: pink;\n }\n}\n\n@media screen {\n b { color: orange; }\n}', message: messages.rejected, @@ -316,8 +308,7 @@ testRule({ column: 16, }, { - code: - '@media print {\n a {\n color: pink;\n }\n}\n\n@media screen {\n b { color: orange; } \n}', + code: '@media print {\n a {\n color: pink;\n }\n}\n\n@media screen {\n b { color: orange; } \n}', fixed: '@media print {\n a {\n color: pink;\n }\n}\n\n@media screen {\n b { color: orange; }\n}', message: messages.rejected, diff --git a/lib/rules/no-extra-semicolons/__tests__/index.js b/lib/rules/no-extra-semicolons/__tests__/index.js index 531c9664b5..458b936924 100644 --- a/lib/rules/no-extra-semicolons/__tests__/index.js +++ b/lib/rules/no-extra-semicolons/__tests__/index.js @@ -53,12 +53,10 @@ testRule({ code: ':root { --foo: red; --bar: blue; }', }, { - code: - ':root { --foo: { color: red }; --bar: { color: blue }; --foo-bar: { color: blue }; --bar-foo: { color: red }; }', + code: ':root { --foo: { color: red }; --bar: { color: blue }; --foo-bar: { color: blue }; --bar-foo: { color: red }; }', }, { - code: - ':root { --foo: { color: red }; /* comment */ --bar: { color: blue };/* comment */ --foo-bar: { color: blue }; --bar-foo: { color: red }; }', + code: ':root { --foo: { color: red }; /* comment */ --bar: { color: blue };/* comment */ --foo-bar: { color: blue }; --bar-foo: { color: red }; }', }, ], @@ -910,8 +908,7 @@ testRule({ column: 44, }, { - code: - ':root { --foo: { color: red };/* comment */; --bar: { color: blue }; --bar-foo: { color: red }; }', + code: ':root { --foo: { color: red };/* comment */; --bar: { color: blue }; --bar-foo: { color: red }; }', fixed: ':root { --foo: { color: red };/* comment */ --bar: { color: blue }; --bar-foo: { color: red }; }', message: messages.rejected, @@ -919,8 +916,7 @@ testRule({ column: 44, }, { - code: - ':root { --foo: { color: red }; --bar: { color: blue };/* comment 1 */ /* comment 2 */; --bar-foo: { color: red }; }', + code: ':root { --foo: { color: red }; --bar: { color: blue };/* comment 1 */ /* comment 2 */; --bar-foo: { color: red }; }', fixed: ':root { --foo: { color: red }; --bar: { color: blue };/* comment 1 */ /* comment 2 */ --bar-foo: { color: red }; }', message: messages.rejected, @@ -928,8 +924,7 @@ testRule({ column: 86, }, { - code: - ':root { --foo: { color: red }; --bar: { color: blue }/* comment 1 */; /* comment 2 */; --bar-foo: { color: red }; }', + code: ':root { --foo: { color: red }; --bar: { color: blue }/* comment 1 */; /* comment 2 */; --bar-foo: { color: red }; }', fixed: ':root { --foo: { color: red }; --bar: { color: blue }/* comment 1 */; /* comment 2 */ --bar-foo: { color: red }; }', message: messages.rejected, diff --git a/lib/rules/property-no-unknown/__tests__/index.js b/lib/rules/property-no-unknown/__tests__/index.js index a5c6bb6900..b3efc5ec6d 100644 --- a/lib/rules/property-no-unknown/__tests__/index.js +++ b/lib/rules/property-no-unknown/__tests__/index.js @@ -285,12 +285,10 @@ testRule({ accept: [ { - code: - "import styled from 'styled-components';\nexport default styled.div` ${/* sc-prop */ something}: papayawhip; `;", + code: "import styled from 'styled-components';\nexport default styled.div` ${/* sc-prop */ something}: papayawhip; `;", }, { - code: - "import styled from 'styled-components';\nexport default styled.div` margin-${/* sc-custom 'left' */ rtlSwitch}: 12.5px; `;", + code: "import styled from 'styled-components';\nexport default styled.div` margin-${/* sc-custom 'left' */ rtlSwitch}: 12.5px; `;", }, { code: 'const Component = styled.a`\n\t${rule}: 1;\n`', @@ -309,8 +307,7 @@ testRule({ reject: [ { - code: - "import styled from 'styled-components';\nexport default styled.div` .foo { colr: blue; } `;", + code: "import styled from 'styled-components';\nexport default styled.div` .foo { colr: blue; } `;", message: messages.rejected('colr'), line: 2, column: 35, diff --git a/lib/rules/selector-class-pattern/README.md b/lib/rules/selector-class-pattern/README.md index 4699801c8a..9feeead94f 100644 --- a/lib/rules/selector-class-pattern/README.md +++ b/lib/rules/selector-class-pattern/README.md @@ -25,7 +25,6 @@ Given the string: ```js "foo-[a-z]+"; - ``` The following patterns are considered violations: diff --git a/lib/rules/selector-list-comma-newline-after/__tests__/index.js b/lib/rules/selector-list-comma-newline-after/__tests__/index.js index 9fdbabb099..ee5681a89c 100644 --- a/lib/rules/selector-list-comma-newline-after/__tests__/index.js +++ b/lib/rules/selector-list-comma-newline-after/__tests__/index.js @@ -327,8 +327,7 @@ testRule({ ], }, { - code: - 'a,\nb,\nc,\nd,\ne,\nf,\ng,\nh,\ni,\nj,\nk,\nl,\nm,\nn,\no,\np,\nq,\nr,\ns,\nt,\nu,\nv,\nw,\nx,\ny,\nz {\n}', + code: 'a,\nb,\nc,\nd,\ne,\nf,\ng,\nh,\ni,\nj,\nk,\nl,\nm,\nn,\no,\np,\nq,\nr,\ns,\nt,\nu,\nv,\nw,\nx,\ny,\nz {\n}', fixed: 'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z {\n}', warnings: new Array(25).fill(0).map((_, i) => ({ message: messages.rejectedAfterMultiLine(), diff --git a/lib/rules/selector-max-attribute/__tests__/index.js b/lib/rules/selector-max-attribute/__tests__/index.js index 845401e454..428bd3b90e 100644 --- a/lib/rules/selector-max-attribute/__tests__/index.js +++ b/lib/rules/selector-max-attribute/__tests__/index.js @@ -193,8 +193,7 @@ testRule({ column: 6, }, { - code: - '[type="text"][name="message"][data-attribute="value"] :not([data-attribute-2="value"]) {}', + code: '[type="text"][name="message"][data-attribute="value"] :not([data-attribute-2="value"]) {}', description: ':not(): greater than max classes, outside', message: messages.expected( '[type="text"][name="message"][data-attribute="value"] :not([data-attribute-2="value"])', diff --git a/lib/rules/selector-max-combinators/__tests__/index.js b/lib/rules/selector-max-combinators/__tests__/index.js index dbd3accaa8..a76d5c8fed 100644 --- a/lib/rules/selector-max-combinators/__tests__/index.js +++ b/lib/rules/selector-max-combinators/__tests__/index.js @@ -312,23 +312,19 @@ testRule({ description: 'ignore Less interpolation inside .for', }, { - code: - '.for(@n: 1) when (@n <= 10) { .n-@{n}-@{n} { content: %("n: %d", 1 + 1); } .for(@n + 1); }', + code: '.for(@n: 1) when (@n <= 10) { .n-@{n}-@{n} { content: %("n: %d", 1 + 1); } .for(@n + 1); }', description: 'ignore multiple Less interpolations in a selector inside .for', }, { - code: - '.for(@n: 1) when (@n <= 10) { .n-@{n}n@{n} { content: %("n: %d", 1 + 1); } .for(@n + 1); }', + code: '.for(@n: 1) when (@n <= 10) { .n-@{n}n@{n} { content: %("n: %d", 1 + 1); } .for(@n + 1); }', description: 'ignore multiple Less interpolations in a selector inside .for', }, { - code: - '.each(@vals, @n: 1) when (@n <= length(@vals)) { @val: extract(@vals, @n); .n-@{val} { content: %("n: %d", 1 + 1); } .each(@vals, @n + 1); }', + code: '.each(@vals, @n: 1) when (@n <= length(@vals)) { @val: extract(@vals, @n); .n-@{val} { content: %("n: %d", 1 + 1); } .each(@vals, @n + 1); }', description: 'ignore Less interpolation inside .each', }, { - code: - '.while(@n: 0) when (@n < 10) { .n-@{n} { content: %("n: %d", 1 + 1); } .while(@n + 1) }', + code: '.while(@n: 0) when (@n < 10) { .n-@{n} { content: %("n: %d", 1 + 1); } .while(@n + 1) }', description: 'ignore Less interpolation inside .while', }, ], diff --git a/lib/rules/selector-max-id/__tests__/index.js b/lib/rules/selector-max-id/__tests__/index.js index 616ba2feb6..9c7674f765 100644 --- a/lib/rules/selector-max-id/__tests__/index.js +++ b/lib/rules/selector-max-id/__tests__/index.js @@ -393,23 +393,19 @@ testRule({ description: 'ignore Less interpolation inside .for', }, { - code: - '.for(@n: 1) when (@n <= 10) { .n-@{n}-@{n} { content: %("n: %d", 1 + 1); } .for(@n + 1); }', + code: '.for(@n: 1) when (@n <= 10) { .n-@{n}-@{n} { content: %("n: %d", 1 + 1); } .for(@n + 1); }', description: 'ignore multiple Less interpolations in a selector inside .for', }, { - code: - '.for(@n: 1) when (@n <= 10) { .n-@{n}n@{n} { content: %("n: %d", 1 + 1); } .for(@n + 1); }', + code: '.for(@n: 1) when (@n <= 10) { .n-@{n}n@{n} { content: %("n: %d", 1 + 1); } .for(@n + 1); }', description: 'ignore multiple Less interpolations in a selector inside .for', }, { - code: - '.each(@vals, @n: 1) when (@n <= length(@vals)) { @val: extract(@vals, @n); .n-@{val} { content: %("n: %d", 1 + 1); } .each(@vals, @n + 1); }', + code: '.each(@vals, @n: 1) when (@n <= length(@vals)) { @val: extract(@vals, @n); .n-@{val} { content: %("n: %d", 1 + 1); } .each(@vals, @n + 1); }', description: 'ignore Less interpolation inside .each', }, { - code: - '.while(@n: 0) when (@n < 10) { .n-@{n} { content: %("n: %d", 1 + 1); } .while(@n + 1) }', + code: '.while(@n: 0) when (@n < 10) { .n-@{n} { content: %("n: %d", 1 + 1); } .while(@n + 1) }', description: 'ignore Less interpolation inside .while', }, { diff --git a/lib/rules/selector-max-specificity/__tests__/index.js b/lib/rules/selector-max-specificity/__tests__/index.js index 5c39ea75c3..f71463fc1c 100755 --- a/lib/rules/selector-max-specificity/__tests__/index.js +++ b/lib/rules/selector-max-specificity/__tests__/index.js @@ -34,8 +34,7 @@ testRule({ 'a selector with 11 elements has a lower specificity than a selector with one classname', }, { - code: - 'z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z {}', + code: 'z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z {}', message: 'a selector with 101 elements has a lower specificity than a selector with one classname', }, diff --git a/lib/rules/selector-type-no-unknown/__tests__/index.js b/lib/rules/selector-type-no-unknown/__tests__/index.js index 28258af37f..7540a3f9f9 100644 --- a/lib/rules/selector-type-no-unknown/__tests__/index.js +++ b/lib/rules/selector-type-no-unknown/__tests__/index.js @@ -457,8 +457,7 @@ testRule({ accept: [ { - code: - "import styled from 'styled-components';\nexport default styled.div` ${/* sc-selector */ Button} {} `;", + code: "import styled from 'styled-components';\nexport default styled.div` ${/* sc-selector */ Button} {} `;", }, ], diff --git a/lib/rules/unit-disallowed-list/__tests__/index.js b/lib/rules/unit-disallowed-list/__tests__/index.js index cdb0a828e5..ffbaf3a1a1 100644 --- a/lib/rules/unit-disallowed-list/__tests__/index.js +++ b/lib/rules/unit-disallowed-list/__tests__/index.js @@ -402,8 +402,7 @@ testRule({ code: '@media speech and (device-aspect-ratio: 16/9) { }', }, { - code: - '@media only screen and (min-width: 320px) and (height: 480px) and (-webkit-min-device-pixel-ratio: 2) { body { line-height: 1.4 } }', + code: '@media only screen and (min-width: 320px) and (height: 480px) and (-webkit-min-device-pixel-ratio: 2) { body { line-height: 1.4 } }', }, { code: '@media screen, print { }', @@ -484,15 +483,13 @@ testRule({ column: 29, }, { - code: - '@media only screen and (min-width: 320px) and (height: 480px) and (-webkit-min-device-pixel-ratio: 2) { body { line-height: 1.4px } }', + code: '@media only screen and (min-width: 320px) and (height: 480px) and (-webkit-min-device-pixel-ratio: 2) { body { line-height: 1.4px } }', message: messages.rejected('px'), line: 1, column: 125, }, { - code: - '@media only screen and (min-width: 320px) and (height: 480px) and (-webkit-min-device-pixel-ratio: 2px) { body { line-height: 1.4 } }', + code: '@media only screen and (min-width: 320px) and (height: 480px) and (-webkit-min-device-pixel-ratio: 2px) { body { line-height: 1.4 } }', message: messages.rejected('px'), line: 1, column: 100, diff --git a/lib/rules/unit-no-unknown/__tests__/index.js b/lib/rules/unit-no-unknown/__tests__/index.js index 78dcca608a..78af30c029 100644 --- a/lib/rules/unit-no-unknown/__tests__/index.js +++ b/lib/rules/unit-no-unknown/__tests__/index.js @@ -400,16 +400,14 @@ testRule({ column: 44, }, { - code: - "a { background: image-set('img1x.png' 1x, 'img2x.png' 2x) left 20x / 15% 60% repeat-x; }", + code: "a { background: image-set('img1x.png' 1x, 'img2x.png' 2x) left 20x / 15% 60% repeat-x; }", message: messages.rejected('x'), description: '`x` rejected with inappropriate property', line: 1, column: 64, }, { - code: - "a { background: /* comment */ image-set('img1x.png' 1x, 'img2x.png' 2x) left 20x / 15% 60% repeat-x; }", + code: "a { background: /* comment */ image-set('img1x.png' 1x, 'img2x.png' 2x) left 20x / 15% 60% repeat-x; }", message: messages.rejected('x'), description: '`x` rejected with inappropriate property', line: 1, @@ -452,8 +450,7 @@ testRule({ description: 'ignore map property name', }, { - code: - '$breakpoints: ( small: /* comment */ 767px, medium: ( 1prop: 992px, 2prop: ( 1prop: 1200px ) ) );', + code: '$breakpoints: ( small: /* comment */ 767px, medium: ( 1prop: 992px, 2prop: ( 1prop: 1200px ) ) );', description: 'ignore map property name in nested maps', }, ], @@ -496,8 +493,7 @@ testRule({ column: 40, }, { - code: - '$breakpoints: ( small: /* comment */ 767px, medium: ( 1prop: 992pix, 2prop: ( 1prop: 1200px ) ) );', + code: '$breakpoints: ( small: /* comment */ 767px, medium: ( 1prop: 992pix, 2prop: ( 1prop: 1200px ) ) );', message: messages.rejected('pix'), line: 1, column: 49, @@ -618,16 +614,13 @@ testRule({ accept: [ { - code: - "a { background-image: image-set('/images/some-image-1x.jpg' 1x,'/images/some-image-2x.jpg' 2x,'/images/some-image-3x.jpg' 3x,); }", + code: "a { background-image: image-set('/images/some-image-1x.jpg' 1x,'/images/some-image-2x.jpg' 2x,'/images/some-image-3x.jpg' 3x,); }", }, { - code: - "a { background-image: my-image-set('/images/some-image-1x.jpg' 1x,'/images/some-image-2x.jpg' 2x,'/images/some-image-3x.jpg' 3x,); }", + code: "a { background-image: my-image-set('/images/some-image-1x.jpg' 1x,'/images/some-image-2x.jpg' 2x,'/images/some-image-3x.jpg' 3x,); }", }, { - code: - "a { background-image: YoUr-image-set('/images/some-image-1x.jpg' 1x,'/images/some-image-2x.jpg' 2x,'/images/some-image-3x.jpg' 3x,); }", + code: "a { background-image: YoUr-image-set('/images/some-image-1x.jpg' 1x,'/images/some-image-2x.jpg' 2x,'/images/some-image-3x.jpg' 3x,); }", }, ], @@ -656,8 +649,7 @@ testRule({ accept: [ { - code: - "a { background-image: my-image-set('/images/some-image-1x.jpg' 1x,'/images/some-image-2x.jpg' 2x,'/images/some-image-3x.jpg' 3x,); }", + code: "a { background-image: my-image-set('/images/some-image-1x.jpg' 1x,'/images/some-image-2x.jpg' 2x,'/images/some-image-3x.jpg' 3x,); }", }, ], diff --git a/lib/standalone.js b/lib/standalone.js index cd5b210a85..4d4cb24824 100644 --- a/lib/standalone.js +++ b/lib/standalone.js @@ -124,21 +124,23 @@ module.exports = function (options) { }) .then((postcssResult) => { // Check for file existence - return /** @type {Promise} */ (new Promise((resolve, reject) => { - if (!absoluteCodeFilename) { - reject(); - - return; - } - - fs.stat(absoluteCodeFilename, (err) => { - if (err) { + return /** @type {Promise} */ ( + new Promise((resolve, reject) => { + if (!absoluteCodeFilename) { reject(); - } else { - resolve(); + + return; } - }); - })) + + fs.stat(absoluteCodeFilename, (err) => { + if (err) { + reject(); + } else { + resolve(); + } + }); + }) + ) .then(() => { return stylelint._createStylelintResult(postcssResult, absoluteCodeFilename); }) diff --git a/package-lock.json b/package-lock.json index 203c71a95f..7bfb5ff025 100644 --- a/package-lock.json +++ b/package-lock.json @@ -85,7 +85,7 @@ "postcss-less": "^5.0.0", "postcss-sass": "^0.5.0", "postcss-scss": "^4.0.0", - "prettier": "2.2.1", + "prettier": "2.3.2", "remark-cli": "^9.0.0", "sugarss": "^4.0.1", "typescript": "^4.2.4" @@ -8337,9 +8337,9 @@ } }, "node_modules/prettier": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", - "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -17274,9 +17274,9 @@ "dev": true }, "prettier": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", - "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", "dev": true }, "prettier-plugin-packagejson": { diff --git a/package.json b/package.json index 55127bae8d..74ed8f736f 100644 --- a/package.json +++ b/package.json @@ -181,7 +181,7 @@ "postcss-less": "^5.0.0", "postcss-sass": "^0.5.0", "postcss-scss": "^4.0.0", - "prettier": "2.2.1", + "prettier": "2.3.2", "remark-cli": "^9.0.0", "sugarss": "^4.0.1", "typescript": "^4.2.4" From f076a8945912ddec98fce8d7fdfdea4bb6a2d60d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 14:18:16 +0100 Subject: [PATCH 088/194] Bump husky from 6.0.0 to 7.0.1 (#5468) * Bump husky from 6.0.0 to 7.0.1 Bumps [husky](https://github.com/typicode/husky) from 6.0.0 to 7.0.1. - [Release notes](https://github.com/typicode/husky/releases) - [Commits](https://github.com/typicode/husky/compare/v6.0.0...v7.0.1) --- updated-dependencies: - dependency-name: husky dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * Remove redundant gitignore Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: jeddy3 --- .husky/.gitignore | 1 - package-lock.json | 17 ++++++++++------- package.json | 2 +- 3 files changed, 11 insertions(+), 9 deletions(-) delete mode 100644 .husky/.gitignore diff --git a/.husky/.gitignore b/.husky/.gitignore deleted file mode 100644 index 31354ec138..0000000000 --- a/.husky/.gitignore +++ /dev/null @@ -1 +0,0 @@ -_ diff --git a/package-lock.json b/package-lock.json index 7bfb5ff025..bfe2b6776d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -74,7 +74,7 @@ "eslint": "^7.32.0", "eslint-config-stylelint": "^13.1.1", "got": "^11.8.2", - "husky": "^6.0.0", + "husky": "^7.0.1", "jest": "^27.0.1", "jest-preset-stylelint": "^4.1.1", "jest-watch-typeahead": "^0.6.4", @@ -4191,13 +4191,16 @@ } }, "node_modules/husky": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz", - "integrity": "sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.1.tgz", + "integrity": "sha512-gceRaITVZ+cJH9sNHqx5tFwbzlLCVxtVZcusME8JYQ8Edy5mpGDOqD8QBCdMhpyo9a+JXddnujQ4rpY2Ff9SJA==", "dev": true, "bin": { "husky": "lib/bin.js" }, + "engines": { + "node": ">=12" + }, "funding": { "url": "https://github.com/sponsors/typicode" } @@ -14070,9 +14073,9 @@ "dev": true }, "husky": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz", - "integrity": "sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.1.tgz", + "integrity": "sha512-gceRaITVZ+cJH9sNHqx5tFwbzlLCVxtVZcusME8JYQ8Edy5mpGDOqD8QBCdMhpyo9a+JXddnujQ4rpY2Ff9SJA==", "dev": true }, "iconv-lite": { diff --git a/package.json b/package.json index 74ed8f736f..c4d74a5650 100644 --- a/package.json +++ b/package.json @@ -170,7 +170,7 @@ "eslint": "^7.32.0", "eslint-config-stylelint": "^13.1.1", "got": "^11.8.2", - "husky": "^6.0.0", + "husky": "^7.0.1", "jest": "^27.0.1", "jest-preset-stylelint": "^4.1.1", "jest-watch-typeahead": "^0.6.4", From 59af527407b89ce121d117cc84fd4476b38daaf3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 14:18:28 +0100 Subject: [PATCH 089/194] Bump @types/write-file-atomic from 3.0.1 to 3.0.2 (#5469) Bumps [@types/write-file-atomic](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/write-file-atomic) from 3.0.1 to 3.0.2. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/write-file-atomic) --- updated-dependencies: - dependency-name: "@types/write-file-atomic" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index bfe2b6776d..ec1e434d52 100644 --- a/package-lock.json +++ b/package-lock.json @@ -68,7 +68,7 @@ "@types/postcss-safe-parser": "^5.0.0", "@types/style-search": "^0.1.1", "@types/svg-tags": "^1.0.0", - "@types/write-file-atomic": "^3.0.1", + "@types/write-file-atomic": "^3.0.2", "benchmark": "^2.1.4", "common-tags": "^1.8.0", "eslint": "^7.32.0", @@ -1329,9 +1329,9 @@ "dev": true }, "node_modules/@types/write-file-atomic": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/write-file-atomic/-/write-file-atomic-3.0.1.tgz", - "integrity": "sha512-o5Pl/qux8JEuFpof5fUg/Fl6R3N26ExJlsmWpB67ayrEJDMIxWdM9NDJacisXeNB7YW+vij8onctH8Pr1Zhi5g==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/write-file-atomic/-/write-file-atomic-3.0.2.tgz", + "integrity": "sha512-dTP8L3SaqbcmQEbeDcNDnv4vUXB7di125C2Ws5w1UhPIgC4hfa54aOxEHOSUkdTSWNJ4clpGLbN9LHX4qaA2rg==", "dev": true, "dependencies": { "@types/node": "*" @@ -11864,9 +11864,9 @@ "dev": true }, "@types/write-file-atomic": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/write-file-atomic/-/write-file-atomic-3.0.1.tgz", - "integrity": "sha512-o5Pl/qux8JEuFpof5fUg/Fl6R3N26ExJlsmWpB67ayrEJDMIxWdM9NDJacisXeNB7YW+vij8onctH8Pr1Zhi5g==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/write-file-atomic/-/write-file-atomic-3.0.2.tgz", + "integrity": "sha512-dTP8L3SaqbcmQEbeDcNDnv4vUXB7di125C2Ws5w1UhPIgC4hfa54aOxEHOSUkdTSWNJ4clpGLbN9LHX4qaA2rg==", "dev": true, "requires": { "@types/node": "*" diff --git a/package.json b/package.json index c4d74a5650..630b5af1eb 100644 --- a/package.json +++ b/package.json @@ -164,7 +164,7 @@ "@types/postcss-safe-parser": "^5.0.0", "@types/style-search": "^0.1.1", "@types/svg-tags": "^1.0.0", - "@types/write-file-atomic": "^3.0.1", + "@types/write-file-atomic": "^3.0.2", "benchmark": "^2.1.4", "common-tags": "^1.8.0", "eslint": "^7.32.0", From 2739142d8a0971f01eb4b7cd4855bbb81873073c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 14:18:39 +0100 Subject: [PATCH 090/194] Bump remark-cli from 9.0.0 to 10.0.0 (#5470) Bumps [remark-cli](https://github.com/remarkjs/remark) from 9.0.0 to 10.0.0. - [Release notes](https://github.com/remarkjs/remark/releases) - [Changelog](https://github.com/remarkjs/remark/blob/main/changelog.md) - [Commits](https://github.com/remarkjs/remark/compare/remark-cli@9.0.0...10.0.0) --- updated-dependencies: - dependency-name: remark-cli dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 2460 +++++++++++++++++++++++++++++++++++---------- package.json | 2 +- 2 files changed, 1935 insertions(+), 527 deletions(-) diff --git a/package-lock.json b/package-lock.json index ec1e434d52..55aa62cc5b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -86,7 +86,7 @@ "postcss-sass": "^0.5.0", "postcss-scss": "^4.0.0", "prettier": "2.3.2", - "remark-cli": "^9.0.0", + "remark-cli": "^10.0.0", "sugarss": "^4.0.1", "typescript": "^4.2.4" }, @@ -1123,6 +1123,15 @@ "@types/responselike": "*" } }, + "node_modules/@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/debug": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", @@ -1181,6 +1190,12 @@ "integrity": "sha512-ThbETc7uxx6rIpNP0fE3bqrSSIeBWPrFY4TzY4WFsvdQYWinub+PLZV/9nT3zicRJJPWbmHqJIsHZHeh5Ad+Ug==", "dev": true }, + "node_modules/@types/is-empty": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/is-empty/-/is-empty-1.2.0.tgz", + "integrity": "sha512-brJKf2boFhUxTDxlpI7cstwiUtA2ovm38UzFTi9aZI6//ARncaV+Q5ALjCaJqXaMtdZk/oPTJnSutugsZR6h8A==", + "dev": true + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", @@ -1205,6 +1220,12 @@ "@types/istanbul-lib-report": "*" } }, + "node_modules/@types/js-yaml": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.2.tgz", + "integrity": "sha512-KbeHS/Y4R+k+5sWXEYzAZKuB1yQlZtEghuhRxrVRLaqhtoG5+26JwQsa4HyS3AWX8v1Uwukma5HheduUDskasA==", + "dev": true + }, "node_modules/@types/json-schema": { "version": "7.0.7", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", @@ -1221,9 +1242,9 @@ } }, "node_modules/@types/mdast": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", - "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.7.tgz", + "integrity": "sha512-YwR7OK8aPmaBvMMUi+pZXBNoW2unbVbfok4YRqGMJBe1dpDlzpRkJrYEYmvjxgs5JhuQmKfDexrN98u941Zasg==", "dev": true, "dependencies": { "@types/unist": "*" @@ -1250,9 +1271,9 @@ "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==" }, "node_modules/@types/node": { - "version": "14.14.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.7.tgz", - "integrity": "sha512-Zw1vhUSQZYw+7u5dAwNbIA9TuTotpzY/OF7sJM9FqPOF3SPjKnxrjoTktXDZgUjybf4cWVBP7O8wvKdSaGHweg==", + "version": "16.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.0.tgz", + "integrity": "sha512-OyiZPohMMjZEYqcVo/UJ04GyAxXOJEZO/FpzyXxcH4r/ArrVoXHf4MbUrkLp0Tz7/p1mMKpo5zJ6ZHl8XBNthQ==", "dev": true }, "node_modules/@types/normalize-package-data": { @@ -1295,6 +1316,12 @@ "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==", "dev": true }, + "node_modules/@types/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-vdna8kjLGljgtPnYN6MBD2UwX62QE0EFLj9QlLXvg6dEu66NksXB900BNguBCMZZY2D9SSqncUskM23vT3uvWQ==", + "dev": true + }, "node_modules/@types/responselike": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", @@ -1316,12 +1343,24 @@ "integrity": "sha512-pJOod5SN0d6rTl9d9YMqiFqLY1tMlqaQtpB/2E/SceXCf+Lwn0VVkthe7Ts4Ln3m0USPoY1lqXoyF5c7N2redg==", "dev": true }, + "node_modules/@types/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-dPWnWsf+kzIG140B8z2w3fr5D03TLWbOAFQl45xUpI3vcizeXriNR5VYkWZ+WTMsUHqZ9Xlt3hrxGNANFyNQfw==", + "dev": true + }, "node_modules/@types/svg-tags": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/svg-tags/-/svg-tags-1.0.0.tgz", "integrity": "sha512-PlLI3u2hocS4nbzd9WUzQn/EyFl+NifbssU9QV40XzWOpwf5R7cDod2dmTUKYN7awE9jMrhy9FCO904ZYwaBDw==", "dev": true }, + "node_modules/@types/text-table": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@types/text-table/-/text-table-0.2.2.tgz", + "integrity": "sha512-dGoI5Af7To0R2XE8wJuc6vwlavWARsCh3UKJPjWs1YEqGUqfgBI/j/4GX0yf19/DsDPPf0YAXWAp8psNeIehLg==", + "dev": true + }, "node_modules/@types/unist": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", @@ -1670,9 +1709,9 @@ } }, "node_modules/anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -1823,10 +1862,14 @@ } }, "node_modules/bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/balanced-match": { "version": "2.0.0", @@ -1844,9 +1887,9 @@ } }, "node_modules/binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, "engines": { "node": ">=8" @@ -2155,22 +2198,34 @@ } }, "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.0.tgz", + "integrity": "sha512-oHqMj3eAuJ77/P5PaIRcqk+C3hdfNwyCD2DAUcD5gyXkegAuF2USC40CEqPscDk4I8FRGMTojGJQkXDsN5QlJA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-2.0.0.tgz", + "integrity": "sha512-YwaEtEvWLpFa6Wh3uVLrvirA/ahr9fki/NUd/Bd4OR6EdJ8D22hovYQEOUCBfQfcqnC4IAMGMsHXY1eXgL4ZZA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.0.tgz", + "integrity": "sha512-pE3Z15lLRxDzWJy7bBHBopRwfI20sbrMVLQTC7xsPglCHf4Wv1e167OgYAFP78co2XlhojDyAqA+IAJse27//g==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/chardet": { "version": "0.7.0", @@ -2179,37 +2234,24 @@ "dev": true }, "node_modules/chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dev": true, "dependencies": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "glob-parent": "~5.1.0", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "readdirp": "~3.6.0" }, "engines": { "node": ">= 8.10.0" }, "optionalDependencies": { - "fsevents": "~2.1.2" - } - }, - "node_modules/chokidar/node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "fsevents": "~2.3.2" } }, "node_modules/ci-info": { @@ -4278,6 +4320,43 @@ "node": ">=8" } }, + "node_modules/import-meta-resolve": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-1.1.1.tgz", + "integrity": "sha512-JiTuIvVyPaUg11eTrNDx5bgQ/yMKMZffc7YSjvQeSMXy58DO2SQ8BtAf3xteZvmzvjYh14wnqNjL8XVeDy2o9A==", + "dev": true, + "dependencies": { + "builtins": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/import-meta-resolve/node_modules/builtins": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-4.0.0.tgz", + "integrity": "sha512-qC0E2Dxgou1IHhvJSLwGDSTvokbRovU5zZFuDY6oY8Y2lF3nGt5Ad8YZK7GMtqzY84Wu7pXTPeHQeHcXSXsRhw==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/import-meta-resolve/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -4539,19 +4618,27 @@ } }, "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.0.tgz", + "integrity": "sha512-5OV8Toyq3oh4eq6sbWTYzlGdnMT/DPI5I0zxUBxjiigQsZycpkKF3kskkao3JyYGuYDHvhgJF+DrjMQp9SX86w==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.0.tgz", + "integrity": "sha512-t+2GlJ+hO9yagJ+jU3+HSh80VKvz/3cG2cxbGGm4S0hjKuhWQXgPVUVOZz3tqZzMjhmphZ+1TIJTlRZRoe6GCQ==", "dev": true, "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/is-arrayish": { @@ -4622,10 +4709,14 @@ } }, "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.0.tgz", + "integrity": "sha512-QfrfjQV0LjoWQ1K1XSoEZkTAzSa14RKVMa5zg3SdAfzEmQzRM4+tbSFWb78creCeA9rNBzaZal92opi1TwPWZw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/is-docker": { "version": "2.1.1", @@ -4682,10 +4773,14 @@ } }, "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.0.tgz", + "integrity": "sha512-vGOtYkiaxwIiR0+Ng/zNId+ZZehGfINwTzdrDqc6iubbnQWhnPuYymOzOKUDqa2cSl59yHnEh2h6MvRLQsyNug==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/is-installed-globally": { "version": "0.3.2", @@ -6596,13 +6691,17 @@ } }, "node_modules/load-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-3.0.0.tgz", - "integrity": "sha512-od7eKCCZ62ITvFf8nHHrIiYmgOHb4xVNDRDqxBWSaao5FZyyZVX8OmRCbwjDGPrSrgIulwPNyBsWCGnhiDC0oQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-4.0.1.tgz", + "integrity": "sha512-4kMi+mOSn/TR51pDo4tgxROHfBHXsrcyEYSGHcJ1o6TtRaP2PsRM5EwmYbj1uiLDvbfA/ohwuSWZJzqGiai8Dw==", "dev": true, "dependencies": { - "libnpmconfig": "^1.0.0", - "resolve-from": "^5.0.0" + "import-meta-resolve": "^1.0.0", + "libnpmconfig": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/locate-path": { @@ -6689,10 +6788,14 @@ } }, "node_modules/longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.0.tgz", + "integrity": "sha512-XhUjWR5CFaQ03JOP+iSDS9koy8T5jfoImCZ4XprElw3BXsSk4MpVYOLw/6LTDKZhO13PlAXnB5gS4MHQTpkSOw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/lowercase-keys": { "version": "2.0.0", @@ -6764,15 +6867,6 @@ "node": ">=8" } }, - "node_modules/markdown-extensions": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz", - "integrity": "sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", @@ -6789,15 +6883,48 @@ } }, "node_modules/mdast-util-from-markdown": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.1.tgz", - "integrity": "sha512-qJXNcFcuCSPqUF0Tb0uYcFDIq67qwB3sxo9RPdf9vG8T90ViKnksFqdB/Coq2a7sTnxL/Ify2y7aIQXDkQFH0w==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.0.0.tgz", + "integrity": "sha512-uj2G60sb7z1PNOeElFwCC9b/Se/lFXuLhVKFOAY2EHz/VvgbupTQRNXPoZl7rGpXYL6BNZgcgaybrlSWbo7n/g==", "dev": true, "dependencies": { "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^1.0.0", - "micromark": "~2.10.0", - "parse-entities": "^2.0.0" + "@types/unist": "^2.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "parse-entities": "^3.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown/node_modules/mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown/node_modules/unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/mdast-util-frontmatter": { @@ -6824,17 +6951,31 @@ } }, "node_modules/mdast-util-to-markdown": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.5.3.tgz", - "integrity": "sha512-sr8q7fQJ1xoCqZSXW6dO/MYu2Md+a4Hfk9uO+XHCfiBhVM0EgWtfAV7BuN+ff6otUeu2xDyt1o7vhZGwOG3+BA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.1.1.tgz", + "integrity": "sha512-4puev/CxuxVdlsx5lVmuzgdqfjkkJJLS1Zm/MnejQ8I7BLeeBlbkwp6WOGJypEcN8g56LbVbhNmn84MvvcAvSQ==", "dev": true, "dependencies": { + "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", - "longest-streak": "^2.0.0", - "mdast-util-to-string": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.0.0", - "zwitch": "^1.0.0" + "longest-streak": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "parse-entities": "^3.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown/node_modules/mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/mdast-util-to-string": { @@ -6911,13 +7052,70 @@ } }, "node_modules/micromark": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.10.1.tgz", - "integrity": "sha512-fUuVF8sC1X7wsCS29SYQ2ZfIZYbTymp0EYr6sab3idFjigFFjGa5UwoniPlV9tAgntjuapW1t9U+S0yDYeGKHQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.3.tgz", + "integrity": "sha512-fWuHx+JKV4zA8WfCFor2DWP9XmsZkIiyWRGofr7P7IGfpRIlb7/C5wwusGsNyr1D8HI5arghZDG1Ikc0FBwS5Q==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { + "@types/debug": "^4.0.0", "debug": "^4.0.0", - "parse-entities": "^2.0.0" + "micromark-core-commonmark": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "parse-entities": "^3.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.0.tgz", + "integrity": "sha512-y9g7zymcKRBHM/aNBekstvs/Grpf+y4OEBULUTYvGZcusnp+JeOxmilJY4GMpo2/xY7iHQL9fjz5pD9pSAud9A==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "parse-entities": "^3.0.0" } }, "node_modules/micromark-extension-frontmatter": { @@ -6933,58 +7131,407 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "node_modules/micromark-factory-destination": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", + "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "node_modules/micromark-factory-label": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.0.tgz", + "integrity": "sha512-XWEucVZb+qBCe2jmlOnWr6sWSY6NHx+wtpgYFsm4G+dufOf6tTQRRo0bdO7XSlGPu5fyjpJenth6Ksnc5Mwfww==", "dev": true, - "engines": { - "node": ">= 0.6" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "node_modules/micromark-factory-space": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", + "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "mime-db": "1.47.0" - }, - "engines": { - "node": ">= 0.6" + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/micromark-factory-title": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.0.tgz", + "integrity": "sha512-flvC7Gx0dWVWorXuBl09Cr3wB5FTuYec8pMGVySIp2ZlqTcIjN/lFohZcP0EG//krTptm34kozHk7aK/CleCfA==", "dev": true, - "engines": { - "node": ">=6" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "node_modules/micromark-factory-whitespace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", + "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", "dev": true, - "engines": { - "node": ">=4" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/min-indent": { + "node_modules/micromark-util-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", + "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", + "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", + "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", + "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", + "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.0.tgz", + "integrity": "sha512-cJpFVM768h6zkd8qJ1LNRrITfY4gwFt+tziPcIf71Ui8yFzY9wG3snZQqiWVq93PG4Sw6YOtcNiKJfVIs9qfGg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-html-tag-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.0.0.tgz", + "integrity": "sha512-NenEKIshW2ZI/ERv9HtFNsrn3llSPZtY337LID/24WeLqMzeZhBEE6BQ0vS2ZBjshm5n40chKtJ3qjAbVV8S0g==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", + "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", + "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz", + "integrity": "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.0.tgz", + "integrity": "sha512-EsnG2qscmcN5XhkqQBZni/4oQbLFjz9yk3ZM/P8a3YUjwV6+6On2wehr1ALx0MxK3+XXXLTzuBKHDFeDFYRdgQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.0.tgz", + "integrity": "sha512-NZA01jHRNCt4KlOROn8/bGi6vvpEmlXld7EHcRH+aYWUfL3Wc8JLUNNlqUMKa0hhz6GrpUWsHtzPmKof57v0gQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.0.tgz", + "integrity": "sha512-psf1WAaP1B77WpW4mBGDkTr+3RsPuDAgsvlP47GJzbH1jmjH8xjOx7Z6kp84L8oqHmy5pYO3Ev46odosZV+3AA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "dev": true, + "dependencies": { + "mime-db": "1.47.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", @@ -8056,17 +8603,21 @@ } }, "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-3.0.0.tgz", + "integrity": "sha512-AJlcIFDNPEP33KyJLguv0xJc83BNvjxwpuUIcetyXUsLpVXAUCePJ5kIoYtEN2R1ac0cYaRu/vk9dVFkewHQhQ==", "dev": true, "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" + "character-entities": "^2.0.0", + "character-entities-legacy": "^2.0.0", + "character-reference-invalid": "^2.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/parse-json": { @@ -8593,9 +9144,9 @@ } }, "node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "dependencies": { "picomatch": "^2.2.1" @@ -8650,28 +9201,36 @@ } }, "node_modules/remark": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", - "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-14.0.1.tgz", + "integrity": "sha512-7zLG3u8EUjOGuaAS9gUNJPD2j+SqDqAFHv2g6WMpE5CU9rZ6e3IKDM12KHZ3x+YNje+NMAuN55yx8S5msGSx7Q==", "dev": true, "dependencies": { - "remark-parse": "^9.0.0", - "remark-stringify": "^9.0.0", - "unified": "^9.1.0" + "@types/mdast": "^3.0.0", + "remark-parse": "^10.0.0", + "remark-stringify": "^10.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/remark-cli": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-cli/-/remark-cli-9.0.0.tgz", - "integrity": "sha512-y6kCXdwZoMoh0Wo4Och1tDW50PmMc86gW6GpF08v9d+xUCEJE2wwXdQ+TnTaUamRnfFdU+fE+eNf2PJ53cyq8g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/remark-cli/-/remark-cli-10.0.0.tgz", + "integrity": "sha512-Yc5kLsJ5vgiQJl6xMLLJHqPac6OSAC5DOqKQrtmzJxSdJby2Jgr+OpIAkWQYwvbNHEspNagyoQnuwK2UCWg73g==", "dev": true, "dependencies": { - "markdown-extensions": "^1.1.0", - "remark": "^13.0.0", - "unified-args": "^8.0.0" + "remark": "^14.0.0", + "unified-args": "^9.0.0" }, "bin": { "remark": "cli.js" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/remark-frontmatter": { @@ -8959,12 +9518,18 @@ } }, "node_modules/remark-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", - "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.0.tgz", + "integrity": "sha512-07ei47p2Xl7Bqbn9H2VYQYirnAFJPwdMuypdozWsSbnmrkgA2e2sZLZdnDNrrsxR4onmIzH/J6KXqKxCuqHtPQ==", "dev": true, "dependencies": { - "mdast-util-from-markdown": "^0.8.0" + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/remark-preset-lint-recommended": { @@ -9005,12 +9570,18 @@ } }, "node_modules/remark-stringify": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.0.tgz", - "integrity": "sha512-8x29DpTbVzEc6Dwb90qhxCtbZ6hmj3BxWWDpMhA+1WM4dOEGH5U5/GFe3Be5Hns5MvPSFAr1e2KSVtKZkK5nUw==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.0.tgz", + "integrity": "sha512-3LAQqJ/qiUxkWc7fUcVuB7RtIT38rvmxfmJG8z1TiE/D8zi3JGQ2tTcTJu9Tptdpb7gFwU0whRi5q1FbFOb9yA==", "dev": true, "dependencies": { - "mdast-util-to-markdown": "^0.5.0" + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/remark-validate-links": { @@ -9487,7 +10058,21 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/string-argv": { "version": "0.3.1", @@ -10021,122 +10606,213 @@ } }, "node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dev": true, "dependencies": { - "bail": "^1.0.0", + "@types/unist": "^2.0.0", + "bail": "^2.0.0", "extend": "^3.0.0", "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/unified-args": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-8.1.0.tgz", - "integrity": "sha512-t1HPS1cQPsVvt/6EtyWIbQGurza5684WGRigNghZRvzIdHm3LPgMdXPyGx0npORKzdiy5+urkF0rF5SXM8lBuQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-9.0.2.tgz", + "integrity": "sha512-qSqryjoqfJSII4E4Z2Jx7MhXX2MuUIn6DsrlmL8UnWFdGtrWvEtvm7Rx5fKT5TPUz7q/Fb4oxwIHLCttvAuRLQ==", "dev": true, "dependencies": { - "camelcase": "^5.0.0", - "chalk": "^3.0.0", + "@types/text-table": "^0.2.0", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", "chokidar": "^3.0.0", - "fault": "^1.0.2", + "fault": "^2.0.0", "json5": "^2.0.0", - "minimist": "^1.2.0", + "minimist": "^1.0.0", "text-table": "^0.2.0", - "unified-engine": "^8.0.0" + "unified-engine": "^9.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/unified-args/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/unified-args/node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unified-args/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/unified-args/node_modules/fault": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.0.tgz", + "integrity": "sha512-JsDj9LFcoC+4ChII1QpXPA7YIaY8zmqPYw7h9j5n7St7a0BBKfNnwEBAUQRBx70o2q4rs+BeSNHk8Exm6xE7fQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "format": "^0.2.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/unified-args/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/unified-engine": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-9.0.3.tgz", + "integrity": "sha512-SgzREcCM2IpUy3JMFUcPRZQ2Py6IwvJ2KIrg2AiI7LnGge6E6OPFWpcabHrEXG0IvO2OI3afiD9DOcQvvZfXDQ==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "@types/concat-stream": "^1.0.0", + "@types/debug": "^4.0.0", + "@types/is-empty": "^1.0.0", + "@types/js-yaml": "^4.0.0", + "@types/node": "^16.0.0", + "@types/unist": "^2.0.0", + "concat-stream": "^2.0.0", + "debug": "^4.0.0", + "fault": "^2.0.0", + "glob": "^7.0.0", + "ignore": "^5.0.0", + "is-buffer": "^2.0.0", + "is-empty": "^1.0.0", + "is-plain-obj": "^4.0.0", + "js-yaml": "^4.0.0", + "load-plugin": "^4.0.0", + "parse-json": "^5.0.0", + "to-vfile": "^7.0.0", + "trough": "^2.0.0", + "unist-util-inspect": "^7.0.0", + "vfile-message": "^3.0.0", + "vfile-reporter": "^7.0.0", + "vfile-statistics": "^2.0.0" }, - "engines": { - "node": ">=7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/unified-args/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/unified-engine/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/unified-args/node_modules/has-flag": { + "node_modules/unified-engine/node_modules/fault": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.0.tgz", + "integrity": "sha512-JsDj9LFcoC+4ChII1QpXPA7YIaY8zmqPYw7h9j5n7St7a0BBKfNnwEBAUQRBx70o2q4rs+BeSNHk8Exm6xE7fQ==", + "dev": true, + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unified-engine/node_modules/is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unified-args/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==", + "node_modules/unified-engine/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "argparse": "^2.0.1" }, - "engines": { - "node": ">=8" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/unified-engine": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-8.0.0.tgz", - "integrity": "sha512-vLUezxCnjzz+ya4pYouRQVMT8k82Rk4fIj406UidRnSFJdGXFaQyQklAnalsQHJrLqAlaYPkXPUa1upfVSHGCA==", + "node_modules/unified-engine/node_modules/to-vfile": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-7.2.1.tgz", + "integrity": "sha512-biljADNq2n+AZn/zX+/87zStnIqctKr/q5OaOD8+qSKINokUGPbWBShvxa1iLUgHz6dGGjVnQPNoFRtVBzMkVg==", "dev": true, "dependencies": { - "concat-stream": "^2.0.0", - "debug": "^4.0.0", - "fault": "^1.0.0", - "figures": "^3.0.0", - "glob": "^7.0.3", - "ignore": "^5.0.0", "is-buffer": "^2.0.0", - "is-empty": "^1.0.0", - "is-plain-obj": "^2.0.0", - "js-yaml": "^3.6.1", - "load-plugin": "^3.0.0", - "parse-json": "^5.0.0", - "to-vfile": "^6.0.0", - "trough": "^1.0.0", - "unist-util-inspect": "^5.0.0", - "vfile-reporter": "^6.0.0", - "vfile-statistics": "^1.1.0" + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified-engine/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unified-engine/node_modules/unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified-engine/node_modules/vfile": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", + "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified-engine/node_modules/vfile-message": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.1.tgz", + "integrity": "sha512-gYmSHcZZUEtYpTmaWaFJwsuUD70/rTY4v09COp8TGtOkix6gGxb/a8iTQByIY9ciTk9GwAwIXd/J9OPfM4Bvaw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/unified-lint-rule": { @@ -10166,6 +10842,71 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/unified/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unified/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unified/node_modules/unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified/node_modules/vfile": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", + "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified/node_modules/vfile-message": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.1.tgz", + "integrity": "sha512-gYmSHcZZUEtYpTmaWaFJwsuUD70/rTY4v09COp8TGtOkix6gGxb/a8iTQByIY9ciTk9GwAwIXd/J9OPfM4Bvaw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -10189,12 +10930,16 @@ } }, "node_modules/unist-util-inspect": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-5.0.1.tgz", - "integrity": "sha512-fPNWewS593JSmg49HbnE86BJKuBi1/nMWhDSccBvbARfxezEuJV85EaARR9/VplveiwCoLm2kWq+DhP8TBaDpw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-7.0.0.tgz", + "integrity": "sha512-2Utgv78I7PUu461Y9cdo+IUiiKSKpDV5CE/XD6vTj849a3xlpDAScvSJ6cQmtFBGgAmCn2wR7jLuXhpg1XLlJw==", "dev": true, "dependencies": { - "is-empty": "^1.0.0" + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/unist-util-is": { @@ -10467,42 +11212,206 @@ } }, "node_modules/vfile-reporter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-6.0.1.tgz", - "integrity": "sha512-0OppK9mo8G2XUpv+hIKLVSDsoxJrXnOy73+vIm0jQUOUFYRduqpFHX+QqAQfvRHyX9B0UFiRuNJnBOjQCIsw1g==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-7.0.1.tgz", + "integrity": "sha512-pof+cQSJCUNmHG6zoBOJfErb6syIWHWM14CwKjsugCixxl4CZdrgzgxwLBW8lIB6czkzX0Agnnhj33YpKyLvmA==", "dev": true, "dependencies": { - "repeat-string": "^1.5.0", - "string-width": "^4.0.0", - "supports-color": "^6.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-sort": "^2.1.2", - "vfile-statistics": "^1.1.0" + "@types/repeat-string": "^1.0.0", + "@types/supports-color": "^8.0.0", + "repeat-string": "^1.0.0", + "string-width": "^5.0.0", + "supports-color": "^9.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-sort": "^3.0.0", + "vfile-statistics": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-reporter/node_modules/ansi-regex": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.0.tgz", + "integrity": "sha512-tAaOSrWCHF+1Ear1Z4wnJCXA9GGox4K6Ic85a5qalES2aeEwQGr7UC93mwef49536PkCYjzkp0zIxfFvexJ6zQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/vfile-reporter/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/vfile-reporter/node_modules/has-flag": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-5.0.1.tgz", + "integrity": "sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vfile-reporter/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vfile-reporter/node_modules/string-width": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.0.0.tgz", + "integrity": "sha512-zwXcRmLUdiWhMPrHz6EXITuyTgcEnUqDzspTkCLhQovxywWz6NP9VHgqfVg20V/1mUg0B95AKbXxNT+ALRmqCw==", + "dev": true, + "dependencies": { + "emoji-regex": "^9.2.2", + "is-fullwidth-code-point": "^4.0.0", + "strip-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vfile-reporter/node_modules/strip-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.0.tgz", + "integrity": "sha512-UhDTSnGF1dc0DRbUqr1aXwNoY3RgVkSWG8BrpnuFIxhP57IqbS7IRta2Gfiavds4yCxc5+fEAVVOgBZWnYkvzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/vfile-reporter/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.0.2.tgz", + "integrity": "sha512-ii6tc8ImGFrgMPYq7RVAMKkhPo9vk8uA+D3oKbJq/3Pk2YSMv1+9dUAesa9UxMbxBTvxwKTQffBahNVNxEvM8Q==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^5.0.0" }, "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/vfile-reporter/node_modules/unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/vfile-sort": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-2.2.2.tgz", - "integrity": "sha512-tAyUqD2R1l/7Rn7ixdGkhXLD3zsg+XLAeUDUhXearjfIcpL1Hcsj5hHpCoy/gvfK/Ws61+e972fm0F7up7hfYA==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-3.0.0.tgz", + "integrity": "sha512-fJNctnuMi3l4ikTVcKpxTbzHeCgvDhnI44amA3NVDvA6rTC6oKCFpCVyT5n2fFMr3ebfr+WVQZedOCd73rzSxg==", + "dev": true, + "dependencies": { + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-sort/node_modules/unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-sort/node_modules/vfile-message": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.1.tgz", + "integrity": "sha512-gYmSHcZZUEtYpTmaWaFJwsuUD70/rTY4v09COp8TGtOkix6gGxb/a8iTQByIY9ciTk9GwAwIXd/J9OPfM4Bvaw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, "node_modules/vfile-statistics": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-1.1.4.tgz", - "integrity": "sha512-lXhElVO0Rq3frgPvFBwahmed3X03vjPF8OcjKMy8+F1xU/3Q3QU3tKEDp743SFtb74PdF0UWpxPvtOP0GCLheA==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-2.0.0.tgz", + "integrity": "sha512-foOWtcnJhKN9M2+20AOTlWi2dxNfAoeNIoxD5GXcO182UJyId4QrXa41fWrgcfV3FWTjdEDy3I4cpLVcQscIMA==", + "dev": true, + "dependencies": { + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-statistics/node_modules/unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-statistics/node_modules/vfile-message": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.1.tgz", + "integrity": "sha512-gYmSHcZZUEtYpTmaWaFJwsuUD70/rTY4v09COp8TGtOkix6gGxb/a8iTQByIY9ciTk9GwAwIXd/J9OPfM4Bvaw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, "node_modules/w3c-hr-time": { "version": "1.0.2", @@ -10783,10 +11692,14 @@ } }, "node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "dev": true + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", + "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } }, "dependencies": { @@ -11658,6 +12571,15 @@ "@types/responselike": "*" } }, + "@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/debug": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", @@ -11716,6 +12638,12 @@ "integrity": "sha512-ThbETc7uxx6rIpNP0fE3bqrSSIeBWPrFY4TzY4WFsvdQYWinub+PLZV/9nT3zicRJJPWbmHqJIsHZHeh5Ad+Ug==", "dev": true }, + "@types/is-empty": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/is-empty/-/is-empty-1.2.0.tgz", + "integrity": "sha512-brJKf2boFhUxTDxlpI7cstwiUtA2ovm38UzFTi9aZI6//ARncaV+Q5ALjCaJqXaMtdZk/oPTJnSutugsZR6h8A==", + "dev": true + }, "@types/istanbul-lib-coverage": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", @@ -11740,6 +12668,12 @@ "@types/istanbul-lib-report": "*" } }, + "@types/js-yaml": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.2.tgz", + "integrity": "sha512-KbeHS/Y4R+k+5sWXEYzAZKuB1yQlZtEghuhRxrVRLaqhtoG5+26JwQsa4HyS3AWX8v1Uwukma5HheduUDskasA==", + "dev": true + }, "@types/json-schema": { "version": "7.0.7", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", @@ -11756,9 +12690,9 @@ } }, "@types/mdast": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", - "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.7.tgz", + "integrity": "sha512-YwR7OK8aPmaBvMMUi+pZXBNoW2unbVbfok4YRqGMJBe1dpDlzpRkJrYEYmvjxgs5JhuQmKfDexrN98u941Zasg==", "dev": true, "requires": { "@types/unist": "*" @@ -11785,9 +12719,9 @@ "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==" }, "@types/node": { - "version": "14.14.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.7.tgz", - "integrity": "sha512-Zw1vhUSQZYw+7u5dAwNbIA9TuTotpzY/OF7sJM9FqPOF3SPjKnxrjoTktXDZgUjybf4cWVBP7O8wvKdSaGHweg==", + "version": "16.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.0.tgz", + "integrity": "sha512-OyiZPohMMjZEYqcVo/UJ04GyAxXOJEZO/FpzyXxcH4r/ArrVoXHf4MbUrkLp0Tz7/p1mMKpo5zJ6ZHl8XBNthQ==", "dev": true }, "@types/normalize-package-data": { @@ -11830,6 +12764,12 @@ "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==", "dev": true }, + "@types/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-vdna8kjLGljgtPnYN6MBD2UwX62QE0EFLj9QlLXvg6dEu66NksXB900BNguBCMZZY2D9SSqncUskM23vT3uvWQ==", + "dev": true + }, "@types/responselike": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", @@ -11851,12 +12791,24 @@ "integrity": "sha512-pJOod5SN0d6rTl9d9YMqiFqLY1tMlqaQtpB/2E/SceXCf+Lwn0VVkthe7Ts4Ln3m0USPoY1lqXoyF5c7N2redg==", "dev": true }, + "@types/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-dPWnWsf+kzIG140B8z2w3fr5D03TLWbOAFQl45xUpI3vcizeXriNR5VYkWZ+WTMsUHqZ9Xlt3hrxGNANFyNQfw==", + "dev": true + }, "@types/svg-tags": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/svg-tags/-/svg-tags-1.0.0.tgz", "integrity": "sha512-PlLI3u2hocS4nbzd9WUzQn/EyFl+NifbssU9QV40XzWOpwf5R7cDod2dmTUKYN7awE9jMrhy9FCO904ZYwaBDw==", "dev": true }, + "@types/text-table": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@types/text-table/-/text-table-0.2.2.tgz", + "integrity": "sha512-dGoI5Af7To0R2XE8wJuc6vwlavWARsCh3UKJPjWs1YEqGUqfgBI/j/4GX0yf19/DsDPPf0YAXWAp8psNeIehLg==", + "dev": true + }, "@types/unist": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", @@ -12111,9 +13063,9 @@ "dev": true }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -12228,9 +13180,9 @@ } }, "bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "dev": true }, "balanced-match": { @@ -12249,9 +13201,9 @@ } }, "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, "boxen": { @@ -12492,21 +13444,21 @@ "dev": true }, "character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.0.tgz", + "integrity": "sha512-oHqMj3eAuJ77/P5PaIRcqk+C3hdfNwyCD2DAUcD5gyXkegAuF2USC40CEqPscDk4I8FRGMTojGJQkXDsN5QlJA==", "dev": true }, "character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-2.0.0.tgz", + "integrity": "sha512-YwaEtEvWLpFa6Wh3uVLrvirA/ahr9fki/NUd/Bd4OR6EdJ8D22hovYQEOUCBfQfcqnC4IAMGMsHXY1eXgL4ZZA==", "dev": true }, "character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.0.tgz", + "integrity": "sha512-pE3Z15lLRxDzWJy7bBHBopRwfI20sbrMVLQTC7xsPglCHf4Wv1e167OgYAFP78co2XlhojDyAqA+IAJse27//g==", "dev": true }, "chardet": { @@ -12516,28 +13468,19 @@ "dev": true }, "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dev": true, "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - }, - "dependencies": { - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - } + "readdirp": "~3.6.0" } }, "ci-info": { @@ -14132,6 +15075,35 @@ "resolve-cwd": "^3.0.0" } }, + "import-meta-resolve": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-1.1.1.tgz", + "integrity": "sha512-JiTuIvVyPaUg11eTrNDx5bgQ/yMKMZffc7YSjvQeSMXy58DO2SQ8BtAf3xteZvmzvjYh14wnqNjL8XVeDy2o9A==", + "dev": true, + "requires": { + "builtins": "^4.0.0" + }, + "dependencies": { + "builtins": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-4.0.0.tgz", + "integrity": "sha512-qC0E2Dxgou1IHhvJSLwGDSTvokbRovU5zZFuDY6oY8Y2lF3nGt5Ad8YZK7GMtqzY84Wu7pXTPeHQeHcXSXsRhw==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -14345,19 +15317,19 @@ } }, "is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.0.tgz", + "integrity": "sha512-5OV8Toyq3oh4eq6sbWTYzlGdnMT/DPI5I0zxUBxjiigQsZycpkKF3kskkao3JyYGuYDHvhgJF+DrjMQp9SX86w==", "dev": true }, "is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.0.tgz", + "integrity": "sha512-t+2GlJ+hO9yagJ+jU3+HSh80VKvz/3cG2cxbGGm4S0hjKuhWQXgPVUVOZz3tqZzMjhmphZ+1TIJTlRZRoe6GCQ==", "dev": true, "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" } }, "is-arrayish": { @@ -14410,9 +15382,9 @@ "dev": true }, "is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.0.tgz", + "integrity": "sha512-QfrfjQV0LjoWQ1K1XSoEZkTAzSa14RKVMa5zg3SdAfzEmQzRM4+tbSFWb78creCeA9rNBzaZal92opi1TwPWZw==", "dev": true }, "is-docker": { @@ -14452,9 +15424,9 @@ } }, "is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.0.tgz", + "integrity": "sha512-vGOtYkiaxwIiR0+Ng/zNId+ZZehGfINwTzdrDqc6iubbnQWhnPuYymOzOKUDqa2cSl59yHnEh2h6MvRLQsyNug==", "dev": true }, "is-installed-globally": { @@ -15928,13 +16900,13 @@ } }, "load-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-3.0.0.tgz", - "integrity": "sha512-od7eKCCZ62ITvFf8nHHrIiYmgOHb4xVNDRDqxBWSaao5FZyyZVX8OmRCbwjDGPrSrgIulwPNyBsWCGnhiDC0oQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-4.0.1.tgz", + "integrity": "sha512-4kMi+mOSn/TR51pDo4tgxROHfBHXsrcyEYSGHcJ1o6TtRaP2PsRM5EwmYbj1uiLDvbfA/ohwuSWZJzqGiai8Dw==", "dev": true, "requires": { - "libnpmconfig": "^1.0.0", - "resolve-from": "^5.0.0" + "import-meta-resolve": "^1.0.0", + "libnpmconfig": "^1.0.0" } }, "locate-path": { @@ -16006,9 +16978,9 @@ } }, "longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.0.tgz", + "integrity": "sha512-XhUjWR5CFaQ03JOP+iSDS9koy8T5jfoImCZ4XprElw3BXsSk4MpVYOLw/6LTDKZhO13PlAXnB5gS4MHQTpkSOw==", "dev": true }, "lowercase-keys": { @@ -16065,12 +17037,6 @@ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==" }, - "markdown-extensions": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz", - "integrity": "sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==", - "dev": true - }, "mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", @@ -16083,15 +17049,38 @@ "dev": true }, "mdast-util-from-markdown": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.1.tgz", - "integrity": "sha512-qJXNcFcuCSPqUF0Tb0uYcFDIq67qwB3sxo9RPdf9vG8T90ViKnksFqdB/Coq2a7sTnxL/Ify2y7aIQXDkQFH0w==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.0.0.tgz", + "integrity": "sha512-uj2G60sb7z1PNOeElFwCC9b/Se/lFXuLhVKFOAY2EHz/VvgbupTQRNXPoZl7rGpXYL6BNZgcgaybrlSWbo7n/g==", "dev": true, "requires": { "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^1.0.0", - "micromark": "~2.10.0", - "parse-entities": "^2.0.0" + "@types/unist": "^2.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "parse-entities": "^3.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "dependencies": { + "mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "dev": true + }, + "unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0" + } + } } }, "mdast-util-frontmatter": { @@ -16110,17 +17099,25 @@ "dev": true }, "mdast-util-to-markdown": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.5.3.tgz", - "integrity": "sha512-sr8q7fQJ1xoCqZSXW6dO/MYu2Md+a4Hfk9uO+XHCfiBhVM0EgWtfAV7BuN+ff6otUeu2xDyt1o7vhZGwOG3+BA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.1.1.tgz", + "integrity": "sha512-4puev/CxuxVdlsx5lVmuzgdqfjkkJJLS1Zm/MnejQ8I7BLeeBlbkwp6WOGJypEcN8g56LbVbhNmn84MvvcAvSQ==", "dev": true, "requires": { + "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", - "longest-streak": "^2.0.0", - "mdast-util-to-string": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.0.0", - "zwitch": "^1.0.0" + "longest-streak": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "parse-entities": "^3.0.0", + "zwitch": "^2.0.0" + }, + "dependencies": { + "mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "dev": true + } } }, "mdast-util-to-string": { @@ -16147,61 +17144,267 @@ } } }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true + }, + "meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.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" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromark": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.3.tgz", + "integrity": "sha512-fWuHx+JKV4zA8WfCFor2DWP9XmsZkIiyWRGofr7P7IGfpRIlb7/C5wwusGsNyr1D8HI5arghZDG1Ikc0FBwS5Q==", + "dev": true, + "requires": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "micromark-core-commonmark": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "parse-entities": "^3.0.0" + } + }, + "micromark-core-commonmark": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.0.tgz", + "integrity": "sha512-y9g7zymcKRBHM/aNBekstvs/Grpf+y4OEBULUTYvGZcusnp+JeOxmilJY4GMpo2/xY7iHQL9fjz5pD9pSAud9A==", + "dev": true, + "requires": { + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "parse-entities": "^3.0.0" + } + }, + "micromark-extension-frontmatter": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-0.2.2.tgz", + "integrity": "sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==", + "dev": true, + "requires": { + "fault": "^1.0.0" + } + }, + "micromark-factory-destination": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", + "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", + "dev": true, + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-factory-label": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.0.tgz", + "integrity": "sha512-XWEucVZb+qBCe2jmlOnWr6sWSY6NHx+wtpgYFsm4G+dufOf6tTQRRo0bdO7XSlGPu5fyjpJenth6Ksnc5Mwfww==", + "dev": true, + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-factory-space": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", + "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", + "dev": true, + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-factory-title": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.0.tgz", + "integrity": "sha512-flvC7Gx0dWVWorXuBl09Cr3wB5FTuYec8pMGVySIp2ZlqTcIjN/lFohZcP0EG//krTptm34kozHk7aK/CleCfA==", + "dev": true, + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-factory-whitespace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", + "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", + "dev": true, + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", + "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", + "dev": true, + "requires": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-chunked": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", + "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", + "dev": true, + "requires": { + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-classify-character": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", + "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", + "dev": true, + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-combine-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", + "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", + "dev": true, + "requires": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-decode-numeric-character-reference": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", + "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", + "dev": true, + "requires": { + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-encode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.0.tgz", + "integrity": "sha512-cJpFVM768h6zkd8qJ1LNRrITfY4gwFt+tziPcIf71Ui8yFzY9wG3snZQqiWVq93PG4Sw6YOtcNiKJfVIs9qfGg==", "dev": true }, - "meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "micromark-util-html-tag-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.0.0.tgz", + "integrity": "sha512-NenEKIshW2ZI/ERv9HtFNsrn3llSPZtY337LID/24WeLqMzeZhBEE6BQ0vS2ZBjshm5n40chKtJ3qjAbVV8S0g==", + "dev": true + }, + "micromark-util-normalize-identifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", + "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", + "dev": true, "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.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" + "micromark-util-symbol": "^1.0.0" } }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "micromark-util-resolve-all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", + "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", + "dev": true, + "requires": { + "micromark-util-types": "^1.0.0" + } }, - "micromark": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.10.1.tgz", - "integrity": "sha512-fUuVF8sC1X7wsCS29SYQ2ZfIZYbTymp0EYr6sab3idFjigFFjGa5UwoniPlV9tAgntjuapW1t9U+S0yDYeGKHQ==", + "micromark-util-sanitize-uri": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz", + "integrity": "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==", "dev": true, "requires": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" } }, - "micromark-extension-frontmatter": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-0.2.2.tgz", - "integrity": "sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==", + "micromark-util-subtokenize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.0.tgz", + "integrity": "sha512-EsnG2qscmcN5XhkqQBZni/4oQbLFjz9yk3ZM/P8a3YUjwV6+6On2wehr1ALx0MxK3+XXXLTzuBKHDFeDFYRdgQ==", "dev": true, "requires": { - "fault": "^1.0.0" + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, + "micromark-util-symbol": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.0.tgz", + "integrity": "sha512-NZA01jHRNCt4KlOROn8/bGi6vvpEmlXld7EHcRH+aYWUfL3Wc8JLUNNlqUMKa0hhz6GrpUWsHtzPmKof57v0gQ==", + "dev": true + }, + "micromark-util-types": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.0.tgz", + "integrity": "sha512-psf1WAaP1B77WpW4mBGDkTr+3RsPuDAgsvlP47GJzbH1jmjH8xjOx7Z6kp84L8oqHmy5pYO3Ev46odosZV+3AA==", + "dev": true + }, "micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", @@ -17078,17 +18281,17 @@ } }, "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-3.0.0.tgz", + "integrity": "sha512-AJlcIFDNPEP33KyJLguv0xJc83BNvjxwpuUIcetyXUsLpVXAUCePJ5kIoYtEN2R1ac0cYaRu/vk9dVFkewHQhQ==", "dev": true, "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" + "character-entities": "^2.0.0", + "character-entities-legacy": "^2.0.0", + "character-reference-invalid": "^2.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" } }, "parse-json": { @@ -17485,9 +18688,9 @@ } }, "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { "picomatch": "^2.2.1" @@ -17527,25 +18730,25 @@ } }, "remark": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", - "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-14.0.1.tgz", + "integrity": "sha512-7zLG3u8EUjOGuaAS9gUNJPD2j+SqDqAFHv2g6WMpE5CU9rZ6e3IKDM12KHZ3x+YNje+NMAuN55yx8S5msGSx7Q==", "dev": true, "requires": { - "remark-parse": "^9.0.0", - "remark-stringify": "^9.0.0", - "unified": "^9.1.0" + "@types/mdast": "^3.0.0", + "remark-parse": "^10.0.0", + "remark-stringify": "^10.0.0", + "unified": "^10.0.0" } }, "remark-cli": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-cli/-/remark-cli-9.0.0.tgz", - "integrity": "sha512-y6kCXdwZoMoh0Wo4Och1tDW50PmMc86gW6GpF08v9d+xUCEJE2wwXdQ+TnTaUamRnfFdU+fE+eNf2PJ53cyq8g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/remark-cli/-/remark-cli-10.0.0.tgz", + "integrity": "sha512-Yc5kLsJ5vgiQJl6xMLLJHqPac6OSAC5DOqKQrtmzJxSdJby2Jgr+OpIAkWQYwvbNHEspNagyoQnuwK2UCWg73g==", "dev": true, "requires": { - "markdown-extensions": "^1.1.0", - "remark": "^13.0.0", - "unified-args": "^8.0.0" + "remark": "^14.0.0", + "unified-args": "^9.0.0" } }, "remark-frontmatter": { @@ -17761,12 +18964,14 @@ } }, "remark-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", - "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.0.tgz", + "integrity": "sha512-07ei47p2Xl7Bqbn9H2VYQYirnAFJPwdMuypdozWsSbnmrkgA2e2sZLZdnDNrrsxR4onmIzH/J6KXqKxCuqHtPQ==", "dev": true, "requires": { - "mdast-util-from-markdown": "^0.8.0" + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" } }, "remark-preset-lint-recommended": { @@ -17800,12 +19005,14 @@ "dev": true }, "remark-stringify": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.0.tgz", - "integrity": "sha512-8x29DpTbVzEc6Dwb90qhxCtbZ6hmj3BxWWDpMhA+1WM4dOEGH5U5/GFe3Be5Hns5MvPSFAr1e2KSVtKZkK5nUw==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.0.tgz", + "integrity": "sha512-3LAQqJ/qiUxkWc7fUcVuB7RtIT38rvmxfmJG8z1TiE/D8zi3JGQ2tTcTJu9Tptdpb7gFwU0whRi5q1FbFOb9yA==", "dev": true, "requires": { - "mdast-util-to-markdown": "^0.5.0" + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.0.0", + "unified": "^10.0.0" } }, "remark-validate-links": { @@ -18620,109 +19827,207 @@ "dev": true }, "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dev": true, "requires": { - "bail": "^1.0.0", + "@types/unist": "^2.0.0", + "bail": "^2.0.0", "extend": "^3.0.0", "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - }, - "unified-args": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-8.1.0.tgz", - "integrity": "sha512-t1HPS1cQPsVvt/6EtyWIbQGurza5684WGRigNghZRvzIdHm3LPgMdXPyGx0npORKzdiy5+urkF0rF5SXM8lBuQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "chalk": "^3.0.0", - "chokidar": "^3.0.0", - "fault": "^1.0.2", - "json5": "^2.0.0", - "minimist": "^1.2.0", - "text-table": "^0.2.0", - "unified-engine": "^8.0.0" + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "dev": true + }, + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "dev": true + }, + "unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "@types/unist": "^2.0.0" } }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "vfile": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", + "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "vfile-message": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.1.tgz", + "integrity": "sha512-gYmSHcZZUEtYpTmaWaFJwsuUD70/rTY4v09COp8TGtOkix6gGxb/a8iTQByIY9ciTk9GwAwIXd/J9OPfM4Bvaw==", "dev": true, "requires": { - "color-name": "~1.1.4" + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + } + } + }, + "unified-args": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-9.0.2.tgz", + "integrity": "sha512-qSqryjoqfJSII4E4Z2Jx7MhXX2MuUIn6DsrlmL8UnWFdGtrWvEtvm7Rx5fKT5TPUz7q/Fb4oxwIHLCttvAuRLQ==", + "dev": true, + "requires": { + "@types/text-table": "^0.2.0", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "chokidar": "^3.0.0", + "fault": "^2.0.0", + "json5": "^2.0.0", + "minimist": "^1.0.0", + "text-table": "^0.2.0", + "unified-engine": "^9.0.0" + }, + "dependencies": { + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "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==", + "fault": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.0.tgz", + "integrity": "sha512-JsDj9LFcoC+4ChII1QpXPA7YIaY8zmqPYw7h9j5n7St7a0BBKfNnwEBAUQRBx70o2q4rs+BeSNHk8Exm6xE7fQ==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "format": "^0.2.0" } } } }, "unified-engine": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-8.0.0.tgz", - "integrity": "sha512-vLUezxCnjzz+ya4pYouRQVMT8k82Rk4fIj406UidRnSFJdGXFaQyQklAnalsQHJrLqAlaYPkXPUa1upfVSHGCA==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-9.0.3.tgz", + "integrity": "sha512-SgzREcCM2IpUy3JMFUcPRZQ2Py6IwvJ2KIrg2AiI7LnGge6E6OPFWpcabHrEXG0IvO2OI3afiD9DOcQvvZfXDQ==", "dev": true, "requires": { + "@types/concat-stream": "^1.0.0", + "@types/debug": "^4.0.0", + "@types/is-empty": "^1.0.0", + "@types/js-yaml": "^4.0.0", + "@types/node": "^16.0.0", + "@types/unist": "^2.0.0", "concat-stream": "^2.0.0", "debug": "^4.0.0", - "fault": "^1.0.0", - "figures": "^3.0.0", - "glob": "^7.0.3", + "fault": "^2.0.0", + "glob": "^7.0.0", "ignore": "^5.0.0", "is-buffer": "^2.0.0", "is-empty": "^1.0.0", - "is-plain-obj": "^2.0.0", - "js-yaml": "^3.6.1", - "load-plugin": "^3.0.0", + "is-plain-obj": "^4.0.0", + "js-yaml": "^4.0.0", + "load-plugin": "^4.0.0", "parse-json": "^5.0.0", - "to-vfile": "^6.0.0", - "trough": "^1.0.0", - "unist-util-inspect": "^5.0.0", - "vfile-reporter": "^6.0.0", - "vfile-statistics": "^1.1.0" + "to-vfile": "^7.0.0", + "trough": "^2.0.0", + "unist-util-inspect": "^7.0.0", + "vfile-message": "^3.0.0", + "vfile-reporter": "^7.0.0", + "vfile-statistics": "^2.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "fault": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.0.tgz", + "integrity": "sha512-JsDj9LFcoC+4ChII1QpXPA7YIaY8zmqPYw7h9j5n7St7a0BBKfNnwEBAUQRBx70o2q4rs+BeSNHk8Exm6xE7fQ==", + "dev": true, + "requires": { + "format": "^0.2.0" + } + }, + "is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "to-vfile": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-7.2.1.tgz", + "integrity": "sha512-biljADNq2n+AZn/zX+/87zStnIqctKr/q5OaOD8+qSKINokUGPbWBShvxa1iLUgHz6dGGjVnQPNoFRtVBzMkVg==", + "dev": true, + "requires": { + "is-buffer": "^2.0.0", + "vfile": "^5.0.0" + } + }, + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "dev": true + }, + "unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0" + } + }, + "vfile": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", + "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + } + }, + "vfile-message": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.1.tgz", + "integrity": "sha512-gYmSHcZZUEtYpTmaWaFJwsuUD70/rTY4v09COp8TGtOkix6gGxb/a8iTQByIY9ciTk9GwAwIXd/J9OPfM4Bvaw==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + } + } } }, "unified-lint-rule": { @@ -18760,12 +20065,12 @@ "dev": true }, "unist-util-inspect": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-5.0.1.tgz", - "integrity": "sha512-fPNWewS593JSmg49HbnE86BJKuBi1/nMWhDSccBvbARfxezEuJV85EaARR9/VplveiwCoLm2kWq+DhP8TBaDpw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-7.0.0.tgz", + "integrity": "sha512-2Utgv78I7PUu461Y9cdo+IUiiKSKpDV5CE/XD6vTj849a3xlpDAScvSJ6cQmtFBGgAmCn2wR7jLuXhpg1XLlJw==", "dev": true, "requires": { - "is-empty": "^1.0.0" + "@types/unist": "^2.0.0" } }, "unist-util-is": { @@ -18995,41 +20300,144 @@ } }, "vfile-reporter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-6.0.1.tgz", - "integrity": "sha512-0OppK9mo8G2XUpv+hIKLVSDsoxJrXnOy73+vIm0jQUOUFYRduqpFHX+QqAQfvRHyX9B0UFiRuNJnBOjQCIsw1g==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-7.0.1.tgz", + "integrity": "sha512-pof+cQSJCUNmHG6zoBOJfErb6syIWHWM14CwKjsugCixxl4CZdrgzgxwLBW8lIB6czkzX0Agnnhj33YpKyLvmA==", "dev": true, "requires": { - "repeat-string": "^1.5.0", - "string-width": "^4.0.0", - "supports-color": "^6.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-sort": "^2.1.2", - "vfile-statistics": "^1.1.0" + "@types/repeat-string": "^1.0.0", + "@types/supports-color": "^8.0.0", + "repeat-string": "^1.0.0", + "string-width": "^5.0.0", + "supports-color": "^9.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-sort": "^3.0.0", + "vfile-statistics": "^2.0.0" }, "dependencies": { + "ansi-regex": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.0.tgz", + "integrity": "sha512-tAaOSrWCHF+1Ear1Z4wnJCXA9GGox4K6Ic85a5qalES2aeEwQGr7UC93mwef49536PkCYjzkp0zIxfFvexJ6zQ==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "has-flag": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-5.0.1.tgz", + "integrity": "sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true + }, + "string-width": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.0.0.tgz", + "integrity": "sha512-zwXcRmLUdiWhMPrHz6EXITuyTgcEnUqDzspTkCLhQovxywWz6NP9VHgqfVg20V/1mUg0B95AKbXxNT+ALRmqCw==", + "dev": true, + "requires": { + "emoji-regex": "^9.2.2", + "is-fullwidth-code-point": "^4.0.0", + "strip-ansi": "^7.0.0" + } + }, + "strip-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.0.tgz", + "integrity": "sha512-UhDTSnGF1dc0DRbUqr1aXwNoY3RgVkSWG8BrpnuFIxhP57IqbS7IRta2Gfiavds4yCxc5+fEAVVOgBZWnYkvzg==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.0" + } + }, "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.0.2.tgz", + "integrity": "sha512-ii6tc8ImGFrgMPYq7RVAMKkhPo9vk8uA+D3oKbJq/3Pk2YSMv1+9dUAesa9UxMbxBTvxwKTQffBahNVNxEvM8Q==", + "dev": true, + "requires": { + "has-flag": "^5.0.0" + } + }, + "unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "@types/unist": "^2.0.0" } } } }, "vfile-sort": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-2.2.2.tgz", - "integrity": "sha512-tAyUqD2R1l/7Rn7ixdGkhXLD3zsg+XLAeUDUhXearjfIcpL1Hcsj5hHpCoy/gvfK/Ws61+e972fm0F7up7hfYA==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-3.0.0.tgz", + "integrity": "sha512-fJNctnuMi3l4ikTVcKpxTbzHeCgvDhnI44amA3NVDvA6rTC6oKCFpCVyT5n2fFMr3ebfr+WVQZedOCd73rzSxg==", + "dev": true, + "requires": { + "vfile-message": "^3.0.0" + }, + "dependencies": { + "unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0" + } + }, + "vfile-message": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.1.tgz", + "integrity": "sha512-gYmSHcZZUEtYpTmaWaFJwsuUD70/rTY4v09COp8TGtOkix6gGxb/a8iTQByIY9ciTk9GwAwIXd/J9OPfM4Bvaw==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + } + } + } }, "vfile-statistics": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-1.1.4.tgz", - "integrity": "sha512-lXhElVO0Rq3frgPvFBwahmed3X03vjPF8OcjKMy8+F1xU/3Q3QU3tKEDp743SFtb74PdF0UWpxPvtOP0GCLheA==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-2.0.0.tgz", + "integrity": "sha512-foOWtcnJhKN9M2+20AOTlWi2dxNfAoeNIoxD5GXcO182UJyId4QrXa41fWrgcfV3FWTjdEDy3I4cpLVcQscIMA==", + "dev": true, + "requires": { + "vfile-message": "^3.0.0" + }, + "dependencies": { + "unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0" + } + }, + "vfile-message": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.1.tgz", + "integrity": "sha512-gYmSHcZZUEtYpTmaWaFJwsuUD70/rTY4v09COp8TGtOkix6gGxb/a8iTQByIY9ciTk9GwAwIXd/J9OPfM4Bvaw==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + } + } + } }, "w3c-hr-time": { "version": "1.0.2", @@ -19250,9 +20658,9 @@ "dev": true }, "zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", + "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==", "dev": true } } diff --git a/package.json b/package.json index 630b5af1eb..fbae19e800 100644 --- a/package.json +++ b/package.json @@ -182,7 +182,7 @@ "postcss-sass": "^0.5.0", "postcss-scss": "^4.0.0", "prettier": "2.3.2", - "remark-cli": "^9.0.0", + "remark-cli": "^10.0.0", "sugarss": "^4.0.1", "typescript": "^4.2.4" }, From 7436e186777b3480f9fee6edd85df3bcb01aa702 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 14:36:21 +0100 Subject: [PATCH 091/194] Bump @types/file-entry-cache from 5.0.1 to 5.0.2 (#5471) Bumps [@types/file-entry-cache](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/file-entry-cache) from 5.0.1 to 5.0.2. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/file-entry-cache) --- updated-dependencies: - dependency-name: "@types/file-entry-cache" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 55aa62cc5b..32bb2165ac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,7 +58,7 @@ "@stylelint/remark-preset": "^2.0.0", "@types/balanced-match": "^1.0.1", "@types/debug": "^4.1.5", - "@types/file-entry-cache": "^5.0.1", + "@types/file-entry-cache": "^5.0.2", "@types/global-modules": "^2.0.0", "@types/globjoin": "^0.1.0", "@types/imurmurhash": "^0.1.1", @@ -1139,9 +1139,9 @@ "dev": true }, "node_modules/@types/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-WeUjhy7AbHrD8GlhFSMDXlJkZ0aKrwdDg4cEsFDaFeSphMvsCU3eM9LH6pfCRAz1ZPa64WOYLN0Bv8gNBKRB6A==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/file-entry-cache/-/file-entry-cache-5.0.2.tgz", + "integrity": "sha512-6uLb9gNrW+e4JivzglLQ2eJSyd7xvu5gSkwKIlOZOmuFgz8U7O9ddTwWjmWgUaIeukdQhoWefI5fQ5/MRTw8XA==", "dev": true, "dependencies": { "@types/node": "*" @@ -12587,9 +12587,9 @@ "dev": true }, "@types/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-WeUjhy7AbHrD8GlhFSMDXlJkZ0aKrwdDg4cEsFDaFeSphMvsCU3eM9LH6pfCRAz1ZPa64WOYLN0Bv8gNBKRB6A==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/file-entry-cache/-/file-entry-cache-5.0.2.tgz", + "integrity": "sha512-6uLb9gNrW+e4JivzglLQ2eJSyd7xvu5gSkwKIlOZOmuFgz8U7O9ddTwWjmWgUaIeukdQhoWefI5fQ5/MRTw8XA==", "dev": true, "requires": { "@types/node": "*" diff --git a/package.json b/package.json index fbae19e800..58020a24f1 100644 --- a/package.json +++ b/package.json @@ -154,7 +154,7 @@ "@stylelint/remark-preset": "^2.0.0", "@types/balanced-match": "^1.0.1", "@types/debug": "^4.1.5", - "@types/file-entry-cache": "^5.0.1", + "@types/file-entry-cache": "^5.0.2", "@types/global-modules": "^2.0.0", "@types/globjoin": "^0.1.0", "@types/imurmurhash": "^0.1.1", From 2cb733721c872e3af590b48a31b3a9cb93ed2572 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 14:36:31 +0100 Subject: [PATCH 092/194] Bump @types/style-search from 0.1.1 to 0.1.3 (#5472) Bumps [@types/style-search](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/style-search) from 0.1.1 to 0.1.3. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/style-search) --- updated-dependencies: - dependency-name: "@types/style-search" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 32bb2165ac..2e2027228f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -66,7 +66,7 @@ "@types/normalize-path": "^3.0.0", "@types/postcss-less": "^4.0.1", "@types/postcss-safe-parser": "^5.0.0", - "@types/style-search": "^0.1.1", + "@types/style-search": "^0.1.3", "@types/svg-tags": "^1.0.0", "@types/write-file-atomic": "^3.0.2", "benchmark": "^2.1.4", @@ -1338,9 +1338,9 @@ "dev": true }, "node_modules/@types/style-search": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@types/style-search/-/style-search-0.1.1.tgz", - "integrity": "sha512-pJOod5SN0d6rTl9d9YMqiFqLY1tMlqaQtpB/2E/SceXCf+Lwn0VVkthe7Ts4Ln3m0USPoY1lqXoyF5c7N2redg==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@types/style-search/-/style-search-0.1.3.tgz", + "integrity": "sha512-IcAsQKBFcoAWb843esJs2qhgiWWECtcFktAo4ks3xPTPlsbxfc1UESSNEXdwAPt/MnG7fZCGTJsTjH/3i5NzGA==", "dev": true }, "node_modules/@types/supports-color": { @@ -12786,9 +12786,9 @@ "dev": true }, "@types/style-search": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@types/style-search/-/style-search-0.1.1.tgz", - "integrity": "sha512-pJOod5SN0d6rTl9d9YMqiFqLY1tMlqaQtpB/2E/SceXCf+Lwn0VVkthe7Ts4Ln3m0USPoY1lqXoyF5c7N2redg==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@types/style-search/-/style-search-0.1.3.tgz", + "integrity": "sha512-IcAsQKBFcoAWb843esJs2qhgiWWECtcFktAo4ks3xPTPlsbxfc1UESSNEXdwAPt/MnG7fZCGTJsTjH/3i5NzGA==", "dev": true }, "@types/supports-color": { diff --git a/package.json b/package.json index 58020a24f1..f3e652ceb0 100644 --- a/package.json +++ b/package.json @@ -162,7 +162,7 @@ "@types/normalize-path": "^3.0.0", "@types/postcss-less": "^4.0.1", "@types/postcss-safe-parser": "^5.0.0", - "@types/style-search": "^0.1.1", + "@types/style-search": "^0.1.3", "@types/svg-tags": "^1.0.0", "@types/write-file-atomic": "^3.0.2", "benchmark": "^2.1.4", From f16d81cf85046420f3aaf5498456d08690adcbe8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 14:47:01 +0100 Subject: [PATCH 093/194] Bump jest from 27.0.1 to 27.0.6 (#5473) Bumps [jest](https://github.com/facebook/jest) from 27.0.1 to 27.0.6. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/compare/v27.0.1...v27.0.6) --- updated-dependencies: - dependency-name: jest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 2285 ++++++++++++++++++++++++--------------------- package.json | 2 +- 2 files changed, 1196 insertions(+), 1091 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2e2027228f..c45663c269 100644 --- a/package-lock.json +++ b/package-lock.json @@ -75,7 +75,7 @@ "eslint-config-stylelint": "^13.1.1", "got": "^11.8.2", "husky": "^7.0.1", - "jest": "^27.0.1", + "jest": "^27.0.6", "jest-preset-stylelint": "^4.1.1", "jest-watch-typeahead": "^0.6.4", "lint-staged": "^10.5.4", @@ -107,26 +107,29 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", - "dev": true + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/core": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", - "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.3", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.3", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz", + "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.0", + "@babel/helper-module-transforms": "^7.15.0", + "@babel/helpers": "^7.14.8", + "@babel/parser": "^7.15.0", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -143,12 +146,15 @@ } }, "node_modules/@babel/core/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "dependencies": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/core/node_modules/semver": { @@ -170,14 +176,17 @@ } }, "node_modules/@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", + "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", "dev": true, "dependencies": { - "@babel/types": "^7.14.2", + "@babel/types": "^7.15.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/generator/node_modules/source-map": { @@ -190,16 +199,19 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz", + "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.13.15", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", "semver": "^6.3.0" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0" } @@ -214,134 +226,188 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dev": true, "dependencies": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", + "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", "dev": true, "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.15.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "dev": true, "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", - "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", + "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.0", + "@babel/helper-simple-access": "^7.14.8", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz", - "integrity": "sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", + "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", "dev": true, "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" + "@babel/helper-member-expression-to-functions": "^7.15.0", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", + "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", "dev": true, "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.8" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", - "dev": true + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz", + "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==", "dev": true, "dependencies": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/highlight/node_modules/chalk": { @@ -366,9 +432,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", - "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", + "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -510,82 +576,104 @@ } }, "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", - "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", + "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/template/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "dependencies": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", + "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.0", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.15.0", + "@babel/types": "^7.15.0", "debug": "^4.1.0", "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/traverse/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "dependencies": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", - "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@bcoe/v8-coverage": { @@ -696,16 +784,16 @@ } }, "node_modules/@jest/console": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.1.tgz", - "integrity": "sha512-50E6nN2F5cAXn1lDljn0gE9F0WFXHYz/u0EeR7sOt4nbRPNli34ckbl6CUDaDABJbHt62DYnyQAIB3KgdzwKDw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.6.tgz", + "integrity": "sha512-fMlIBocSHPZ3JxgWiDNW/KPj6s+YRd0hicb33IrmelCcjXo/pXPwvuiKFmZz+XuqI/1u7nbUK10zSsWL/1aegg==", "dev": true, "dependencies": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.0.1", - "jest-util": "^27.0.1", + "jest-message-util": "^27.0.6", + "jest-util": "^27.0.6", "slash": "^3.0.0" }, "engines": { @@ -713,35 +801,35 @@ } }, "node_modules/@jest/core": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.1.tgz", - "integrity": "sha512-PiCbKSMf6t8PEfY3MAd0Ldn3aJAt5T+UcaFkAfMZ1VZgas35+fXk5uHIjAQHQLNIHZWX19TLv0wWNT03yvrw6w==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.6.tgz", + "integrity": "sha512-SsYBm3yhqOn5ZLJCtccaBcvD/ccTLCeuDv8U41WJH/V1MW5eKUkeMHT9U+Pw/v1m1AIWlnIW/eM2XzQr0rEmow==", "dev": true, "dependencies": { - "@jest/console": "^27.0.1", - "@jest/reporters": "^27.0.1", - "@jest/test-result": "^27.0.1", - "@jest/transform": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/console": "^27.0.6", + "@jest/reporters": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.0.1", - "jest-config": "^27.0.1", - "jest-haste-map": "^27.0.1", - "jest-message-util": "^27.0.1", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.1", - "jest-resolve-dependencies": "^27.0.1", - "jest-runner": "^27.0.1", - "jest-runtime": "^27.0.1", - "jest-snapshot": "^27.0.1", - "jest-util": "^27.0.1", - "jest-validate": "^27.0.1", - "jest-watcher": "^27.0.1", + "jest-changed-files": "^27.0.6", + "jest-config": "^27.0.6", + "jest-haste-map": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-resolve-dependencies": "^27.0.6", + "jest-runner": "^27.0.6", + "jest-runtime": "^27.0.6", + "jest-snapshot": "^27.0.6", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", + "jest-watcher": "^27.0.6", "micromatch": "^4.0.4", "p-each-series": "^2.1.0", "rimraf": "^3.0.0", @@ -752,7 +840,7 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { "node-notifier": { @@ -761,62 +849,62 @@ } }, "node_modules/@jest/environment": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.1.tgz", - "integrity": "sha512-nG+r3uSs2pOTsdhgt6lUm4ZGJLRcTc6HZIkrFsVpPcdSqEpJehEny9r9y2Bmhkn8fKXWdGCYJKF3i4nKO0HSmA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.6.tgz", + "integrity": "sha512-4XywtdhwZwCpPJ/qfAkqExRsERW+UaoSRStSHCCiQTUpoYdLukj+YJbQSFrZjhlUDRZeNiU9SFH0u7iNimdiIg==", "dev": true, "dependencies": { - "@jest/fake-timers": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/fake-timers": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", - "jest-mock": "^27.0.1" + "jest-mock": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.1.tgz", - "integrity": "sha512-3CyLJQnHzKI4TCJSCo+I9TzIHjSK4RrNEk93jFM6Q9+9WlSJ3mpMq/p2YuKMe0SiHKbmZOd5G/Ll5ofF9Xkw9g==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.6.tgz", + "integrity": "sha512-sqd+xTWtZ94l3yWDKnRTdvTeZ+A/V7SSKrxsrOKSqdyddb9CeNRF8fbhAU0D7ZJBpTTW2nbp6MftmKJDZfW2LQ==", "dev": true, "dependencies": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "@sinonjs/fake-timers": "^7.0.2", "@types/node": "*", - "jest-message-util": "^27.0.1", - "jest-mock": "^27.0.1", - "jest-util": "^27.0.1" + "jest-message-util": "^27.0.6", + "jest-mock": "^27.0.6", + "jest-util": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/globals": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.1.tgz", - "integrity": "sha512-80ZCzgopysKdpp5EOglgjApKxiNDR96PG4PwngB4fTwZ4qqqSKo0EwGwQIhl16szQ1M2xCVYmr9J6KelvnABNQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.6.tgz", + "integrity": "sha512-DdTGCP606rh9bjkdQ7VvChV18iS7q0IMJVP1piwTWyWskol4iqcVwthZmoJEf7obE1nc34OpIyoVGPeqLC+ryw==", "dev": true, "dependencies": { - "@jest/environment": "^27.0.1", - "@jest/types": "^27.0.1", - "expect": "^27.0.1" + "@jest/environment": "^27.0.6", + "@jest/types": "^27.0.6", + "expect": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/reporters": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.1.tgz", - "integrity": "sha512-lZbJWuS1h/ytKERfu1D6tEQ4PuQ7+15S4+HrSzHR0i7AGVT1WRo49h4fZqxASOp7AQCupUVtPJNZDkaG9ZXy0g==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.6.tgz", + "integrity": "sha512-TIkBt09Cb2gptji3yJXb3EE+eVltW6BjO7frO7NEfjI9vSIYoISi5R3aI3KpEDXlB1xwB+97NXIqz84qYeYsfA==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.0.1", - "@jest/test-result": "^27.0.1", - "@jest/transform": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/console": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", @@ -827,21 +915,21 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.0.1", - "jest-resolve": "^27.0.1", - "jest-util": "^27.0.1", - "jest-worker": "^27.0.1", + "jest-haste-map": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-util": "^27.0.6", + "jest-worker": "^27.0.6", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" + "v8-to-istanbul": "^8.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { "node-notifier": { @@ -850,9 +938,9 @@ } }, "node_modules/@jest/source-map": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.1.tgz", - "integrity": "sha512-yMgkF0f+6WJtDMdDYNavmqvbHtiSpwRN2U/W+6uztgfqgkq/PXdKPqjBTUF1RD/feth4rH5N3NW0T5+wIuln1A==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz", + "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==", "dev": true, "dependencies": { "callsites": "^3.0.0", @@ -864,13 +952,13 @@ } }, "node_modules/@jest/test-result": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.1.tgz", - "integrity": "sha512-5aa+ibX2dsGSDLKaQMZb453MqjJU/CRVumebXfaJmuzuGE4qf87yQ2QZ6PEpEtBwVUEgrJCzi3jLCRaUbksSuw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.6.tgz", + "integrity": "sha512-ja/pBOMTufjX4JLEauLxE3LQBPaI2YjGFtXexRAjt1I/MbfNlMx0sytSX3tn5hSLzQsR3Qy2rd0hc1BWojtj9w==", "dev": true, "dependencies": { - "@jest/console": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/console": "^27.0.6", + "@jest/types": "^27.0.6", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, @@ -879,37 +967,36 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.1.tgz", - "integrity": "sha512-yK2c2iruJ35WgH4KH8whS72uH+FASJUrzwxzNKTzLAEWmNpWKNEPOsSEKsHynvz78bLHafrTg4adN7RrYNbEOA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.6.tgz", + "integrity": "sha512-bISzNIApazYOlTHDum9PwW22NOyDa6VI31n6JucpjTVM0jD6JDgqEZ9+yn575nDdPF0+4csYDxNNW13NvFQGZA==", "dev": true, "dependencies": { - "@jest/test-result": "^27.0.1", + "@jest/test-result": "^27.0.6", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.1", - "jest-runner": "^27.0.1", - "jest-runtime": "^27.0.1" + "jest-haste-map": "^27.0.6", + "jest-runtime": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/transform": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.1.tgz", - "integrity": "sha512-LC95VpT6wMnQ96dRJDlUiAnW/90zyh4+jS30szI/5AsfS0qwSlr/O4TPcGoD2WVaVMfo6KvR+brvOtGyMHaNhA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.6.tgz", + "integrity": "sha512-rj5Dw+mtIcntAUnMlW/Vju5mr73u8yg+irnHwzgtgoeI6cCPOvUwQ0D1uQtc/APmWgvRweEb1g05pkUpxH3iCA==", "dev": true, "dependencies": { "@babel/core": "^7.1.0", - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.1", - "jest-regex-util": "^27.0.1", - "jest-util": "^27.0.1", + "jest-haste-map": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-util": "^27.0.6", "micromatch": "^4.0.4", "pirates": "^4.0.1", "slash": "^3.0.0", @@ -921,9 +1008,9 @@ } }, "node_modules/@jest/types": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.1.tgz", - "integrity": "sha512-8A25RRV4twZutsx2D+7WphnDsp7If9Yu6ko0Gxwrwv8BiWESFzka34+Aa2kC8w9xewt7SDuCUSZ6IiAFVj3PRg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -1008,9 +1095,9 @@ } }, "node_modules/@sinonjs/fake-timers": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.0.tgz", - "integrity": "sha512-hAEzXi6Wbvlb67NnGMGSNOeAflLVnMa4yliPU/ty1qjgW/vAletH15/v/esJwASSIA0YlIyjnloenFbEZc9q9A==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", + "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", "dev": true, "dependencies": { "@sinonjs/commons": "^1.7.0" @@ -1059,9 +1146,9 @@ } }, "node_modules/@types/babel__core": { - "version": "7.1.14", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", - "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", + "version": "7.1.15", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz", + "integrity": "sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -1072,18 +1159,18 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -1091,9 +1178,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", - "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", "dev": true, "dependencies": { "@babel/types": "^7.3.0" @@ -1311,9 +1398,9 @@ } }, "node_modules/@types/prettier": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", - "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==", "dev": true }, "node_modules/@types/repeat-string": { @@ -1332,9 +1419,9 @@ } }, "node_modules/@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, "node_modules/@types/style-search": { @@ -1770,16 +1857,16 @@ "dev": true }, "node_modules/babel-jest": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.1.tgz", - "integrity": "sha512-aWFD7OGQjk3Y8MdZKf1XePlQvHnjMVJQjIq9WKrlAjz9by703kJ45Jxhp26JwnovoW71YYz5etuqRl8wMcIv0w==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.6.tgz", + "integrity": "sha512-iTJyYLNc4wRofASmofpOc5NK9QunwMk+TLFgGXsTFS8uEqmd8wdI7sga0FPe2oVH3b5Agt/EAK1QjPEuKL8VfA==", "dev": true, "dependencies": { - "@jest/transform": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.0.1", + "babel-preset-jest": "^27.0.6", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "slash": "^3.0.0" @@ -1808,9 +1895,9 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz", - "integrity": "sha512-sqBF0owAcCDBVEDtxqfYr2F36eSHdx7lAVGyYuOBRnKdD6gzcy0I0XrAYCZgOA3CRrLhmR+Uae9nogPzmAtOfQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz", + "integrity": "sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", @@ -1846,12 +1933,12 @@ } }, "node_modules/babel-preset-jest": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz", - "integrity": "sha512-nIBIqCEpuiyhvjQs2mVNwTxQQa2xk70p9Dd/0obQGBf8FBzbnI8QhQKzLsWMN2i6q+5B0OcWDtrboBX5gmOLyA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz", + "integrity": "sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^27.0.1", + "babel-plugin-jest-hoist": "^27.0.6", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { @@ -2008,16 +2095,16 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "version": "4.16.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.7.tgz", + "integrity": "sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA==", "dev": true, "dependencies": { - "caniuse-lite": "^1.0.30001219", + "caniuse-lite": "^1.0.30001248", "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", + "electron-to-chromium": "^1.3.793", "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "node-releases": "^1.1.73" }, "bin": { "browserslist": "cli.js" @@ -2118,9 +2205,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001230", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", - "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", + "version": "1.0.30001251", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz", + "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==", "dev": true, "funding": { "type": "opencollective", @@ -2261,9 +2348,9 @@ "dev": true }, "node_modules/cjs-module-lexer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz", - "integrity": "sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, "node_modules/clean-stack": { @@ -2587,9 +2674,9 @@ } }, "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "dependencies": { "safe-buffer": "~5.1.1" @@ -2743,9 +2830,9 @@ } }, "node_modules/decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "dev": true }, "node_modules/decompress-response": { @@ -2866,9 +2953,9 @@ } }, "node_modules/diff-sequences": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz", - "integrity": "sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", + "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", "dev": true, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -2946,9 +3033,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.3.739", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz", - "integrity": "sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A==", + "version": "1.3.803", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.803.tgz", + "integrity": "sha512-tmRK9qB8Zs8eLMtTBp+w2zVS9MUe62gQQQHjYdAc5Zljam3ZIokNb+vZLPRz9RCREp6EFRwyhOFwbt1fEriQ2Q==", "dev": true }, "node_modules/elegant-spinner": { @@ -3589,17 +3676,17 @@ } }, "node_modules/expect": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.1.tgz", - "integrity": "sha512-hjKwLeAvKUiq0Plha1dmzOH1FGEwJC9njbT993cq4PK9r58/+3NM+WDqFVGcPuRH7XTjmbIeHQBzp2faDrPhjQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.6.tgz", + "integrity": "sha512-psNLt8j2kwg42jGBDSfAlU49CEZxejN1f1PlANWDZqIhBOVU/c2Pm888FcjWJzFewhIsNWfZJeLjUjtKGiPuSw==", "dev": true, "dependencies": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "ansi-styles": "^5.0.0", - "jest-get-type": "^27.0.1", - "jest-matcher-utils": "^27.0.1", - "jest-message-util": "^27.0.1", - "jest-regex-util": "^27.0.1" + "jest-get-type": "^27.0.6", + "jest-matcher-utils": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-regex-util": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -5113,14 +5200,14 @@ } }, "node_modules/jest": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.1.tgz", - "integrity": "sha512-lFEoUdXjbGAIxk/gZhcv98xOaH1hjqG5R/PQHs5GBfIK5iL3tnXCjHQf4HQLVZZ2rcXML3oeVg9+XrRZbooBdQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.6.tgz", + "integrity": "sha512-EjV8aETrsD0wHl7CKMibKwQNQc3gIRBXlTikBmmHUeVMKaPFxdcUIBfoDqTSXDoGJIivAYGqCWVlzCSaVjPQsA==", "dev": true, "dependencies": { - "@jest/core": "^27.0.1", + "@jest/core": "^27.0.6", "import-local": "^3.0.2", - "jest-cli": "^27.0.1" + "jest-cli": "^27.0.6" }, "bin": { "jest": "bin/jest.js" @@ -5129,7 +5216,7 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { "node-notifier": { @@ -5138,12 +5225,12 @@ } }, "node_modules/jest-changed-files": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.1.tgz", - "integrity": "sha512-Y/4AnqYNcUX/vVgfkmvSA3t7rcg+t8m3CsSGlU+ra8kjlVW5ZqXcBZY/NUew2Mo8M+dn0ApKl+FmGGT1JV5dVA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.6.tgz", + "integrity": "sha512-BuL/ZDauaq5dumYh5y20sn4IISnf1P9A0TDswTxUi84ORGtVa86ApuBHqICL0vepqAnZiY6a7xeSPWv2/yy4eA==", "dev": true, "dependencies": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "execa": "^5.0.0", "throat": "^6.0.1" }, @@ -5152,28 +5239,28 @@ } }, "node_modules/jest-circus": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.1.tgz", - "integrity": "sha512-Tz3ytmrsgxWlTwSyPYb8StF9J2IMjLlbBMKAjhL2UU9/0ZpYb2JiEGjXaAhnGauQRbbpyFbSH3yj5HIbdurmwQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.6.tgz", + "integrity": "sha512-OJlsz6BBeX9qR+7O9lXefWoc2m9ZqcZ5Ohlzz0pTEAG4xMiZUJoacY8f4YDHxgk0oKYxj277AfOk9w6hZYvi1Q==", "dev": true, "dependencies": { - "@jest/environment": "^27.0.1", - "@jest/test-result": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/environment": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.0.1", + "expect": "^27.0.6", "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.1", - "jest-matcher-utils": "^27.0.1", - "jest-message-util": "^27.0.1", - "jest-runner": "^27.0.1", - "jest-runtime": "^27.0.1", - "jest-snapshot": "^27.0.1", - "jest-util": "^27.0.1", - "pretty-format": "^27.0.1", + "jest-each": "^27.0.6", + "jest-matcher-utils": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-runtime": "^27.0.6", + "jest-snapshot": "^27.0.6", + "jest-util": "^27.0.6", + "pretty-format": "^27.0.6", + "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" }, @@ -5192,21 +5279,21 @@ } }, "node_modules/jest-cli": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.1.tgz", - "integrity": "sha512-plDsQQwpkKK1SZ5L5xqMa7v/sTwB5LTIeSJqb+cV+4EMlThdUQfg8jwMfHX8jHuUc9TPGLcdoZeBuZcGGn3Rlg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.6.tgz", + "integrity": "sha512-qUUVlGb9fdKir3RDE+B10ULI+LQrz+MCflEH2UJyoUjoHHCbxDrMxSzjQAPUMsic4SncI62ofYCcAvW6+6rhhg==", "dev": true, "dependencies": { - "@jest/core": "^27.0.1", - "@jest/test-result": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/core": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/types": "^27.0.6", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "import-local": "^3.0.2", - "jest-config": "^27.0.1", - "jest-util": "^27.0.1", - "jest-validate": "^27.0.1", + "jest-config": "^27.0.6", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", "prompts": "^2.0.1", "yargs": "^16.0.3" }, @@ -5217,7 +5304,7 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { "node-notifier": { @@ -5226,31 +5313,32 @@ } }, "node_modules/jest-config": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.1.tgz", - "integrity": "sha512-V8O6+CZjGF0OMq4kxVR29ztV/LQqlAAcJLw7a94RndfRXkha4U84n50yZCXiPWtAHHTmb3g1y52US6rGPxA+3w==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.6.tgz", + "integrity": "sha512-JZRR3I1Plr2YxPBhgqRspDE2S5zprbga3swYNrvY3HfQGu7p/GjyLOqwrYad97tX3U3mzT53TPHVmozacfP/3w==", "dev": true, "dependencies": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.0.1", - "@jest/types": "^27.0.1", - "babel-jest": "^27.0.1", + "@jest/test-sequencer": "^27.0.6", + "@jest/types": "^27.0.6", + "babel-jest": "^27.0.6", "chalk": "^4.0.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", "is-ci": "^3.0.0", - "jest-circus": "^27.0.1", - "jest-environment-jsdom": "^27.0.1", - "jest-environment-node": "^27.0.1", - "jest-get-type": "^27.0.1", - "jest-jasmine2": "^27.0.1", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.1", - "jest-util": "^27.0.1", - "jest-validate": "^27.0.1", + "jest-circus": "^27.0.6", + "jest-environment-jsdom": "^27.0.6", + "jest-environment-node": "^27.0.6", + "jest-get-type": "^27.0.6", + "jest-jasmine2": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-runner": "^27.0.6", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", "micromatch": "^4.0.4", - "pretty-format": "^27.0.1" + "pretty-format": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -5265,24 +5353,24 @@ } }, "node_modules/jest-diff": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.1.tgz", - "integrity": "sha512-DQ3OgfJgoGWVTYo4qnYW/Jg5mpYFS2QW9BLxA8bs12ZRN1K8QPZtWeYvUPohQFs3CHX3JLTndGg3jyxdL5THFQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.6.tgz", + "integrity": "sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^27.0.1", - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.1" + "diff-sequences": "^27.0.6", + "jest-get-type": "^27.0.6", + "pretty-format": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-docblock": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.1.tgz", - "integrity": "sha512-TA4+21s3oebURc7VgFV4r7ltdIJ5rtBH1E3Tbovcg7AV+oLfD5DcJ2V2vJ5zFA9sL5CFd/d2D6IpsAeSheEdrA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz", + "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==", "dev": true, "dependencies": { "detect-newline": "^3.0.0" @@ -5292,33 +5380,33 @@ } }, "node_modules/jest-each": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.1.tgz", - "integrity": "sha512-uJTK/aZ05HsdKkfXucAT5+/1DIURnTRv34OSxn1HWHrD+xu9eDX5Xgds09QSvg/mU01VS5upuHTDKG3W+r0rQA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.6.tgz", + "integrity": "sha512-m6yKcV3bkSWrUIjxkE9OC0mhBZZdhovIW5ergBYirqnkLXkyEn3oUUF/QZgyecA1cF1QFyTE8bRRl8Tfg1pfLA==", "dev": true, "dependencies": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "chalk": "^4.0.0", - "jest-get-type": "^27.0.1", - "jest-util": "^27.0.1", - "pretty-format": "^27.0.1" + "jest-get-type": "^27.0.6", + "jest-util": "^27.0.6", + "pretty-format": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-environment-jsdom": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.1.tgz", - "integrity": "sha512-lesU8T9zkjgLaLpUFmFDgchu6/2OCoXm52nN6UumR063Hb+1TJdI7ihgM86+G01Ay86Lyr+K/FAR6yIIOviH3Q==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.6.tgz", + "integrity": "sha512-FvetXg7lnXL9+78H+xUAsra3IeZRTiegA3An01cWeXBspKXUhAwMM9ycIJ4yBaR0L7HkoMPaZsozCLHh4T8fuw==", "dev": true, "dependencies": { - "@jest/environment": "^27.0.1", - "@jest/fake-timers": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/environment": "^27.0.6", + "@jest/fake-timers": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", - "jest-mock": "^27.0.1", - "jest-util": "^27.0.1", + "jest-mock": "^27.0.6", + "jest-util": "^27.0.6", "jsdom": "^16.6.0" }, "engines": { @@ -5326,47 +5414,47 @@ } }, "node_modules/jest-environment-node": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.1.tgz", - "integrity": "sha512-/p94lo0hx+hbKUw1opnRFUPPsjncRBEUU+2Dh7BuxX8Nr4rRiTivLYgXzo79FhaeMYV0uiV5WAbHBq6xC11JJg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.6.tgz", + "integrity": "sha512-+Vi6yLrPg/qC81jfXx3IBlVnDTI6kmRr08iVa2hFCWmJt4zha0XW7ucQltCAPhSR0FEKEoJ3i+W4E6T0s9is0w==", "dev": true, "dependencies": { - "@jest/environment": "^27.0.1", - "@jest/fake-timers": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/environment": "^27.0.6", + "@jest/fake-timers": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", - "jest-mock": "^27.0.1", - "jest-util": "^27.0.1" + "jest-mock": "^27.0.6", + "jest-util": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz", + "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==", "dev": true, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-haste-map": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.1.tgz", - "integrity": "sha512-ioCuobr4z90H1Pz8+apz2vfz63387apzAoawm/9IIOndarDfRkjLURdLOe//AI5jUQmjVRg+WiL92339kqlCmA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.6.tgz", + "integrity": "sha512-4ldjPXX9h8doB2JlRzg9oAZ2p6/GpQUNAeiYXqcpmrKbP0Qev0wdZlxSMOmz8mPOEnt4h6qIzXFLDi8RScX/1w==", "dev": true, "dependencies": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.0.1", - "jest-serializer": "^27.0.1", - "jest-util": "^27.0.1", - "jest-worker": "^27.0.1", + "jest-regex-util": "^27.0.6", + "jest-serializer": "^27.0.6", + "jest-util": "^27.0.6", + "jest-worker": "^27.0.6", "micromatch": "^4.0.4", "walker": "^1.0.7" }, @@ -5378,28 +5466,28 @@ } }, "node_modules/jest-jasmine2": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.1.tgz", - "integrity": "sha512-o8Ist0o970QDDm/R2o9UDbvNxq8A0++FTFQ0z9OnieJwS1nDH6H7WBDYAGPTdmnla7kbW41oLFPvhmjJE4mekg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.6.tgz", + "integrity": "sha512-cjpH2sBy+t6dvCeKBsHpW41mjHzXgsavaFMp+VWRf0eR4EW8xASk1acqmljFtK2DgyIECMv2yCdY41r2l1+4iA==", "dev": true, "dependencies": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.0.1", - "@jest/source-map": "^27.0.1", - "@jest/test-result": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/environment": "^27.0.6", + "@jest/source-map": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^27.0.1", + "expect": "^27.0.6", "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.1", - "jest-matcher-utils": "^27.0.1", - "jest-message-util": "^27.0.1", - "jest-runtime": "^27.0.1", - "jest-snapshot": "^27.0.1", - "jest-util": "^27.0.1", - "pretty-format": "^27.0.1", + "jest-each": "^27.0.6", + "jest-matcher-utils": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-runtime": "^27.0.6", + "jest-snapshot": "^27.0.6", + "jest-util": "^27.0.6", + "pretty-format": "^27.0.6", "throat": "^6.0.1" }, "engines": { @@ -5417,46 +5505,46 @@ } }, "node_modules/jest-leak-detector": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.1.tgz", - "integrity": "sha512-SQ/lRhfmnV3UuiaKIjwNXCaW2yh1rTMAL4n4Cl4I4gU0X2LoIc6Ogxe4UKM/J6Ld2uzc4gDGVYc5lSdpf6WjYw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.6.tgz", + "integrity": "sha512-2/d6n2wlH5zEcdctX4zdbgX8oM61tb67PQt4Xh8JFAIy6LRKUnX528HulkaG6nD5qDl5vRV1NXejCe1XRCH5gQ==", "dev": true, "dependencies": { - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.1" + "jest-get-type": "^27.0.6", + "pretty-format": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.1.tgz", - "integrity": "sha512-NauNU+olKhPzLlsRnTOYFGk/MK5QFYl9ZzkrtfsY4eCq4SB3Bcl03UL44VdnlN5S/uFn4H2jwvRY1y6nSDTX3g==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.6.tgz", + "integrity": "sha512-OFgF2VCQx9vdPSYTHWJ9MzFCehs20TsyFi6bIHbk5V1u52zJOnvF0Y/65z3GLZHKRuTgVPY4Z6LVePNahaQ+tA==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^27.0.1", - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.1" + "jest-diff": "^27.0.6", + "jest-get-type": "^27.0.6", + "pretty-format": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-message-util": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.1.tgz", - "integrity": "sha512-w8BfON2GwWORkos8BsxcwwQrLkV2s1ENxSRXK43+6yuquDE2hVxES/jrFqOArpP1ETVqqMmktU6iGkG8ncVzeA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.6.tgz", + "integrity": "sha512-rBxIs2XK7rGy+zGxgi+UJKP6WqQ+KrBbD1YMj517HYN3v2BG66t3Xan3FWqYHKZwjdB700KiAJ+iES9a0M+ixw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", - "pretty-format": "^27.0.1", + "pretty-format": "^27.0.6", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -5465,21 +5553,24 @@ } }, "node_modules/jest-message-util/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "dependencies": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/jest-mock": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.1.tgz", - "integrity": "sha512-fXCSZQDT5hUcAUy8OBnB018x7JFOMQnz4XfpSKEbfpWzL6o5qaLRhgf2Qg2NPuVKmC/fgOf33Edj8wjF4I24CQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.6.tgz", + "integrity": "sha512-lzBETUoK8cSxts2NYXSBWT+EJNzmUVtVVwS1sU9GwE1DLCfGsngg+ZVSIe0yd0ZSm+y791esiuo+WSwpXJQ5Bw==", "dev": true, "dependencies": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "@types/node": "*" }, "engines": { @@ -5516,26 +5607,27 @@ } }, "node_modules/jest-regex-util": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.1.tgz", - "integrity": "sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz", + "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==", "dev": true, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-resolve": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.1.tgz", - "integrity": "sha512-Q7QQ0OZ7z6D5Dul0MrsexlKalU8ZwexBfHLSu1qYPgphvUm6WO1b/xUnipU3e+uW1riDzMcJeJVYbdQ37hBHeg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.6.tgz", + "integrity": "sha512-yKmIgw2LgTh7uAJtzv8UFHGF7Dm7XfvOe/LQ3Txv101fLM8cx2h1QVwtSJ51Q/SCxpIiKfVn6G2jYYMDNHZteA==", "dev": true, "dependencies": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "chalk": "^4.0.0", "escalade": "^3.1.1", "graceful-fs": "^4.2.4", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.0.1", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", "resolve": "^1.20.0", "slash": "^3.0.0" }, @@ -5544,44 +5636,45 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.1.tgz", - "integrity": "sha512-ly1x5mEf21f3IVWbUNwIz/ePLtv4QdhYuQIVSVDqxx7yzAwhhdu0DJo7UNiEYKQY7Im48wfbNdOUpo7euFUXBQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.6.tgz", + "integrity": "sha512-mg9x9DS3BPAREWKCAoyg3QucCr0n6S8HEEsqRCKSPjPcu9HzRILzhdzY3imsLoZWeosEbJZz6TKasveczzpJZA==", "dev": true, "dependencies": { - "@jest/types": "^27.0.1", - "jest-regex-util": "^27.0.1", - "jest-snapshot": "^27.0.1" + "@jest/types": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-snapshot": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-runner": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.1.tgz", - "integrity": "sha512-DUNizlD2D7J80G3VOrwfbtb7KYxiftMng82HNcKwTW0W3AwwNuBeq+1exoCnLO7Mxh7NP+k/1XQBlzLpjr/CnA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.6.tgz", + "integrity": "sha512-W3Bz5qAgaSChuivLn+nKOgjqNxM7O/9JOJoKDCqThPIg2sH/d4A/lzyiaFgnb9V1/w29Le11NpzTJSzga1vyYQ==", "dev": true, "dependencies": { - "@jest/console": "^27.0.1", - "@jest/environment": "^27.0.1", - "@jest/test-result": "^27.0.1", - "@jest/transform": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/console": "^27.0.6", + "@jest/environment": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-config": "^27.0.1", - "jest-docblock": "^27.0.1", - "jest-haste-map": "^27.0.1", - "jest-leak-detector": "^27.0.1", - "jest-message-util": "^27.0.1", - "jest-resolve": "^27.0.1", - "jest-runtime": "^27.0.1", - "jest-util": "^27.0.1", - "jest-worker": "^27.0.1", + "jest-docblock": "^27.0.6", + "jest-environment-jsdom": "^27.0.6", + "jest-environment-node": "^27.0.6", + "jest-haste-map": "^27.0.6", + "jest-leak-detector": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-runtime": "^27.0.6", + "jest-util": "^27.0.6", + "jest-worker": "^27.0.6", "source-map-support": "^0.5.6", "throat": "^6.0.1" }, @@ -5590,19 +5683,19 @@ } }, "node_modules/jest-runtime": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.1.tgz", - "integrity": "sha512-ImcrbQtpCUp8X9Rm4ky3j1GG9cqIKZJvXGZyB5cHEapGPTmg7wvvNooLmKragEe61/p/bhw1qO68Y0/9BSsBBg==", - "dev": true, - "dependencies": { - "@jest/console": "^27.0.1", - "@jest/environment": "^27.0.1", - "@jest/fake-timers": "^27.0.1", - "@jest/globals": "^27.0.1", - "@jest/source-map": "^27.0.1", - "@jest/test-result": "^27.0.1", - "@jest/transform": "^27.0.1", - "@jest/types": "^27.0.1", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.6.tgz", + "integrity": "sha512-BhvHLRVfKibYyqqEFkybsznKwhrsu7AWx2F3y9G9L95VSIN3/ZZ9vBpm/XCS2bS+BWz3sSeNGLzI3TVQ0uL85Q==", + "dev": true, + "dependencies": { + "@jest/console": "^27.0.6", + "@jest/environment": "^27.0.6", + "@jest/fake-timers": "^27.0.6", + "@jest/globals": "^27.0.6", + "@jest/source-map": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "@types/yargs": "^16.0.0", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", @@ -5610,14 +5703,14 @@ "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.1", - "jest-message-util": "^27.0.1", - "jest-mock": "^27.0.1", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.1", - "jest-snapshot": "^27.0.1", - "jest-util": "^27.0.1", - "jest-validate": "^27.0.1", + "jest-haste-map": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-mock": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-snapshot": "^27.0.6", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^16.0.3" @@ -5627,9 +5720,9 @@ } }, "node_modules/jest-serializer": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.1.tgz", - "integrity": "sha512-svy//5IH6bfQvAbkAEg1s7xhhgHTtXu0li0I2fdKHDsLP2P2MOiscPQIENQep8oU2g2B3jqLyxKKzotZOz4CwQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz", + "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==", "dev": true, "dependencies": { "@types/node": "*", @@ -5640,9 +5733,9 @@ } }, "node_modules/jest-snapshot": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.1.tgz", - "integrity": "sha512-HgKmSebDB3rswugREeh+nKrxJEVZE12K7lZ2MuwfFZT6YmiH0TlofsL2YmiLsCsG5KH5ZcLYYpF5bDrvtVx/Xg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.6.tgz", + "integrity": "sha512-NTHaz8He+ATUagUgE7C/UtFcRoHqR2Gc+KDfhQIyx+VFgwbeEMjeP+ILpUTLosZn/ZtbNdCF5LkVnN/l+V751A==", "dev": true, "dependencies": { "@babel/core": "^7.7.2", @@ -5651,23 +5744,23 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.0.1", + "expect": "^27.0.6", "graceful-fs": "^4.2.4", - "jest-diff": "^27.0.1", - "jest-get-type": "^27.0.1", - "jest-haste-map": "^27.0.1", - "jest-matcher-utils": "^27.0.1", - "jest-message-util": "^27.0.1", - "jest-resolve": "^27.0.1", - "jest-util": "^27.0.1", + "jest-diff": "^27.0.6", + "jest-get-type": "^27.0.6", + "jest-haste-map": "^27.0.6", + "jest-matcher-utils": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-util": "^27.0.6", "natural-compare": "^1.4.0", - "pretty-format": "^27.0.1", + "pretty-format": "^27.0.6", "semver": "^7.3.2" }, "engines": { @@ -5690,12 +5783,12 @@ } }, "node_modules/jest-util": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.1.tgz", - "integrity": "sha512-lEw3waSmEOO4ZkwkUlFSvg4es1+8+LIkSGxp/kF60K0+vMR3Dv3O2HMZhcln9NHqSQzpVbsDT6OeMzUPW7DfRg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.6.tgz", + "integrity": "sha512-1JjlaIh+C65H/F7D11GNkGDDZtDfMEM8EBXsvd+l/cxtgQ6QhxuloOaiayt89DxUvDarbVhqI98HhgrM1yliFQ==", "dev": true, "dependencies": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -5707,17 +5800,17 @@ } }, "node_modules/jest-validate": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.1.tgz", - "integrity": "sha512-zvmPRcfTkqTZuHveIKAI2nbkUc3SDXjWVJULknPLGF5bdxOGSeGZg7f/Uw0MUVOkCOaspcHnsPCgZG0pqmg71g==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.6.tgz", + "integrity": "sha512-yhZZOaMH3Zg6DC83n60pLmdU1DQE46DW+KLozPiPbSbPhlXXaiUTDlhHQhHFpaqIFRrInko1FHXjTRpjWRuWfA==", "dev": true, "dependencies": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.0.1", + "jest-get-type": "^27.0.6", "leven": "^3.1.0", - "pretty-format": "^27.0.1" + "pretty-format": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -5757,17 +5850,17 @@ } }, "node_modules/jest-watcher": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.1.tgz", - "integrity": "sha512-Chp9c02BN0IgEbtGreyAhGqIsOrn9a0XnzbuXOxdW1+cW0Tjh12hMzHDIdLFHpYP/TqaMTmPHaJ5KWvpCCrNFw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.6.tgz", + "integrity": "sha512-/jIoKBhAP00/iMGnTwUBLgvxkn7vsOweDrOTSPzc7X9uOyUtJIDthQBTI1EXz90bdkrxorUZVhJwiB69gcHtYQ==", "dev": true, "dependencies": { - "@jest/test-result": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/test-result": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.0.1", + "jest-util": "^27.0.6", "string-length": "^4.0.1" }, "engines": { @@ -5775,9 +5868,9 @@ } }, "node_modules/jest-worker": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.1.tgz", - "integrity": "sha512-NhHqClI3owOjmS8dBhQMKHZ2rrT0sBTpqGitp9nMX5AAjVXd+15o4v96uBEMhoywaLKN+5opcKBlXwAoADZolA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz", + "integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==", "dev": true, "dependencies": { "@types/node": "*", @@ -5785,7 +5878,7 @@ "supports-color": "^8.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">= 10.13.0" } }, "node_modules/jest-worker/node_modules/has-flag": { @@ -5831,9 +5924,9 @@ } }, "node_modules/jsdom": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", - "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, "dependencies": { "abab": "^2.0.5", @@ -5861,7 +5954,7 @@ "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", "whatwg-url": "^8.5.0", - "ws": "^7.4.5", + "ws": "^7.4.6", "xml-name-validator": "^3.0.0" }, "engines": { @@ -5877,9 +5970,9 @@ } }, "node_modules/jsdom/node_modules/acorn": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", - "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -7493,21 +7586,21 @@ } }, "node_modules/mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", "dev": true, "dependencies": { - "mime-db": "1.47.0" + "mime-db": "1.49.0" }, "engines": { "node": ">= 0.6" @@ -7648,9 +7741,9 @@ } }, "node_modules/node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "version": "1.1.74", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.74.tgz", + "integrity": "sha512-caJBVempXZPepZoZAPCWRTNxYQ+xtG/KAi4ozTA5A+nJ7IU+kLQCbqaUjb5Rwy14M9upBWiQ4NutcmW04LJSRw==", "dev": true }, "node_modules/normalize-package-data": { @@ -8912,12 +9005,12 @@ } }, "node_modules/pretty-format": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.1.tgz", - "integrity": "sha512-qE+0J6c/gd+R6XTcQgPJMc5hMJNsxzSF5p8iZSbMZ7GQzYGlSLNkh2P80Wa2dbF4gEVUsJEgcrBY+1L2/j265w==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz", + "integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==", "dev": true, "dependencies": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" @@ -9047,9 +9140,9 @@ } }, "node_modules/react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, "node_modules/read-cache": { @@ -11129,9 +11222,9 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, "node_modules/v8-to-istanbul": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", - "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz", + "integrity": "sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.1", @@ -11139,7 +11232,7 @@ "source-map": "^0.7.3" }, "engines": { - "node": ">=10.10.0" + "node": ">=10.12.0" } }, "node_modules/v8-to-istanbul/node_modules/source-map": { @@ -11468,13 +11561,13 @@ "dev": true }, "node_modules/whatwg-url": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.5.0.tgz", - "integrity": "sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, "dependencies": { "lodash": "^4.7.0", - "tr46": "^2.0.2", + "tr46": "^2.1.0", "webidl-conversions": "^6.1.0" }, "engines": { @@ -11584,9 +11677,9 @@ } }, "node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", + "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", "dev": true, "engines": { "node": ">=8.3.0" @@ -11712,26 +11805,26 @@ } }, "@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", "dev": true }, "@babel/core": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", - "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.3", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.3", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz", + "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.0", + "@babel/helper-module-transforms": "^7.15.0", + "@babel/helpers": "^7.14.8", + "@babel/parser": "^7.15.0", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -11741,12 +11834,12 @@ }, "dependencies": { "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "requires": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.14.5" } }, "semver": { @@ -11764,12 +11857,12 @@ } }, "@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", + "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", "dev": true, "requires": { - "@babel/types": "^7.14.2", + "@babel/types": "^7.15.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -11783,14 +11876,14 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz", + "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.15", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", "semver": "^6.3.0" }, "dependencies": { @@ -11803,132 +11896,141 @@ } }, "@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", + "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", "dev": true, "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.15.0" } }, "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "dev": true, "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.5" } }, "@babel/helper-module-transforms": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", - "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", + "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.0", + "@babel/helper-simple-access": "^7.14.8", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" } }, "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" } }, "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "dev": true }, "@babel/helper-replace-supers": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz", - "integrity": "sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", + "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" + "@babel/helper-member-expression-to-functions": "^7.15.0", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" } }, "@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", + "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", "dev": true, "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.8" } }, "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" } }, "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==" }, "@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", "dev": true }, "@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz", + "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==", "dev": true, "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" } }, "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "requires": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -11951,9 +12053,9 @@ } }, "@babel/parser": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", - "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", + "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -12056,79 +12158,80 @@ } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-typescript": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", - "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", + "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "dev": true, "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" }, "dependencies": { "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "requires": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.14.5" } } } }, "@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", + "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.0", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.15.0", + "@babel/types": "^7.15.0", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "requires": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.14.5" } } } }, "@babel/types": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", - "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" } }, @@ -12215,49 +12318,49 @@ "dev": true }, "@jest/console": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.1.tgz", - "integrity": "sha512-50E6nN2F5cAXn1lDljn0gE9F0WFXHYz/u0EeR7sOt4nbRPNli34ckbl6CUDaDABJbHt62DYnyQAIB3KgdzwKDw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.6.tgz", + "integrity": "sha512-fMlIBocSHPZ3JxgWiDNW/KPj6s+YRd0hicb33IrmelCcjXo/pXPwvuiKFmZz+XuqI/1u7nbUK10zSsWL/1aegg==", "dev": true, "requires": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.0.1", - "jest-util": "^27.0.1", + "jest-message-util": "^27.0.6", + "jest-util": "^27.0.6", "slash": "^3.0.0" } }, "@jest/core": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.1.tgz", - "integrity": "sha512-PiCbKSMf6t8PEfY3MAd0Ldn3aJAt5T+UcaFkAfMZ1VZgas35+fXk5uHIjAQHQLNIHZWX19TLv0wWNT03yvrw6w==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.6.tgz", + "integrity": "sha512-SsYBm3yhqOn5ZLJCtccaBcvD/ccTLCeuDv8U41WJH/V1MW5eKUkeMHT9U+Pw/v1m1AIWlnIW/eM2XzQr0rEmow==", "dev": true, "requires": { - "@jest/console": "^27.0.1", - "@jest/reporters": "^27.0.1", - "@jest/test-result": "^27.0.1", - "@jest/transform": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/console": "^27.0.6", + "@jest/reporters": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.0.1", - "jest-config": "^27.0.1", - "jest-haste-map": "^27.0.1", - "jest-message-util": "^27.0.1", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.1", - "jest-resolve-dependencies": "^27.0.1", - "jest-runner": "^27.0.1", - "jest-runtime": "^27.0.1", - "jest-snapshot": "^27.0.1", - "jest-util": "^27.0.1", - "jest-validate": "^27.0.1", - "jest-watcher": "^27.0.1", + "jest-changed-files": "^27.0.6", + "jest-config": "^27.0.6", + "jest-haste-map": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-resolve-dependencies": "^27.0.6", + "jest-runner": "^27.0.6", + "jest-runtime": "^27.0.6", + "jest-snapshot": "^27.0.6", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", + "jest-watcher": "^27.0.6", "micromatch": "^4.0.4", "p-each-series": "^2.1.0", "rimraf": "^3.0.0", @@ -12266,53 +12369,53 @@ } }, "@jest/environment": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.1.tgz", - "integrity": "sha512-nG+r3uSs2pOTsdhgt6lUm4ZGJLRcTc6HZIkrFsVpPcdSqEpJehEny9r9y2Bmhkn8fKXWdGCYJKF3i4nKO0HSmA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.6.tgz", + "integrity": "sha512-4XywtdhwZwCpPJ/qfAkqExRsERW+UaoSRStSHCCiQTUpoYdLukj+YJbQSFrZjhlUDRZeNiU9SFH0u7iNimdiIg==", "dev": true, "requires": { - "@jest/fake-timers": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/fake-timers": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", - "jest-mock": "^27.0.1" + "jest-mock": "^27.0.6" } }, "@jest/fake-timers": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.1.tgz", - "integrity": "sha512-3CyLJQnHzKI4TCJSCo+I9TzIHjSK4RrNEk93jFM6Q9+9WlSJ3mpMq/p2YuKMe0SiHKbmZOd5G/Ll5ofF9Xkw9g==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.6.tgz", + "integrity": "sha512-sqd+xTWtZ94l3yWDKnRTdvTeZ+A/V7SSKrxsrOKSqdyddb9CeNRF8fbhAU0D7ZJBpTTW2nbp6MftmKJDZfW2LQ==", "dev": true, "requires": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "@sinonjs/fake-timers": "^7.0.2", "@types/node": "*", - "jest-message-util": "^27.0.1", - "jest-mock": "^27.0.1", - "jest-util": "^27.0.1" + "jest-message-util": "^27.0.6", + "jest-mock": "^27.0.6", + "jest-util": "^27.0.6" } }, "@jest/globals": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.1.tgz", - "integrity": "sha512-80ZCzgopysKdpp5EOglgjApKxiNDR96PG4PwngB4fTwZ4qqqSKo0EwGwQIhl16szQ1M2xCVYmr9J6KelvnABNQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.6.tgz", + "integrity": "sha512-DdTGCP606rh9bjkdQ7VvChV18iS7q0IMJVP1piwTWyWskol4iqcVwthZmoJEf7obE1nc34OpIyoVGPeqLC+ryw==", "dev": true, "requires": { - "@jest/environment": "^27.0.1", - "@jest/types": "^27.0.1", - "expect": "^27.0.1" + "@jest/environment": "^27.0.6", + "@jest/types": "^27.0.6", + "expect": "^27.0.6" } }, "@jest/reporters": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.1.tgz", - "integrity": "sha512-lZbJWuS1h/ytKERfu1D6tEQ4PuQ7+15S4+HrSzHR0i7AGVT1WRo49h4fZqxASOp7AQCupUVtPJNZDkaG9ZXy0g==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.6.tgz", + "integrity": "sha512-TIkBt09Cb2gptji3yJXb3EE+eVltW6BjO7frO7NEfjI9vSIYoISi5R3aI3KpEDXlB1xwB+97NXIqz84qYeYsfA==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.0.1", - "@jest/test-result": "^27.0.1", - "@jest/transform": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/console": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", @@ -12323,21 +12426,21 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.0.1", - "jest-resolve": "^27.0.1", - "jest-util": "^27.0.1", - "jest-worker": "^27.0.1", + "jest-haste-map": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-util": "^27.0.6", + "jest-worker": "^27.0.6", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" + "v8-to-istanbul": "^8.0.0" } }, "@jest/source-map": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.1.tgz", - "integrity": "sha512-yMgkF0f+6WJtDMdDYNavmqvbHtiSpwRN2U/W+6uztgfqgkq/PXdKPqjBTUF1RD/feth4rH5N3NW0T5+wIuln1A==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz", + "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==", "dev": true, "requires": { "callsites": "^3.0.0", @@ -12346,46 +12449,45 @@ } }, "@jest/test-result": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.1.tgz", - "integrity": "sha512-5aa+ibX2dsGSDLKaQMZb453MqjJU/CRVumebXfaJmuzuGE4qf87yQ2QZ6PEpEtBwVUEgrJCzi3jLCRaUbksSuw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.6.tgz", + "integrity": "sha512-ja/pBOMTufjX4JLEauLxE3LQBPaI2YjGFtXexRAjt1I/MbfNlMx0sytSX3tn5hSLzQsR3Qy2rd0hc1BWojtj9w==", "dev": true, "requires": { - "@jest/console": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/console": "^27.0.6", + "@jest/types": "^27.0.6", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.1.tgz", - "integrity": "sha512-yK2c2iruJ35WgH4KH8whS72uH+FASJUrzwxzNKTzLAEWmNpWKNEPOsSEKsHynvz78bLHafrTg4adN7RrYNbEOA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.6.tgz", + "integrity": "sha512-bISzNIApazYOlTHDum9PwW22NOyDa6VI31n6JucpjTVM0jD6JDgqEZ9+yn575nDdPF0+4csYDxNNW13NvFQGZA==", "dev": true, "requires": { - "@jest/test-result": "^27.0.1", + "@jest/test-result": "^27.0.6", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.1", - "jest-runner": "^27.0.1", - "jest-runtime": "^27.0.1" + "jest-haste-map": "^27.0.6", + "jest-runtime": "^27.0.6" } }, "@jest/transform": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.1.tgz", - "integrity": "sha512-LC95VpT6wMnQ96dRJDlUiAnW/90zyh4+jS30szI/5AsfS0qwSlr/O4TPcGoD2WVaVMfo6KvR+brvOtGyMHaNhA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.6.tgz", + "integrity": "sha512-rj5Dw+mtIcntAUnMlW/Vju5mr73u8yg+irnHwzgtgoeI6cCPOvUwQ0D1uQtc/APmWgvRweEb1g05pkUpxH3iCA==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.1", - "jest-regex-util": "^27.0.1", - "jest-util": "^27.0.1", + "jest-haste-map": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-util": "^27.0.6", "micromatch": "^4.0.4", "pirates": "^4.0.1", "slash": "^3.0.0", @@ -12394,9 +12496,9 @@ } }, "@jest/types": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.1.tgz", - "integrity": "sha512-8A25RRV4twZutsx2D+7WphnDsp7If9Yu6ko0Gxwrwv8BiWESFzka34+Aa2kC8w9xewt7SDuCUSZ6IiAFVj3PRg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -12462,9 +12564,9 @@ } }, "@sinonjs/fake-timers": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.0.tgz", - "integrity": "sha512-hAEzXi6Wbvlb67NnGMGSNOeAflLVnMa4yliPU/ty1qjgW/vAletH15/v/esJwASSIA0YlIyjnloenFbEZc9q9A==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", + "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0" @@ -12507,9 +12609,9 @@ "dev": true }, "@types/babel__core": { - "version": "7.1.14", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", - "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", + "version": "7.1.15", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz", + "integrity": "sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -12520,18 +12622,18 @@ } }, "@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", "dev": true, "requires": { "@babel/types": "^7.0.0" } }, "@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -12539,9 +12641,9 @@ } }, "@types/babel__traverse": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", - "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", "dev": true, "requires": { "@babel/types": "^7.3.0" @@ -12759,9 +12861,9 @@ } }, "@types/prettier": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", - "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==", "dev": true }, "@types/repeat-string": { @@ -12780,9 +12882,9 @@ } }, "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, "@types/style-search": { @@ -13109,16 +13211,16 @@ "dev": true }, "babel-jest": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.1.tgz", - "integrity": "sha512-aWFD7OGQjk3Y8MdZKf1XePlQvHnjMVJQjIq9WKrlAjz9by703kJ45Jxhp26JwnovoW71YYz5etuqRl8wMcIv0w==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.6.tgz", + "integrity": "sha512-iTJyYLNc4wRofASmofpOc5NK9QunwMk+TLFgGXsTFS8uEqmd8wdI7sga0FPe2oVH3b5Agt/EAK1QjPEuKL8VfA==", "dev": true, "requires": { - "@jest/transform": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.0.1", + "babel-preset-jest": "^27.0.6", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "slash": "^3.0.0" @@ -13138,9 +13240,9 @@ } }, "babel-plugin-jest-hoist": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz", - "integrity": "sha512-sqBF0owAcCDBVEDtxqfYr2F36eSHdx7lAVGyYuOBRnKdD6gzcy0I0XrAYCZgOA3CRrLhmR+Uae9nogPzmAtOfQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz", + "integrity": "sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw==", "dev": true, "requires": { "@babel/template": "^7.3.3", @@ -13170,12 +13272,12 @@ } }, "babel-preset-jest": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz", - "integrity": "sha512-nIBIqCEpuiyhvjQs2mVNwTxQQa2xk70p9Dd/0obQGBf8FBzbnI8QhQKzLsWMN2i6q+5B0OcWDtrboBX5gmOLyA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz", + "integrity": "sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^27.0.1", + "babel-plugin-jest-hoist": "^27.0.6", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -13302,16 +13404,16 @@ "dev": true }, "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "version": "4.16.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.7.tgz", + "integrity": "sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001219", + "caniuse-lite": "^1.0.30001248", "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", + "electron-to-chromium": "^1.3.793", "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "node-releases": "^1.1.73" } }, "bser": { @@ -13387,9 +13489,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001230", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", - "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", + "version": "1.0.30001251", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz", + "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==", "dev": true }, "chalk": { @@ -13490,9 +13592,9 @@ "dev": true }, "cjs-module-lexer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz", - "integrity": "sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, "clean-stack": { @@ -13746,9 +13848,9 @@ } }, "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" @@ -13869,9 +13971,9 @@ } }, "decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "dev": true }, "decompress-response": { @@ -13964,9 +14066,9 @@ "dev": true }, "diff-sequences": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz", - "integrity": "sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", + "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", "dev": true }, "dir-glob": { @@ -14027,9 +14129,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.739", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz", - "integrity": "sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A==", + "version": "1.3.803", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.803.tgz", + "integrity": "sha512-tmRK9qB8Zs8eLMtTBp+w2zVS9MUe62gQQQHjYdAc5Zljam3ZIokNb+vZLPRz9RCREp6EFRwyhOFwbt1fEriQ2Q==", "dev": true }, "elegant-spinner": { @@ -14504,17 +14606,17 @@ "dev": true }, "expect": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.1.tgz", - "integrity": "sha512-hjKwLeAvKUiq0Plha1dmzOH1FGEwJC9njbT993cq4PK9r58/+3NM+WDqFVGcPuRH7XTjmbIeHQBzp2faDrPhjQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.6.tgz", + "integrity": "sha512-psNLt8j2kwg42jGBDSfAlU49CEZxejN1f1PlANWDZqIhBOVU/c2Pm888FcjWJzFewhIsNWfZJeLjUjtKGiPuSw==", "dev": true, "requires": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "ansi-styles": "^5.0.0", - "jest-get-type": "^27.0.1", - "jest-matcher-utils": "^27.0.1", - "jest-message-util": "^27.0.1", - "jest-regex-util": "^27.0.1" + "jest-get-type": "^27.0.6", + "jest-matcher-utils": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-regex-util": "^27.0.6" }, "dependencies": { "ansi-styles": { @@ -15676,50 +15778,50 @@ } }, "jest": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.1.tgz", - "integrity": "sha512-lFEoUdXjbGAIxk/gZhcv98xOaH1hjqG5R/PQHs5GBfIK5iL3tnXCjHQf4HQLVZZ2rcXML3oeVg9+XrRZbooBdQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.6.tgz", + "integrity": "sha512-EjV8aETrsD0wHl7CKMibKwQNQc3gIRBXlTikBmmHUeVMKaPFxdcUIBfoDqTSXDoGJIivAYGqCWVlzCSaVjPQsA==", "dev": true, "requires": { - "@jest/core": "^27.0.1", + "@jest/core": "^27.0.6", "import-local": "^3.0.2", - "jest-cli": "^27.0.1" + "jest-cli": "^27.0.6" } }, "jest-changed-files": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.1.tgz", - "integrity": "sha512-Y/4AnqYNcUX/vVgfkmvSA3t7rcg+t8m3CsSGlU+ra8kjlVW5ZqXcBZY/NUew2Mo8M+dn0ApKl+FmGGT1JV5dVA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.6.tgz", + "integrity": "sha512-BuL/ZDauaq5dumYh5y20sn4IISnf1P9A0TDswTxUi84ORGtVa86ApuBHqICL0vepqAnZiY6a7xeSPWv2/yy4eA==", "dev": true, "requires": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "execa": "^5.0.0", "throat": "^6.0.1" } }, "jest-circus": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.1.tgz", - "integrity": "sha512-Tz3ytmrsgxWlTwSyPYb8StF9J2IMjLlbBMKAjhL2UU9/0ZpYb2JiEGjXaAhnGauQRbbpyFbSH3yj5HIbdurmwQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.6.tgz", + "integrity": "sha512-OJlsz6BBeX9qR+7O9lXefWoc2m9ZqcZ5Ohlzz0pTEAG4xMiZUJoacY8f4YDHxgk0oKYxj277AfOk9w6hZYvi1Q==", "dev": true, "requires": { - "@jest/environment": "^27.0.1", - "@jest/test-result": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/environment": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.0.1", + "expect": "^27.0.6", "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.1", - "jest-matcher-utils": "^27.0.1", - "jest-message-util": "^27.0.1", - "jest-runner": "^27.0.1", - "jest-runtime": "^27.0.1", - "jest-snapshot": "^27.0.1", - "jest-util": "^27.0.1", - "pretty-format": "^27.0.1", + "jest-each": "^27.0.6", + "jest-matcher-utils": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-runtime": "^27.0.6", + "jest-snapshot": "^27.0.6", + "jest-util": "^27.0.6", + "pretty-format": "^27.0.6", + "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" }, @@ -15733,166 +15835,167 @@ } }, "jest-cli": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.1.tgz", - "integrity": "sha512-plDsQQwpkKK1SZ5L5xqMa7v/sTwB5LTIeSJqb+cV+4EMlThdUQfg8jwMfHX8jHuUc9TPGLcdoZeBuZcGGn3Rlg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.6.tgz", + "integrity": "sha512-qUUVlGb9fdKir3RDE+B10ULI+LQrz+MCflEH2UJyoUjoHHCbxDrMxSzjQAPUMsic4SncI62ofYCcAvW6+6rhhg==", "dev": true, "requires": { - "@jest/core": "^27.0.1", - "@jest/test-result": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/core": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/types": "^27.0.6", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "import-local": "^3.0.2", - "jest-config": "^27.0.1", - "jest-util": "^27.0.1", - "jest-validate": "^27.0.1", + "jest-config": "^27.0.6", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", "prompts": "^2.0.1", "yargs": "^16.0.3" } }, "jest-config": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.1.tgz", - "integrity": "sha512-V8O6+CZjGF0OMq4kxVR29ztV/LQqlAAcJLw7a94RndfRXkha4U84n50yZCXiPWtAHHTmb3g1y52US6rGPxA+3w==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.6.tgz", + "integrity": "sha512-JZRR3I1Plr2YxPBhgqRspDE2S5zprbga3swYNrvY3HfQGu7p/GjyLOqwrYad97tX3U3mzT53TPHVmozacfP/3w==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.0.1", - "@jest/types": "^27.0.1", - "babel-jest": "^27.0.1", + "@jest/test-sequencer": "^27.0.6", + "@jest/types": "^27.0.6", + "babel-jest": "^27.0.6", "chalk": "^4.0.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", "is-ci": "^3.0.0", - "jest-circus": "^27.0.1", - "jest-environment-jsdom": "^27.0.1", - "jest-environment-node": "^27.0.1", - "jest-get-type": "^27.0.1", - "jest-jasmine2": "^27.0.1", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.1", - "jest-util": "^27.0.1", - "jest-validate": "^27.0.1", + "jest-circus": "^27.0.6", + "jest-environment-jsdom": "^27.0.6", + "jest-environment-node": "^27.0.6", + "jest-get-type": "^27.0.6", + "jest-jasmine2": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-runner": "^27.0.6", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", "micromatch": "^4.0.4", - "pretty-format": "^27.0.1" + "pretty-format": "^27.0.6" } }, "jest-diff": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.1.tgz", - "integrity": "sha512-DQ3OgfJgoGWVTYo4qnYW/Jg5mpYFS2QW9BLxA8bs12ZRN1K8QPZtWeYvUPohQFs3CHX3JLTndGg3jyxdL5THFQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.6.tgz", + "integrity": "sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg==", "dev": true, "requires": { "chalk": "^4.0.0", - "diff-sequences": "^27.0.1", - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.1" + "diff-sequences": "^27.0.6", + "jest-get-type": "^27.0.6", + "pretty-format": "^27.0.6" } }, "jest-docblock": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.1.tgz", - "integrity": "sha512-TA4+21s3oebURc7VgFV4r7ltdIJ5rtBH1E3Tbovcg7AV+oLfD5DcJ2V2vJ5zFA9sL5CFd/d2D6IpsAeSheEdrA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz", + "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==", "dev": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.1.tgz", - "integrity": "sha512-uJTK/aZ05HsdKkfXucAT5+/1DIURnTRv34OSxn1HWHrD+xu9eDX5Xgds09QSvg/mU01VS5upuHTDKG3W+r0rQA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.6.tgz", + "integrity": "sha512-m6yKcV3bkSWrUIjxkE9OC0mhBZZdhovIW5ergBYirqnkLXkyEn3oUUF/QZgyecA1cF1QFyTE8bRRl8Tfg1pfLA==", "dev": true, "requires": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "chalk": "^4.0.0", - "jest-get-type": "^27.0.1", - "jest-util": "^27.0.1", - "pretty-format": "^27.0.1" + "jest-get-type": "^27.0.6", + "jest-util": "^27.0.6", + "pretty-format": "^27.0.6" } }, "jest-environment-jsdom": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.1.tgz", - "integrity": "sha512-lesU8T9zkjgLaLpUFmFDgchu6/2OCoXm52nN6UumR063Hb+1TJdI7ihgM86+G01Ay86Lyr+K/FAR6yIIOviH3Q==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.6.tgz", + "integrity": "sha512-FvetXg7lnXL9+78H+xUAsra3IeZRTiegA3An01cWeXBspKXUhAwMM9ycIJ4yBaR0L7HkoMPaZsozCLHh4T8fuw==", "dev": true, "requires": { - "@jest/environment": "^27.0.1", - "@jest/fake-timers": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/environment": "^27.0.6", + "@jest/fake-timers": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", - "jest-mock": "^27.0.1", - "jest-util": "^27.0.1", + "jest-mock": "^27.0.6", + "jest-util": "^27.0.6", "jsdom": "^16.6.0" } }, "jest-environment-node": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.1.tgz", - "integrity": "sha512-/p94lo0hx+hbKUw1opnRFUPPsjncRBEUU+2Dh7BuxX8Nr4rRiTivLYgXzo79FhaeMYV0uiV5WAbHBq6xC11JJg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.6.tgz", + "integrity": "sha512-+Vi6yLrPg/qC81jfXx3IBlVnDTI6kmRr08iVa2hFCWmJt4zha0XW7ucQltCAPhSR0FEKEoJ3i+W4E6T0s9is0w==", "dev": true, "requires": { - "@jest/environment": "^27.0.1", - "@jest/fake-timers": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/environment": "^27.0.6", + "@jest/fake-timers": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", - "jest-mock": "^27.0.1", - "jest-util": "^27.0.1" + "jest-mock": "^27.0.6", + "jest-util": "^27.0.6" } }, "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz", + "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==", "dev": true }, "jest-haste-map": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.1.tgz", - "integrity": "sha512-ioCuobr4z90H1Pz8+apz2vfz63387apzAoawm/9IIOndarDfRkjLURdLOe//AI5jUQmjVRg+WiL92339kqlCmA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.6.tgz", + "integrity": "sha512-4ldjPXX9h8doB2JlRzg9oAZ2p6/GpQUNAeiYXqcpmrKbP0Qev0wdZlxSMOmz8mPOEnt4h6qIzXFLDi8RScX/1w==", "dev": true, "requires": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.0.1", - "jest-serializer": "^27.0.1", - "jest-util": "^27.0.1", - "jest-worker": "^27.0.1", + "jest-regex-util": "^27.0.6", + "jest-serializer": "^27.0.6", + "jest-util": "^27.0.6", + "jest-worker": "^27.0.6", "micromatch": "^4.0.4", "walker": "^1.0.7" } }, "jest-jasmine2": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.1.tgz", - "integrity": "sha512-o8Ist0o970QDDm/R2o9UDbvNxq8A0++FTFQ0z9OnieJwS1nDH6H7WBDYAGPTdmnla7kbW41oLFPvhmjJE4mekg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.6.tgz", + "integrity": "sha512-cjpH2sBy+t6dvCeKBsHpW41mjHzXgsavaFMp+VWRf0eR4EW8xASk1acqmljFtK2DgyIECMv2yCdY41r2l1+4iA==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.0.1", - "@jest/source-map": "^27.0.1", - "@jest/test-result": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/environment": "^27.0.6", + "@jest/source-map": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^27.0.1", + "expect": "^27.0.6", "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.1", - "jest-matcher-utils": "^27.0.1", - "jest-message-util": "^27.0.1", - "jest-runtime": "^27.0.1", - "jest-snapshot": "^27.0.1", - "jest-util": "^27.0.1", - "pretty-format": "^27.0.1", + "jest-each": "^27.0.6", + "jest-matcher-utils": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-runtime": "^27.0.6", + "jest-snapshot": "^27.0.6", + "jest-util": "^27.0.6", + "pretty-format": "^27.0.6", "throat": "^6.0.1" }, "dependencies": { @@ -15905,62 +16008,62 @@ } }, "jest-leak-detector": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.1.tgz", - "integrity": "sha512-SQ/lRhfmnV3UuiaKIjwNXCaW2yh1rTMAL4n4Cl4I4gU0X2LoIc6Ogxe4UKM/J6Ld2uzc4gDGVYc5lSdpf6WjYw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.6.tgz", + "integrity": "sha512-2/d6n2wlH5zEcdctX4zdbgX8oM61tb67PQt4Xh8JFAIy6LRKUnX528HulkaG6nD5qDl5vRV1NXejCe1XRCH5gQ==", "dev": true, "requires": { - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.1" + "jest-get-type": "^27.0.6", + "pretty-format": "^27.0.6" } }, "jest-matcher-utils": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.1.tgz", - "integrity": "sha512-NauNU+olKhPzLlsRnTOYFGk/MK5QFYl9ZzkrtfsY4eCq4SB3Bcl03UL44VdnlN5S/uFn4H2jwvRY1y6nSDTX3g==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.6.tgz", + "integrity": "sha512-OFgF2VCQx9vdPSYTHWJ9MzFCehs20TsyFi6bIHbk5V1u52zJOnvF0Y/65z3GLZHKRuTgVPY4Z6LVePNahaQ+tA==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^27.0.1", - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.1" + "jest-diff": "^27.0.6", + "jest-get-type": "^27.0.6", + "pretty-format": "^27.0.6" } }, "jest-message-util": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.1.tgz", - "integrity": "sha512-w8BfON2GwWORkos8BsxcwwQrLkV2s1ENxSRXK43+6yuquDE2hVxES/jrFqOArpP1ETVqqMmktU6iGkG8ncVzeA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.6.tgz", + "integrity": "sha512-rBxIs2XK7rGy+zGxgi+UJKP6WqQ+KrBbD1YMj517HYN3v2BG66t3Xan3FWqYHKZwjdB700KiAJ+iES9a0M+ixw==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", - "pretty-format": "^27.0.1", + "pretty-format": "^27.0.6", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "dependencies": { "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "requires": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.14.5" } } } }, "jest-mock": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.1.tgz", - "integrity": "sha512-fXCSZQDT5hUcAUy8OBnB018x7JFOMQnz4XfpSKEbfpWzL6o5qaLRhgf2Qg2NPuVKmC/fgOf33Edj8wjF4I24CQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.6.tgz", + "integrity": "sha512-lzBETUoK8cSxts2NYXSBWT+EJNzmUVtVVwS1sU9GwE1DLCfGsngg+ZVSIe0yd0ZSm+y791esiuo+WSwpXJQ5Bw==", "dev": true, "requires": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "@types/node": "*" } }, @@ -15979,81 +16082,83 @@ "requires": {} }, "jest-regex-util": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.1.tgz", - "integrity": "sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz", + "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==", "dev": true }, "jest-resolve": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.1.tgz", - "integrity": "sha512-Q7QQ0OZ7z6D5Dul0MrsexlKalU8ZwexBfHLSu1qYPgphvUm6WO1b/xUnipU3e+uW1riDzMcJeJVYbdQ37hBHeg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.6.tgz", + "integrity": "sha512-yKmIgw2LgTh7uAJtzv8UFHGF7Dm7XfvOe/LQ3Txv101fLM8cx2h1QVwtSJ51Q/SCxpIiKfVn6G2jYYMDNHZteA==", "dev": true, "requires": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "chalk": "^4.0.0", "escalade": "^3.1.1", "graceful-fs": "^4.2.4", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.0.1", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", "resolve": "^1.20.0", "slash": "^3.0.0" } }, "jest-resolve-dependencies": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.1.tgz", - "integrity": "sha512-ly1x5mEf21f3IVWbUNwIz/ePLtv4QdhYuQIVSVDqxx7yzAwhhdu0DJo7UNiEYKQY7Im48wfbNdOUpo7euFUXBQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.6.tgz", + "integrity": "sha512-mg9x9DS3BPAREWKCAoyg3QucCr0n6S8HEEsqRCKSPjPcu9HzRILzhdzY3imsLoZWeosEbJZz6TKasveczzpJZA==", "dev": true, "requires": { - "@jest/types": "^27.0.1", - "jest-regex-util": "^27.0.1", - "jest-snapshot": "^27.0.1" + "@jest/types": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-snapshot": "^27.0.6" } }, "jest-runner": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.1.tgz", - "integrity": "sha512-DUNizlD2D7J80G3VOrwfbtb7KYxiftMng82HNcKwTW0W3AwwNuBeq+1exoCnLO7Mxh7NP+k/1XQBlzLpjr/CnA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.6.tgz", + "integrity": "sha512-W3Bz5qAgaSChuivLn+nKOgjqNxM7O/9JOJoKDCqThPIg2sH/d4A/lzyiaFgnb9V1/w29Le11NpzTJSzga1vyYQ==", "dev": true, "requires": { - "@jest/console": "^27.0.1", - "@jest/environment": "^27.0.1", - "@jest/test-result": "^27.0.1", - "@jest/transform": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/console": "^27.0.6", + "@jest/environment": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-config": "^27.0.1", - "jest-docblock": "^27.0.1", - "jest-haste-map": "^27.0.1", - "jest-leak-detector": "^27.0.1", - "jest-message-util": "^27.0.1", - "jest-resolve": "^27.0.1", - "jest-runtime": "^27.0.1", - "jest-util": "^27.0.1", - "jest-worker": "^27.0.1", + "jest-docblock": "^27.0.6", + "jest-environment-jsdom": "^27.0.6", + "jest-environment-node": "^27.0.6", + "jest-haste-map": "^27.0.6", + "jest-leak-detector": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-runtime": "^27.0.6", + "jest-util": "^27.0.6", + "jest-worker": "^27.0.6", "source-map-support": "^0.5.6", "throat": "^6.0.1" } }, "jest-runtime": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.1.tgz", - "integrity": "sha512-ImcrbQtpCUp8X9Rm4ky3j1GG9cqIKZJvXGZyB5cHEapGPTmg7wvvNooLmKragEe61/p/bhw1qO68Y0/9BSsBBg==", - "dev": true, - "requires": { - "@jest/console": "^27.0.1", - "@jest/environment": "^27.0.1", - "@jest/fake-timers": "^27.0.1", - "@jest/globals": "^27.0.1", - "@jest/source-map": "^27.0.1", - "@jest/test-result": "^27.0.1", - "@jest/transform": "^27.0.1", - "@jest/types": "^27.0.1", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.6.tgz", + "integrity": "sha512-BhvHLRVfKibYyqqEFkybsznKwhrsu7AWx2F3y9G9L95VSIN3/ZZ9vBpm/XCS2bS+BWz3sSeNGLzI3TVQ0uL85Q==", + "dev": true, + "requires": { + "@jest/console": "^27.0.6", + "@jest/environment": "^27.0.6", + "@jest/fake-timers": "^27.0.6", + "@jest/globals": "^27.0.6", + "@jest/source-map": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "@types/yargs": "^16.0.0", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", @@ -16061,23 +16166,23 @@ "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.1", - "jest-message-util": "^27.0.1", - "jest-mock": "^27.0.1", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.1", - "jest-snapshot": "^27.0.1", - "jest-util": "^27.0.1", - "jest-validate": "^27.0.1", + "jest-haste-map": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-mock": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-snapshot": "^27.0.6", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^16.0.3" } }, "jest-serializer": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.1.tgz", - "integrity": "sha512-svy//5IH6bfQvAbkAEg1s7xhhgHTtXu0li0I2fdKHDsLP2P2MOiscPQIENQep8oU2g2B3jqLyxKKzotZOz4CwQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz", + "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==", "dev": true, "requires": { "@types/node": "*", @@ -16085,9 +16190,9 @@ } }, "jest-snapshot": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.1.tgz", - "integrity": "sha512-HgKmSebDB3rswugREeh+nKrxJEVZE12K7lZ2MuwfFZT6YmiH0TlofsL2YmiLsCsG5KH5ZcLYYpF5bDrvtVx/Xg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.6.tgz", + "integrity": "sha512-NTHaz8He+ATUagUgE7C/UtFcRoHqR2Gc+KDfhQIyx+VFgwbeEMjeP+ILpUTLosZn/ZtbNdCF5LkVnN/l+V751A==", "dev": true, "requires": { "@babel/core": "^7.7.2", @@ -16096,23 +16201,23 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.0.1", + "expect": "^27.0.6", "graceful-fs": "^4.2.4", - "jest-diff": "^27.0.1", - "jest-get-type": "^27.0.1", - "jest-haste-map": "^27.0.1", - "jest-matcher-utils": "^27.0.1", - "jest-message-util": "^27.0.1", - "jest-resolve": "^27.0.1", - "jest-util": "^27.0.1", + "jest-diff": "^27.0.6", + "jest-get-type": "^27.0.6", + "jest-haste-map": "^27.0.6", + "jest-matcher-utils": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-util": "^27.0.6", "natural-compare": "^1.4.0", - "pretty-format": "^27.0.1", + "pretty-format": "^27.0.6", "semver": "^7.3.2" }, "dependencies": { @@ -16128,12 +16233,12 @@ } }, "jest-util": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.1.tgz", - "integrity": "sha512-lEw3waSmEOO4ZkwkUlFSvg4es1+8+LIkSGxp/kF60K0+vMR3Dv3O2HMZhcln9NHqSQzpVbsDT6OeMzUPW7DfRg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.6.tgz", + "integrity": "sha512-1JjlaIh+C65H/F7D11GNkGDDZtDfMEM8EBXsvd+l/cxtgQ6QhxuloOaiayt89DxUvDarbVhqI98HhgrM1yliFQ==", "dev": true, "requires": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -16142,17 +16247,17 @@ } }, "jest-validate": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.1.tgz", - "integrity": "sha512-zvmPRcfTkqTZuHveIKAI2nbkUc3SDXjWVJULknPLGF5bdxOGSeGZg7f/Uw0MUVOkCOaspcHnsPCgZG0pqmg71g==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.6.tgz", + "integrity": "sha512-yhZZOaMH3Zg6DC83n60pLmdU1DQE46DW+KLozPiPbSbPhlXXaiUTDlhHQhHFpaqIFRrInko1FHXjTRpjWRuWfA==", "dev": true, "requires": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.0.1", + "jest-get-type": "^27.0.6", "leven": "^3.1.0", - "pretty-format": "^27.0.1" + "pretty-format": "^27.0.6" }, "dependencies": { "camelcase": { @@ -16179,24 +16284,24 @@ } }, "jest-watcher": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.1.tgz", - "integrity": "sha512-Chp9c02BN0IgEbtGreyAhGqIsOrn9a0XnzbuXOxdW1+cW0Tjh12hMzHDIdLFHpYP/TqaMTmPHaJ5KWvpCCrNFw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.6.tgz", + "integrity": "sha512-/jIoKBhAP00/iMGnTwUBLgvxkn7vsOweDrOTSPzc7X9uOyUtJIDthQBTI1EXz90bdkrxorUZVhJwiB69gcHtYQ==", "dev": true, "requires": { - "@jest/test-result": "^27.0.1", - "@jest/types": "^27.0.1", + "@jest/test-result": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.0.1", + "jest-util": "^27.0.6", "string-length": "^4.0.1" } }, "jest-worker": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.1.tgz", - "integrity": "sha512-NhHqClI3owOjmS8dBhQMKHZ2rrT0sBTpqGitp9nMX5AAjVXd+15o4v96uBEMhoywaLKN+5opcKBlXwAoADZolA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz", + "integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==", "dev": true, "requires": { "@types/node": "*", @@ -16237,9 +16342,9 @@ } }, "jsdom": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", - "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, "requires": { "abab": "^2.0.5", @@ -16267,14 +16372,14 @@ "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", "whatwg-url": "^8.5.0", - "ws": "^7.4.5", + "ws": "^7.4.6", "xml-name-validator": "^3.0.0" }, "dependencies": { "acorn": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", - "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", "dev": true } } @@ -17415,18 +17520,18 @@ } }, "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", "dev": true }, "mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", "dev": true, "requires": { - "mime-db": "1.47.0" + "mime-db": "1.49.0" } }, "mimic-fn": { @@ -17535,9 +17640,9 @@ "dev": true }, "node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "version": "1.1.74", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.74.tgz", + "integrity": "sha512-caJBVempXZPepZoZAPCWRTNxYQ+xtG/KAi4ozTA5A+nJ7IU+kLQCbqaUjb5Rwy14M9upBWiQ4NutcmW04LJSRw==", "dev": true }, "normalize-package-data": { @@ -18495,12 +18600,12 @@ } }, "pretty-format": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.1.tgz", - "integrity": "sha512-qE+0J6c/gd+R6XTcQgPJMc5hMJNsxzSF5p8iZSbMZ7GQzYGlSLNkh2P80Wa2dbF4gEVUsJEgcrBY+1L2/j265w==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz", + "integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==", "dev": true, "requires": { - "@jest/types": "^27.0.1", + "@jest/types": "^27.0.6", "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" @@ -18603,9 +18708,9 @@ } }, "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, "read-cache": { @@ -20228,9 +20333,9 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, "v8-to-istanbul": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", - "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz", + "integrity": "sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.1", @@ -20488,13 +20593,13 @@ "dev": true }, "whatwg-url": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.5.0.tgz", - "integrity": "sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, "requires": { "lodash": "^4.7.0", - "tr46": "^2.0.2", + "tr46": "^2.1.0", "webidl-conversions": "^6.1.0" } }, @@ -20585,9 +20690,9 @@ } }, "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", + "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", "dev": true, "requires": {} }, diff --git a/package.json b/package.json index f3e652ceb0..908ceb1aab 100644 --- a/package.json +++ b/package.json @@ -171,7 +171,7 @@ "eslint-config-stylelint": "^13.1.1", "got": "^11.8.2", "husky": "^7.0.1", - "jest": "^27.0.1", + "jest": "^27.0.6", "jest-preset-stylelint": "^4.1.1", "jest-watch-typeahead": "^0.6.4", "lint-staged": "^10.5.4", From 0c95bbf6a6dbb674e071160123da1bde36aecca9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 14:47:11 +0100 Subject: [PATCH 094/194] Bump debug from 4.3.1 to 4.3.2 (#5474) Bumps [debug](https://github.com/visionmedia/debug) from 4.3.1 to 4.3.2. - [Release notes](https://github.com/visionmedia/debug/releases) - [Commits](https://github.com/visionmedia/debug/compare/4.3.1...4.3.2) --- updated-dependencies: - dependency-name: debug dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 19 ++++++++++++------- package.json | 2 +- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index c45663c269..5cf5b9edf7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "balanced-match": "^2.0.0", "chalk": "^4.1.1", "cosmiconfig": "^7.0.0", - "debug": "^4.3.1", + "debug": "^4.3.2", "deepmerge": "^4.2.2", "execall": "^2.0.0", "fast-glob": "^3.2.5", @@ -2791,14 +2791,19 @@ "dev": true }, "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/decamelize": { @@ -13942,9 +13947,9 @@ "dev": true }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { "ms": "2.1.2" } diff --git a/package.json b/package.json index 908ceb1aab..9b5417a057 100644 --- a/package.json +++ b/package.json @@ -110,7 +110,7 @@ "balanced-match": "^2.0.0", "chalk": "^4.1.1", "cosmiconfig": "^7.0.0", - "debug": "^4.3.1", + "debug": "^4.3.2", "deepmerge": "^4.2.2", "execall": "^2.0.0", "fast-glob": "^3.2.5", From 68ac19e61fe0485ba4403741452b2d324f631feb Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Thu, 12 Aug 2021 17:16:50 +0100 Subject: [PATCH 095/194] Update deps (#5475) --- package-lock.json | 625 ++++++++++++++-------------------------------- package.json | 12 +- 2 files changed, 200 insertions(+), 437 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5cf5b9edf7..c8b8d1a456 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,12 +9,12 @@ "license": "MIT", "dependencies": { "balanced-match": "^2.0.0", - "chalk": "^4.1.1", + "chalk": "^4.1.2", "cosmiconfig": "^7.0.0", "debug": "^4.3.2", "deepmerge": "^4.2.2", "execall": "^2.0.0", - "fast-glob": "^3.2.5", + "fast-glob": "^3.2.7", "fastest-levenshtein": "^1.0.12", "file-entry-cache": "^6.0.1", "get-stdin": "^8.0.0", @@ -33,7 +33,7 @@ "micromatch": "^4.0.4", "normalize-path": "^3.0.0", "normalize-selector": "^0.2.0", - "postcss": "^8.3.0", + "postcss": "^8.3.6", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^6.0.0", @@ -46,7 +46,7 @@ "strip-ansi": "^6.0.0", "style-search": "^0.1.0", "svg-tags": "^1.0.0", - "table": "^6.6.0", + "table": "^6.7.1", "v8-compile-cache": "^2.3.0", "write-file-atomic": "^3.0.3" }, @@ -57,7 +57,7 @@ "@stylelint/prettier-config": "^2.0.0", "@stylelint/remark-preset": "^2.0.0", "@types/balanced-match": "^1.0.1", - "@types/debug": "^4.1.5", + "@types/debug": "^4.1.7", "@types/file-entry-cache": "^5.0.2", "@types/global-modules": "^2.0.0", "@types/globjoin": "^0.1.0", @@ -78,7 +78,7 @@ "jest": "^27.0.6", "jest-preset-stylelint": "^4.1.1", "jest-watch-typeahead": "^0.6.4", - "lint-staged": "^10.5.4", + "lint-staged": "^11.1.2", "np": "^7.5.0", "npm-run-all": "^4.1.5", "postcss-import": "^14.0.2", @@ -1220,10 +1220,13 @@ } }, "node_modules/@types/debug": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", - "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==", - "dev": true + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, + "dependencies": { + "@types/ms": "*" + } }, "node_modules/@types/file-entry-cache": { "version": "5.0.2", @@ -1357,6 +1360,12 @@ "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==" }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, "node_modules/@types/node": { "version": "16.6.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.0.tgz", @@ -2001,18 +2010,6 @@ "node": ">=10" } }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/boxen/node_modules/camelcase": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", @@ -2022,24 +2019,6 @@ "node": ">=10" } }, - "node_modules/boxen/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/boxen/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/boxen/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -2049,20 +2028,6 @@ "node": ">=10" } }, - "node_modules/boxen/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2215,9 +2180,9 @@ } }, "node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2466,56 +2431,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/clone-regexp": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", @@ -2598,12 +2513,12 @@ } }, "node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, "engines": { - "node": ">= 6" + "node": ">= 10" } }, "node_modules/common-tags": { @@ -3735,16 +3650,15 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" }, "engines": { "node": ">=8" @@ -4315,15 +4229,6 @@ "node": ">= 6" } }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, "node_modules/husky": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.1.tgz", @@ -6179,22 +6084,21 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" }, "node_modules/lint-staged": { - "version": "10.5.4", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.4.tgz", - "integrity": "sha512-EechC3DdFic/TdOPgj/RB3FicqE6932LTHCUm0Y2fsD9KGlLB+RwJl2q1IYBIvEsKzDOgn0D4gll+YxG5RsrKg==", + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.1.2.tgz", + "integrity": "sha512-6lYpNoA9wGqkL6Hew/4n1H6lRqF3qCsujVT0Oq5Z4hiSAM7S6NksPJ3gnr7A7R52xCtiZMcEUNNQ6d6X5Bvh9w==", "dev": true, "dependencies": { - "chalk": "^4.1.0", + "chalk": "^4.1.1", "cli-truncate": "^2.1.0", - "commander": "^6.2.0", + "commander": "^7.2.0", "cosmiconfig": "^7.0.0", - "debug": "^4.2.0", - "dedent": "^0.7.0", + "debug": "^4.3.1", "enquirer": "^2.3.6", - "execa": "^4.1.0", - "listr2": "^3.2.2", - "log-symbols": "^4.0.0", - "micromatch": "^4.0.2", + "execa": "^5.0.0", + "listr2": "^3.8.2", + "log-symbols": "^4.1.0", + "micromatch": "^4.0.4", "normalize-path": "^3.0.0", "please-upgrade-node": "^3.2.0", "string-argv": "0.3.1", @@ -6207,38 +6111,6 @@ "url": "https://opencollective.com/lint-staged" } }, - "node_modules/lint-staged/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/listr": { "version": "0.14.3", "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", @@ -6679,18 +6551,16 @@ } }, "node_modules/listr2": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.3.1.tgz", - "integrity": "sha512-8Zoxe7s/8nNr4bJ8bdAduHD8uJce+exmMmUWTXlq0WuUdffnH3muisHPHPFtW2vvOfohIsq7FGCaguUxN/h3Iw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.11.0.tgz", + "integrity": "sha512-XLJVe2JgXCyQTa3FbSv11lkKExYmEyA4jltVo8z4FX10Vt1Yj8IMekBfwim0BSOM9uj1QMTJvDQQpHyuPbB/dQ==", "dev": true, "dependencies": { - "chalk": "^4.1.0", "cli-truncate": "^2.1.0", - "figures": "^3.2.0", - "indent-string": "^4.0.0", + "colorette": "^1.2.2", "log-update": "^4.0.0", "p-map": "^4.0.0", - "rxjs": "^6.6.3", + "rxjs": "^6.6.7", "through": "^2.3.8", "wrap-ansi": "^7.0.0" }, @@ -6701,56 +6571,6 @@ "enquirer": ">= 2.3.0 < 3" } }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/listr2/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/listr2/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/listr2/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -6824,11 +6644,6 @@ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, "node_modules/lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", @@ -6885,6 +6700,53 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-update/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/longest-streak": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.0.tgz", @@ -9828,9 +9690,9 @@ "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==" }, "node_modules/rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "dependencies": { "tslib": "^1.9.0" @@ -10448,13 +10310,12 @@ "dev": true }, "node_modules/table": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.6.0.tgz", - "integrity": "sha512-iZMtp5tUvcnAdtHpZTWLPF0M7AgiQsURR2DwmxnJwSy8I3+cY+ozzVvYha3BOLG2TB+L0CqjIz+91htuj6yCXg==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", "dependencies": { "ajv": "^8.0.1", "lodash.clonedeep": "^4.5.0", - "lodash.flatten": "^4.4.0", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", "string-width": "^4.2.0", @@ -11612,9 +11473,9 @@ } }, "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", @@ -11622,7 +11483,10 @@ "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/wrap-ansi/node_modules/ansi-styles": { @@ -11635,6 +11499,9 @@ }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/wrap-ansi/node_modules/color-convert": { @@ -12688,10 +12555,13 @@ } }, "@types/debug": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", - "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==", - "dev": true + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, + "requires": { + "@types/ms": "*" + } }, "@types/file-entry-cache": { "version": "5.0.2", @@ -12825,6 +12695,12 @@ "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==" }, + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, "@types/node": { "version": "16.6.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.0.tgz", @@ -13329,52 +13205,17 @@ "wrap-ansi": "^7.0.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, "camelcase": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } } } }, @@ -13500,9 +13341,9 @@ "dev": true }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -13685,43 +13526,6 @@ "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } } }, "clone-regexp": { @@ -13793,9 +13597,9 @@ } }, "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true }, "common-tags": { @@ -14655,16 +14459,15 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" } }, "fast-json-stable-stringify": { @@ -15116,12 +14919,6 @@ "debug": "4" } }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, "husky": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.1.tgz", @@ -16542,51 +16339,25 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" }, "lint-staged": { - "version": "10.5.4", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.4.tgz", - "integrity": "sha512-EechC3DdFic/TdOPgj/RB3FicqE6932LTHCUm0Y2fsD9KGlLB+RwJl2q1IYBIvEsKzDOgn0D4gll+YxG5RsrKg==", + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.1.2.tgz", + "integrity": "sha512-6lYpNoA9wGqkL6Hew/4n1H6lRqF3qCsujVT0Oq5Z4hiSAM7S6NksPJ3gnr7A7R52xCtiZMcEUNNQ6d6X5Bvh9w==", "dev": true, "requires": { - "chalk": "^4.1.0", + "chalk": "^4.1.1", "cli-truncate": "^2.1.0", - "commander": "^6.2.0", + "commander": "^7.2.0", "cosmiconfig": "^7.0.0", - "debug": "^4.2.0", - "dedent": "^0.7.0", + "debug": "^4.3.1", "enquirer": "^2.3.6", - "execa": "^4.1.0", - "listr2": "^3.2.2", - "log-symbols": "^4.0.0", - "micromatch": "^4.0.2", + "execa": "^5.0.0", + "listr2": "^3.8.2", + "log-symbols": "^4.1.0", + "micromatch": "^4.0.4", "normalize-path": "^3.0.0", "please-upgrade-node": "^3.2.0", "string-argv": "0.3.1", "stringify-object": "^3.3.0" - }, - "dependencies": { - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - } } }, "listr": { @@ -16926,57 +16697,18 @@ } }, "listr2": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.3.1.tgz", - "integrity": "sha512-8Zoxe7s/8nNr4bJ8bdAduHD8uJce+exmMmUWTXlq0WuUdffnH3muisHPHPFtW2vvOfohIsq7FGCaguUxN/h3Iw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.11.0.tgz", + "integrity": "sha512-XLJVe2JgXCyQTa3FbSv11lkKExYmEyA4jltVo8z4FX10Vt1Yj8IMekBfwim0BSOM9uj1QMTJvDQQpHyuPbB/dQ==", "dev": true, "requires": { - "chalk": "^4.1.0", "cli-truncate": "^2.1.0", - "figures": "^3.2.0", - "indent-string": "^4.0.0", + "colorette": "^1.2.2", "log-update": "^4.0.0", "p-map": "^4.0.0", - "rxjs": "^6.6.3", + "rxjs": "^6.6.7", "through": "^2.3.8", "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } } }, "load-json-file": { @@ -17038,11 +16770,6 @@ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, "lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", @@ -17085,6 +16812,43 @@ "cli-cursor": "^3.1.0", "slice-ansi": "^4.0.0", "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } } }, "longest-streak": { @@ -19237,9 +19001,9 @@ "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==" }, "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -19735,13 +19499,12 @@ "dev": true }, "table": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.6.0.tgz", - "integrity": "sha512-iZMtp5tUvcnAdtHpZTWLPF0M7AgiQsURR2DwmxnJwSy8I3+cY+ozzVvYha3BOLG2TB+L0CqjIz+91htuj6yCXg==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", "requires": { "ajv": "^8.0.1", "lodash.clonedeep": "^4.5.0", - "lodash.flatten": "^4.4.0", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", "string-width": "^4.2.0", @@ -20632,9 +20395,9 @@ "dev": true }, "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { "ansi-styles": "^4.0.0", diff --git a/package.json b/package.json index 9b5417a057..9c7c0f5b71 100644 --- a/package.json +++ b/package.json @@ -108,12 +108,12 @@ }, "dependencies": { "balanced-match": "^2.0.0", - "chalk": "^4.1.1", + "chalk": "^4.1.2", "cosmiconfig": "^7.0.0", "debug": "^4.3.2", "deepmerge": "^4.2.2", "execall": "^2.0.0", - "fast-glob": "^3.2.5", + "fast-glob": "^3.2.7", "fastest-levenshtein": "^1.0.12", "file-entry-cache": "^6.0.1", "get-stdin": "^8.0.0", @@ -132,7 +132,7 @@ "micromatch": "^4.0.4", "normalize-path": "^3.0.0", "normalize-selector": "^0.2.0", - "postcss": "^8.3.0", + "postcss": "^8.3.6", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^6.0.0", @@ -145,7 +145,7 @@ "strip-ansi": "^6.0.0", "style-search": "^0.1.0", "svg-tags": "^1.0.0", - "table": "^6.6.0", + "table": "^6.7.1", "v8-compile-cache": "^2.3.0", "write-file-atomic": "^3.0.3" }, @@ -153,7 +153,7 @@ "@stylelint/prettier-config": "^2.0.0", "@stylelint/remark-preset": "^2.0.0", "@types/balanced-match": "^1.0.1", - "@types/debug": "^4.1.5", + "@types/debug": "^4.1.7", "@types/file-entry-cache": "^5.0.2", "@types/global-modules": "^2.0.0", "@types/globjoin": "^0.1.0", @@ -174,7 +174,7 @@ "jest": "^27.0.6", "jest-preset-stylelint": "^4.1.1", "jest-watch-typeahead": "^0.6.4", - "lint-staged": "^10.5.4", + "lint-staged": "^11.1.2", "np": "^7.5.0", "npm-run-all": "^4.1.5", "postcss-import": "^14.0.2", From af4314d1e6b67801e25124ccd1a476ba6d81d8a9 Mon Sep 17 00:00:00 2001 From: Richard Hallows Date: Thu, 12 Aug 2021 17:17:22 +0100 Subject: [PATCH 096/194] Update Typescript (#5476) --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index c8b8d1a456..bd18ed9149 100644 --- a/package-lock.json +++ b/package-lock.json @@ -88,7 +88,7 @@ "prettier": "2.3.2", "remark-cli": "^10.0.0", "sugarss": "^4.0.1", - "typescript": "^4.2.4" + "typescript": "^4.3.5" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -10552,9 +10552,9 @@ } }, "node_modules/typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -19694,9 +19694,9 @@ } }, "typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", "dev": true }, "unified": { diff --git a/package.json b/package.json index 9c7c0f5b71..0441f6cbf9 100644 --- a/package.json +++ b/package.json @@ -184,7 +184,7 @@ "prettier": "2.3.2", "remark-cli": "^10.0.0", "sugarss": "^4.0.1", - "typescript": "^4.2.4" + "typescript": "^4.3.5" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" From f863393e3c11c829e0e421baec376c886a1ae206 Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Fri, 13 Aug 2021 17:16:46 +0900 Subject: [PATCH 097/194] Refactor to improve types for `custom-*` rules (#5477) * Refactor to improve types for `custom-*` rules * Rename rule arguments --- lib/rules/custom-media-pattern/index.js | 19 +++++----- .../index.js | 36 +++++++++++-------- .../index.js | 30 ++++++++-------- lib/rules/custom-property-pattern/index.js | 13 ++++--- 4 files changed, 54 insertions(+), 44 deletions(-) diff --git a/lib/rules/custom-media-pattern/index.js b/lib/rules/custom-media-pattern/index.js index 362499bd1c..05c3fa538c 100644 --- a/lib/rules/custom-media-pattern/index.js +++ b/lib/rules/custom-media-pattern/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const atRuleParamIndex = require('../../utils/atRuleParamIndex'); @@ -14,10 +12,11 @@ const messages = ruleMessages(ruleName, { expected: (pattern) => `Expected custom media query name to match pattern "${pattern}"`, }); -function rule(pattern) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary) => { return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: pattern, + actual: primary, possible: [isRegExp, isString], }); @@ -25,21 +24,25 @@ function rule(pattern) { return; } - const regexpPattern = isString(pattern) ? new RegExp(pattern) : pattern; + const regexpPattern = isString(primary) ? new RegExp(primary) : primary; root.walkAtRules((atRule) => { if (atRule.name.toLowerCase() !== 'custom-media') { return; } - const customMediaName = atRule.params.match(/^--(\S+)\b/)[1]; + const match = atRule.params.match(/^--(\S+)\b/); + + if (match == null) throw new Error(`Unexpected at-rule params: "${atRule.params}"`); + + const customMediaName = match[1]; if (regexpPattern.test(customMediaName)) { return; } report({ - message: messages.expected(pattern), + message: messages.expected(primary), node: atRule, index: atRuleParamIndex(atRule), result, @@ -47,7 +50,7 @@ function rule(pattern) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/custom-property-empty-line-before/index.js b/lib/rules/custom-property-empty-line-before/index.js index c3b38ed757..7193c19b90 100644 --- a/lib/rules/custom-property-empty-line-before/index.js +++ b/lib/rules/custom-property-empty-line-before/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const addEmptyLineBefore = require('../../utils/addEmptyLineBefore'); @@ -16,6 +14,7 @@ const removeEmptyLinesBefore = require('../../utils/removeEmptyLinesBefore'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isAtRule, isDeclaration, isRule } = require('../../utils/typeGuards'); const ruleName = 'custom-property-empty-line-before'; @@ -24,17 +23,18 @@ const messages = ruleMessages(ruleName, { rejected: 'Unexpected empty line before custom property', }); -function rule(expectation, options, context) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, secondaryOptions, context) => { return (root, result) => { const validOptions = validateOptions( result, ruleName, { - actual: expectation, + actual: primary, possible: ['always', 'never'], }, { - actual: options, + actual: secondaryOptions, possible: { except: ['first-nested', 'after-comment', 'after-custom-property'], ignore: ['after-comment', 'first-nested', 'inside-single-line-block'], @@ -60,30 +60,33 @@ function rule(expectation, options, context) { } // Optionally ignore the node if a comment precedes it - if (optionsMatches(options, 'ignore', 'after-comment') && isAfterComment(decl)) { + if (optionsMatches(secondaryOptions, 'ignore', 'after-comment') && isAfterComment(decl)) { return; } // Optionally ignore the node if it is the first nested - if (optionsMatches(options, 'ignore', 'first-nested') && isFirstNested(decl)) { + if (optionsMatches(secondaryOptions, 'ignore', 'first-nested') && isFirstNested(decl)) { return; } // Optionally ignore nodes inside single-line blocks if ( - optionsMatches(options, 'ignore', 'inside-single-line-block') && + optionsMatches(secondaryOptions, 'ignore', 'inside-single-line-block') && + parent != null && + (isAtRule(parent) || isRule(parent)) && isSingleLineString(blockString(parent)) ) { return; } - let expectEmptyLineBefore = expectation === 'always'; + let expectEmptyLineBefore = primary === 'always'; // Optionally reverse the expectation if any exceptions apply if ( - (optionsMatches(options, 'except', 'first-nested') && isFirstNested(decl)) || - (optionsMatches(options, 'except', 'after-comment') && isAfterComment(decl)) || - (optionsMatches(options, 'except', 'after-custom-property') && isAfterCustomProperty(decl)) + (optionsMatches(secondaryOptions, 'except', 'first-nested') && isFirstNested(decl)) || + (optionsMatches(secondaryOptions, 'except', 'after-comment') && isAfterComment(decl)) || + (optionsMatches(secondaryOptions, 'except', 'after-custom-property') && + isAfterCustomProperty(decl)) ) { expectEmptyLineBefore = !expectEmptyLineBefore; } @@ -97,6 +100,8 @@ function rule(expectation, options, context) { // Fix if (context.fix) { + if (context.newline == null) return; + if (expectEmptyLineBefore) { addEmptyLineBefore(decl, context.newline); } else { @@ -116,12 +121,15 @@ function rule(expectation, options, context) { }); }); }; -} +}; +/** + * @param {import('postcss').Declaration} decl + */ function isAfterCustomProperty(decl) { const prevNode = getPreviousNonSharedLineCommentNode(decl); - return prevNode && prevNode.prop && isCustomProperty(prevNode.prop); + return prevNode != null && isDeclaration(prevNode) && isCustomProperty(prevNode.prop); } rule.ruleName = ruleName; diff --git a/lib/rules/custom-property-no-missing-var-function/index.js b/lib/rules/custom-property-no-missing-var-function/index.js index bc2e15bb34..17fe13d828 100644 --- a/lib/rules/custom-property-no-missing-var-function/index.js +++ b/lib/rules/custom-property-no-missing-var-function/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const valueParser = require('postcss-value-parser'); @@ -16,22 +14,22 @@ const messages = ruleMessages(ruleName, { rejected: (customProperty) => `Unexpected missing var function for "${customProperty}"`, }); -function rule(actual) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary) => { return (root, result) => { - const validOptions = validateOptions(result, ruleName, { - actual, - }); + const validOptions = validateOptions(result, ruleName, { actual: primary }); if (!validOptions) return; - const customProperties = new Set(); + /** @type {Set} */ + const knownCustomProperties = new Set(); root.walkAtRules(/^property$/i, (atRule) => { - customProperties.add(atRule.params); + knownCustomProperties.add(atRule.params); }); root.walkDecls(({ prop }) => { - if (isCustomProperty(prop)) customProperties.add(prop); + if (isCustomProperty(prop)) knownCustomProperties.add(prop); }); root.walkDecls((decl) => { @@ -43,7 +41,7 @@ function rule(actual) { if (!isDashedIdent(node)) return; - if (!isKnownCustomProperty(node)) return; + if (!knownCustomProperties.has(node.value)) return; report({ message: messages.rejected(node.value), @@ -56,17 +54,19 @@ function rule(actual) { return false; }); }); - - function isKnownCustomProperty({ value }) { - return customProperties.has(value); - } }; -} +}; +/** + * @param {import('postcss-value-parser').Node} node + */ function isDashedIdent({ type, value }) { return type === 'word' && value.startsWith('--'); } +/** + * @param {import('postcss-value-parser').Node} node + */ function isVarFunction({ type, value }) { return type === 'function' && value === 'var'; } diff --git a/lib/rules/custom-property-pattern/index.js b/lib/rules/custom-property-pattern/index.js index cebaa7e7ed..2cb82808ea 100644 --- a/lib/rules/custom-property-pattern/index.js +++ b/lib/rules/custom-property-pattern/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const isCustomProperty = require('../../utils/isCustomProperty'); @@ -14,10 +12,11 @@ const messages = ruleMessages(ruleName, { expected: (pattern) => `Expected custom property name to match pattern "${pattern}"`, }); -function rule(pattern) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary) => { return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: pattern, + actual: primary, possible: [isRegExp, isString], }); @@ -25,7 +24,7 @@ function rule(pattern) { return; } - const regexpPattern = isString(pattern) ? new RegExp(pattern) : pattern; + const regexpPattern = isString(primary) ? new RegExp(primary) : primary; root.walkDecls((decl) => { const prop = decl.prop; @@ -39,14 +38,14 @@ function rule(pattern) { } report({ - message: messages.expected(pattern), + message: messages.expected(primary), node: decl, result, ruleName, }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; From 9a0d524fc2e548174ac05439e04303bf1f15a91d Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Sun, 15 Aug 2021 22:56:56 +0900 Subject: [PATCH 098/194] Bump @stylelint/remark-preset from 2.0.0 to 3.0.0 (#5480) https://github.com/stylelint/remark-preset/releases/tag/3.0.0 --- package-lock.json | 10156 +++++++++++++++++++++++++------------------- package.json | 2 +- 2 files changed, 5864 insertions(+), 4294 deletions(-) diff --git a/package-lock.json b/package-lock.json index bd18ed9149..9ef7d0f68a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "stylelint", "version": "13.13.1", "license": "MIT", "dependencies": { @@ -55,7 +56,7 @@ }, "devDependencies": { "@stylelint/prettier-config": "^2.0.0", - "@stylelint/remark-preset": "^2.0.0", + "@stylelint/remark-preset": "^3.0.0", "@types/balanced-match": "^1.0.1", "@types/debug": "^4.1.7", "@types/file-entry-cache": "^5.0.2", @@ -1113,15 +1114,18 @@ } }, "node_modules/@stylelint/remark-preset": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@stylelint/remark-preset/-/remark-preset-2.0.0.tgz", - "integrity": "sha512-zoGDNlmsFlibOw2TILica2TA5shNX16dKJWmVH1ajKtF6v6iG/vjl+pUX7vNoTgylKjB9roWcDFFxzdKvMyiQg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@stylelint/remark-preset/-/remark-preset-3.0.0.tgz", + "integrity": "sha512-NmkENZQQ/wmq82ea/Hf+LR3mHQjt3PX1YqwM7SSEDefRG+F35X2SkcvS/AHDJw0YZwKlUnbxaIWz3eW2xOvw3w==", "dev": true, "dependencies": { - "remark-frontmatter": "^3.0.0", - "remark-preset-lint-recommended": "^5.0.0", - "remark-preset-prettier": "^0.4.0", - "remark-validate-links": "^10.0.2" + "remark-frontmatter": "^4.0.0", + "remark-preset-lint-recommended": "^6.0.0", + "remark-preset-prettier": "^1.0.0", + "remark-validate-links": "^11.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/@szmarczak/http-timer": { @@ -1268,6 +1272,15 @@ "@types/node": "*" } }, + "node_modules/@types/hast": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.2.tgz", + "integrity": "sha512-Op5W7jYgZI7AWKY5wQ0/QNMzQM7dGQPyW1rXKNiymVCy5iTfdPuGu4HhYNOM2sIv8gUfIuIdcYlXmAepwaowow==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/http-cache-semantics": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", @@ -1388,6 +1401,12 @@ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, + "node_modules/@types/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-ARATsLdrGPUnaBvxLhUlnltcMgn7pQG312S8ccdYlnyijabrX9RN/KN/iGj9Am96CoW8e/K9628BA7Bv4XHdrA==", + "dev": true + }, "node_modules/@types/postcss-less": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/postcss-less/-/postcss-less-4.0.1.tgz", @@ -2179,6 +2198,16 @@ "url": "https://opencollective.com/browserslist" } }, + "node_modules/ccount": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.0.tgz", + "integrity": "sha512-VOR0NWFYX65n9gELQdcpqsie5L5ihBXuZGAgaPEp/U7IOSjnPMEH6geE+2f6lcekaNEfWzAHS45mPvSo5bqsUA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -2259,6 +2288,16 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/character-entities-html4": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.0.0.tgz", + "integrity": "sha512-dwT2xh5ZhUAjyP96k57ilMKoTQyASaw9IAMR9U5c1lCu2RUni6O6jxfpUEdO2RcPT6TJFvr8pqsbami4Jk+2oA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/character-entities-legacy": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-2.0.0.tgz", @@ -2466,16 +2505,6 @@ "node": ">=0.10.0" } }, - "node_modules/collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", @@ -2512,6 +2541,16 @@ "node": ">= 0.8" } }, + "node_modules/comma-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz", + "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -3690,12 +3729,16 @@ } }, "node_modules/fault": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.0.tgz", + "integrity": "sha512-JsDj9LFcoC+4ChII1QpXPA7YIaY8zmqPYw7h9j5n7St7a0BBKfNnwEBAUQRBx70o2q4rs+BeSNHk8Exm6xE7fQ==", "dev": true, "dependencies": { "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/fb-watchman": { @@ -4137,6 +4180,102 @@ "node": ">=8" } }, + "node_modules/hast-util-from-parse5": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.0.tgz", + "integrity": "sha512-m8yhANIAccpU4K6+121KpPP55sSl9/samzQSQGpb0mTExcNh2WlvjtMwSWFhg6uqD4Rr6Nfa8N6TMypQM51rzQ==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "@types/parse5": "^6.0.0", + "@types/unist": "^2.0.0", + "hastscript": "^7.0.0", + "property-information": "^6.0.0", + "vfile": "^5.0.0", + "vfile-location": "^4.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.1.tgz", + "integrity": "sha512-ag0fiZfRWsPiR1udvnSbaazJLGv8qd8E+/e3rW8rUZhbKG4HNJmFL4QkEceN+22BgE+uozXY30z/s+2dL6Z++g==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.0.tgz", + "integrity": "sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.1.tgz", + "integrity": "sha512-S1mTqXvWVGIxrWw0xOHHvmevwCBFTRGNvXWsjE32IyEAlMhbMkK+ZuP6CAqkQ6Vb7swrehaHpfXHEI6voGDh0w==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-is-element": "^2.0.0", + "hast-util-whitespace": "^2.0.0", + "html-void-elements": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz", + "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.0.2.tgz", + "integrity": "sha512-uA8ooUY4ipaBvKcMuPehTAB/YfFLSSzCwFSwT6ltJbocFUKH/GDHLN+tflq7lSRf9H86uOuxOFkh1KgIy3Gg2g==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^3.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hosted-git-info": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", @@ -4174,6 +4313,16 @@ "node": ">=8" } }, + "node_modules/html-void-elements": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.0.tgz", + "integrity": "sha512-4OYzQQsBt0G9bJ/nM9/DDsjm4+fVdzAaPJJcWk5QwA3GIAPxQEeOR0rsI8HbDHQz5Gta8pVvGnnTNSbZVEVvkQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", @@ -6833,9 +6982,9 @@ "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==" }, "node_modules/mdast-comment-marker": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-1.1.2.tgz", - "integrity": "sha512-vTFXtmbbF3rgnTh3Zl3irso4LtvwUq/jaDvT2D1JqTGAwaipcS7RpTxzi6KjoRqI9n2yuAhzLDAC8xVTF3XYVQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-2.0.0.tgz", + "integrity": "sha512-LQ4sf7vUzxz4mQQlzzBDgjaCJO5A0lkIAT9TyeNMfqaP31ooP1Qw9hprf7/V3NCo5FA1nvo5gbnfLVRY79QlDQ==", "dev": true, "funding": { "type": "opencollective", @@ -6864,36 +7013,13 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-from-markdown/node_modules/mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-from-markdown/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/mdast-util-frontmatter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-0.2.0.tgz", - "integrity": "sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-1.0.0.tgz", + "integrity": "sha512-7itKvp0arEVNpCktOET/eLFAYaZ+0cNjVtFtIPxgQ5tV+3i+D4SDDTjTzPWl44LT59PC+xdx+glNTawBdF98Mw==", "dev": true, "dependencies": { - "micromark-extension-frontmatter": "^0.2.0" + "micromark-extension-frontmatter": "^1.0.0" }, "funding": { "type": "opencollective", @@ -6901,10 +7027,13 @@ } }, "node_modules/mdast-util-heading-style": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-1.0.6.tgz", - "integrity": "sha512-8ZuuegRqS0KESgjAGW8zTx4tJ3VNIiIaGFNEzFpRSAQBavVc7AvOo9I4g3crcZBfYisHs4seYh0rAVimO6HyOw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-2.0.0.tgz", + "integrity": "sha512-q9+WW2hJduW51LgV2r/fcU5wIt2GLFf0yYHxyi0f2aaxnC63ErBSOAJlhP6nbQ6yeG5rTCozbwOi4QNDPKV0zw==", "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -6928,7 +7057,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-to-markdown/node_modules/mdast-util-to-string": { + "node_modules/mdast-util-to-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", @@ -6938,12 +7067,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-to-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", - "dev": true - }, "node_modules/mem": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/mem/-/mem-6.1.1.tgz", @@ -7079,12 +7202,14 @@ } }, "node_modules/micromark-extension-frontmatter": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-0.2.2.tgz", - "integrity": "sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-1.0.0.tgz", + "integrity": "sha512-EXjmRnupoX6yYuUJSQhrQ9ggK0iQtQlpi6xeJzVD5xscyAI+giqco5fdymayZhJMbIFecjnE2yz85S9NzIgQpg==", "dev": true, "dependencies": { - "fault": "^1.0.0" + "fault": "^2.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0" }, "funding": { "type": "opencollective", @@ -8920,6 +9045,16 @@ "node": ">= 6" } }, + "node_modules/property-information": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.0.1.tgz", + "integrity": "sha512-F4WUUAF7fMeF4/JUFHNBWDaKDXi2jbvqBW/y6o5wsf3j19wTZ7S60TmtB5HoBhtgw7NKQRMWuz5vk2PR0CygUg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/propose": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/propose/-/propose-0.0.5.tgz", @@ -9160,6 +9295,53 @@ "node": ">=8" } }, + "node_modules/rehype": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-12.0.0.tgz", + "integrity": "sha512-gZcttmf9R5IYHb8AlI1rlmWqXS1yX0rSB/S5ZGJs8atfYZy2DobvH3Ic/gSzB+HL/+oOHPtBguw1TprfhxXBgQ==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "rehype-parse": "^8.0.0", + "rehype-stringify": "^9.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-8.0.2.tgz", + "integrity": "sha512-Y5AvUbTareuAcCQITTbC9SGagm1IvOOSfG5CTTaOUW0pEeoNHkOq4YmMaEywUmSwwOgel3gOF3O7Mwl1acoBzg==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^7.0.0", + "parse5": "^6.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.1.tgz", + "integrity": "sha512-xfhm8Erp7yL+RRgYmtZMJUqu6OSguwOQMfR2LkqT1dgNDQheClFMaDPVERy4/su7o0eHo0PKFGn4L68kOjVdRQ==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-to-html": "^8.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/remark": { "version": "14.0.1", "resolved": "https://registry.npmjs.org/remark/-/remark-14.0.1.tgz", @@ -9194,13 +9376,15 @@ } }, "node_modules/remark-frontmatter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-3.0.0.tgz", - "integrity": "sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-4.0.0.tgz", + "integrity": "sha512-0J+2czWAS9sz9baJJel4tTUnNhMI7wYgih99Hxhdeq2GpdI1Ctu0iol6zAsWw5xa+jLsZXNiwEnnJAJo3XX3hw==", "dev": true, "dependencies": { - "mdast-util-frontmatter": "^0.2.0", - "micromark-extension-frontmatter": "^0.2.0" + "@types/mdast": "^3.0.0", + "mdast-util-frontmatter": "^1.0.0", + "micromark-extension-frontmatter": "^1.0.0", + "unified": "^10.0.0" }, "funding": { "type": "opencollective", @@ -9208,2136 +9392,2301 @@ } }, "node_modules/remark-lint": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-8.0.0.tgz", - "integrity": "sha512-ESI8qJQ/TIRjABDnqoFsTiZntu+FRifZ5fJ77yX63eIDijl/arvmDvT+tAf75/Nm5BFL4R2JFUtkHRGVjzYUsg==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-9.0.0.tgz", + "integrity": "sha512-ETO4zI48PR1Nz42YiyaYBzyhOiEfppXLnck7HW2pjKqxd36SIyQgM6sxD4ToMQI9KuCgy8mLAl/iVJoDLKxVjw==", "dev": true, "dependencies": { - "remark-message-control": "^6.0.0" + "@types/mdast": "^3.0.0", + "remark-message-control": "^7.0.0", + "unified": "^10.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-final-newline": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-1.0.5.tgz", - "integrity": "sha512-rfLlW8+Fz2dqnaEgU4JwLA55CQF1T4mfSs/GwkkeUCGPenvEYwSkCN2KO2Gr1dy8qPoOdTFE1rSufLjmeTW5HA==", + "node_modules/remark-lint-blank-lines-1-0-2": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-blank-lines-1-0-2/-/remark-lint-blank-lines-1-0-2-3.0.0.tgz", + "integrity": "sha512-YSTKwmqxtr6jNW6boQv4EWtziYizXhx2+xAwzXtIZK4La+Mnz+3+DSJjPRPkW5nlYu7lCKI4L6BFv5BxbPPKxQ==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.4", + "unist-util-generated": "^1.1.4", + "unist-util-position": "^3.0.3", + "unist-util-visit": "^2.0.0" + } + }, + "node_modules/remark-lint-blank-lines-1-0-2/node_modules/unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", "dev": true, "dependencies": { - "unified-lint-rule": "^1.0.0" + "wrapped": "^1.0.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-hard-break-spaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-2.0.1.tgz", - "integrity": "sha512-Qfn/BMQFamHhtbfLrL8Co/dbYJFLRL4PGVXZ5wumkUO5f9FkZC2RsV+MD9lisvGTkJK0ZEJrVVeaPbUIFM0OAw==", + "node_modules/remark-lint-blank-lines-1-0-2/node_modules/unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", "dev": true, - "dependencies": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-list-item-bullet-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-3.0.0.tgz", - "integrity": "sha512-X2rleWP8XReC4LXKF7Qi5vYiPJkA4Grx5zxsjHofFrVRz6j0PYOCuz7vsO+ZzMunFMfom6FODnscSWz4zouDVw==", + "node_modules/remark-lint-blank-lines-1-0-2/node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", "dev": true, - "dependencies": { - "pluralize": "^8.0.0", - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-visit": "^2.0.0" - }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-list-item-indent": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-2.0.1.tgz", - "integrity": "sha512-4IKbA9GA14Q9PzKSQI6KEHU/UGO36CSQEjaDIhmb9UOhyhuzz4vWhnSIsxyI73n9nl9GGRAMNUSGzr4pQUFwTA==", + "node_modules/remark-lint-blank-lines-1-0-2/node_modules/unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", "dev": true, - "dependencies": { - "pluralize": "^8.0.0", - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-auto-link-without-protocol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-2.0.1.tgz", - "integrity": "sha512-TFcXxzucsfBb/5uMqGF1rQA+WJJqm1ZlYQXyvJEXigEZ8EAxsxZGPb/gOQARHl/y0vymAuYxMTaChavPKaBqpQ==", + "node_modules/remark-lint-blank-lines-1-0-2/node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", "dev": true, "dependencies": { - "mdast-util-to-string": "^1.0.2", - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-blockquote-without-marker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-4.0.0.tgz", - "integrity": "sha512-Y59fMqdygRVFLk1gpx2Qhhaw5IKOR9T38Wf7pjR07bEFBGUNfcoNVIFMd1TCJfCPQxUyJzzSqfZz/KT7KdUuiQ==", + "node_modules/remark-lint-blank-lines-1-0-2/node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", "dev": true, "dependencies": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0", - "vfile-location": "^3.0.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-duplicate-definitions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-2.0.1.tgz", - "integrity": "sha512-XL22benJZB01m+aOse91nsu1IMFqeWJWme9QvoJuxIcBROO1BG1VoqLOkwNcawE/M/0CkvTo5rfx0eMlcnXOIw==", + "node_modules/remark-lint-blockquote-indentation": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-3.0.0.tgz", + "integrity": "sha512-qWWyAJWHwnVFsfKEyl51os1rr4ex9KX398g8326esJ2/RFsCYJbJaXmVk/S+uf7B7HfOWFuJo+tu/7jlZZ54+Q==", "dev": true, "dependencies": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-stringify-position": "^2.0.0", - "unist-util-visit": "^2.0.0" + "@types/mdast": "^3.0.0", + "pluralize": "^8.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-content-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-3.0.0.tgz", - "integrity": "sha512-yULDoVSIqKylLDfW6mVUbrHlyEWUSFtVFiKc+/BA412xDIhm8HZLUnP+FsuBC0OzbIZ+bO9Txy52WtO3LGnK1A==", + "node_modules/remark-lint-books-links": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/remark-lint-books-links/-/remark-lint-books-links-2.1.0.tgz", + "integrity": "sha1-kdFQ0DvZlca2/2dQI0Z0JWTrWrQ=", "dev": true, "dependencies": { - "mdast-util-heading-style": "^1.0.2", - "pluralize": "^8.0.0", + "mdast-util-to-string": "^1.0.2", "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - }, + "unist-util-visit": "^1.0.0" + } + }, + "node_modules/remark-lint-books-links/node_modules/mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-inline-padding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-3.0.0.tgz", - "integrity": "sha512-3s9uW3Yux9RFC0xV81MQX3bsYs+UY7nPnRuMxeIxgcVwxQ4E/mTJd9QjXUwBhU9kdPtJ5AalngdmOW2Tgar8Cg==", + "node_modules/remark-lint-books-links/node_modules/unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", "dev": true, "dependencies": { - "mdast-util-to-string": "^1.0.2", - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-visit": "^2.0.0" + "wrapped": "^1.0.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-literal-urls": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-2.0.1.tgz", - "integrity": "sha512-IDdKtWOMuKVQIlb1CnsgBoyoTcXU3LppelDFAIZePbRPySVHklTtuK57kacgU5grc7gPM04bZV96eliGrRU7Iw==", + "node_modules/remark-lint-books-links/node_modules/unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-books-links/node_modules/unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "node_modules/remark-lint-books-links/node_modules/unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", "dev": true, "dependencies": { - "mdast-util-to-string": "^1.0.2", - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" + "unist-util-visit-parents": "^2.0.0" + } + }, + "node_modules/remark-lint-books-links/node_modules/unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dev": true, + "dependencies": { + "unist-util-is": "^3.0.0" + } + }, + "node_modules/remark-lint-checkbox-character-style": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-4.0.0.tgz", + "integrity": "sha512-NHpVZOcTJeLOI1gGOvVDz8i3sXVY3s9K+OADupEA89Syfs4YAbnrij8OMJ6ozbHTn4av/HyVfsF4IK8X2pBUeQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-image": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-2.0.1.tgz", - "integrity": "sha512-2jcZBdnN6ecP7u87gkOVFrvICLXIU5OsdWbo160FvS/2v3qqqwF2e/n/e7D9Jd+KTq1mR1gEVVuTqkWWuh3cig==", + "node_modules/remark-lint-code-block-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-3.0.0.tgz", + "integrity": "sha512-xZMfFeaMOb5OIM4SrNz3QTRV3u5g3/+e6Oq40A3Apwd+a9Kx49lZbGxl8vfqaczP89PTNanm2e4OqqRsCen4Mg==", "dev": true, "dependencies": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-visit": "^2.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-link": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-2.0.1.tgz", - "integrity": "sha512-pTZbslG412rrwwGQkIboA8wpBvcjmGFmvugIA+UQR+GfFysKtJ5OZMPGJ98/9CYWjw9Z5m0/EktplZ5TjFjqwA==", + "node_modules/remark-lint-definition-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-definition-case/-/remark-lint-definition-case-3.0.0.tgz", + "integrity": "sha512-BiZi2Va/vEWQwVJOKnlRocvuiwoj2GXocV5iQUt5feiQFeGd/gdV9PSlOe751ulB4AeZ5V81n/7PFoWmPdYAiQ==", "dev": true, "dependencies": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-visit": "^2.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-undefined-references": { + "node_modules/remark-lint-definition-spacing": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-3.0.0.tgz", - "integrity": "sha512-0hzaJS9GuzSQVOeeNdJr/s66LRQOzp618xuOQPYWHcJdd+SCaRTyWbjMrTM/cCI5L1sYjgurp410NkIBQ32Vqg==", + "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-3.0.0.tgz", + "integrity": "sha512-3LxU7lwCpfPstldcGly2ULb8knH4IOqZHoABT2KyKFw3rRFUCAEUBSl0k5eetnXXNc/X4NlHmnyjIyzhyl4PhA==", "dev": true, "dependencies": { - "collapse-white-space": "^1.0.4", - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.1.0", - "unist-util-visit": "^2.0.0", - "vfile-location": "^3.1.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-unused-definitions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-2.0.1.tgz", - "integrity": "sha512-+BMc0BOjc364SvKYLkspmxDch8OaKPbnUGgQBvK0Bmlwy42baR4C9zhwAWBxm0SBy5Z4AyM4G4jKpLXPH40Oxg==", + "node_modules/remark-lint-emphasis-marker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-emphasis-marker/-/remark-lint-emphasis-marker-3.0.0.tgz", + "integrity": "sha512-8TXW8DkznPuIKergBecW9l00QQ9P1FfUFNV839NbqDEiufi7ITiLtEJYmB6KREH+yrHnf5L1J8tASVDtjKy+3w==", "dev": true, "dependencies": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-visit": "^2.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-2.0.1.tgz", - "integrity": "sha512-Cnpw1Dn9CHn+wBjlyf4qhPciiJroFOEGmyfX008sQ8uGoPZsoBVIJx76usnHklojSONbpjEDcJCjnOvfAcWW1A==", + "node_modules/remark-lint-fenced-code-marker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-3.0.0.tgz", + "integrity": "sha512-x3wr1+22Atr72Z7+dUS8cqwuz8m8d4UgCAfBTNO+E6pRLVeCnVMvEtuJbDI5UqBlqvkLGlNofV4lJZQvrZUxqQ==", "dev": true, "dependencies": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-message-control": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-6.0.0.tgz", - "integrity": "sha512-k9bt7BYc3G7YBdmeAhvd3VavrPa/XlKWR3CyHjr4sLO9xJyly8WHHT3Sp+8HPR8lEUv+/sZaffL7IjMLV0f6BA==", + "node_modules/remark-lint-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-2.0.0.tgz", + "integrity": "sha512-3u1IbgVfUN5Qgid8iqc1qlZhzscs4YPu8mwyahvLWVKMkBtoRWjDIVL6+CXcPPoUB2k3p+zuZ5oaE4yfO5Pb4w==", "dev": true, "dependencies": { - "mdast-comment-marker": "^1.0.0", - "unified-message-control": "^3.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-parse": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.0.tgz", - "integrity": "sha512-07ei47p2Xl7Bqbn9H2VYQYirnAFJPwdMuypdozWsSbnmrkgA2e2sZLZdnDNrrsxR4onmIzH/J6KXqKxCuqHtPQ==", + "node_modules/remark-lint-hard-break-spaces": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-3.0.0.tgz", + "integrity": "sha512-TNTI32Va6hE33pTYC6iqn4NvyZHqCULsOKKLnAzBocFFFIYuaNUdfKyVc9wknAAutbQLqApr8tgs1mLHtHm9Fw==", "dev": true, "dependencies": { "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-preset-lint-recommended": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-5.0.0.tgz", - "integrity": "sha512-uu+Ab8JCwMMaKvvB0LOWTWtM3uAvJbKQM/oyWCEJqj7lUVNTKZS575Ro5rKM3Dx7kQjjR1iw0e99bpAYTc5xNA==", - "dev": true, - "dependencies": { - "remark-lint": "^8.0.0", - "remark-lint-final-newline": "^1.0.0", - "remark-lint-hard-break-spaces": "^2.0.0", - "remark-lint-list-item-bullet-indent": "^3.0.0", - "remark-lint-list-item-indent": "^2.0.0", - "remark-lint-no-auto-link-without-protocol": "^2.0.0", - "remark-lint-no-blockquote-without-marker": "^4.0.0", - "remark-lint-no-duplicate-definitions": "^2.0.0", - "remark-lint-no-heading-content-indent": "^3.0.0", - "remark-lint-no-inline-padding": "^3.0.0", - "remark-lint-no-literal-urls": "^2.0.0", - "remark-lint-no-shortcut-reference-image": "^2.0.0", - "remark-lint-no-shortcut-reference-link": "^2.0.0", - "remark-lint-no-undefined-references": "^3.0.0", - "remark-lint-no-unused-definitions": "^2.0.0", - "remark-lint-ordered-list-marker-style": "^2.0.0" + "node_modules/remark-lint-heading-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-3.0.0.tgz", + "integrity": "sha512-pPiXG24yXER7xXZr+J11iuMd1DXa71m6Cx7jqUO5z1Ptc7WkolcW6lNRFG76BCOJp8Jp6vH5eNITuQxYa0AnJw==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-heading-style": "^2.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-preset-prettier": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/remark-preset-prettier/-/remark-preset-prettier-0.4.0.tgz", - "integrity": "sha512-Y0lwBg/xRyE8/yF4IYJVJxrUHSVE8WThbsnKS5/fE4lSAoX/s0yuiEl7gv/+OWA1G7r5o0xKLZPW3rJjhvfvpw==", + "node_modules/remark-lint-heading-whitespace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-heading-whitespace/-/remark-lint-heading-whitespace-1.0.0.tgz", + "integrity": "sha512-DykoBIXNbkihg64D+mztSOv3l82RTH4tIZW/HUB4QM4NpIEB+pVIPQpCYD0K4pTgvKiwoqsj4NY8qJ1EhNHAmQ==", "dev": true, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "mdast-util-to-string": "^1.0.4", + "unified-lint-rule": "^1.0.2", + "unist-util-visit": "^1.3.0" } }, - "node_modules/remark-stringify": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.0.tgz", - "integrity": "sha512-3LAQqJ/qiUxkWc7fUcVuB7RtIT38rvmxfmJG8z1TiE/D8zi3JGQ2tTcTJu9Tptdpb7gFwU0whRi5q1FbFOb9yA==", + "node_modules/remark-lint-heading-whitespace/node_modules/mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.0.0", - "unified": "^10.0.0" - }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-validate-links": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/remark-validate-links/-/remark-validate-links-10.0.2.tgz", - "integrity": "sha512-rcg/FFgowCbR7fC5aNhpJu8ltXuSGZZunwIwReXtdZ704XHsHR3Xsy4N8uso43ih5cY9maIydfn1FNLHW0016w==", + "node_modules/remark-lint-heading-whitespace/node_modules/unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", "dev": true, "dependencies": { - "github-slugger": "^1.0.0", - "hosted-git-info": "^3.0.0", - "mdast-util-to-string": "^1.0.0", - "propose": "0.0.5", - "to-vfile": "^6.0.0", - "trough": "^1.0.0", - "unist-util-visit": "^2.0.0", - "xtend": "^4.0.0" + "wrapped": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "node_modules/remark-lint-heading-whitespace/node_modules/unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "node_modules/remark-lint-heading-whitespace/node_modules/unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", "dev": true, - "engines": { - "node": ">=0.10" + "dependencies": { + "unist-util-visit-parents": "^2.0.0" } }, - "node_modules/replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "node_modules/remark-lint-heading-whitespace/node_modules/unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", "dev": true, - "engines": { - "node": ">= 0.10" + "dependencies": { + "unist-util-is": "^3.0.0" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "node_modules/remark-lint-link-title-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-link-title-style/-/remark-lint-link-title-style-3.0.0.tgz", + "integrity": "sha512-XRp/JWOkDPXb1AvP/BggJz/kj82Eqknxr44QCM8XNXzqGuR/d9/TNaSFfilTQMG0Ar1sFRXrv7Z+wW7uB4upQQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0", + "vfile-location": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" + "node_modules/remark-lint-list-item-bullet-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-4.0.0.tgz", + "integrity": "sha512-b/U3wAJPE00xGQGYBvjPPsdXsBPJxUvITYgAZee7aA2sGEiflMGmg90anS2sJZEAoD4XtNzp96bPaY6QLN89dQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "pluralize": "^8.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "node_modules/remark-lint-list-item-content-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-content-indent/-/remark-lint-list-item-content-indent-3.0.0.tgz", + "integrity": "sha512-1DfuLygg9DsomnYaFge7lht/4kvtDoVb+Q4kOnNL5ZVdqEk7dvJw2uVsvHnkcegzkTL/ynwGiwyay05O5dKPzA==", + "dev": true, "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "@types/mdast": "^3.0.0", + "pluralize": "^8.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/resolve-alpn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz", - "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==", - "dev": true - }, - "node_modules/resolve-cwd": { + "node_modules/remark-lint-list-item-indent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-3.0.0.tgz", + "integrity": "sha512-z7doG/aJCy8ivmfbE/cSm9HOpIeUaV5zZHMqSsZ6XZ+wXIj4wtMFVhI7fsAVs5pAB1gzSvZQuwJOfSs2//Fw2g==", "dev": true, "dependencies": { - "resolve-from": "^5.0.0" + "@types/mdast": "^3.0.0", + "pluralize": "^8.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" + "node_modules/remark-lint-list-item-spacing": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-spacing/-/remark-lint-list-item-spacing-4.0.0.tgz", + "integrity": "sha512-wiY/fWL7ATxqR44FtPY5D0JJQa/BMs4IDXrccfjIaU2C2SqFv+z5s+G9gb4bBbJt10gwoP88o7ZYkUqtkl/+pw==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "node_modules/remark-lint-maximum-line-length": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-3.0.0.tgz", + "integrity": "sha512-0x5TsUDlc4IDPUObNjVtcQxzI1JokUwbVpr22akWypnZaX9QMIL+Cp1OXrKRknZVU3rIndt4QCNnjMEYKezn1g==", "dev": true, "dependencies": { - "lowercase-keys": "^2.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "node_modules/remark-lint-no-auto-link-without-protocol": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-3.0.0.tgz", + "integrity": "sha512-qeJhWZcO0wnavTdpLU6M1q5RBfo4nZnYmzASoSCmIj/ZxIinluXLmLcMHC2Ol46egWdvwDNpr3V0dJP79fiJMQ==", "dev": true, "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node_modules/remark-lint-no-blockquote-without-marker": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-5.0.0.tgz", + "integrity": "sha512-6m1KZE8X2OhNV9wpEPVUfFxdzgVD523unRkstlRedKC3ONLlqP/CIliAOITRmIGuUxXVjyD7mDC892bFJnJTfw==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0", + "vfile-location": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/remark-lint-no-consecutive-blank-lines": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-4.0.0.tgz", + "integrity": "sha512-gP1b3lM+oemvA0WOC5HbvkjESG2BiZHL8ZDSX+wbg/2+7zu14rOmAAMiUOlk/CxbusttwJxsz8a/Wn1dEK/jPg==", + "dev": true, "dependencies": { - "glob": "^7.1.3" + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "pluralize": "^8.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, - "bin": { - "rimraf": "bin.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "node_modules/remark-lint-no-duplicate-definitions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-3.0.0.tgz", + "integrity": "sha512-6VOGPegh2ZQ0d9yronmhNXhg2wLYA5litT7bC1ljg2LQwMTIjYOgJbJsQJSKWD+FiHuqVhdWvXHzyTbFCch8Aw==", "dev": true, - "engines": { - "node": ">=0.12.0" + "dependencies": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-stringify-position": "^3.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/run-parallel": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", - "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==" - }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "node_modules/remark-lint-no-heading-content-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-4.0.0.tgz", + "integrity": "sha512-2SljHUYTN83EN5DEZrl7WH4ibmUxai6gONhZaQrQOJyGUO2ReZj5Zdn4xi79NHpORSzCzjn2tSXPB6yL3AhJag==", "dev": true, "dependencies": { - "tslib": "^1.9.0" + "@types/mdast": "^3.0.0", + "mdast-util-heading-style": "^2.0.0", + "pluralize": "^8.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, - "engines": { - "npm": ">=2.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "node_modules/remark-lint-no-inline-padding": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.0.0.tgz", + "integrity": "sha512-dugEtHudM/UVQYzTbQoWy4aeG9Micd9g6O/uzN59sIMM8Xb+Srbv/p5/2JNtJWej9PmzINldE0AHjpuB8NiNLA==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "node_modules/remark-lint-no-literal-urls": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-3.0.0.tgz", + "integrity": "sha512-P+9VxemAeSGWGMmFGKcQMIsPgVDaoXnQLl0Bx/TuBms0Favb7XI3ecii/HjjDeks3zlrxlVhzvEkHBk1uH1tdA==", "dev": true, "dependencies": { - "xmlchars": "^2.2.0" + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/scoped-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/scoped-regex/-/scoped-regex-2.1.0.tgz", - "integrity": "sha512-g3WxHrqSWCZHGHlSrF51VXFdjImhwvH8ZO/pryFH56Qi0cDsZfylQa/t0jCzVQFNbNvM00HfHjkDPEuarKDSWQ==", + "node_modules/remark-lint-no-long-code": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/remark-lint-no-long-code/-/remark-lint-no-long-code-0.1.3.tgz", + "integrity": "sha512-GJrOC6tYaRwkfJcfIuErQHcnn/TYZev0VNIMu1+qNBpBmesIeHDEGWhLApXuSG+FSJl+0/Pp0UMUTEYVG/xy8Q==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "unified-lint-rule": "^1.0.3", + "unist-util-visit": "^1.4.0" } }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" + "node_modules/remark-lint-no-long-code/node_modules/unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "dev": true, + "dependencies": { + "wrapped": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "node_modules/remark-lint-no-long-code/node_modules/unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", "dev": true }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "node_modules/remark-lint-no-long-code/node_modules/unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", "dev": true, "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" + "unist-util-visit-parents": "^2.0.0" } }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/remark-lint-no-long-code/node_modules/unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "unist-util-is": "^3.0.0" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/remark-lint-no-shortcut-reference-image": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-3.0.0.tgz", + "integrity": "sha512-PyB5xkCd8moJf1MrmIXlBTSXZ8pkjXtdrmHzYba7La8S/6TKN2+LFrfN9daLG9pVsD0DSBAlvbajM/MBFh2DfQ==", "dev": true, "dependencies": { - "shebang-regex": "^3.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/shebang-regex": { + "node_modules/remark-lint-no-shortcut-reference-link": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-3.0.0.tgz", + "integrity": "sha512-SbPrP6ZfRA2IJ++L7xAivXl7PJdOMzBUlhVwlt5PsWJKWHX07TIB02GGAiMnSOLN0FnUCvgF2c5we6eU1K3plA==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", - "dev": true - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" + "node_modules/remark-lint-no-table-indentation": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-4.0.0.tgz", + "integrity": "sha512-S1u4DHBS75xAcM/u1zsYize/0uB2u+xAoHbstN3JmFWsTRj5LUSppwkSrWsPk/3y9/jHJAQ4XSihwH7C95EObQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0", + "vfile-location": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/slice-ansi": { + "node_modules/remark-lint-no-undefined-references": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.0.0.tgz", + "integrity": "sha512-HI68vLoTTCXDADAp8LQ6RqCuf9QHX7bSaaqKI1V82EyvizxgnFtvN46XIi1uiDTN+Jv/KzAAGaFrofV8OJknBA==", + "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "@types/mdast": "^3.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0", + "vfile-location": "^4.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/remark-lint-no-unused-definitions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-3.0.0.tgz", + "integrity": "sha512-1LqEZx0IJx59ezXA9e0qq6h5W3n9I6oiBm3Kl+HvmXTFl1OME6f8SVFwtDbt9EaGmf+3NL+T24cWIhZWjmZ0bA==", + "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/remark-lint-ordered-list-marker-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-3.0.0.tgz", + "integrity": "sha512-HDg5Fyg3tENtmI5SpEL34TvEjIiVX4GhuOjU8aOGF7T4SMG69kLyx+IWMKhg39pBw+3h4lG6FDC8IfqYXONNLg==", + "dev": true, "dependencies": { - "color-name": "~1.1.4" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, - "engines": { - "node": ">=7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "node_modules/remark-lint-ordered-list-marker-value": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-3.0.0.tgz", + "integrity": "sha512-RyBGIH32+VEiPedAziFkYUvygVwux+Zo1Jqv+x9knRulICy3/NR0Bvf9cufWUBnzcmQU7fHNtHOp/HaDmzTahQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/sliced": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=", - "dev": true - }, - "node_modules/sort-object-keys": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-1.1.3.tgz", - "integrity": "sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==", - "dev": true - }, - "node_modules/sort-package-json": { - "version": "1.46.1", - "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-1.46.1.tgz", - "integrity": "sha512-jUkuCxcXCZD31eIJ/Zza62LRP0lzd4LNkY0z0q1kDSvfBfCmPotrHPXVrz6WTppbGeM2JzNyyARQLUEnK4dUyg==", + "node_modules/remark-lint-rule-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-3.0.0.tgz", + "integrity": "sha512-KHSPHW/7YCl9gHFsqqWOqIkJYmPuxTu/5G3Ks3lG8seBDf1bg+lPPUg5TigsKa/E7juVgfTR7AhK6P+lYAp4EA==", "dev": true, "dependencies": { - "detect-indent": "^6.0.0", - "detect-newline": "3.1.0", - "git-hooks-list": "1.0.3", - "globby": "10.0.0", - "is-plain-obj": "2.1.0", - "sort-object-keys": "^1.1.3" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, - "bin": { - "sort-package-json": "cli.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/sort-package-json/node_modules/globby": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.0.tgz", - "integrity": "sha512-3LifW9M4joGZasyYPz2A1U74zbC/45fvpXUvO/9KbSa+VV0aGZarWkfdgKyR9sExNP0t0x0ss/UMJpNpcaTspw==", + "node_modules/remark-lint-spaces-around-number": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/remark-lint-spaces-around-number/-/remark-lint-spaces-around-number-0.1.2.tgz", + "integrity": "sha512-jwCRR9sAEO0EsKV2LdCVZurnqhTv7u9V4GNRU63KjC2+SonnwkKr+wXlL5Nggxip4lkUtFClTkrsqO4HNdM1Lg==", "dev": true, "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", - "engines": { - "node": ">=0.10.0" + "unified-lint-rule": "^1.0.3", + "unist-util-to-list-of-char": "^0.1.3" } }, - "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "node_modules/remark-lint-spaces-around-number/node_modules/unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", "dev": true, "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "wrapped": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "node_modules/remark-lint-spaces-around-word": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/remark-lint-spaces-around-word/-/remark-lint-spaces-around-word-0.1.2.tgz", + "integrity": "sha512-gsjPaNbyzI/RDH7tfnbLpfL4c6inYqExWEdy/KzuoWqwt7K/sNPKR5EOu6YplyC06DtidAtWyhL36dFztV1ZRQ==", + "dev": true, "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "unified-lint-rule": "^1.0.3", + "unist-util-to-list-of-char": "^0.1.3" } }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "node_modules/remark-lint-spaces-around-word/node_modules/unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "dev": true, "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", - "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==" - }, - "node_modules/specificity": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", - "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", - "bin": { - "specificity": "bin/specificity" + "wrapped": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "node_modules/remark-lint-strong-marker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-3.0.0.tgz", + "integrity": "sha512-nNyW3tKl0rEf2j784HzVWChAomCxzld+v2A5R5r5Zw5VogUNikZA7ZRwy51HsmhqiTWHArVGeyuvCPrpkTDZ0A==", "dev": true, "dependencies": { - "through": "2" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, - "engines": { - "node": "*" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "node_modules/remark-lint-table-cell-padding": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-4.0.0.tgz", + "integrity": "sha512-jYBhfu/x0bEXt+wilHnm76q6wHnPVW2v2EuTdvAsxqkVtlvWSl9BbO4bb/L7jKqwlfiTK8E/luHKZuPiNWlucw==", "dev": true, "dependencies": { - "escape-string-regexp": "^2.0.0" + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "node_modules/remark-lint-table-pipe-alignment": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-table-pipe-alignment/-/remark-lint-table-pipe-alignment-3.0.0.tgz", + "integrity": "sha512-6A/wVsuq/qtfeJqqEg+9jEESzcP4m+JjHeaSciN4bzSUsNbbJSe+XtQsMkxUmdaYIVe/LaQ+O8NXg171SnpXgA==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/remark-lint-table-pipes": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-4.0.0.tgz", + "integrity": "sha512-wOIAwkPAEDArKYMEpDylycGOCCt9hUxfgirgYCaHujCvyg484GWO+n+Moabgd19O9ZjuYr2P7akuOocsTh2z3g==", "dev": true, "dependencies": { - "safe-buffer": "~5.2.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "node_modules/remark-lint-unordered-list-marker-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-3.0.0.tgz", + "integrity": "sha512-iwliMh7GzTdFAWKnVSabpdfcI6qoDE5PPX8hacDIZNbTe4xuUVFbopGCzsTlLiFQkTn6m3ePwOQn+lIbFofKDQ==", "dev": true, - "engines": { - "node": ">=0.6.19" + "dependencies": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/string-length": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", - "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", + "node_modules/remark-message-control": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-7.0.0.tgz", + "integrity": "sha512-KZySoC97TrMPYfIZ9vJ7wxvQwniy68K6WCY3vmSedDN5YuGfdVOpMj6sjaZQcqbWZV9n7BhrT70E3xaUTtk4hA==", "dev": true, "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" + "@types/mdast": "^3.0.0", + "mdast-comment-marker": "^2.0.0", + "rehype": "^12.0.0", + "unified": "^10.0.0", + "unified-message-control": "^4.0.0", + "vfile": "^5.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "node_modules/remark-parse": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.0.tgz", + "integrity": "sha512-07ei47p2Xl7Bqbn9H2VYQYirnAFJPwdMuypdozWsSbnmrkgA2e2sZLZdnDNrrsxR4onmIzH/J6KXqKxCuqHtPQ==", + "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/string.prototype.padend": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz", - "integrity": "sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA==", + "node_modules/remark-preset-lint-recommended": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-6.0.0.tgz", + "integrity": "sha512-ZVugDvBLFQ2JZ/tRIb0q/Oo4Qwp8s8AD8M/8GU7VgQYQ39GDVzo8lUTg2ugWy3YuBCX7wmnP0UDOSwIJt7vn0A==", "dev": true, "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "@types/mdast": "^3.0.0", + "remark-lint": "^9.0.0", + "remark-lint-final-newline": "^2.0.0", + "remark-lint-hard-break-spaces": "^3.0.0", + "remark-lint-list-item-bullet-indent": "^4.0.0", + "remark-lint-list-item-indent": "^3.0.0", + "remark-lint-no-auto-link-without-protocol": "^3.0.0", + "remark-lint-no-blockquote-without-marker": "^5.0.0", + "remark-lint-no-duplicate-definitions": "^3.0.0", + "remark-lint-no-heading-content-indent": "^4.0.0", + "remark-lint-no-inline-padding": "^4.0.0", + "remark-lint-no-literal-urls": "^3.0.0", + "remark-lint-no-shortcut-reference-image": "^3.0.0", + "remark-lint-no-shortcut-reference-link": "^3.0.0", + "remark-lint-no-undefined-references": "^4.0.0", + "remark-lint-no-unused-definitions": "^3.0.0", + "remark-lint-ordered-list-marker-style": "^3.0.0", + "unified": "^10.0.0" }, - "engines": { - "node": ">= 0.4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz", - "integrity": "sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "node_modules/remark-preset-prettier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/remark-preset-prettier/-/remark-preset-prettier-1.0.0.tgz", + "integrity": "sha512-e0VvU1J7WJSl5WsejEPKgJzTE84A3NNm/S3oA75fkw9p/k/IPu1dr0vEO4FdeoaqsLlG0xZ544E+kQgmiSlG0g==", + "dev": true, + "dependencies": { + "remark-lint-blank-lines-1-0-2": "*", + "remark-lint-blockquote-indentation": "*", + "remark-lint-books-links": "*", + "remark-lint-checkbox-character-style": "*", + "remark-lint-code-block-style": "*", + "remark-lint-definition-case": "*", + "remark-lint-definition-spacing": "*", + "remark-lint-emphasis-marker": "*", + "remark-lint-fenced-code-marker": "*", + "remark-lint-final-newline": "*", + "remark-lint-hard-break-spaces": "*", + "remark-lint-heading-style": "*", + "remark-lint-heading-whitespace": "*", + "remark-lint-link-title-style": "*", + "remark-lint-list-item-bullet-indent": "*", + "remark-lint-list-item-content-indent": "*", + "remark-lint-list-item-indent": "*", + "remark-lint-list-item-spacing": "*", + "remark-lint-maximum-line-length": "*", + "remark-lint-no-blockquote-without-marker": "*", + "remark-lint-no-consecutive-blank-lines": "*", + "remark-lint-no-heading-content-indent": "*", + "remark-lint-no-inline-padding": "*", + "remark-lint-no-long-code": "*", + "remark-lint-no-table-indentation": "*", + "remark-lint-ordered-list-marker-style": "*", + "remark-lint-ordered-list-marker-value": "*", + "remark-lint-rule-style": "*", + "remark-lint-spaces-around-number": "*", + "remark-lint-spaces-around-word": "*", + "remark-lint-strong-marker": "*", + "remark-lint-table-cell-padding": "*", + "remark-lint-table-pipe-alignment": "*", + "remark-lint-table-pipes": "*", + "remark-lint-unordered-list-marker-style": "*" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "prettier": ">=1.0.0" } }, - "node_modules/string.prototype.trimend/node_modules/es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "node_modules/remark-stringify": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.0.tgz", + "integrity": "sha512-3LAQqJ/qiUxkWc7fUcVuB7RtIT38rvmxfmJG8z1TiE/D8zi3JGQ2tTcTJu9Tptdpb7gFwU0whRi5q1FbFOb9yA==", "dev": true, "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.0.0", + "unified": "^10.0.0" }, - "engines": { - "node": ">= 0.4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz", - "integrity": "sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==", + "node_modules/remark-validate-links": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-validate-links/-/remark-validate-links-11.0.0.tgz", + "integrity": "sha512-y0S1FCj7Pkj0VRakR3OMu8o+GFcjaJJpOgeJxE9nP3CgKHpaVoB5n4BhfP/mbVZpsjaJuug+P+BzBdFF1yKmbw==", "dev": true, "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "@types/mdast": "^3.0.0", + "github-slugger": "^1.0.0", + "hosted-git-info": "^4.0.0", + "mdast-util-to-string": "^3.0.0", + "propose": "0.0.5", + "to-vfile": "^7.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "unified-engine": "^9.0.0", + "unist-util-visit": "^4.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/string.prototype.trimstart/node_modules/es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "node_modules/remark-validate-links/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==", "dev": true, "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" } }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true, - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, "engines": { - "node": ">=4" + "node": ">=0.10" } }, - "node_modules/stringify-object/node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dependencies": { - "ansi-regex": "^5.0.0" - }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } + "node_modules/resolve-alpn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz", + "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==", + "dev": true }, - "node_modules/strip-indent": { + "node_modules/resolve-cwd": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, "dependencies": { - "min-indent": "^1.0.0" + "resolve-from": "^5.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/style-search": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", - "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=" - }, - "node_modules/sugarss": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-4.0.1.tgz", - "integrity": "sha512-WCjS5NfuVJjkQzK10s8WOBY+hhDxxNt/N6ZaGwxFZ+wN3/lKKFSaaKUNecULcTTvE4urLcKaZFQD8vO0mOZujw==", + "node_modules/responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", "dev": true, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.3.3" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "lowercase-keys": "^2.0.0" } }, - "node_modules/supports-hyperlinks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", - "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { "node": ">=8" } }, - "node_modules/supports-hyperlinks/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, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "engines": { - "node": ">=8" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/supports-hyperlinks/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, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dependencies": { - "has-flag": "^4.0.0" + "glob": "^7.1.3" }, - "engines": { - "node": ">=8" + "bin": { + "rimraf": "bin.js" } }, - "node_modules/svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=" - }, - "node_modules/symbol-observable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-3.0.0.tgz", - "integrity": "sha512-6tDOXSHiVjuCaasQSWTmHUWn4PuG7qa3+1WT031yTc/swT7+rLiw3GOrFxaH1E3lLP09dH3bVuVDf2gK5rxG3Q==", + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, "engines": { - "node": ">=0.10" + "node": ">=0.12.0" } }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true + "node_modules/run-parallel": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", + "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==" }, - "node_modules/table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" + "tslib": "^1.9.0" }, "engines": { - "node": ">=10.0.0" + "npm": ">=2.0.0" } }, - "node_modules/table/node_modules/ajv": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.0.1.tgz", - "integrity": "sha512-46ZA4TalFcLLqX1dEU3dhdY38wAtDydJ4e7QQTVekLUTzXkb1LfqU6VOBXC/a9wiv4T094WURqJH6ZitF92Kqw==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" + "xmlchars": "^2.2.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "node_modules/scoped-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/scoped-regex/-/scoped-regex-2.1.0.tgz", + "integrity": "sha512-g3WxHrqSWCZHGHlSrF51VXFdjImhwvH8ZO/pryFH56Qi0cDsZfylQa/t0jCzVQFNbNvM00HfHjkDPEuarKDSWQ==", "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, "engines": { "node": ">=8" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", "dev": true }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "dev": true, "dependencies": { - "os-tmpdir": "~1.0.2" + "semver": "^6.3.0" }, "engines": { - "node": ">=0.6.0" + "node": ">=8" } }, - "node_modules/tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/to-fast-properties": { + "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/to-readable-stream": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-2.1.0.tgz", - "integrity": "sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w==", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } + "node_modules/shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "dev": true }, - "node_modules/to-vfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-6.1.0.tgz", - "integrity": "sha512-BxX8EkCxOAZe+D/ToHdDsJcVI4HqQfmw0tCkp31zf3dNP/XWIAjU4CmeuSwsSoOzOTqHPOL0KUzyZqJplkD0Qw==", - "dev": true, - "dependencies": { - "is-buffer": "^2.0.0", - "vfile": "^4.0.0" + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" } }, - "node_modules/tough-cookie": { + "node_modules/slice-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { - "punycode": "^2.1.1" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/trim-newlines": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", - "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, - "node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/sliced": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=", "dev": true }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/sort-object-keys": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-1.1.3.tgz", + "integrity": "sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==", "dev": true }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/sort-package-json": { + "version": "1.46.1", + "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-1.46.1.tgz", + "integrity": "sha512-jUkuCxcXCZD31eIJ/Zza62LRP0lzd4LNkY0z0q1kDSvfBfCmPotrHPXVrz6WTppbGeM2JzNyyARQLUEnK4dUyg==", "dev": true, "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" + "detect-indent": "^6.0.0", + "detect-newline": "3.1.0", + "git-hooks-list": "1.0.3", + "globby": "10.0.0", + "is-plain-obj": "2.1.0", + "sort-object-keys": "^1.1.3" }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "bin": { + "sort-package-json": "cli.js" } }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/sort-package-json/node_modules/globby": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.0.tgz", + "integrity": "sha512-3LifW9M4joGZasyYPz2A1U74zbC/45fvpXUvO/9KbSa+VV0aGZarWkfdgKyR9sExNP0t0x0ss/UMJpNpcaTspw==", "dev": true, "dependencies": { - "prelude-ls": "^1.2.1" + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "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==", + "node_modules/source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, "dependencies": { - "is-typedarray": "^1.0.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "node_modules/space-separated-tokens": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz", + "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==", "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "dev": true, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/unified-args": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-9.0.2.tgz", - "integrity": "sha512-qSqryjoqfJSII4E4Z2Jx7MhXX2MuUIn6DsrlmL8UnWFdGtrWvEtvm7Rx5fKT5TPUz7q/Fb4oxwIHLCttvAuRLQ==", - "dev": true, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dependencies": { - "@types/text-table": "^0.2.0", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "chokidar": "^3.0.0", - "fault": "^2.0.0", - "json5": "^2.0.0", - "minimist": "^1.0.0", - "text-table": "^0.2.0", - "unified-engine": "^9.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/unified-args/node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/spdx-license-ids": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", + "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==" }, - "node_modules/unified-args/node_modules/fault": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.0.tgz", - "integrity": "sha512-JsDj9LFcoC+4ChII1QpXPA7YIaY8zmqPYw7h9j5n7St7a0BBKfNnwEBAUQRBx70o2q4rs+BeSNHk8Exm6xE7fQ==", - "dev": true, - "dependencies": { - "format": "^0.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/specificity": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", + "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", + "bin": { + "specificity": "bin/specificity" } }, - "node_modules/unified-engine": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-9.0.3.tgz", - "integrity": "sha512-SgzREcCM2IpUy3JMFUcPRZQ2Py6IwvJ2KIrg2AiI7LnGge6E6OPFWpcabHrEXG0IvO2OI3afiD9DOcQvvZfXDQ==", + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, "dependencies": { - "@types/concat-stream": "^1.0.0", - "@types/debug": "^4.0.0", - "@types/is-empty": "^1.0.0", - "@types/js-yaml": "^4.0.0", - "@types/node": "^16.0.0", - "@types/unist": "^2.0.0", - "concat-stream": "^2.0.0", - "debug": "^4.0.0", - "fault": "^2.0.0", - "glob": "^7.0.0", - "ignore": "^5.0.0", - "is-buffer": "^2.0.0", - "is-empty": "^1.0.0", - "is-plain-obj": "^4.0.0", - "js-yaml": "^4.0.0", - "load-plugin": "^4.0.0", - "parse-json": "^5.0.0", - "to-vfile": "^7.0.0", - "trough": "^2.0.0", - "unist-util-inspect": "^7.0.0", - "vfile-message": "^3.0.0", - "vfile-reporter": "^7.0.0", - "vfile-statistics": "^2.0.0" + "through": "2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "*" } }, - "node_modules/unified-engine/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "node_modules/unified-engine/node_modules/fault": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.0.tgz", - "integrity": "sha512-JsDj9LFcoC+4ChII1QpXPA7YIaY8zmqPYw7h9j5n7St7a0BBKfNnwEBAUQRBx70o2q4rs+BeSNHk8Exm6xE7fQ==", + "node_modules/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", "dev": true, "dependencies": { - "format": "^0.2.0" + "escape-string-regexp": "^2.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=10" } }, - "node_modules/unified-engine/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/unified-engine/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "safe-buffer": "~5.2.0" } }, - "node_modules/unified-engine/node_modules/to-vfile": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-7.2.1.tgz", - "integrity": "sha512-biljADNq2n+AZn/zX+/87zStnIqctKr/q5OaOD8+qSKINokUGPbWBShvxa1iLUgHz6dGGjVnQPNoFRtVBzMkVg==", + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, - "dependencies": { - "is-buffer": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/unified-engine/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=0.6.19" } }, - "node_modules/unified-engine/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "node_modules/string-length": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", + "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0" + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=10" } }, - "node_modules/unified-engine/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dev": true, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8" } }, - "node_modules/unified-engine/node_modules/vfile-message": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.1.tgz", - "integrity": "sha512-gYmSHcZZUEtYpTmaWaFJwsuUD70/rTY4v09COp8TGtOkix6gGxb/a8iTQByIY9ciTk9GwAwIXd/J9OPfM4Bvaw==", + "node_modules/string.prototype.padend": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz", + "integrity": "sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 0.4" } }, - "node_modules/unified-lint-rule": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", - "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "node_modules/string.prototype.trimend": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz", + "integrity": "sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==", "dev": true, "dependencies": { - "wrapped": "^1.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" } }, - "node_modules/unified-message-control": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-3.0.3.tgz", - "integrity": "sha512-oY5z2n8ugjpNHXOmcgrw0pQeJzavHS0VjPBP21tOcm7rc2C+5Q+kW9j5+gqtf8vfW/8sabbsK5+P+9QPwwEHDA==", + "node_modules/string.prototype.trimend/node_modules/es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", "dev": true, "dependencies": { - "unist-util-visit": "^2.0.0", - "vfile-location": "^3.0.0" + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unified/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "dev": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/unified/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/string.prototype.trimstart": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz", + "integrity": "sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" } }, - "node_modules/unified/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "node_modules/string.prototype.trimstart/node_modules/es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0" + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 0.4" } }, - "node_modules/unified/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "node_modules/stringify-entities": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.1.tgz", + "integrity": "sha512-gmMQxKXPWIO3NXNSPyWNhlYcBNGpPA/487D+9dLPnU4xBnIrnHdr8cv5rGJOS/1BRxEXRb7uKwg7BA36IWV7xg==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^2.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/unified/node_modules/vfile-message": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.1.tgz", - "integrity": "sha512-gYmSHcZZUEtYpTmaWaFJwsuUD70/rTY4v09COp8TGtOkix6gGxb/a8iTQByIY9ciTk9GwAwIXd/J9OPfM4Bvaw==", + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=4" } }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "node_modules/stringify-object/node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dependencies": { - "crypto-random-string": "^2.0.0" + "ansi-regex": "^5.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8" } }, - "node_modules/unist-util-inspect": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-7.0.0.tgz", - "integrity": "sha512-2Utgv78I7PUu461Y9cdo+IUiiKSKpDV5CE/XD6vTj849a3xlpDAScvSJ6cQmtFBGgAmCn2wR7jLuXhpg1XLlJw==", + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "engines": { + "node": ">=6" + } + }, + "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==", "dependencies": { - "@types/unist": "^2.0.0" + "min-indent": "^1.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8" } }, - "node_modules/unist-util-is": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.3.tgz", - "integrity": "sha512-bTofCFVx0iQM8Jqb1TBDVRIQW03YkD3p66JOd/aCWuqzlLyUtx1ZAGw/u+Zw+SttKvSVcvTiKYbfrtLoLefykw==", - "dev": true - }, - "node_modules/unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "engines": { + "node": ">=8" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "node_modules/style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=" + }, + "node_modules/sugarss": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-4.0.1.tgz", + "integrity": "sha512-WCjS5NfuVJjkQzK10s8WOBY+hhDxxNt/N6ZaGwxFZ+wN3/lKKFSaaKUNecULcTTvE4urLcKaZFQD8vO0mOZujw==", "dev": true, - "dependencies": { - "@types/unist": "^2.0.2" + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" } }, - "node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dev": true, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "node_modules/supports-hyperlinks": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", + "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/supports-hyperlinks/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": ">= 4.0.0" + "node": ">=8" } }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "node_modules/supports-hyperlinks/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": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/update-notifier/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=" }, - "node_modules/update-notifier/node_modules/global-dirs": { + "node_modules/symbol-observable": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-3.0.0.tgz", + "integrity": "sha512-6tDOXSHiVjuCaasQSWTmHUWn4PuG7qa3+1WT031yTc/swT7+rLiw3GOrFxaH1E3lLP09dH3bVuVDf2gK5rxG3Q==", "dev": true, - "dependencies": { - "ini": "2.0.0" - }, "engines": { - "node": ">=10" + "node": ">=0.10" } }, - "node_modules/update-notifier/node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true }, - "node_modules/update-notifier/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, + "node_modules/table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">=10" + "node": ">=10.0.0" } }, - "node_modules/update-notifier/node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, + "node_modules/table/node_modules/ajv": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.0.1.tgz", + "integrity": "sha512-46ZA4TalFcLLqX1dEU3dhdY38wAtDydJ4e7QQTVekLUTzXkb1LfqU6VOBXC/a9wiv4T094WURqJH6ZitF92Kqw==", "dependencies": { - "ci-info": "^2.0.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "bin": { - "is-ci": "bin.js" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/update-notifier/node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", "dev": true, "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/update-notifier/node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", - "dependencies": { - "punycode": "^2.1.0" - } + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "node_modules/throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "dependencies": { - "prepend-http": "^2.0.0" + "os-tmpdir": "~1.0.2" }, "engines": { - "node": ">=4" + "node": ">=0.6.0" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + "node_modules/tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true }, - "node_modules/v8-to-istanbul": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz", - "integrity": "sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true, "engines": { - "node": ">= 8" + "node": ">=4" } }, - "node_modules/vali-date": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", - "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", + "node_modules/to-readable-stream": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-2.1.0.tgz", + "integrity": "sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w==", "dev": true, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "node": ">=8" } }, - "node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", - "dev": true, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dependencies": { - "builtins": "^1.0.3" + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "node_modules/vfile": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", - "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==", + "node_modules/to-vfile": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-7.2.1.tgz", + "integrity": "sha512-biljADNq2n+AZn/zX+/87zStnIqctKr/q5OaOD8+qSKINokUGPbWBShvxa1iLUgHz6dGGjVnQPNoFRtVBzMkVg==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "node_modules/vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", - "dev": true, + "vfile": "^5.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" } }, - "node_modules/vfile-reporter": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-7.0.1.tgz", - "integrity": "sha512-pof+cQSJCUNmHG6zoBOJfErb6syIWHWM14CwKjsugCixxl4CZdrgzgxwLBW8lIB6czkzX0Agnnhj33YpKyLvmA==", + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "dependencies": { - "@types/repeat-string": "^1.0.0", - "@types/supports-color": "^8.0.0", - "repeat-string": "^1.0.0", - "string-width": "^5.0.0", - "supports-color": "^9.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-sort": "^3.0.0", - "vfile-statistics": "^2.0.0" + "punycode": "^2.1.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-reporter/node_modules/ansi-regex": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.0.tgz", - "integrity": "sha512-tAaOSrWCHF+1Ear1Z4wnJCXA9GGox4K6Ic85a5qalES2aeEwQGr7UC93mwef49536PkCYjzkp0zIxfFvexJ6zQ==", - "dev": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=8" } }, - "node_modules/vfile-reporter/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/vfile-reporter/node_modules/has-flag": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-5.0.1.tgz", - "integrity": "sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==", - "dev": true, + "node_modules/trim-newlines": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", + "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/vfile-reporter/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "dev": true, - "engines": { - "node": ">=12" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/vfile-reporter/node_modules/string-width": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.0.0.tgz", - "integrity": "sha512-zwXcRmLUdiWhMPrHz6EXITuyTgcEnUqDzspTkCLhQovxywWz6NP9VHgqfVg20V/1mUg0B95AKbXxNT+ALRmqCw==", + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "dependencies": { - "emoji-regex": "^9.2.2", - "is-fullwidth-code-point": "^4.0.0", - "strip-ansi": "^7.0.0" + "tslib": "^1.8.1" }, "engines": { - "node": ">=12" + "node": ">= 6" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/vfile-reporter/node_modules/strip-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.0.tgz", - "integrity": "sha512-UhDTSnGF1dc0DRbUqr1aXwNoY3RgVkSWG8BrpnuFIxhP57IqbS7IRta2Gfiavds4yCxc5+fEAVVOgBZWnYkvzg==", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "dependencies": { - "ansi-regex": "^6.0.0" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">= 0.8.0" } }, - "node_modules/vfile-reporter/node_modules/supports-color": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.0.2.tgz", - "integrity": "sha512-ii6tc8ImGFrgMPYq7RVAMKkhPo9vk8uA+D3oKbJq/3Pk2YSMv1+9dUAesa9UxMbxBTvxwKTQffBahNVNxEvM8Q==", + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "engines": { + "node": ">=4" + } + }, + "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==", + "engines": { + "node": ">=10" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dependencies": { - "has-flag": "^5.0.0" + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">=4.2.0" } }, - "node_modules/vfile-reporter/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0" + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/vfile-sort": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-3.0.0.tgz", - "integrity": "sha512-fJNctnuMi3l4ikTVcKpxTbzHeCgvDhnI44amA3NVDvA6rTC6oKCFpCVyT5n2fFMr3ebfr+WVQZedOCd73rzSxg==", - "dev": true, - "dependencies": { - "vfile-message": "^3.0.0" + "node_modules/unified-args": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-9.0.2.tgz", + "integrity": "sha512-qSqryjoqfJSII4E4Z2Jx7MhXX2MuUIn6DsrlmL8UnWFdGtrWvEtvm7Rx5fKT5TPUz7q/Fb4oxwIHLCttvAuRLQ==", + "dev": true, + "dependencies": { + "@types/text-table": "^0.2.0", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "chokidar": "^3.0.0", + "fault": "^2.0.0", + "json5": "^2.0.0", + "minimist": "^1.0.0", + "text-table": "^0.2.0", + "unified-engine": "^9.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/vfile-sort/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "node_modules/unified-args/node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unified-engine": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-9.0.3.tgz", + "integrity": "sha512-SgzREcCM2IpUy3JMFUcPRZQ2Py6IwvJ2KIrg2AiI7LnGge6E6OPFWpcabHrEXG0IvO2OI3afiD9DOcQvvZfXDQ==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0" + "@types/concat-stream": "^1.0.0", + "@types/debug": "^4.0.0", + "@types/is-empty": "^1.0.0", + "@types/js-yaml": "^4.0.0", + "@types/node": "^16.0.0", + "@types/unist": "^2.0.0", + "concat-stream": "^2.0.0", + "debug": "^4.0.0", + "fault": "^2.0.0", + "glob": "^7.0.0", + "ignore": "^5.0.0", + "is-buffer": "^2.0.0", + "is-empty": "^1.0.0", + "is-plain-obj": "^4.0.0", + "js-yaml": "^4.0.0", + "load-plugin": "^4.0.0", + "parse-json": "^5.0.0", + "to-vfile": "^7.0.0", + "trough": "^2.0.0", + "unist-util-inspect": "^7.0.0", + "vfile-message": "^3.0.0", + "vfile-reporter": "^7.0.0", + "vfile-statistics": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/vfile-sort/node_modules/vfile-message": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.1.tgz", - "integrity": "sha512-gYmSHcZZUEtYpTmaWaFJwsuUD70/rTY4v09COp8TGtOkix6gGxb/a8iTQByIY9ciTk9GwAwIXd/J9OPfM4Bvaw==", + "node_modules/unified-engine/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/unified-engine/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unified-engine/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dev": true, "dependencies": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/vfile-statistics": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-2.0.0.tgz", - "integrity": "sha512-foOWtcnJhKN9M2+20AOTlWi2dxNfAoeNIoxD5GXcO182UJyId4QrXa41fWrgcfV3FWTjdEDy3I4cpLVcQscIMA==", + "node_modules/unified-message-control": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-4.0.0.tgz", + "integrity": "sha512-1b92N+VkPHftOsvXNOtkJm4wHlr+UDmTBF2dUzepn40oy9NxanJ9xS1RwUBTjXJwqr2K0kMbEyv1Krdsho7+Iw==", "dev": true, "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit": "^3.0.0", + "vfile": "^5.0.0", + "vfile-location": "^4.0.0", "vfile-message": "^3.0.0" }, "funding": { @@ -11345,745 +11694,889 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/vfile-statistics/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "node_modules/unified-message-control/node_modules/unist-util-visit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz", + "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/vfile-statistics/node_modules/vfile-message": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.1.tgz", - "integrity": "sha512-gYmSHcZZUEtYpTmaWaFJwsuUD70/rTY4v09COp8TGtOkix6gGxb/a8iTQByIY9ciTk9GwAwIXd/J9OPfM4Bvaw==", + "node_modules/unified-message-control/node_modules/unist-util-visit-parents": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", + "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", "dev": true, "dependencies": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "unist-util-is": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "node_modules/unified/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/w3c-xmlserializer": { + "node_modules/unique-string": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, "dependencies": { - "xml-name-validator": "^3.0.0" + "crypto-random-string": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "node_modules/unist-util-generated": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz", + "integrity": "sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==", "dev": true, - "dependencies": { - "makeerror": "1.0.x" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "node_modules/unist-util-inspect": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-7.0.0.tgz", + "integrity": "sha512-2Utgv78I7PUu461Y9cdo+IUiiKSKpDV5CE/XD6vTj849a3xlpDAScvSJ6cQmtFBGgAmCn2wR7jLuXhpg1XLlJw==", "dev": true, - "engines": { - "node": ">=10.4" + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "dev": true, "dependencies": { - "isexe": "^2.0.0" + "@types/unist": "^2.0.0" }, - "bin": { - "which": "bin/which" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "node_modules/unist-util-to-list-of-char": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/unist-util-to-list-of-char/-/unist-util-to-list-of-char-0.1.3.tgz", + "integrity": "sha512-f8GrLHdhBKfaW6mzJc25BKeUOqhsuiRXlGrXBtb3pmRT3QCuYS+jH4g7Uf52hjV7TLQN4PGnjzrTFMFXAQaprA==", "dev": true, "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" + "unist-util-generated": "^1.1.6", + "unist-util-visit": "^1.4.0" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "node_modules/unist-util-to-list-of-char/node_modules/unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/unist-util-to-list-of-char/node_modules/unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "node_modules/unist-util-to-list-of-char/node_modules/unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "unist-util-visit-parents": "^2.0.0" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/unist-util-to-list-of-char/node_modules/unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "unist-util-is": "^3.0.0" + } + }, + "node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" }, - "engines": { - "node": ">=7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } }, - "node_modules/wrapped": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wrapped/-/wrapped-1.0.1.tgz", - "integrity": "sha1-x4PZ2Aeyc+mwHoUWgKk4yHyQckI=", + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "dev": true, "dependencies": { - "co": "3.1.0", - "sliced": "^1.0.1" + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "node_modules/update-notifier/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "node_modules/update-notifier/node_modules/global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dev": true, "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/ws": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", - "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", + "node_modules/update-notifier/node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", "dev": true, "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "node": ">=4" } }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "node_modules/update-notifier/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true + "node_modules/update-notifier/node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "node_modules/update-notifier/node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, "engines": { - "node": ">=0.4" + "node": ">=10" } }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "node_modules/update-notifier/node_modules/semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { "node": ">=10" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", - "engines": { - "node": ">= 6" + "node_modules/uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "dependencies": { + "punycode": "^2.1.0" } }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", "dev": true, "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "prepend-http": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + }, + "node_modules/v8-to-istanbul": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz", + "integrity": "sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, "engines": { - "node": ">=10" + "node": ">=10.12.0" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true, "engines": { - "node": ">=10" + "node": ">= 8" } }, - "node_modules/zwitch": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", - "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==", + "node_modules/vali-date": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "requires": { - "@babel/highlight": "^7.10.4" + "engines": { + "node": ">=0.10.0" } }, - "@babel/compat-data": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", - "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", - "dev": true + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } }, - "@babel/core": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz", - "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.0", - "@babel/helper-module-transforms": "^7.15.0", - "@babel/helpers": "^7.14.8", - "@babel/parser": "^7.15.0", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "builtins": "^1.0.3" } }, - "@babel/generator": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", - "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", + "node_modules/vfile": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", + "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", "dev": true, - "requires": { - "@babel/types": "^7.15.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@babel/helper-compilation-targets": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz", - "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", + "node_modules/vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", "dev": true, - "requires": { - "@babel/compat-data": "^7.15.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "node_modules/vfile-message": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", + "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "node_modules/vfile-reporter": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-7.0.1.tgz", + "integrity": "sha512-pof+cQSJCUNmHG6zoBOJfErb6syIWHWM14CwKjsugCixxl4CZdrgzgxwLBW8lIB6czkzX0Agnnhj33YpKyLvmA==", "dev": true, - "requires": { - "@babel/types": "^7.14.5" + "dependencies": { + "@types/repeat-string": "^1.0.0", + "@types/supports-color": "^8.0.0", + "repeat-string": "^1.0.0", + "string-width": "^5.0.0", + "supports-color": "^9.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-sort": "^3.0.0", + "vfile-statistics": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "node_modules/vfile-reporter/node_modules/ansi-regex": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.0.tgz", + "integrity": "sha512-tAaOSrWCHF+1Ear1Z4wnJCXA9GGox4K6Ic85a5qalES2aeEwQGr7UC93mwef49536PkCYjzkp0zIxfFvexJ6zQ==", "dev": true, - "requires": { - "@babel/types": "^7.14.5" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", - "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", + "node_modules/vfile-reporter/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/vfile-reporter/node_modules/has-flag": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-5.0.1.tgz", + "integrity": "sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==", "dev": true, - "requires": { - "@babel/types": "^7.15.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "node_modules/vfile-reporter/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, - "requires": { - "@babel/types": "^7.14.5" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@babel/helper-module-transforms": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", - "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", + "node_modules/vfile-reporter/node_modules/string-width": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.0.0.tgz", + "integrity": "sha512-zwXcRmLUdiWhMPrHz6EXITuyTgcEnUqDzspTkCLhQovxywWz6NP9VHgqfVg20V/1mUg0B95AKbXxNT+ALRmqCw==", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.15.0", - "@babel/helper-simple-access": "^7.14.8", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.9", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "dependencies": { + "emoji-regex": "^9.2.2", + "is-fullwidth-code-point": "^4.0.0", + "strip-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "node_modules/vfile-reporter/node_modules/strip-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.0.tgz", + "integrity": "sha512-UhDTSnGF1dc0DRbUqr1aXwNoY3RgVkSWG8BrpnuFIxhP57IqbS7IRta2Gfiavds4yCxc5+fEAVVOgBZWnYkvzg==", "dev": true, - "requires": { - "@babel/types": "^7.14.5" + "dependencies": { + "ansi-regex": "^6.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", - "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", + "node_modules/vfile-reporter/node_modules/supports-color": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.0.2.tgz", + "integrity": "sha512-ii6tc8ImGFrgMPYq7RVAMKkhPo9vk8uA+D3oKbJq/3Pk2YSMv1+9dUAesa9UxMbxBTvxwKTQffBahNVNxEvM8Q==", "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.15.0", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "dependencies": { + "has-flag": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "@babel/helper-simple-access": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", - "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", + "node_modules/vfile-sort": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-3.0.0.tgz", + "integrity": "sha512-fJNctnuMi3l4ikTVcKpxTbzHeCgvDhnI44amA3NVDvA6rTC6oKCFpCVyT5n2fFMr3ebfr+WVQZedOCd73rzSxg==", "dev": true, - "requires": { - "@babel/types": "^7.14.8" + "dependencies": { + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "node_modules/vfile-statistics": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-2.0.0.tgz", + "integrity": "sha512-foOWtcnJhKN9M2+20AOTlWi2dxNfAoeNIoxD5GXcO182UJyId4QrXa41fWrgcfV3FWTjdEDy3I4cpLVcQscIMA==", "dev": true, - "requires": { - "@babel/types": "^7.14.5" + "dependencies": { + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==" - }, - "@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "dev": true - }, - "@babel/helpers": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz", - "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==", + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", "dev": true, - "requires": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" - } - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } + "browser-process-hrtime": "^1.0.0" } }, - "@babel/parser": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", - "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" } }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "node_modules/walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "dependencies": { + "makeerror": "1.0.x" } }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "node_modules/web-namespaces": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.0.tgz", + "integrity": "sha512-dE7ELZRVWh0ceQsRgkjLgsAvwTuv3kcjSY/hLjqL0llleUlQBDjE9JkB9FCBY5F2mnFEwiyJoowl8+NVGHe8dw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "engines": { + "node": ">=10.4" } }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "dependencies": { + "iconv-lite": "0.4.24" } }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" } }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "engines": { + "node": ">=0.10.0" } }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "@babel/plugin-syntax-typescript": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", - "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrapped": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wrapped/-/wrapped-1.0.1.tgz", + "integrity": "sha1-x4PZ2Aeyc+mwHoUWgKk4yHyQckI=", "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - }, "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.14.5" - } + "co": "3.1.0", + "sliced": "^1.0.1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", + "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true } } }, - "@babel/traverse": { + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/zwitch": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", + "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/compat-data": { "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", - "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "dev": true + }, + "@babel/core": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz", + "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", "@babel/generator": "^7.15.0", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-compilation-targets": "^7.15.0", + "@babel/helper-module-transforms": "^7.15.0", + "@babel/helpers": "^7.14.8", "@babel/parser": "^7.15.0", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", "@babel/types": "^7.15.0", + "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "globals": "^11.1.0" + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" }, "dependencies": { "@babel/code-frame": { @@ -12094,2014 +12587,2422 @@ "requires": { "@babel/highlight": "^7.14.5" } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, - "@babel/types": { + "@babel/generator": { "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", - "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", + "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.9", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "@babel/types": "^7.15.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } }, - "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "@babel/helper-compilation-targets": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz", + "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", "dev": true, "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" }, "dependencies": { - "globals": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", - "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" } }, - "@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "dev": true, "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "@babel/types": "^7.14.5" } }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.6.tgz", - "integrity": "sha512-fMlIBocSHPZ3JxgWiDNW/KPj6s+YRd0hicb33IrmelCcjXo/pXPwvuiKFmZz+XuqI/1u7nbUK10zSsWL/1aegg==", + "@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "dev": true, "requires": { - "@jest/types": "^27.0.6", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.0.6", - "jest-util": "^27.0.6", - "slash": "^3.0.0" + "@babel/types": "^7.14.5" } }, - "@jest/core": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.6.tgz", - "integrity": "sha512-SsYBm3yhqOn5ZLJCtccaBcvD/ccTLCeuDv8U41WJH/V1MW5eKUkeMHT9U+Pw/v1m1AIWlnIW/eM2XzQr0rEmow==", + "@babel/helper-member-expression-to-functions": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", + "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", "dev": true, "requires": { - "@jest/console": "^27.0.6", - "@jest/reporters": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.0.6", - "jest-config": "^27.0.6", - "jest-haste-map": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-resolve-dependencies": "^27.0.6", - "jest-runner": "^27.0.6", - "jest-runtime": "^27.0.6", - "jest-snapshot": "^27.0.6", - "jest-util": "^27.0.6", - "jest-validate": "^27.0.6", - "jest-watcher": "^27.0.6", - "micromatch": "^4.0.4", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" + "@babel/types": "^7.15.0" } }, - "@jest/environment": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.6.tgz", - "integrity": "sha512-4XywtdhwZwCpPJ/qfAkqExRsERW+UaoSRStSHCCiQTUpoYdLukj+YJbQSFrZjhlUDRZeNiU9SFH0u7iNimdiIg==", + "@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "dev": true, "requires": { - "@jest/fake-timers": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/node": "*", - "jest-mock": "^27.0.6" + "@babel/types": "^7.14.5" } }, - "@jest/fake-timers": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.6.tgz", - "integrity": "sha512-sqd+xTWtZ94l3yWDKnRTdvTeZ+A/V7SSKrxsrOKSqdyddb9CeNRF8fbhAU0D7ZJBpTTW2nbp6MftmKJDZfW2LQ==", + "@babel/helper-module-transforms": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", + "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", "dev": true, "requires": { - "@jest/types": "^27.0.6", - "@sinonjs/fake-timers": "^7.0.2", - "@types/node": "*", - "jest-message-util": "^27.0.6", - "jest-mock": "^27.0.6", - "jest-util": "^27.0.6" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.0", + "@babel/helper-simple-access": "^7.14.8", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" } }, - "@jest/globals": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.6.tgz", - "integrity": "sha512-DdTGCP606rh9bjkdQ7VvChV18iS7q0IMJVP1piwTWyWskol4iqcVwthZmoJEf7obE1nc34OpIyoVGPeqLC+ryw==", + "@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "dev": true, "requires": { - "@jest/environment": "^27.0.6", - "@jest/types": "^27.0.6", - "expect": "^27.0.6" + "@babel/types": "^7.14.5" } }, - "@jest/reporters": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.6.tgz", - "integrity": "sha512-TIkBt09Cb2gptji3yJXb3EE+eVltW6BjO7frO7NEfjI9vSIYoISi5R3aI3KpEDXlB1xwB+97NXIqz84qYeYsfA==", + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true + }, + "@babel/helper-replace-supers": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", + "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", "dev": true, "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-util": "^27.0.6", - "jest-worker": "^27.0.6", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.0.0" + "@babel/helper-member-expression-to-functions": "^7.15.0", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" } }, - "@jest/source-map": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz", - "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==", + "@babel/helper-simple-access": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", + "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", "dev": true, "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" + "@babel/types": "^7.14.8" } }, - "@jest/test-result": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.6.tgz", - "integrity": "sha512-ja/pBOMTufjX4JLEauLxE3LQBPaI2YjGFtXexRAjt1I/MbfNlMx0sytSX3tn5hSLzQsR3Qy2rd0hc1BWojtj9w==", + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "dev": true, "requires": { - "@jest/console": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "@babel/types": "^7.14.5" } }, - "@jest/test-sequencer": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.6.tgz", - "integrity": "sha512-bISzNIApazYOlTHDum9PwW22NOyDa6VI31n6JucpjTVM0jD6JDgqEZ9+yn575nDdPF0+4csYDxNNW13NvFQGZA==", + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==" + }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true + }, + "@babel/helpers": { + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz", + "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==", "dev": true, "requires": { - "@jest/test-result": "^27.0.6", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.6", - "jest-runtime": "^27.0.6" + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" } }, - "@jest/transform": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.6.tgz", - "integrity": "sha512-rj5Dw+mtIcntAUnMlW/Vju5mr73u8yg+irnHwzgtgoeI6cCPOvUwQ0D1uQtc/APmWgvRweEb1g05pkUpxH3iCA==", - "dev": true, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.0.6", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.6", - "jest-regex-util": "^27.0.6", - "jest-util": "^27.0.6", - "micromatch": "^4.0.4", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } } }, - "@jest/types": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", - "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "@babel/parser": { + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", + "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.4", - "run-parallel": "^1.1.9" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==" - }, - "@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.4", - "fastq": "^1.6.0" + "@babel/helper-plugin-utils": "^7.12.13" } }, - "@samverschueren/stream-to-observable": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", - "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==", + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "requires": { - "any-observable": "^0.3.0" - }, - "dependencies": { - "any-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", - "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", - "dev": true - } + "@babel/helper-plugin-utils": "^7.10.4" } }, - "@sindresorhus/is": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz", - "integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ==", - "dev": true - }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "requires": { - "type-detect": "4.0.8" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@sinonjs/fake-timers": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", - "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "requires": { - "@sinonjs/commons": "^1.7.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, - "@stylelint/prettier-config": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@stylelint/prettier-config/-/prettier-config-2.0.0.tgz", - "integrity": "sha512-CjOqoMNg/GcOekLY/3w5oxOVXX6xsoOCy+ZJeGpjLQUvMIxExy7p/AF87Pz9gkC+ngXYHM4gA0bnwKhWXMg2Pg==", + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "requires": { - "prettier-plugin-packagejson": "^2.2.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@stylelint/remark-preset": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@stylelint/remark-preset/-/remark-preset-2.0.0.tgz", - "integrity": "sha512-zoGDNlmsFlibOw2TILica2TA5shNX16dKJWmVH1ajKtF6v6iG/vjl+pUX7vNoTgylKjB9roWcDFFxzdKvMyiQg==", + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "requires": { - "remark-frontmatter": "^3.0.0", - "remark-preset-lint-recommended": "^5.0.0", - "remark-preset-prettier": "^0.4.0", - "remark-validate-links": "^10.0.2" + "@babel/helper-plugin-utils": "^7.10.4" } }, - "@szmarczak/http-timer": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", - "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "requires": { - "defer-to-connect": "^2.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@types/babel__core": { - "version": "7.1.15", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz", - "integrity": "sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==", + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@types/babel__generator": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", - "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-plugin-utils": "^7.14.5" } }, - "@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "@babel/plugin-syntax-typescript": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", + "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", "dev": true, "requires": { - "@babel/types": "^7.3.0" + "@babel/helper-plugin-utils": "^7.14.5" } }, - "@types/balanced-match": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/balanced-match/-/balanced-match-1.0.1.tgz", - "integrity": "sha512-flYjxKu45rRRd//gE2Y3zfVb1rCa4aNHW8fZ68c4Yt++iCBjij7YmraB9DGjsue1RC5pj4+yU50sI5cADCKZRA==", - "dev": true - }, - "@types/braces": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.0.tgz", - "integrity": "sha512-TbH79tcyi9FHwbyboOKeRachRq63mSuWYXOflsNO9ZyE5ClQ/JaozNKl+aWUq87qPNsXasXxi2AbgfwIJ+8GQw==", - "dev": true - }, - "@types/cacheable-request": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", - "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "dev": true, "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + } } }, - "@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "@babel/traverse": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", + "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", "dev": true, "requires": { - "@types/node": "*" + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.0", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.15.0", + "@babel/types": "^7.15.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + } } }, - "@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "@babel/types": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", "dev": true, "requires": { - "@types/ms": "*" + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" } }, - "@types/file-entry-cache": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/file-entry-cache/-/file-entry-cache-5.0.2.tgz", - "integrity": "sha512-6uLb9gNrW+e4JivzglLQ2eJSyd7xvu5gSkwKIlOZOmuFgz8U7O9ddTwWjmWgUaIeukdQhoWefI5fQ5/MRTw8XA==", + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "requires": { - "@types/node": "*" + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } } }, - "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", "dev": true, "requires": { - "@types/minimatch": "*", - "@types/node": "*" + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" } }, - "@types/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-AsEQE+Rhe82YGPmO2vpzhpdvsYwUbK9ev7ZhTY7QQBHuKeLxCr8K0K47HmlaVkuSe0YivNAjjEGoEnkGKhivMA==", - "dev": true - }, - "@types/globjoin": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@types/globjoin/-/globjoin-0.1.0.tgz", - "integrity": "sha512-vLFlKLMVgcqq+PDJsasXzWQXoHXfbtB3pnDidERRJkutG8kPGEzyXhLk2PhBYxvNJqSm53THiVfqEHb/DRTtAQ==", + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", "dev": true }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "requires": { - "@types/node": "*" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" } }, - "@types/http-cache-semantics": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", - "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==", - "dev": true - }, - "@types/imurmurhash": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@types/imurmurhash/-/imurmurhash-0.1.1.tgz", - "integrity": "sha512-ThbETc7uxx6rIpNP0fE3bqrSSIeBWPrFY4TzY4WFsvdQYWinub+PLZV/9nT3zicRJJPWbmHqJIsHZHeh5Ad+Ug==", - "dev": true - }, - "@types/is-empty": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/is-empty/-/is-empty-1.2.0.tgz", - "integrity": "sha512-brJKf2boFhUxTDxlpI7cstwiUtA2ovm38UzFTi9aZI6//ARncaV+Q5ALjCaJqXaMtdZk/oPTJnSutugsZR6h8A==", + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "dev": true + "@jest/console": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.6.tgz", + "integrity": "sha512-fMlIBocSHPZ3JxgWiDNW/KPj6s+YRd0hicb33IrmelCcjXo/pXPwvuiKFmZz+XuqI/1u7nbUK10zSsWL/1aegg==", + "dev": true, + "requires": { + "@jest/types": "^27.0.6", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.0.6", + "jest-util": "^27.0.6", + "slash": "^3.0.0" + } }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "@jest/core": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.6.tgz", + "integrity": "sha512-SsYBm3yhqOn5ZLJCtccaBcvD/ccTLCeuDv8U41WJH/V1MW5eKUkeMHT9U+Pw/v1m1AIWlnIW/eM2XzQr0rEmow==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "*" + "@jest/console": "^27.0.6", + "@jest/reporters": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^27.0.6", + "jest-config": "^27.0.6", + "jest-haste-map": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-resolve-dependencies": "^27.0.6", + "jest-runner": "^27.0.6", + "jest-runtime": "^27.0.6", + "jest-snapshot": "^27.0.6", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", + "jest-watcher": "^27.0.6", + "micromatch": "^4.0.4", + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" } }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "@jest/environment": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.6.tgz", + "integrity": "sha512-4XywtdhwZwCpPJ/qfAkqExRsERW+UaoSRStSHCCiQTUpoYdLukj+YJbQSFrZjhlUDRZeNiU9SFH0u7iNimdiIg==", "dev": true, "requires": { - "@types/istanbul-lib-report": "*" + "@jest/fake-timers": "^27.0.6", + "@jest/types": "^27.0.6", + "@types/node": "*", + "jest-mock": "^27.0.6" } }, - "@types/js-yaml": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.2.tgz", - "integrity": "sha512-KbeHS/Y4R+k+5sWXEYzAZKuB1yQlZtEghuhRxrVRLaqhtoG5+26JwQsa4HyS3AWX8v1Uwukma5HheduUDskasA==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", - "dev": true - }, - "@types/keyv": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", - "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", + "@jest/fake-timers": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.6.tgz", + "integrity": "sha512-sqd+xTWtZ94l3yWDKnRTdvTeZ+A/V7SSKrxsrOKSqdyddb9CeNRF8fbhAU0D7ZJBpTTW2nbp6MftmKJDZfW2LQ==", "dev": true, "requires": { - "@types/node": "*" + "@jest/types": "^27.0.6", + "@sinonjs/fake-timers": "^7.0.2", + "@types/node": "*", + "jest-message-util": "^27.0.6", + "jest-mock": "^27.0.6", + "jest-util": "^27.0.6" } }, - "@types/mdast": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.7.tgz", - "integrity": "sha512-YwR7OK8aPmaBvMMUi+pZXBNoW2unbVbfok4YRqGMJBe1dpDlzpRkJrYEYmvjxgs5JhuQmKfDexrN98u941Zasg==", + "@jest/globals": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.6.tgz", + "integrity": "sha512-DdTGCP606rh9bjkdQ7VvChV18iS7q0IMJVP1piwTWyWskol4iqcVwthZmoJEf7obE1nc34OpIyoVGPeqLC+ryw==", "dev": true, "requires": { - "@types/unist": "*" + "@jest/environment": "^27.0.6", + "@jest/types": "^27.0.6", + "expect": "^27.0.6" } }, - "@types/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-oqXqVb0ci19GtH0vOA/U2TmHTcRY9kuZl4mqUxe0QmJAlIW13kzhuK5pi1i9+ngav8FjpSb9FVS/GE00GLX1VA==", + "@jest/reporters": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.6.tgz", + "integrity": "sha512-TIkBt09Cb2gptji3yJXb3EE+eVltW6BjO7frO7NEfjI9vSIYoISi5R3aI3KpEDXlB1xwB+97NXIqz84qYeYsfA==", "dev": true, "requires": { - "@types/braces": "*" + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-util": "^27.0.6", + "jest-worker": "^27.0.6", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.0.0" } }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/minimist": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", - "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==" - }, - "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", - "dev": true - }, - "@types/node": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.0.tgz", - "integrity": "sha512-OyiZPohMMjZEYqcVo/UJ04GyAxXOJEZO/FpzyXxcH4r/ArrVoXHf4MbUrkLp0Tz7/p1mMKpo5zJ6ZHl8XBNthQ==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" - }, - "@types/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-Nd8y/5t/7CRakPYiyPzr/IAfYusy1FkcZYFEAcoMZkwpJv2n4Wm+olW+e7xBdHEXhOnWdG9ddbar0gqZWS4x5Q==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/postcss-less": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/postcss-less/-/postcss-less-4.0.1.tgz", - "integrity": "sha512-ha/AILmAjxi81Gzqzvh1724EsPkreQYjwoml3j8MAjjNKbVIt7CU/x4nBgry4X+BJ2XivMGL+kxoW9b5SggNrg==", + "@jest/source-map": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz", + "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==", "dev": true, "requires": { - "postcss": "^8.1.2" + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" } }, - "@types/postcss-safe-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/postcss-safe-parser/-/postcss-safe-parser-5.0.0.tgz", - "integrity": "sha512-ZVVjasBjRC3ZrXbrIZEd5fqSvdxAXKB2ise5Ysw+7XWKYPct/BiMwT8bZy8xbJiaZ5aqjn5s8RgtgoCbWmas4Q==", + "@jest/test-result": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.6.tgz", + "integrity": "sha512-ja/pBOMTufjX4JLEauLxE3LQBPaI2YjGFtXexRAjt1I/MbfNlMx0sytSX3tn5hSLzQsR3Qy2rd0hc1BWojtj9w==", "dev": true, "requires": { - "postcss": "^8.1.0" + "@jest/console": "^27.0.6", + "@jest/types": "^27.0.6", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" } }, - "@types/prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==", - "dev": true - }, - "@types/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-vdna8kjLGljgtPnYN6MBD2UwX62QE0EFLj9QlLXvg6dEu66NksXB900BNguBCMZZY2D9SSqncUskM23vT3uvWQ==", - "dev": true - }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "@jest/test-sequencer": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.6.tgz", + "integrity": "sha512-bISzNIApazYOlTHDum9PwW22NOyDa6VI31n6JucpjTVM0jD6JDgqEZ9+yn575nDdPF0+4csYDxNNW13NvFQGZA==", "dev": true, "requires": { - "@types/node": "*" + "@jest/test-result": "^27.0.6", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.0.6", + "jest-runtime": "^27.0.6" } }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/style-search": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@types/style-search/-/style-search-0.1.3.tgz", - "integrity": "sha512-IcAsQKBFcoAWb843esJs2qhgiWWECtcFktAo4ks3xPTPlsbxfc1UESSNEXdwAPt/MnG7fZCGTJsTjH/3i5NzGA==", - "dev": true - }, - "@types/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-dPWnWsf+kzIG140B8z2w3fr5D03TLWbOAFQl45xUpI3vcizeXriNR5VYkWZ+WTMsUHqZ9Xlt3hrxGNANFyNQfw==", - "dev": true - }, - "@types/svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-PlLI3u2hocS4nbzd9WUzQn/EyFl+NifbssU9QV40XzWOpwf5R7cDod2dmTUKYN7awE9jMrhy9FCO904ZYwaBDw==", - "dev": true - }, - "@types/text-table": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@types/text-table/-/text-table-0.2.2.tgz", - "integrity": "sha512-dGoI5Af7To0R2XE8wJuc6vwlavWARsCh3UKJPjWs1YEqGUqfgBI/j/4GX0yf19/DsDPPf0YAXWAp8psNeIehLg==", - "dev": true - }, - "@types/unist": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", - "dev": true - }, - "@types/write-file-atomic": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/write-file-atomic/-/write-file-atomic-3.0.2.tgz", - "integrity": "sha512-dTP8L3SaqbcmQEbeDcNDnv4vUXB7di125C2Ws5w1UhPIgC4hfa54aOxEHOSUkdTSWNJ4clpGLbN9LHX4qaA2rg==", + "@jest/transform": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.6.tgz", + "integrity": "sha512-rj5Dw+mtIcntAUnMlW/Vju5mr73u8yg+irnHwzgtgoeI6cCPOvUwQ0D1uQtc/APmWgvRweEb1g05pkUpxH3iCA==", "dev": true, "requires": { - "@types/node": "*" + "@babel/core": "^7.1.0", + "@jest/types": "^27.0.6", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-util": "^27.0.6", + "micromatch": "^4.0.4", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" } }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", "dev": true, "requires": { - "@types/yargs-parser": "*" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", - "dev": true - }, - "@typescript-eslint/experimental-utils": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.23.0.tgz", - "integrity": "sha512-WAFNiTDnQfrF3Z2fQ05nmCgPsO5o790vOhmWKXbbYQTO9erE1/YsFot5/LnOUizLzU2eeuz6+U/81KV5/hFTGA==", - "dev": true, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.23.0", - "@typescript-eslint/types": "4.23.0", - "@typescript-eslint/typescript-estree": "4.23.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" } }, - "@typescript-eslint/scope-manager": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.23.0.tgz", - "integrity": "sha512-ZZ21PCFxPhI3n0wuqEJK9omkw51wi2bmeKJvlRZPH5YFkcawKOuRMQMnI8mH6Vo0/DoHSeZJnHiIx84LmVQY+w==", - "dev": true, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==" + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", "requires": { - "@typescript-eslint/types": "4.23.0", - "@typescript-eslint/visitor-keys": "4.23.0" + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" } }, - "@typescript-eslint/types": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.23.0.tgz", - "integrity": "sha512-oqkNWyG2SLS7uTWLZf6Sr7Dm02gA5yxiz1RP87tvsmDsguVATdpVguHr4HoGOcFOpCvx9vtCSCyQUGfzq28YCw==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.23.0.tgz", - "integrity": "sha512-5Sty6zPEVZF5fbvrZczfmLCOcby3sfrSPu30qKoY1U3mca5/jvU5cwsPb/CO6Q3ByRjixTMIVsDkqwIxCf/dMw==", + "@samverschueren/stream-to-observable": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", + "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.23.0", - "@typescript-eslint/visitor-keys": "4.23.0", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "any-observable": "^0.3.0" }, "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "any-observable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", + "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", + "dev": true } } }, - "@typescript-eslint/visitor-keys": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.23.0.tgz", - "integrity": "sha512-5PNe5cmX9pSifit0H+nPoQBXdbNzi5tOEec+3riK+ku4e3er37pKxMKDH5Ct5Y4fhWxcD4spnlYjxi9vXbSpwg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.23.0", - "eslint-visitor-keys": "^2.0.0" - } - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "@sindresorhus/is": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz", + "integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ==", "dev": true }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" + "type-detect": "4.0.8" } }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "@sinonjs/fake-timers": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", + "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", "dev": true, "requires": { - "debug": "4" + "@sinonjs/commons": "^1.7.0" } }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "@stylelint/prettier-config": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@stylelint/prettier-config/-/prettier-config-2.0.0.tgz", + "integrity": "sha512-CjOqoMNg/GcOekLY/3w5oxOVXX6xsoOCy+ZJeGpjLQUvMIxExy7p/AF87Pz9gkC+ngXYHM4gA0bnwKhWXMg2Pg==", "dev": true, "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "prettier-plugin-packagejson": "^2.2.0" } }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "@stylelint/remark-preset": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@stylelint/remark-preset/-/remark-preset-3.0.0.tgz", + "integrity": "sha512-NmkENZQQ/wmq82ea/Hf+LR3mHQjt3PX1YqwM7SSEDefRG+F35X2SkcvS/AHDJw0YZwKlUnbxaIWz3eW2xOvw3w==", "dev": true, "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "remark-frontmatter": "^4.0.0", + "remark-preset-lint-recommended": "^6.0.0", + "remark-preset-prettier": "^1.0.0", + "remark-validate-links": "^11.0.0" } }, - "ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "@szmarczak/http-timer": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", + "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", "dev": true, "requires": { - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "defer-to-connect": "^2.0.0" } }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "@types/babel__core": { + "version": "7.1.15", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz", + "integrity": "sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==", "dev": true, "requires": { - "type-fest": "^0.11.0" - }, - "dependencies": { - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true - } + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "@types/babel__generator": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", + "dev": true, "requires": { - "color-convert": "^1.9.0" + "@babel/types": "^7.0.0" } }, - "any-observable": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.5.1.tgz", - "integrity": "sha512-8zv01bgDOp9PTmRTNCAHTw64TFP2rvlX4LvtNJLachaXY+AjmIvLT47fABNPCiIe89hKiSCo2n5zmPqI9CElPA==", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", "dev": true, "requires": { - "sprintf-js": "~1.0.2" + "@babel/types": "^7.3.0" } }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "arrify": { + "@types/balanced-match": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" - }, - "async-exit-hook": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", - "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "resolved": "https://registry.npmjs.org/@types/balanced-match/-/balanced-match-1.0.1.tgz", + "integrity": "sha512-flYjxKu45rRRd//gE2Y3zfVb1rCa4aNHW8fZ68c4Yt++iCBjij7YmraB9DGjsue1RC5pj4+yU50sI5cADCKZRA==", "dev": true }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "@types/braces": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.0.tgz", + "integrity": "sha512-TbH79tcyi9FHwbyboOKeRachRq63mSuWYXOflsNO9ZyE5ClQ/JaozNKl+aWUq87qPNsXasXxi2AbgfwIJ+8GQw==", "dev": true }, - "babel-jest": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.6.tgz", - "integrity": "sha512-iTJyYLNc4wRofASmofpOc5NK9QunwMk+TLFgGXsTFS8uEqmd8wdI7sga0FPe2oVH3b5Agt/EAK1QjPEuKL8VfA==", + "@types/cacheable-request": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", + "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", "dev": true, "requires": { - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.0.6", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" } }, - "babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", - "test-exclude": "^6.0.0" + "@types/node": "*" } }, - "babel-plugin-jest-hoist": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz", - "integrity": "sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw==", + "@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", "dev": true, "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" + "@types/ms": "*" } }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "@types/file-entry-cache": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/file-entry-cache/-/file-entry-cache-5.0.2.tgz", + "integrity": "sha512-6uLb9gNrW+e4JivzglLQ2eJSyd7xvu5gSkwKIlOZOmuFgz8U7O9ddTwWjmWgUaIeukdQhoWefI5fQ5/MRTw8XA==", "dev": true, "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@types/node": "*" } }, - "babel-preset-jest": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz", - "integrity": "sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw==", + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^27.0.6", - "babel-preset-current-node-syntax": "^1.0.0" + "@types/minimatch": "*", + "@types/node": "*" } }, - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "@types/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-AsEQE+Rhe82YGPmO2vpzhpdvsYwUbK9ev7ZhTY7QQBHuKeLxCr8K0K47HmlaVkuSe0YivNAjjEGoEnkGKhivMA==", "dev": true }, - "balanced-match": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==" + "@types/globjoin": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@types/globjoin/-/globjoin-0.1.0.tgz", + "integrity": "sha512-vLFlKLMVgcqq+PDJsasXzWQXoHXfbtB3pnDidERRJkutG8kPGEzyXhLk2PhBYxvNJqSm53THiVfqEHb/DRTtAQ==", + "dev": true }, - "benchmark": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", - "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", "dev": true, "requires": { - "lodash": "^4.17.4", - "platform": "^1.3.3" + "@types/node": "*" } }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "boxen": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.0.tgz", - "integrity": "sha512-5bvsqw+hhgUi3oYGK0Vf4WpIkyemp60WBInn7+WNfoISzAqk/HX4L7WNROq38E6UR/y3YADpv6pEm4BfkeEAdA==", + "@types/hast": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.2.tgz", + "integrity": "sha512-Op5W7jYgZI7AWKY5wQ0/QNMzQM7dGQPyW1rXKNiymVCy5iTfdPuGu4HhYNOM2sIv8gUfIuIdcYlXmAepwaowow==", "dev": true, "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.0", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } + "@types/unist": "*" } }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - }, - "dependencies": { - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - } - } + "@types/http-cache-semantics": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", + "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==", + "dev": true }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } + "@types/imurmurhash": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@types/imurmurhash/-/imurmurhash-0.1.1.tgz", + "integrity": "sha512-ThbETc7uxx6rIpNP0fE3bqrSSIeBWPrFY4TzY4WFsvdQYWinub+PLZV/9nT3zicRJJPWbmHqJIsHZHeh5Ad+Ug==", + "dev": true }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "@types/is-empty": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/is-empty/-/is-empty-1.2.0.tgz", + "integrity": "sha512-brJKf2boFhUxTDxlpI7cstwiUtA2ovm38UzFTi9aZI6//ARncaV+Q5ALjCaJqXaMtdZk/oPTJnSutugsZR6h8A==", "dev": true }, - "browserslist": { - "version": "4.16.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.7.tgz", - "integrity": "sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA==", + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001248", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.793", - "escalade": "^3.1.1", - "node-releases": "^1.1.73" + "@types/istanbul-lib-coverage": "*" } }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "@types/istanbul-reports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", + "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", "dev": true, "requires": { - "node-int64": "^0.4.0" + "@types/istanbul-lib-report": "*" } }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "@types/js-yaml": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.2.tgz", + "integrity": "sha512-KbeHS/Y4R+k+5sWXEYzAZKuB1yQlZtEghuhRxrVRLaqhtoG5+26JwQsa4HyS3AWX8v1Uwukma5HheduUDskasA==", "dev": true }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", "dev": true }, - "cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true - }, - "cacheable-request": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", - "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", + "@types/keyv": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", + "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", "dev": true, "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^2.0.0" + "@types/node": "*" } }, - "call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "@types/mdast": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.7.tgz", + "integrity": "sha512-YwR7OK8aPmaBvMMUi+pZXBNoW2unbVbfok4YRqGMJBe1dpDlzpRkJrYEYmvjxgs5JhuQmKfDexrN98u941Zasg==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" + "@types/unist": "*" } }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "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==", + "@types/micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-oqXqVb0ci19GtH0vOA/U2TmHTcRY9kuZl4mqUxe0QmJAlIW13kzhuK5pi1i9+ngav8FjpSb9FVS/GE00GLX1VA==", + "dev": true, "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" + "@types/braces": "*" } }, - "caniuse-lite": { - "version": "1.0.30001251", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz", - "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==", + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } + "@types/minimist": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", + "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==" }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", "dev": true }, - "character-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.0.tgz", - "integrity": "sha512-oHqMj3eAuJ77/P5PaIRcqk+C3hdfNwyCD2DAUcD5gyXkegAuF2USC40CEqPscDk4I8FRGMTojGJQkXDsN5QlJA==", + "@types/node": { + "version": "16.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.0.tgz", + "integrity": "sha512-OyiZPohMMjZEYqcVo/UJ04GyAxXOJEZO/FpzyXxcH4r/ArrVoXHf4MbUrkLp0Tz7/p1mMKpo5zJ6ZHl8XBNthQ==", "dev": true }, - "character-entities-legacy": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-2.0.0.tgz", - "integrity": "sha512-YwaEtEvWLpFa6Wh3uVLrvirA/ahr9fki/NUd/Bd4OR6EdJ8D22hovYQEOUCBfQfcqnC4IAMGMsHXY1eXgL4ZZA==", + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" + }, + "@types/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-Nd8y/5t/7CRakPYiyPzr/IAfYusy1FkcZYFEAcoMZkwpJv2n4Wm+olW+e7xBdHEXhOnWdG9ddbar0gqZWS4x5Q==", "dev": true }, - "character-reference-invalid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.0.tgz", - "integrity": "sha512-pE3Z15lLRxDzWJy7bBHBopRwfI20sbrMVLQTC7xsPglCHf4Wv1e167OgYAFP78co2XlhojDyAqA+IAJse27//g==", + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "@types/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-ARATsLdrGPUnaBvxLhUlnltcMgn7pQG312S8ccdYlnyijabrX9RN/KN/iGj9Am96CoW8e/K9628BA7Bv4XHdrA==", "dev": true }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "@types/postcss-less": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/postcss-less/-/postcss-less-4.0.1.tgz", + "integrity": "sha512-ha/AILmAjxi81Gzqzvh1724EsPkreQYjwoml3j8MAjjNKbVIt7CU/x4nBgry4X+BJ2XivMGL+kxoW9b5SggNrg==", + "dev": true, + "requires": { + "postcss": "^8.1.2" + } + }, + "@types/postcss-safe-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/postcss-safe-parser/-/postcss-safe-parser-5.0.0.tgz", + "integrity": "sha512-ZVVjasBjRC3ZrXbrIZEd5fqSvdxAXKB2ise5Ysw+7XWKYPct/BiMwT8bZy8xbJiaZ5aqjn5s8RgtgoCbWmas4Q==", + "dev": true, + "requires": { + "postcss": "^8.1.0" + } + }, + "@types/prettier": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==", "dev": true }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "@types/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-vdna8kjLGljgtPnYN6MBD2UwX62QE0EFLj9QlLXvg6dEu66NksXB900BNguBCMZZY2D9SSqncUskM23vT3uvWQ==", + "dev": true + }, + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", "dev": true, "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "@types/node": "*" } }, - "ci-info": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.1.1.tgz", - "integrity": "sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==", + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "@types/style-search": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@types/style-search/-/style-search-0.1.3.tgz", + "integrity": "sha512-IcAsQKBFcoAWb843esJs2qhgiWWECtcFktAo4ks3xPTPlsbxfc1UESSNEXdwAPt/MnG7fZCGTJsTjH/3i5NzGA==", "dev": true }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "@types/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-dPWnWsf+kzIG140B8z2w3fr5D03TLWbOAFQl45xUpI3vcizeXriNR5VYkWZ+WTMsUHqZ9Xlt3hrxGNANFyNQfw==", "dev": true }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "@types/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-PlLI3u2hocS4nbzd9WUzQn/EyFl+NifbssU9QV40XzWOpwf5R7cDod2dmTUKYN7awE9jMrhy9FCO904ZYwaBDw==", "dev": true }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "@types/text-table": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@types/text-table/-/text-table-0.2.2.tgz", + "integrity": "sha512-dGoI5Af7To0R2XE8wJuc6vwlavWARsCh3UKJPjWs1YEqGUqfgBI/j/4GX0yf19/DsDPPf0YAXWAp8psNeIehLg==", + "dev": true + }, + "@types/unist": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", + "dev": true + }, + "@types/write-file-atomic": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/write-file-atomic/-/write-file-atomic-3.0.2.tgz", + "integrity": "sha512-dTP8L3SaqbcmQEbeDcNDnv4vUXB7di125C2Ws5w1UhPIgC4hfa54aOxEHOSUkdTSWNJ4clpGLbN9LHX4qaA2rg==", "dev": true, "requires": { - "restore-cursor": "^3.1.0" + "@types/node": "*" } }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", "dev": true, "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - } + "@types/yargs-parser": "*" } }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "@types/yargs-parser": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", + "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", "dev": true }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "@typescript-eslint/experimental-utils": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.23.0.tgz", + "integrity": "sha512-WAFNiTDnQfrF3Z2fQ05nmCgPsO5o790vOhmWKXbbYQTO9erE1/YsFot5/LnOUizLzU2eeuz6+U/81KV5/hFTGA==", "dev": true, "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "@types/json-schema": "^7.0.3", + "@typescript-eslint/scope-manager": "4.23.0", + "@typescript-eslint/types": "4.23.0", + "@typescript-eslint/typescript-estree": "4.23.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" } }, - "clone-regexp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", - "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", + "@typescript-eslint/scope-manager": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.23.0.tgz", + "integrity": "sha512-ZZ21PCFxPhI3n0wuqEJK9omkw51wi2bmeKJvlRZPH5YFkcawKOuRMQMnI8mH6Vo0/DoHSeZJnHiIx84LmVQY+w==", + "dev": true, "requires": { - "is-regexp": "^2.0.0" + "@typescript-eslint/types": "4.23.0", + "@typescript-eslint/visitor-keys": "4.23.0" } }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "@typescript-eslint/types": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.23.0.tgz", + "integrity": "sha512-oqkNWyG2SLS7uTWLZf6Sr7Dm02gA5yxiz1RP87tvsmDsguVATdpVguHr4HoGOcFOpCvx9vtCSCyQUGfzq28YCw==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.23.0.tgz", + "integrity": "sha512-5Sty6zPEVZF5fbvrZczfmLCOcby3sfrSPu30qKoY1U3mca5/jvU5cwsPb/CO6Q3ByRjixTMIVsDkqwIxCf/dMw==", "dev": true, "requires": { - "mimic-response": "^1.0.0" + "@typescript-eslint/types": "4.23.0", + "@typescript-eslint/visitor-keys": "4.23.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } } }, - "co": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", - "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "@typescript-eslint/visitor-keys": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.23.0.tgz", + "integrity": "sha512-5PNe5cmX9pSifit0H+nPoQBXdbNzi5tOEec+3riK+ku4e3er37pKxMKDH5Ct5Y4fhWxcD4spnlYjxi9vXbSpwg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.23.0", + "eslint-visitor-keys": "^2.0.0" + } }, - "collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", "dev": true }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, "requires": { - "color-name": "1.1.3" + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } + "requires": {} }, - "commander": { + "acorn-walk": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "common-tags": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", - "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" + "debug": "4" } }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - } + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" } }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", "dev": true, "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "string-width": "^3.0.0" }, "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "isexe": "^2.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" } } } }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", "dev": true, "requires": { - "cssom": "~0.3.6" + "type-fest": "^0.11.0" }, "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", "dev": true } } }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", - "dev": true + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "ms": "2.1.2" + "color-convert": "^1.9.0" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "any-observable": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.5.1.tgz", + "integrity": "sha512-8zv01bgDOp9PTmRTNCAHTw64TFP2rvlX4LvtNJLachaXY+AjmIvLT47fABNPCiIe89hKiSCo2n5zmPqI9CElPA==", + "dev": true }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" - } + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "mimic-response": "^3.1.0" - }, - "dependencies": { - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true - } + "sprintf-js": "~1.0.2" } }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + "async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true }, - "defer-to-connect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz", - "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==", + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "babel-jest": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.6.tgz", + "integrity": "sha512-iTJyYLNc4wRofASmofpOc5NK9QunwMk+TLFgGXsTFS8uEqmd8wdI7sga0FPe2oVH3b5Agt/EAK1QjPEuKL8VfA==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^27.0.6", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" } }, - "del": { + "babel-plugin-istanbul": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", + "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", "dev": true, "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^4.0.0", + "test-exclude": "^6.0.0" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "detect-indent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", - "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "diff-sequences": { + "babel-plugin-jest-hoist": { "version": "27.0.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", - "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", - "dev": true + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz", + "integrity": "sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, "requires": { - "path-type": "^4.0.0" + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "babel-preset-jest": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz", + "integrity": "sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw==", "dev": true, "requires": { - "esutils": "^2.0.2" + "babel-plugin-jest-hoist": "^27.0.6", + "babel-preset-current-node-syntax": "^1.0.0" } }, - "domexception": { + "bail": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "dev": true + }, + "balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==" + }, + "benchmark": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", + "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", "dev": true, "requires": { - "webidl-conversions": "^5.0.0" + "lodash": "^4.17.4", + "platform": "^1.3.3" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "boxen": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.0.tgz", + "integrity": "sha512-5bvsqw+hhgUi3oYGK0Vf4WpIkyemp60WBInn7+WNfoISzAqk/HX4L7WNROq38E6UR/y3YADpv6pEm4BfkeEAdA==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.0", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" }, "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true } } }, - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dev": true, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "is-obj": "^2.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" }, "dependencies": { - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" } } }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.803", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.803.tgz", - "integrity": "sha512-tmRK9qB8Zs8eLMtTBp+w2zVS9MUe62gQQQHjYdAc5Zljam3ZIokNb+vZLPRz9RCREp6EFRwyhOFwbt1fEriQ2Q==", - "dev": true - }, - "elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", - "dev": true + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } }, - "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "browserslist": { + "version": "4.16.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.7.tgz", + "integrity": "sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA==", "dev": true, "requires": { - "once": "^1.4.0" + "caniuse-lite": "^1.0.30001248", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.793", + "escalade": "^3.1.1", + "node-releases": "^1.1.73" } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, "requires": { - "ansi-colors": "^4.1.1" + "node-int64": "^0.4.0" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true + }, + "cacheable-request": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", + "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", + "dev": true, "requires": { - "is-arrayish": "^0.2.1" + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^2.0.0" } }, - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "call-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", + "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", "dev": true, "requires": { - "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "get-intrinsic": "^1.0.0" } }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "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==", + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "caniuse-lite": { + "version": "1.0.30001251", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz", + "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==", + "dev": true + }, + "ccount": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.0.tgz", + "integrity": "sha512-VOR0NWFYX65n9gELQdcpqsie5L5ihBXuZGAgaPEp/U7IOSjnPMEH6geE+2f6lcekaNEfWzAHS45mPvSo5bqsUA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "character-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.0.tgz", + "integrity": "sha512-oHqMj3eAuJ77/P5PaIRcqk+C3hdfNwyCD2DAUcD5gyXkegAuF2USC40CEqPscDk4I8FRGMTojGJQkXDsN5QlJA==", + "dev": true + }, + "character-entities-html4": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.0.0.tgz", + "integrity": "sha512-dwT2xh5ZhUAjyP96k57ilMKoTQyASaw9IAMR9U5c1lCu2RUni6O6jxfpUEdO2RcPT6TJFvr8pqsbami4Jk+2oA==", + "dev": true + }, + "character-entities-legacy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-2.0.0.tgz", + "integrity": "sha512-YwaEtEvWLpFa6Wh3uVLrvirA/ahr9fki/NUd/Bd4OR6EdJ8D22hovYQEOUCBfQfcqnC4IAMGMsHXY1eXgL4ZZA==", + "dev": true + }, + "character-reference-invalid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.0.tgz", + "integrity": "sha512-pE3Z15lLRxDzWJy7bBHBopRwfI20sbrMVLQTC7xsPglCHf4Wv1e167OgYAFP78co2XlhojDyAqA+IAJse27//g==", + "dev": true + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" } }, - "escalade": { + "ci-info": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.1.1.tgz", + "integrity": "sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==", "dev": true }, - "escape-goat": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz", - "integrity": "sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==", + "cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" + "restore-cursor": "^3.1.0" + } + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" }, "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "color-convert": "^2.0.1" } }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "color-name": "~1.1.4" } }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" } } } }, - "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone-regexp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", + "requires": { + "is-regexp": "^2.0.0" + } + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "co": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", + "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "comma-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz", + "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==", + "dev": true + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + } + } + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "date-fns": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", + "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", + "dev": true + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + } + } + }, + "decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "requires": { + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + } + } + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + }, + "defer-to-connect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz", + "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "dev": true, + "requires": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "detect-indent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", + "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "diff-sequences": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", + "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true + } + } + }, + "dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + }, + "dependencies": { + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + } + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.803", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.803.tgz", + "integrity": "sha512-tmRK9qB8Zs8eLMtTBp+w2zVS9MUe62gQQQHjYdAc5Zljam3ZIokNb+vZLPRz9RCREp6EFRwyhOFwbt1fEriQ2Q==", + "dev": true + }, + "elegant-spinner": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", + "dev": true + }, + "emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-goat": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz", + "integrity": "sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -14496,9 +15397,9 @@ } }, "fault": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.0.tgz", + "integrity": "sha512-JsDj9LFcoC+4ChII1QpXPA7YIaY8zmqPYw7h9j5n7St7a0BBKfNnwEBAUQRBx70o2q4rs+BeSNHk8Exm6xE7fQ==", "dev": true, "requires": { "format": "^0.2.0" @@ -14829,22 +15730,94 @@ } } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, + "hast-util-from-parse5": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.0.tgz", + "integrity": "sha512-m8yhANIAccpU4K6+121KpPP55sSl9/samzQSQGpb0mTExcNh2WlvjtMwSWFhg6uqD4Rr6Nfa8N6TMypQM51rzQ==", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "@types/parse5": "^6.0.0", + "@types/unist": "^2.0.0", + "hastscript": "^7.0.0", + "property-information": "^6.0.0", + "vfile": "^5.0.0", + "vfile-location": "^4.0.0", + "web-namespaces": "^2.0.0" + } + }, + "hast-util-is-element": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.1.tgz", + "integrity": "sha512-ag0fiZfRWsPiR1udvnSbaazJLGv8qd8E+/e3rW8rUZhbKG4HNJmFL4QkEceN+22BgE+uozXY30z/s+2dL6Z++g==", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0" + } + }, + "hast-util-parse-selector": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.0.tgz", + "integrity": "sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg==", + "dev": true, + "requires": { + "@types/hast": "^2.0.0" + } + }, + "hast-util-to-html": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.1.tgz", + "integrity": "sha512-S1mTqXvWVGIxrWw0xOHHvmevwCBFTRGNvXWsjE32IyEAlMhbMkK+ZuP6CAqkQ6Vb7swrehaHpfXHEI6voGDh0w==", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-is-element": "^2.0.0", + "hast-util-whitespace": "^2.0.0", + "html-void-elements": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "unist-util-is": "^5.0.0" + } }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "hast-util-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz", + "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==", "dev": true }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true + "hastscript": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.0.2.tgz", + "integrity": "sha512-uA8ooUY4ipaBvKcMuPehTAB/YfFLSSzCwFSwT6ltJbocFUKH/GDHLN+tflq7lSRf9H86uOuxOFkh1KgIy3Gg2g==", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^3.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" + } }, "hosted-git-info": { "version": "3.0.8", @@ -14874,6 +15847,12 @@ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==" }, + "html-void-elements": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.0.tgz", + "integrity": "sha512-4OYzQQsBt0G9bJ/nM9/DDsjm4+fVdzAaPJJcWk5QwA3GIAPxQEeOR0rsI8HbDHQz5Gta8pVvGnnTNSbZVEVvkQ==", + "dev": true + }, "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", @@ -16917,9 +17896,9 @@ "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==" }, "mdast-comment-marker": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-1.1.2.tgz", - "integrity": "sha512-vTFXtmbbF3rgnTh3Zl3irso4LtvwUq/jaDvT2D1JqTGAwaipcS7RpTxzi6KjoRqI9n2yuAhzLDAC8xVTF3XYVQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-2.0.0.tgz", + "integrity": "sha512-LQ4sf7vUzxz4mQQlzzBDgjaCJO5A0lkIAT9TyeNMfqaP31ooP1Qw9hprf7/V3NCo5FA1nvo5gbnfLVRY79QlDQ==", "dev": true }, "mdast-util-from-markdown": { @@ -16938,39 +17917,25 @@ "micromark-util-types": "^1.0.0", "parse-entities": "^3.0.0", "unist-util-stringify-position": "^3.0.0" - }, - "dependencies": { - "mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "dev": true - }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - } } }, "mdast-util-frontmatter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-0.2.0.tgz", - "integrity": "sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-1.0.0.tgz", + "integrity": "sha512-7itKvp0arEVNpCktOET/eLFAYaZ+0cNjVtFtIPxgQ5tV+3i+D4SDDTjTzPWl44LT59PC+xdx+glNTawBdF98Mw==", "dev": true, "requires": { - "micromark-extension-frontmatter": "^0.2.0" + "micromark-extension-frontmatter": "^1.0.0" } }, "mdast-util-heading-style": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-1.0.6.tgz", - "integrity": "sha512-8ZuuegRqS0KESgjAGW8zTx4tJ3VNIiIaGFNEzFpRSAQBavVc7AvOo9I4g3crcZBfYisHs4seYh0rAVimO6HyOw==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-2.0.0.tgz", + "integrity": "sha512-q9+WW2hJduW51LgV2r/fcU5wIt2GLFf0yYHxyi0f2aaxnC63ErBSOAJlhP6nbQ6yeG5rTCozbwOi4QNDPKV0zw==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0" + } }, "mdast-util-to-markdown": { "version": "1.1.1", @@ -16984,20 +17949,12 @@ "mdast-util-to-string": "^3.0.0", "parse-entities": "^3.0.0", "zwitch": "^2.0.0" - }, - "dependencies": { - "mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "dev": true - } } }, "mdast-util-to-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", "dev": true }, "mem": { @@ -17102,12 +18059,14 @@ } }, "micromark-extension-frontmatter": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-0.2.2.tgz", - "integrity": "sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-1.0.0.tgz", + "integrity": "sha512-EXjmRnupoX6yYuUJSQhrQ9ggK0iQtQlpi6xeJzVD5xscyAI+giqco5fdymayZhJMbIFecjnE2yz85S9NzIgQpg==", "dev": true, "requires": { - "fault": "^1.0.0" + "fault": "^2.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0" } }, "micromark-factory-destination": { @@ -18206,635 +19165,1261 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==" + }, + "pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "platform": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", + "dev": true + }, + "please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + }, + "pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true + }, + "postcss": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", + "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", + "requires": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + } + }, + "postcss-import": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz", + "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-less": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-5.0.0.tgz", + "integrity": "sha512-djK6NlApALJeBnNx7CzLatq64eMF3BCyzBH+faYPxrvNHHM/YCimJ6XQkgWgtim2G89EzdQG4Ed0lGNCXPfD7A==", + "dev": true + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=" + }, + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=" + }, + "postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "requires": {} + }, + "postcss-sass": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.5.0.tgz", + "integrity": "sha512-qtu8awh1NMF3o9j/x9j3EZnd+BlF66X6NZYl12BdKoG2Z4hmydOt/dZj2Nq+g0kfk2pQy3jeYFBmvG9DBwynGQ==", + "dev": true, + "requires": { + "gonzales-pe": "^4.3.0", + "postcss": "^8.2.14" + } + }, + "postcss-scss": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.0.tgz", + "integrity": "sha512-xakgIr5ukOEyXFcsnADKjQtrk8nQyqn5VIEAA+PmPP4kBOpknmjpJMxBNqCR1/x20AS0aSfZkWsSdbMx2Ozm5A==", + "dev": true, + "requires": {} + }, + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "prettier": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", + "dev": true + }, + "prettier-plugin-packagejson": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.2.7.tgz", + "integrity": "sha512-xpZyn/P8SGIUM2q52WuC9+CsIJ8wpObF0mMj03KRBna/XCgsUF7E/OvmtFLNc1eF9ql2lBT6aIXkWm5E4KCaBQ==", + "dev": true, + "requires": { + "sort-package-json": "1.46.1" + } + }, + "pretty-format": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz", + "integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==", + "dev": true, + "requires": { + "@jest/types": "^27.0.6", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "prompts": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", + "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "property-information": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.0.1.tgz", + "integrity": "sha512-F4WUUAF7fMeF4/JUFHNBWDaKDXi2jbvqBW/y6o5wsf3j19wTZ7S60TmtB5HoBhtgw7NKQRMWuz5vk2PR0CygUg==", + "dev": true }, - "picomatch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", - "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==" + "propose": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/propose/-/propose-0.0.5.tgz", + "integrity": "sha1-SKBl2ex9TIZn9AULFcSi2F28pWs=", + "dev": true, + "requires": { + "levenshtein-edit-distance": "^1.0.0" + } }, - "pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "dev": true }, - "pify": { + "pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", "dev": true, "requires": { - "node-modules-regexp": "^1.0.0" + "escape-goat": "^2.0.0" + }, + "dependencies": { + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + } } }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "requires": { - "find-up": "^4.0.0" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + } } }, - "platform": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", - "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", "dev": true, "requires": { - "semver-compare": "^1.0.0" + "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, - "pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "dev": true + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "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": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "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==" + } + } }, - "postcss": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", - "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", + "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==", "requires": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", - "source-map-js": "^0.6.2" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + } } }, - "postcss-import": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz", - "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==", + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, - "postcss-less": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-5.0.0.tgz", - "integrity": "sha512-djK6NlApALJeBnNx7CzLatq64eMF3BCyzBH+faYPxrvNHHM/YCimJ6XQkgWgtim2G89EzdQG4Ed0lGNCXPfD7A==", - "dev": true + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } }, - "postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=" + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } }, - "postcss-resolve-nested-selector": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", - "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=" + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true }, - "postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", - "requires": {} + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } }, - "postcss-sass": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.5.0.tgz", - "integrity": "sha512-qtu8awh1NMF3o9j/x9j3EZnd+BlF66X6NZYl12BdKoG2Z4hmydOt/dZj2Nq+g0kfk2pQy3jeYFBmvG9DBwynGQ==", + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "rehype": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-12.0.0.tgz", + "integrity": "sha512-gZcttmf9R5IYHb8AlI1rlmWqXS1yX0rSB/S5ZGJs8atfYZy2DobvH3Ic/gSzB+HL/+oOHPtBguw1TprfhxXBgQ==", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "rehype-parse": "^8.0.0", + "rehype-stringify": "^9.0.0", + "unified": "^10.0.0" + } + }, + "rehype-parse": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-8.0.2.tgz", + "integrity": "sha512-Y5AvUbTareuAcCQITTbC9SGagm1IvOOSfG5CTTaOUW0pEeoNHkOq4YmMaEywUmSwwOgel3gOF3O7Mwl1acoBzg==", "dev": true, "requires": { - "gonzales-pe": "^4.3.0", - "postcss": "^8.2.14" + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^7.0.0", + "parse5": "^6.0.0", + "unified": "^10.0.0" } }, - "postcss-scss": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.0.tgz", - "integrity": "sha512-xakgIr5ukOEyXFcsnADKjQtrk8nQyqn5VIEAA+PmPP4kBOpknmjpJMxBNqCR1/x20AS0aSfZkWsSdbMx2Ozm5A==", + "rehype-stringify": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.1.tgz", + "integrity": "sha512-xfhm8Erp7yL+RRgYmtZMJUqu6OSguwOQMfR2LkqT1dgNDQheClFMaDPVERy4/su7o0eHo0PKFGn4L68kOjVdRQ==", "dev": true, - "requires": {} - }, - "postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "@types/hast": "^2.0.0", + "hast-util-to-html": "^8.0.0", + "unified": "^10.0.0" } }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true + "remark": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-14.0.1.tgz", + "integrity": "sha512-7zLG3u8EUjOGuaAS9gUNJPD2j+SqDqAFHv2g6WMpE5CU9rZ6e3IKDM12KHZ3x+YNje+NMAuN55yx8S5msGSx7Q==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "remark-parse": "^10.0.0", + "remark-stringify": "^10.0.0", + "unified": "^10.0.0" + } }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true + "remark-cli": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/remark-cli/-/remark-cli-10.0.0.tgz", + "integrity": "sha512-Yc5kLsJ5vgiQJl6xMLLJHqPac6OSAC5DOqKQrtmzJxSdJby2Jgr+OpIAkWQYwvbNHEspNagyoQnuwK2UCWg73g==", + "dev": true, + "requires": { + "remark": "^14.0.0", + "unified-args": "^9.0.0" + } }, - "prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", - "dev": true + "remark-frontmatter": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-4.0.0.tgz", + "integrity": "sha512-0J+2czWAS9sz9baJJel4tTUnNhMI7wYgih99Hxhdeq2GpdI1Ctu0iol6zAsWw5xa+jLsZXNiwEnnJAJo3XX3hw==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-frontmatter": "^1.0.0", + "micromark-extension-frontmatter": "^1.0.0", + "unified": "^10.0.0" + } }, - "prettier-plugin-packagejson": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.2.7.tgz", - "integrity": "sha512-xpZyn/P8SGIUM2q52WuC9+CsIJ8wpObF0mMj03KRBna/XCgsUF7E/OvmtFLNc1eF9ql2lBT6aIXkWm5E4KCaBQ==", + "remark-lint": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-9.0.0.tgz", + "integrity": "sha512-ETO4zI48PR1Nz42YiyaYBzyhOiEfppXLnck7HW2pjKqxd36SIyQgM6sxD4ToMQI9KuCgy8mLAl/iVJoDLKxVjw==", "dev": true, "requires": { - "sort-package-json": "1.46.1" + "@types/mdast": "^3.0.0", + "remark-message-control": "^7.0.0", + "unified": "^10.1.0" } }, - "pretty-format": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz", - "integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==", + "remark-lint-blank-lines-1-0-2": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-blank-lines-1-0-2/-/remark-lint-blank-lines-1-0-2-3.0.0.tgz", + "integrity": "sha512-YSTKwmqxtr6jNW6boQv4EWtziYizXhx2+xAwzXtIZK4La+Mnz+3+DSJjPRPkW5nlYu7lCKI4L6BFv5BxbPPKxQ==", "dev": true, "requires": { - "@jest/types": "^27.0.6", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "unified-lint-rule": "^1.0.4", + "unist-util-generated": "^1.1.4", + "unist-util-position": "^3.0.3", + "unist-util-visit": "^2.0.0" }, "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "dev": true, + "requires": { + "wrapped": "^1.0.1" + } + }, + "unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "dev": true + }, + "unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true + }, + "unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", "dev": true + }, + "unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } } } }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", + "remark-lint-blockquote-indentation": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-3.0.0.tgz", + "integrity": "sha512-qWWyAJWHwnVFsfKEyl51os1rr4ex9KX398g8326esJ2/RFsCYJbJaXmVk/S+uf7B7HfOWFuJo+tu/7jlZZ54+Q==", "dev": true, "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "@types/mdast": "^3.0.0", + "pluralize": "^8.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" } }, - "propose": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/propose/-/propose-0.0.5.tgz", - "integrity": "sha1-SKBl2ex9TIZn9AULFcSi2F28pWs=", + "remark-lint-books-links": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/remark-lint-books-links/-/remark-lint-books-links-2.1.0.tgz", + "integrity": "sha1-kdFQ0DvZlca2/2dQI0Z0JWTrWrQ=", "dev": true, "requires": { - "levenshtein-edit-distance": "^1.0.0" + "mdast-util-to-string": "^1.0.2", + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-visit": "^1.0.0" + }, + "dependencies": { + "mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true + }, + "unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "dev": true, + "requires": { + "wrapped": "^1.0.1" + } + }, + "unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "dev": true + }, + "unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dev": true, + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dev": true, + "requires": { + "unist-util-is": "^3.0.0" + } + } } }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true + "remark-lint-checkbox-character-style": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-4.0.0.tgz", + "integrity": "sha512-NHpVZOcTJeLOI1gGOvVDz8i3sXVY3s9K+OADupEA89Syfs4YAbnrij8OMJ6ozbHTn4av/HyVfsF4IK8X2pBUeQ==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + } }, - "pump": { + "remark-lint-code-block-style": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-3.0.0.tgz", + "integrity": "sha512-xZMfFeaMOb5OIM4SrNz3QTRV3u5g3/+e6Oq40A3Apwd+a9Kx49lZbGxl8vfqaczP89PTNanm2e4OqqRsCen4Mg==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" } }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "remark-lint-definition-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-definition-case/-/remark-lint-definition-case-3.0.0.tgz", + "integrity": "sha512-BiZi2Va/vEWQwVJOKnlRocvuiwoj2GXocV5iQUt5feiQFeGd/gdV9PSlOe751ulB4AeZ5V81n/7PFoWmPdYAiQ==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + } }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "remark-lint-definition-spacing": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-3.0.0.tgz", + "integrity": "sha512-3LxU7lwCpfPstldcGly2ULb8knH4IOqZHoABT2KyKFw3rRFUCAEUBSl0k5eetnXXNc/X4NlHmnyjIyzhyl4PhA==", "dev": true, "requires": { - "escape-goat": "^2.0.0" - }, - "dependencies": { - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true - } + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" } }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" + "remark-lint-emphasis-marker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-emphasis-marker/-/remark-lint-emphasis-marker-3.0.0.tgz", + "integrity": "sha512-8TXW8DkznPuIKergBecW9l00QQ9P1FfUFNV839NbqDEiufi7ITiLtEJYmB6KREH+yrHnf5L1J8tASVDtjKy+3w==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + } }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "remark-lint-fenced-code-marker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-3.0.0.tgz", + "integrity": "sha512-x3wr1+22Atr72Z7+dUS8cqwuz8m8d4UgCAfBTNO+E6pRLVeCnVMvEtuJbDI5UqBlqvkLGlNofV4lJZQvrZUxqQ==", "dev": true, "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - } + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" } }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "remark-lint-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-2.0.0.tgz", + "integrity": "sha512-3u1IbgVfUN5Qgid8iqc1qlZhzscs4YPu8mwyahvLWVKMkBtoRWjDIVL6+CXcPPoUB2k3p+zuZ5oaE4yfO5Pb4w==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0" + } }, - "read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "remark-lint-hard-break-spaces": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-3.0.0.tgz", + "integrity": "sha512-TNTI32Va6hE33pTYC6iqn4NvyZHqCULsOKKLnAzBocFFFIYuaNUdfKyVc9wknAAutbQLqApr8tgs1mLHtHm9Fw==", "dev": true, "requires": { - "pify": "^2.3.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" } }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "remark-lint-heading-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-3.0.0.tgz", + "integrity": "sha512-pPiXG24yXER7xXZr+J11iuMd1DXa71m6Cx7jqUO5z1Ptc7WkolcW6lNRFG76BCOJp8Jp6vH5eNITuQxYa0AnJw==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-heading-style": "^2.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" + } + }, + "remark-lint-heading-whitespace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-heading-whitespace/-/remark-lint-heading-whitespace-1.0.0.tgz", + "integrity": "sha512-DykoBIXNbkihg64D+mztSOv3l82RTH4tIZW/HUB4QM4NpIEB+pVIPQpCYD0K4pTgvKiwoqsj4NY8qJ1EhNHAmQ==", + "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" + "mdast-util-to-string": "^1.0.4", + "unified-lint-rule": "^1.0.2", + "unist-util-visit": "^1.3.0" }, "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + "mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "wrapped": "^1.0.1" } }, - "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==" + "unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dev": true, + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dev": true, + "requires": { + "unist-util-is": "^3.0.0" + } } } }, - "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==", + "remark-lint-link-title-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-link-title-style/-/remark-lint-link-title-style-3.0.0.tgz", + "integrity": "sha512-XRp/JWOkDPXb1AvP/BggJz/kj82Eqknxr44QCM8XNXzqGuR/d9/TNaSFfilTQMG0Ar1sFRXrv7Z+wW7uB4upQQ==", + "dev": true, "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - } + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0", + "vfile-location": "^4.0.0" } }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "remark-lint-list-item-bullet-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-4.0.0.tgz", + "integrity": "sha512-b/U3wAJPE00xGQGYBvjPPsdXsBPJxUvITYgAZee7aA2sGEiflMGmg90anS2sJZEAoD4XtNzp96bPaY6QLN89dQ==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "@types/mdast": "^3.0.0", + "pluralize": "^8.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-visit": "^4.0.0" } }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "remark-lint-list-item-content-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-content-indent/-/remark-lint-list-item-content-indent-3.0.0.tgz", + "integrity": "sha512-1DfuLygg9DsomnYaFge7lht/4kvtDoVb+Q4kOnNL5ZVdqEk7dvJw2uVsvHnkcegzkTL/ynwGiwyay05O5dKPzA==", "dev": true, "requires": { - "picomatch": "^2.2.1" + "@types/mdast": "^3.0.0", + "pluralize": "^8.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" } }, - "redent": { + "remark-lint-list-item-indent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-3.0.0.tgz", + "integrity": "sha512-z7doG/aJCy8ivmfbE/cSm9HOpIeUaV5zZHMqSsZ6XZ+wXIj4wtMFVhI7fsAVs5pAB1gzSvZQuwJOfSs2//Fw2g==", + "dev": true, "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" + "@types/mdast": "^3.0.0", + "pluralize": "^8.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" } }, - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "dev": true + "remark-lint-list-item-spacing": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-spacing/-/remark-lint-list-item-spacing-4.0.0.tgz", + "integrity": "sha512-wiY/fWL7ATxqR44FtPY5D0JJQa/BMs4IDXrccfjIaU2C2SqFv+z5s+G9gb4bBbJt10gwoP88o7ZYkUqtkl/+pw==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + } }, - "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "remark-lint-maximum-line-length": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-3.0.0.tgz", + "integrity": "sha512-0x5TsUDlc4IDPUObNjVtcQxzI1JokUwbVpr22akWypnZaX9QMIL+Cp1OXrKRknZVU3rIndt4QCNnjMEYKezn1g==", "dev": true, "requires": { - "rc": "^1.2.8" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" } }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "remark-lint-no-auto-link-without-protocol": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-3.0.0.tgz", + "integrity": "sha512-qeJhWZcO0wnavTdpLU6M1q5RBfo4nZnYmzASoSCmIj/ZxIinluXLmLcMHC2Ol46egWdvwDNpr3V0dJP79fiJMQ==", "dev": true, "requires": { - "rc": "^1.2.8" + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" } }, - "remark": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/remark/-/remark-14.0.1.tgz", - "integrity": "sha512-7zLG3u8EUjOGuaAS9gUNJPD2j+SqDqAFHv2g6WMpE5CU9rZ6e3IKDM12KHZ3x+YNje+NMAuN55yx8S5msGSx7Q==", + "remark-lint-no-blockquote-without-marker": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-5.0.0.tgz", + "integrity": "sha512-6m1KZE8X2OhNV9wpEPVUfFxdzgVD523unRkstlRedKC3ONLlqP/CIliAOITRmIGuUxXVjyD7mDC892bFJnJTfw==", "dev": true, "requires": { "@types/mdast": "^3.0.0", - "remark-parse": "^10.0.0", - "remark-stringify": "^10.0.0", - "unified": "^10.0.0" + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0", + "vfile-location": "^4.0.0" } }, - "remark-cli": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/remark-cli/-/remark-cli-10.0.0.tgz", - "integrity": "sha512-Yc5kLsJ5vgiQJl6xMLLJHqPac6OSAC5DOqKQrtmzJxSdJby2Jgr+OpIAkWQYwvbNHEspNagyoQnuwK2UCWg73g==", + "remark-lint-no-consecutive-blank-lines": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-4.0.0.tgz", + "integrity": "sha512-gP1b3lM+oemvA0WOC5HbvkjESG2BiZHL8ZDSX+wbg/2+7zu14rOmAAMiUOlk/CxbusttwJxsz8a/Wn1dEK/jPg==", "dev": true, "requires": { - "remark": "^14.0.0", - "unified-args": "^9.0.0" + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "pluralize": "^8.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" } }, - "remark-frontmatter": { + "remark-lint-no-duplicate-definitions": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-3.0.0.tgz", - "integrity": "sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA==", + "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-3.0.0.tgz", + "integrity": "sha512-6VOGPegh2ZQ0d9yronmhNXhg2wLYA5litT7bC1ljg2LQwMTIjYOgJbJsQJSKWD+FiHuqVhdWvXHzyTbFCch8Aw==", "dev": true, "requires": { - "mdast-util-frontmatter": "^0.2.0", - "micromark-extension-frontmatter": "^0.2.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-stringify-position": "^3.0.0", + "unist-util-visit": "^4.0.0" } }, - "remark-lint": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-8.0.0.tgz", - "integrity": "sha512-ESI8qJQ/TIRjABDnqoFsTiZntu+FRifZ5fJ77yX63eIDijl/arvmDvT+tAf75/Nm5BFL4R2JFUtkHRGVjzYUsg==", + "remark-lint-no-heading-content-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-4.0.0.tgz", + "integrity": "sha512-2SljHUYTN83EN5DEZrl7WH4ibmUxai6gONhZaQrQOJyGUO2ReZj5Zdn4xi79NHpORSzCzjn2tSXPB6yL3AhJag==", "dev": true, "requires": { - "remark-message-control": "^6.0.0" + "@types/mdast": "^3.0.0", + "mdast-util-heading-style": "^2.0.0", + "pluralize": "^8.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" } }, - "remark-lint-final-newline": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-1.0.5.tgz", - "integrity": "sha512-rfLlW8+Fz2dqnaEgU4JwLA55CQF1T4mfSs/GwkkeUCGPenvEYwSkCN2KO2Gr1dy8qPoOdTFE1rSufLjmeTW5HA==", + "remark-lint-no-inline-padding": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.0.0.tgz", + "integrity": "sha512-dugEtHudM/UVQYzTbQoWy4aeG9Micd9g6O/uzN59sIMM8Xb+Srbv/p5/2JNtJWej9PmzINldE0AHjpuB8NiNLA==", "dev": true, "requires": { - "unified-lint-rule": "^1.0.0" + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" } }, - "remark-lint-hard-break-spaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-2.0.1.tgz", - "integrity": "sha512-Qfn/BMQFamHhtbfLrL8Co/dbYJFLRL4PGVXZ5wumkUO5f9FkZC2RsV+MD9lisvGTkJK0ZEJrVVeaPbUIFM0OAw==", + "remark-lint-no-literal-urls": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-3.0.0.tgz", + "integrity": "sha512-P+9VxemAeSGWGMmFGKcQMIsPgVDaoXnQLl0Bx/TuBms0Favb7XI3ecii/HjjDeks3zlrxlVhzvEkHBk1uH1tdA==", "dev": true, "requires": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" } }, - "remark-lint-list-item-bullet-indent": { + "remark-lint-no-long-code": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/remark-lint-no-long-code/-/remark-lint-no-long-code-0.1.3.tgz", + "integrity": "sha512-GJrOC6tYaRwkfJcfIuErQHcnn/TYZev0VNIMu1+qNBpBmesIeHDEGWhLApXuSG+FSJl+0/Pp0UMUTEYVG/xy8Q==", + "dev": true, + "requires": { + "unified-lint-rule": "^1.0.3", + "unist-util-visit": "^1.4.0" + }, + "dependencies": { + "unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "dev": true, + "requires": { + "wrapped": "^1.0.1" + } + }, + "unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dev": true, + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dev": true, + "requires": { + "unist-util-is": "^3.0.0" + } + } + } + }, + "remark-lint-no-shortcut-reference-image": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-3.0.0.tgz", - "integrity": "sha512-X2rleWP8XReC4LXKF7Qi5vYiPJkA4Grx5zxsjHofFrVRz6j0PYOCuz7vsO+ZzMunFMfom6FODnscSWz4zouDVw==", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-3.0.0.tgz", + "integrity": "sha512-PyB5xkCd8moJf1MrmIXlBTSXZ8pkjXtdrmHzYba7La8S/6TKN2+LFrfN9daLG9pVsD0DSBAlvbajM/MBFh2DfQ==", "dev": true, "requires": { - "pluralize": "^8.0.0", - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-visit": "^2.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" } }, - "remark-lint-list-item-indent": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-2.0.1.tgz", - "integrity": "sha512-4IKbA9GA14Q9PzKSQI6KEHU/UGO36CSQEjaDIhmb9UOhyhuzz4vWhnSIsxyI73n9nl9GGRAMNUSGzr4pQUFwTA==", + "remark-lint-no-shortcut-reference-link": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-3.0.0.tgz", + "integrity": "sha512-SbPrP6ZfRA2IJ++L7xAivXl7PJdOMzBUlhVwlt5PsWJKWHX07TIB02GGAiMnSOLN0FnUCvgF2c5we6eU1K3plA==", "dev": true, "requires": { - "pluralize": "^8.0.0", - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" } }, - "remark-lint-no-auto-link-without-protocol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-2.0.1.tgz", - "integrity": "sha512-TFcXxzucsfBb/5uMqGF1rQA+WJJqm1ZlYQXyvJEXigEZ8EAxsxZGPb/gOQARHl/y0vymAuYxMTaChavPKaBqpQ==", + "remark-lint-no-table-indentation": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-4.0.0.tgz", + "integrity": "sha512-S1u4DHBS75xAcM/u1zsYize/0uB2u+xAoHbstN3JmFWsTRj5LUSppwkSrWsPk/3y9/jHJAQ4XSihwH7C95EObQ==", "dev": true, "requires": { - "mdast-util-to-string": "^1.0.2", - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0", + "vfile-location": "^4.0.0" } }, - "remark-lint-no-blockquote-without-marker": { + "remark-lint-no-undefined-references": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-4.0.0.tgz", - "integrity": "sha512-Y59fMqdygRVFLk1gpx2Qhhaw5IKOR9T38Wf7pjR07bEFBGUNfcoNVIFMd1TCJfCPQxUyJzzSqfZz/KT7KdUuiQ==", + "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.0.0.tgz", + "integrity": "sha512-HI68vLoTTCXDADAp8LQ6RqCuf9QHX7bSaaqKI1V82EyvizxgnFtvN46XIi1uiDTN+Jv/KzAAGaFrofV8OJknBA==", "dev": true, "requires": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0", - "vfile-location": "^3.0.0" + "@types/mdast": "^3.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0", + "vfile-location": "^4.0.0" } }, - "remark-lint-no-duplicate-definitions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-2.0.1.tgz", - "integrity": "sha512-XL22benJZB01m+aOse91nsu1IMFqeWJWme9QvoJuxIcBROO1BG1VoqLOkwNcawE/M/0CkvTo5rfx0eMlcnXOIw==", + "remark-lint-no-unused-definitions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-3.0.0.tgz", + "integrity": "sha512-1LqEZx0IJx59ezXA9e0qq6h5W3n9I6oiBm3Kl+HvmXTFl1OME6f8SVFwtDbt9EaGmf+3NL+T24cWIhZWjmZ0bA==", "dev": true, "requires": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-stringify-position": "^2.0.0", - "unist-util-visit": "^2.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" } }, - "remark-lint-no-heading-content-indent": { + "remark-lint-ordered-list-marker-style": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-3.0.0.tgz", - "integrity": "sha512-yULDoVSIqKylLDfW6mVUbrHlyEWUSFtVFiKc+/BA412xDIhm8HZLUnP+FsuBC0OzbIZ+bO9Txy52WtO3LGnK1A==", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-3.0.0.tgz", + "integrity": "sha512-HDg5Fyg3tENtmI5SpEL34TvEjIiVX4GhuOjU8aOGF7T4SMG69kLyx+IWMKhg39pBw+3h4lG6FDC8IfqYXONNLg==", "dev": true, "requires": { - "mdast-util-heading-style": "^1.0.2", - "pluralize": "^8.0.0", - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" } }, - "remark-lint-no-inline-padding": { + "remark-lint-ordered-list-marker-value": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-3.0.0.tgz", - "integrity": "sha512-3s9uW3Yux9RFC0xV81MQX3bsYs+UY7nPnRuMxeIxgcVwxQ4E/mTJd9QjXUwBhU9kdPtJ5AalngdmOW2Tgar8Cg==", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-3.0.0.tgz", + "integrity": "sha512-RyBGIH32+VEiPedAziFkYUvygVwux+Zo1Jqv+x9knRulICy3/NR0Bvf9cufWUBnzcmQU7fHNtHOp/HaDmzTahQ==", "dev": true, "requires": { - "mdast-util-to-string": "^1.0.2", - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-visit": "^2.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" } }, - "remark-lint-no-literal-urls": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-2.0.1.tgz", - "integrity": "sha512-IDdKtWOMuKVQIlb1CnsgBoyoTcXU3LppelDFAIZePbRPySVHklTtuK57kacgU5grc7gPM04bZV96eliGrRU7Iw==", + "remark-lint-rule-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-3.0.0.tgz", + "integrity": "sha512-KHSPHW/7YCl9gHFsqqWOqIkJYmPuxTu/5G3Ks3lG8seBDf1bg+lPPUg5TigsKa/E7juVgfTR7AhK6P+lYAp4EA==", "dev": true, "requires": { - "mdast-util-to-string": "^1.0.2", - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" } }, - "remark-lint-no-shortcut-reference-image": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-2.0.1.tgz", - "integrity": "sha512-2jcZBdnN6ecP7u87gkOVFrvICLXIU5OsdWbo160FvS/2v3qqqwF2e/n/e7D9Jd+KTq1mR1gEVVuTqkWWuh3cig==", + "remark-lint-spaces-around-number": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/remark-lint-spaces-around-number/-/remark-lint-spaces-around-number-0.1.2.tgz", + "integrity": "sha512-jwCRR9sAEO0EsKV2LdCVZurnqhTv7u9V4GNRU63KjC2+SonnwkKr+wXlL5Nggxip4lkUtFClTkrsqO4HNdM1Lg==", + "dev": true, + "requires": { + "unified-lint-rule": "^1.0.3", + "unist-util-to-list-of-char": "^0.1.3" + }, + "dependencies": { + "unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "dev": true, + "requires": { + "wrapped": "^1.0.1" + } + } + } + }, + "remark-lint-spaces-around-word": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/remark-lint-spaces-around-word/-/remark-lint-spaces-around-word-0.1.2.tgz", + "integrity": "sha512-gsjPaNbyzI/RDH7tfnbLpfL4c6inYqExWEdy/KzuoWqwt7K/sNPKR5EOu6YplyC06DtidAtWyhL36dFztV1ZRQ==", + "dev": true, + "requires": { + "unified-lint-rule": "^1.0.3", + "unist-util-to-list-of-char": "^0.1.3" + }, + "dependencies": { + "unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "dev": true, + "requires": { + "wrapped": "^1.0.1" + } + } + } + }, + "remark-lint-strong-marker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-3.0.0.tgz", + "integrity": "sha512-nNyW3tKl0rEf2j784HzVWChAomCxzld+v2A5R5r5Zw5VogUNikZA7ZRwy51HsmhqiTWHArVGeyuvCPrpkTDZ0A==", "dev": true, "requires": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-visit": "^2.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" } }, - "remark-lint-no-shortcut-reference-link": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-2.0.1.tgz", - "integrity": "sha512-pTZbslG412rrwwGQkIboA8wpBvcjmGFmvugIA+UQR+GfFysKtJ5OZMPGJ98/9CYWjw9Z5m0/EktplZ5TjFjqwA==", + "remark-lint-table-cell-padding": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-4.0.0.tgz", + "integrity": "sha512-jYBhfu/x0bEXt+wilHnm76q6wHnPVW2v2EuTdvAsxqkVtlvWSl9BbO4bb/L7jKqwlfiTK8E/luHKZuPiNWlucw==", "dev": true, "requires": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-visit": "^2.0.0" + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" } }, - "remark-lint-no-undefined-references": { + "remark-lint-table-pipe-alignment": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-3.0.0.tgz", - "integrity": "sha512-0hzaJS9GuzSQVOeeNdJr/s66LRQOzp618xuOQPYWHcJdd+SCaRTyWbjMrTM/cCI5L1sYjgurp410NkIBQ32Vqg==", + "resolved": "https://registry.npmjs.org/remark-lint-table-pipe-alignment/-/remark-lint-table-pipe-alignment-3.0.0.tgz", + "integrity": "sha512-6A/wVsuq/qtfeJqqEg+9jEESzcP4m+JjHeaSciN4bzSUsNbbJSe+XtQsMkxUmdaYIVe/LaQ+O8NXg171SnpXgA==", "dev": true, "requires": { - "collapse-white-space": "^1.0.4", - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.1.0", - "unist-util-visit": "^2.0.0", - "vfile-location": "^3.1.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" } }, - "remark-lint-no-unused-definitions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-2.0.1.tgz", - "integrity": "sha512-+BMc0BOjc364SvKYLkspmxDch8OaKPbnUGgQBvK0Bmlwy42baR4C9zhwAWBxm0SBy5Z4AyM4G4jKpLXPH40Oxg==", + "remark-lint-table-pipes": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-4.0.0.tgz", + "integrity": "sha512-wOIAwkPAEDArKYMEpDylycGOCCt9hUxfgirgYCaHujCvyg484GWO+n+Moabgd19O9ZjuYr2P7akuOocsTh2z3g==", "dev": true, "requires": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-visit": "^2.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" } }, - "remark-lint-ordered-list-marker-style": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-2.0.1.tgz", - "integrity": "sha512-Cnpw1Dn9CHn+wBjlyf4qhPciiJroFOEGmyfX008sQ8uGoPZsoBVIJx76usnHklojSONbpjEDcJCjnOvfAcWW1A==", + "remark-lint-unordered-list-marker-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-3.0.0.tgz", + "integrity": "sha512-iwliMh7GzTdFAWKnVSabpdfcI6qoDE5PPX8hacDIZNbTe4xuUVFbopGCzsTlLiFQkTn6m3ePwOQn+lIbFofKDQ==", "dev": true, "requires": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" } }, "remark-message-control": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-6.0.0.tgz", - "integrity": "sha512-k9bt7BYc3G7YBdmeAhvd3VavrPa/XlKWR3CyHjr4sLO9xJyly8WHHT3Sp+8HPR8lEUv+/sZaffL7IjMLV0f6BA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-7.0.0.tgz", + "integrity": "sha512-KZySoC97TrMPYfIZ9vJ7wxvQwniy68K6WCY3vmSedDN5YuGfdVOpMj6sjaZQcqbWZV9n7BhrT70E3xaUTtk4hA==", "dev": true, "requires": { - "mdast-comment-marker": "^1.0.0", - "unified-message-control": "^3.0.0" + "@types/mdast": "^3.0.0", + "mdast-comment-marker": "^2.0.0", + "rehype": "^12.0.0", + "unified": "^10.0.0", + "unified-message-control": "^4.0.0", + "vfile": "^5.0.0" } }, "remark-parse": { @@ -18849,34 +20434,73 @@ } }, "remark-preset-lint-recommended": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-5.0.0.tgz", - "integrity": "sha512-uu+Ab8JCwMMaKvvB0LOWTWtM3uAvJbKQM/oyWCEJqj7lUVNTKZS575Ro5rKM3Dx7kQjjR1iw0e99bpAYTc5xNA==", - "dev": true, - "requires": { - "remark-lint": "^8.0.0", - "remark-lint-final-newline": "^1.0.0", - "remark-lint-hard-break-spaces": "^2.0.0", - "remark-lint-list-item-bullet-indent": "^3.0.0", - "remark-lint-list-item-indent": "^2.0.0", - "remark-lint-no-auto-link-without-protocol": "^2.0.0", - "remark-lint-no-blockquote-without-marker": "^4.0.0", - "remark-lint-no-duplicate-definitions": "^2.0.0", - "remark-lint-no-heading-content-indent": "^3.0.0", - "remark-lint-no-inline-padding": "^3.0.0", - "remark-lint-no-literal-urls": "^2.0.0", - "remark-lint-no-shortcut-reference-image": "^2.0.0", - "remark-lint-no-shortcut-reference-link": "^2.0.0", - "remark-lint-no-undefined-references": "^3.0.0", - "remark-lint-no-unused-definitions": "^2.0.0", - "remark-lint-ordered-list-marker-style": "^2.0.0" + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-6.0.0.tgz", + "integrity": "sha512-ZVugDvBLFQ2JZ/tRIb0q/Oo4Qwp8s8AD8M/8GU7VgQYQ39GDVzo8lUTg2ugWy3YuBCX7wmnP0UDOSwIJt7vn0A==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "remark-lint": "^9.0.0", + "remark-lint-final-newline": "^2.0.0", + "remark-lint-hard-break-spaces": "^3.0.0", + "remark-lint-list-item-bullet-indent": "^4.0.0", + "remark-lint-list-item-indent": "^3.0.0", + "remark-lint-no-auto-link-without-protocol": "^3.0.0", + "remark-lint-no-blockquote-without-marker": "^5.0.0", + "remark-lint-no-duplicate-definitions": "^3.0.0", + "remark-lint-no-heading-content-indent": "^4.0.0", + "remark-lint-no-inline-padding": "^4.0.0", + "remark-lint-no-literal-urls": "^3.0.0", + "remark-lint-no-shortcut-reference-image": "^3.0.0", + "remark-lint-no-shortcut-reference-link": "^3.0.0", + "remark-lint-no-undefined-references": "^4.0.0", + "remark-lint-no-unused-definitions": "^3.0.0", + "remark-lint-ordered-list-marker-style": "^3.0.0", + "unified": "^10.0.0" } }, "remark-preset-prettier": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/remark-preset-prettier/-/remark-preset-prettier-0.4.0.tgz", - "integrity": "sha512-Y0lwBg/xRyE8/yF4IYJVJxrUHSVE8WThbsnKS5/fE4lSAoX/s0yuiEl7gv/+OWA1G7r5o0xKLZPW3rJjhvfvpw==", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/remark-preset-prettier/-/remark-preset-prettier-1.0.0.tgz", + "integrity": "sha512-e0VvU1J7WJSl5WsejEPKgJzTE84A3NNm/S3oA75fkw9p/k/IPu1dr0vEO4FdeoaqsLlG0xZ544E+kQgmiSlG0g==", + "dev": true, + "requires": { + "remark-lint-blank-lines-1-0-2": "*", + "remark-lint-blockquote-indentation": "*", + "remark-lint-books-links": "*", + "remark-lint-checkbox-character-style": "*", + "remark-lint-code-block-style": "*", + "remark-lint-definition-case": "*", + "remark-lint-definition-spacing": "*", + "remark-lint-emphasis-marker": "*", + "remark-lint-fenced-code-marker": "*", + "remark-lint-final-newline": "*", + "remark-lint-hard-break-spaces": "*", + "remark-lint-heading-style": "*", + "remark-lint-heading-whitespace": "*", + "remark-lint-link-title-style": "*", + "remark-lint-list-item-bullet-indent": "*", + "remark-lint-list-item-content-indent": "*", + "remark-lint-list-item-indent": "*", + "remark-lint-list-item-spacing": "*", + "remark-lint-maximum-line-length": "*", + "remark-lint-no-blockquote-without-marker": "*", + "remark-lint-no-consecutive-blank-lines": "*", + "remark-lint-no-heading-content-indent": "*", + "remark-lint-no-inline-padding": "*", + "remark-lint-no-long-code": "*", + "remark-lint-no-table-indentation": "*", + "remark-lint-ordered-list-marker-style": "*", + "remark-lint-ordered-list-marker-value": "*", + "remark-lint-rule-style": "*", + "remark-lint-spaces-around-number": "*", + "remark-lint-spaces-around-word": "*", + "remark-lint-strong-marker": "*", + "remark-lint-table-cell-padding": "*", + "remark-lint-table-pipe-alignment": "*", + "remark-lint-table-pipes": "*", + "remark-lint-unordered-list-marker-style": "*" + } }, "remark-stringify": { "version": "10.0.0", @@ -18890,19 +20514,33 @@ } }, "remark-validate-links": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/remark-validate-links/-/remark-validate-links-10.0.2.tgz", - "integrity": "sha512-rcg/FFgowCbR7fC5aNhpJu8ltXuSGZZunwIwReXtdZ704XHsHR3Xsy4N8uso43ih5cY9maIydfn1FNLHW0016w==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-validate-links/-/remark-validate-links-11.0.0.tgz", + "integrity": "sha512-y0S1FCj7Pkj0VRakR3OMu8o+GFcjaJJpOgeJxE9nP3CgKHpaVoB5n4BhfP/mbVZpsjaJuug+P+BzBdFF1yKmbw==", "dev": true, "requires": { + "@types/mdast": "^3.0.0", "github-slugger": "^1.0.0", - "hosted-git-info": "^3.0.0", - "mdast-util-to-string": "^1.0.0", + "hosted-git-info": "^4.0.0", + "mdast-util-to-string": "^3.0.0", "propose": "0.0.5", - "to-vfile": "^6.0.0", - "trough": "^1.0.0", - "unist-util-visit": "^2.0.0", - "xtend": "^4.0.0" + "to-vfile": "^7.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "unified-engine": "^9.0.0", + "unist-util-visit": "^4.0.0", + "vfile": "^5.0.0" + }, + "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==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } } }, "repeat-string": { @@ -18911,12 +20549,6 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -19199,6 +20831,12 @@ "source-map": "^0.6.0" } }, + "space-separated-tokens": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz", + "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==", + "dev": true + }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -19381,6 +21019,16 @@ } } }, + "stringify-entities": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.1.tgz", + "integrity": "sha512-gmMQxKXPWIO3NXNSPyWNhlYcBNGpPA/487D+9dLPnU4xBnIrnHdr8cv5rGJOS/1BRxEXRb7uKwg7BA36IWV7xg==", + "dev": true, + "requires": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^2.0.0" + } + }, "stringify-object": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", @@ -19604,13 +21252,13 @@ } }, "to-vfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-6.1.0.tgz", - "integrity": "sha512-BxX8EkCxOAZe+D/ToHdDsJcVI4HqQfmw0tCkp31zf3dNP/XWIAjU4CmeuSwsSoOzOTqHPOL0KUzyZqJplkD0Qw==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-7.2.1.tgz", + "integrity": "sha512-biljADNq2n+AZn/zX+/87zStnIqctKr/q5OaOD8+qSKINokUGPbWBShvxa1iLUgHz6dGGjVnQPNoFRtVBzMkVg==", "dev": true, "requires": { "is-buffer": "^2.0.0", - "vfile": "^4.0.0" + "vfile": "^5.0.0" } }, "tough-cookie": { @@ -19639,9 +21287,9 @@ "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==" }, "trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "dev": true }, "tslib": { @@ -19719,43 +21367,6 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", "dev": true - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "dev": true - }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.1.tgz", - "integrity": "sha512-gYmSHcZZUEtYpTmaWaFJwsuUD70/rTY4v09COp8TGtOkix6gGxb/a8iTQByIY9ciTk9GwAwIXd/J9OPfM4Bvaw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -19781,15 +21392,6 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true - }, - "fault": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.0.tgz", - "integrity": "sha512-JsDj9LFcoC+4ChII1QpXPA7YIaY8zmqPYw7h9j5n7St7a0BBKfNnwEBAUQRBx70o2q4rs+BeSNHk8Exm6xE7fQ==", - "dev": true, - "requires": { - "format": "^0.2.0" - } } } }, @@ -19830,15 +21432,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "fault": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.0.tgz", - "integrity": "sha512-JsDj9LFcoC+4ChII1QpXPA7YIaY8zmqPYw7h9j5n7St7a0BBKfNnwEBAUQRBx70o2q4rs+BeSNHk8Exm6xE7fQ==", - "dev": true, - "requires": { - "format": "^0.2.0" - } - }, "is-plain-obj": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", @@ -19853,73 +21446,56 @@ "requires": { "argparse": "^2.0.1" } - }, - "to-vfile": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-7.2.1.tgz", - "integrity": "sha512-biljADNq2n+AZn/zX+/87zStnIqctKr/q5OaOD8+qSKINokUGPbWBShvxa1iLUgHz6dGGjVnQPNoFRtVBzMkVg==", - "dev": true, - "requires": { - "is-buffer": "^2.0.0", - "vfile": "^5.0.0" - } - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "dev": true - }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.1.tgz", - "integrity": "sha512-gYmSHcZZUEtYpTmaWaFJwsuUD70/rTY4v09COp8TGtOkix6gGxb/a8iTQByIY9ciTk9GwAwIXd/J9OPfM4Bvaw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, "unified-lint-rule": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", - "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dev": true, "requires": { - "wrapped": "^1.0.1" + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" } }, "unified-message-control": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-3.0.3.tgz", - "integrity": "sha512-oY5z2n8ugjpNHXOmcgrw0pQeJzavHS0VjPBP21tOcm7rc2C+5Q+kW9j5+gqtf8vfW/8sabbsK5+P+9QPwwEHDA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-4.0.0.tgz", + "integrity": "sha512-1b92N+VkPHftOsvXNOtkJm4wHlr+UDmTBF2dUzepn40oy9NxanJ9xS1RwUBTjXJwqr2K0kMbEyv1Krdsho7+Iw==", "dev": true, "requires": { - "unist-util-visit": "^2.0.0", - "vfile-location": "^3.0.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit": "^3.0.0", + "vfile": "^5.0.0", + "vfile-location": "^4.0.0", + "vfile-message": "^3.0.0" + }, + "dependencies": { + "unist-util-visit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz", + "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^4.0.0" + } + }, + "unist-util-visit-parents": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", + "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } + } } }, "unique-string": { @@ -19932,9 +21508,9 @@ } }, "unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz", + "integrity": "sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==", "dev": true }, "unist-util-inspect": { @@ -19947,45 +21523,87 @@ } }, "unist-util-is": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.3.tgz", - "integrity": "sha512-bTofCFVx0iQM8Jqb1TBDVRIQW03YkD3p66JOd/aCWuqzlLyUtx1ZAGw/u+Zw+SttKvSVcvTiKYbfrtLoLefykw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "dev": true }, "unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "dev": true }, "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0" + } + }, + "unist-util-to-list-of-char": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/unist-util-to-list-of-char/-/unist-util-to-list-of-char-0.1.3.tgz", + "integrity": "sha512-f8GrLHdhBKfaW6mzJc25BKeUOqhsuiRXlGrXBtb3pmRT3QCuYS+jH4g7Uf52hjV7TLQN4PGnjzrTFMFXAQaprA==", "dev": true, "requires": { - "@types/unist": "^2.0.2" + "unist-util-generated": "^1.1.6", + "unist-util-visit": "^1.4.0" + }, + "dependencies": { + "unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "dev": true + }, + "unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dev": true, + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dev": true, + "requires": { + "unist-util-is": "^3.0.0" + } + } } }, "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "dev": true, "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" } }, "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "dev": true, "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" + "unist-util-is": "^5.0.0" } }, "universalify": { @@ -20144,32 +21762,35 @@ } }, "vfile": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", - "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", + "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", "dev": true, "requires": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" } }, "vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", - "dev": true + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + } }, "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", + "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", "dev": true, "requires": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "unist-util-stringify-position": "^3.0.0" } }, "vfile-reporter": { @@ -20240,15 +21861,6 @@ "requires": { "has-flag": "^5.0.0" } - }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } } } }, @@ -20259,27 +21871,6 @@ "dev": true, "requires": { "vfile-message": "^3.0.0" - }, - "dependencies": { - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - }, - "vfile-message": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.1.tgz", - "integrity": "sha512-gYmSHcZZUEtYpTmaWaFJwsuUD70/rTY4v09COp8TGtOkix6gGxb/a8iTQByIY9ciTk9GwAwIXd/J9OPfM4Bvaw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } - } } }, "vfile-statistics": { @@ -20289,27 +21880,6 @@ "dev": true, "requires": { "vfile-message": "^3.0.0" - }, - "dependencies": { - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - }, - "vfile-message": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.1.tgz", - "integrity": "sha512-gYmSHcZZUEtYpTmaWaFJwsuUD70/rTY4v09COp8TGtOkix6gGxb/a8iTQByIY9ciTk9GwAwIXd/J9OPfM4Bvaw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } - } } }, "w3c-hr-time": { @@ -20339,6 +21909,12 @@ "makeerror": "1.0.x" } }, + "web-namespaces": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.0.tgz", + "integrity": "sha512-dE7ELZRVWh0ceQsRgkjLgsAvwTuv3kcjSY/hLjqL0llleUlQBDjE9JkB9FCBY5F2mnFEwiyJoowl8+NVGHe8dw==", + "dev": true + }, "webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", @@ -20482,12 +22058,6 @@ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index 0441f6cbf9..a5d0a64c1d 100644 --- a/package.json +++ b/package.json @@ -151,7 +151,7 @@ }, "devDependencies": { "@stylelint/prettier-config": "^2.0.0", - "@stylelint/remark-preset": "^2.0.0", + "@stylelint/remark-preset": "^3.0.0", "@types/balanced-match": "^1.0.1", "@types/debug": "^4.1.7", "@types/file-entry-cache": "^5.0.2", From 82e70f518374ed1d68813c5d44e5284467ae7a17 Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Mon, 16 Aug 2021 00:33:57 +0900 Subject: [PATCH 099/194] Bump actions/setup-node from v1 to v2 (#5481) Also, this change sets `cache: npm` (available since v2.2.0). See below: - https://github.com/actions/setup-node/releases/tag/v2.2.0 - https://github.com/actions/setup-node#caching-packages-dependencies --- .github/workflows/linting.yml | 3 ++- .github/workflows/testing.yml | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index d325a0bbad..d37c568b47 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -25,9 +25,10 @@ jobs: - uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node }} - uses: actions/setup-node@v1 + uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} + cache: npm - name: Install latest npm run: npm install --global npm@latest diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index de06f1fb6b..b54393a6f1 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -29,9 +29,10 @@ jobs: - uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node }} - uses: actions/setup-node@v1 + uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} + cache: npm - name: Install latest npm run: npm install --global npm@latest @@ -56,9 +57,10 @@ jobs: - uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node }} - uses: actions/setup-node@v1 + uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} + cache: npm - name: Install latest npm run: npm install --global npm@latest From ffb688de97df4503deb2f9ddcb6dafbc5ad09342 Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Mon, 16 Aug 2021 08:05:39 +0900 Subject: [PATCH 100/194] Add GitHub Actions for Dependabot configuration (#5482) `versioning-strategy` is unsupported for `github-actions`. See also: - https://github.com/stylelint/stylelint/pull/5481#issuecomment-899056059 - https://docs.github.com/en/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/configuration-options-for-dependency-updates --- .github/dependabot.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index c67d1285ae..1c7636467f 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -9,3 +9,12 @@ updates: - 'pr: dependencies' versioning-strategy: increase target-branch: 'v14' # TODO: Remove when releasing v14. + + - package-ecosystem: github-actions + directory: '/' + schedule: + interval: weekly + open-pull-requests-limit: 5 + labels: + - 'pr: dependencies' + target-branch: 'v14' # TODO: Remove when releasing v14. From b8f6b40f35ef110ad16241b552100e8265f8a54b Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Mon, 16 Aug 2021 23:38:45 +0900 Subject: [PATCH 101/194] Refactor to improve types for `declaration-bang-space-*` rules (#5483) This change removes `// @ts-nocheck` from the `declaration-bang-space-*` rules. Also, it improves the `declarationBangSpaceChecker()` utility. --- .../declaration-bang-space-after/index.js | 16 ++++----- .../declaration-bang-space-before/index.js | 16 ++++----- lib/rules/declarationBangSpaceChecker.js | 33 ++++++++++++++----- 3 files changed, 41 insertions(+), 24 deletions(-) diff --git a/lib/rules/declaration-bang-space-after/index.js b/lib/rules/declaration-bang-space-after/index.js index 7963d69e47..2df8a367b5 100644 --- a/lib/rules/declaration-bang-space-after/index.js +++ b/lib/rules/declaration-bang-space-after/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const declarationBangSpaceChecker = require('../declarationBangSpaceChecker'); @@ -17,12 +15,13 @@ const messages = ruleMessages(ruleName, { rejectedAfter: () => 'Unexpected whitespace after "!"', }); -function rule(expectation, options, context) { - const checker = whitespaceChecker('space', expectation, messages); +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, _secondaryOptions, context) => { + const checker = whitespaceChecker('space', primary, messages); return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: ['always', 'never'], }); @@ -40,6 +39,7 @@ function rule(expectation, options, context) { let bangIndex = index - declarationValueIndex(decl); const declValue = getDeclarationValue(decl); let target; + /** @type {(value: string) => void} */ let setFixed; if (bangIndex < declValue.length) { @@ -60,13 +60,13 @@ function rule(expectation, options, context) { const targetBefore = target.slice(0, bangIndex + 1); const targetAfter = target.slice(bangIndex + 1); - if (expectation === 'always') { + if (primary === 'always') { setFixed(targetBefore + targetAfter.replace(/^\s*/, ' ')); return true; } - if (expectation === 'never') { + if (primary === 'never') { setFixed(targetBefore + targetAfter.replace(/^\s*/, '')); return true; @@ -75,7 +75,7 @@ function rule(expectation, options, context) { : null, }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/declaration-bang-space-before/index.js b/lib/rules/declaration-bang-space-before/index.js index f3e81baa51..361d51839f 100644 --- a/lib/rules/declaration-bang-space-before/index.js +++ b/lib/rules/declaration-bang-space-before/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const declarationBangSpaceChecker = require('../declarationBangSpaceChecker'); @@ -17,12 +15,13 @@ const messages = ruleMessages(ruleName, { rejectedBefore: () => 'Unexpected whitespace before "!"', }); -function rule(expectation, options, context) { - const checker = whitespaceChecker('space', expectation, messages); +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, _secondaryOptions, context) => { + const checker = whitespaceChecker('space', primary, messages); return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: ['always', 'never'], }); @@ -40,6 +39,7 @@ function rule(expectation, options, context) { let bangIndex = index - declarationValueIndex(decl); const value = getDeclarationValue(decl); let target; + /** @type {(val: string) => void} */ let setFixed; if (bangIndex < value.length) { @@ -60,14 +60,14 @@ function rule(expectation, options, context) { const targetBefore = target.slice(0, bangIndex); const targetAfter = target.slice(bangIndex); - if (expectation === 'always') { + if (primary === 'always') { // eslint-disable-next-line prefer-template setFixed(targetBefore.replace(/\s*$/, '') + ' ' + targetAfter); return true; } - if (expectation === 'never') { + if (primary === 'never') { setFixed(targetBefore.replace(/\s*$/, '') + targetAfter); return true; @@ -76,7 +76,7 @@ function rule(expectation, options, context) { : null, }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/declarationBangSpaceChecker.js b/lib/rules/declarationBangSpaceChecker.js index d1a7c29eb3..eab4aa11d8 100644 --- a/lib/rules/declarationBangSpaceChecker.js +++ b/lib/rules/declarationBangSpaceChecker.js @@ -1,12 +1,24 @@ -// @ts-nocheck - 'use strict'; const declarationValueIndex = require('../utils/declarationValueIndex'); const report = require('../utils/report'); const styleSearch = require('style-search'); -module.exports = function (opts) { +/** @typedef {import('postcss').Declaration} Declaration */ + +/** @typedef {(args: { source: string, index: number, err: (message: string) => void }) => void} LocationChecker */ + +/** + * @param {{ + * root: import('postcss').Root, + * locationChecker: LocationChecker, + * result: import('stylelint').PostcssResult, + * checkedRuleName: string, + * fix: ((decl: Declaration, index: number) => void) | null, + * }} opts + * @returns {void} + */ +module.exports = function declarationBangSpaceChecker(opts) { opts.root.walkDecls((decl) => { const indexOffset = declarationValueIndex(decl); const declString = decl.toString(); @@ -21,18 +33,23 @@ module.exports = function (opts) { }); }); - function check(source, index, node) { + /** + * @param {string} source + * @param {number} index + * @param {Declaration} decl + */ + function check(source, index, decl) { opts.locationChecker({ source, index, - err: (m) => { - if (opts.fix && opts.fix(node, index)) { + err: (message) => { + if (opts.fix && opts.fix(decl, index)) { return; } report({ - message: m, - node, + message, + node: decl, index, result: opts.result, ruleName: opts.checkedRuleName, From 578fb898b13c56219487c6bd0e02b6154bb0fd85 Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Mon, 16 Aug 2021 23:41:56 +0900 Subject: [PATCH 102/194] Refactor to improve types for `declaration-block-*` rules (#5484) This change removes `// @ts-nocheck` from the `declaration-block-*` rules. --- lib/reference/shorthandData.js | 1 + .../index.js | 9 +++-- .../index.js | 25 ++++++++----- .../index.js | 16 ++++----- .../index.js | 10 +++--- .../index.js | 22 +++++++----- .../index.js | 18 ++++++---- .../index.js | 22 +++++++----- .../index.js | 24 ++++++++----- .../index.js | 13 ++++--- .../index.js | 35 +++++++++++++------ 11 files changed, 120 insertions(+), 75 deletions(-) diff --git a/lib/reference/shorthandData.js b/lib/reference/shorthandData.js index 59960f1056..3dd5bc8793 100644 --- a/lib/reference/shorthandData.js +++ b/lib/reference/shorthandData.js @@ -1,5 +1,6 @@ 'use strict'; +/** @type {Record} */ module.exports = { margin: ['margin-top', 'margin-bottom', 'margin-left', 'margin-right'], padding: ['padding-top', 'padding-bottom', 'padding-left', 'padding-right'], diff --git a/lib/rules/declaration-block-no-duplicate-custom-properties/index.js b/lib/rules/declaration-block-no-duplicate-custom-properties/index.js index 59712cf56d..e73819a0a0 100644 --- a/lib/rules/declaration-block-no-duplicate-custom-properties/index.js +++ b/lib/rules/declaration-block-no-duplicate-custom-properties/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const eachDeclarationBlock = require('../../utils/eachDeclarationBlock'); @@ -15,9 +13,10 @@ const messages = ruleMessages(ruleName, { rejected: (property) => `Unexpected duplicate "${property}"`, }); -function rule(on) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary) => { return (root, result) => { - const validOptions = validateOptions(result, ruleName, { actual: on }); + const validOptions = validateOptions(result, ruleName, { actual: primary }); if (!validOptions) { return; @@ -54,7 +53,7 @@ function rule(on) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/declaration-block-no-duplicate-properties/index.js b/lib/rules/declaration-block-no-duplicate-properties/index.js index 5668bd6e91..71ade3a9a9 100644 --- a/lib/rules/declaration-block-no-duplicate-properties/index.js +++ b/lib/rules/declaration-block-no-duplicate-properties/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const eachDeclarationBlock = require('../../utils/eachDeclarationBlock'); @@ -17,14 +15,15 @@ const messages = ruleMessages(ruleName, { rejected: (property) => `Unexpected duplicate "${property}"`, }); -function rule(on, options) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, secondaryOptions) => { return (root, result) => { const validOptions = validateOptions( result, ruleName, - { actual: on }, + { actual: primary }, { - actual: options, + actual: secondaryOptions, possible: { ignore: ['consecutive-duplicates', 'consecutive-duplicates-with-different-values'], ignoreProperties: [isString], @@ -38,7 +37,9 @@ function rule(on, options) { } eachDeclarationBlock(root, (eachDecl) => { + /** @type {string[]} */ const decls = []; + /** @type {string[]} */ const values = []; eachDecl((decl) => { @@ -54,7 +55,7 @@ function rule(on, options) { } // Return early if the property is to be ignored - if (optionsMatches(options, 'ignoreProperties', prop)) { + if (optionsMatches(secondaryOptions, 'ignoreProperties', prop)) { return; } @@ -66,7 +67,13 @@ function rule(on, options) { const indexDuplicate = decls.indexOf(prop.toLowerCase()); if (indexDuplicate !== -1) { - if (optionsMatches(options, 'ignore', 'consecutive-duplicates-with-different-values')) { + if ( + optionsMatches( + secondaryOptions, + 'ignore', + 'consecutive-duplicates-with-different-values', + ) + ) { // if duplicates are not consecutive if (indexDuplicate !== decls.length - 1) { report({ @@ -95,7 +102,7 @@ function rule(on, options) { } if ( - optionsMatches(options, 'ignore', 'consecutive-duplicates') && + optionsMatches(secondaryOptions, 'ignore', 'consecutive-duplicates') && indexDuplicate === decls.length - 1 ) { return; @@ -114,7 +121,7 @@ function rule(on, options) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/declaration-block-no-redundant-longhand-properties/index.js b/lib/rules/declaration-block-no-redundant-longhand-properties/index.js index e394e7cea5..c3f1b33911 100644 --- a/lib/rules/declaration-block-no-redundant-longhand-properties/index.js +++ b/lib/rules/declaration-block-no-redundant-longhand-properties/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const arrayEqual = require('../../utils/arrayEqual'); @@ -18,14 +16,15 @@ const messages = ruleMessages(ruleName, { expected: (props) => `Expected shorthand property "${props}"`, }); -function rule(actual, options) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, secondaryOptions) => { return (root, result) => { const validOptions = validateOptions( result, ruleName, - { actual }, + { actual: primary }, { - actual: options, + actual: secondaryOptions, possible: { ignoreShorthands: [isString, isRegExp], }, @@ -38,8 +37,8 @@ function rule(actual, options) { } const longhandProperties = Object.entries(shorthandData).reduce( - (longhandProps, [key, values]) => { - if (optionsMatches(options, 'ignoreShorthands', key)) { + (/** @type {Record} */ longhandProps, [key, values]) => { + if (optionsMatches(secondaryOptions, 'ignoreShorthands', key)) { return longhandProps; } @@ -53,6 +52,7 @@ function rule(actual, options) { ); eachDeclarationBlock(root, (eachDecl) => { + /** @type {Record} */ const longhandDeclarations = {}; eachDecl((decl) => { @@ -98,7 +98,7 @@ function rule(actual, options) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/declaration-block-no-shorthand-property-overrides/index.js b/lib/rules/declaration-block-no-shorthand-property-overrides/index.js index a40e26b3bb..ef07bed496 100644 --- a/lib/rules/declaration-block-no-shorthand-property-overrides/index.js +++ b/lib/rules/declaration-block-no-shorthand-property-overrides/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const eachDeclarationBlock = require('../../utils/eachDeclarationBlock'); @@ -15,15 +13,17 @@ const messages = ruleMessages(ruleName, { rejected: (shorthand, original) => `Unexpected shorthand "${shorthand}" after "${original}"`, }); -function rule(actual) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary) => { return (root, result) => { - const validOptions = validateOptions(result, ruleName, { actual }); + const validOptions = validateOptions(result, ruleName, { actual: primary }); if (!validOptions) { return; } eachDeclarationBlock(root, (eachDecl) => { + /** @type {Record} */ const declarations = {}; eachDecl((decl) => { @@ -54,7 +54,7 @@ function rule(actual) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/declaration-block-semicolon-newline-after/index.js b/lib/rules/declaration-block-semicolon-newline-after/index.js index 65c15f69e8..a27238a3b9 100644 --- a/lib/rules/declaration-block-semicolon-newline-after/index.js +++ b/lib/rules/declaration-block-semicolon-newline-after/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const blockString = require('../../utils/blockString'); @@ -9,6 +7,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const whitespaceChecker = require('../../utils/whitespaceChecker'); +const { isAtRule, isRule } = require('../../utils/typeGuards'); const ruleName = 'declaration-block-semicolon-newline-after'; @@ -18,12 +17,13 @@ const messages = ruleMessages(ruleName, { rejectedAfterMultiLine: () => 'Unexpected newline after ";" in a multi-line declaration block', }); -function rule(expectation, options, context) { - const checker = whitespaceChecker('newline', expectation, messages); +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, _secondaryOptions, context) => { + const checker = whitespaceChecker('newline', primary, messages); return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: ['always', 'always-multi-line', 'never-multi-line'], }); @@ -35,6 +35,12 @@ function rule(expectation, options, context) { // Ignore last declaration if there's no trailing semicolon const parentRule = decl.parent; + if (!parentRule) throw new Error('A parent node must be present'); + + if (!isAtRule(parentRule) && !isRule(parentRule)) { + return; + } + if (!parentRule.raws.semicolon && parentRule.last === decl) { return; } @@ -58,7 +64,7 @@ function rule(expectation, options, context) { lineCheckStr: blockString(parentRule), err: (m) => { if (context.fix) { - if (expectation.startsWith('always')) { + if (primary.startsWith('always')) { const index = nodeToCheck.raws.before.search(/\r?\n/); if (index >= 0) { @@ -70,7 +76,7 @@ function rule(expectation, options, context) { return; } - if (expectation === 'never-multi-line') { + if (primary === 'never-multi-line') { nodeToCheck.raws.before = ''; return; @@ -88,7 +94,7 @@ function rule(expectation, options, context) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/declaration-block-semicolon-newline-before/index.js b/lib/rules/declaration-block-semicolon-newline-before/index.js index 65550e7e99..c8d10a85e7 100644 --- a/lib/rules/declaration-block-semicolon-newline-before/index.js +++ b/lib/rules/declaration-block-semicolon-newline-before/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const blockString = require('../../utils/blockString'); @@ -7,6 +5,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const whitespaceChecker = require('../../utils/whitespaceChecker'); +const { isAtRule, isRule } = require('../../utils/typeGuards'); const ruleName = 'declaration-block-semicolon-newline-before'; @@ -17,12 +16,13 @@ const messages = ruleMessages(ruleName, { 'Unexpected whitespace before ";" in a multi-line declaration block', }); -function rule(expectation) { - const checker = whitespaceChecker('newline', expectation, messages); +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary) => { + const checker = whitespaceChecker('newline', primary, messages); return function (root, result) { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: ['always', 'always-multi-line', 'never-multi-line'], }); @@ -33,6 +33,12 @@ function rule(expectation) { root.walkDecls((decl) => { const parentRule = decl.parent; + if (!parentRule) throw new Error('A parent node must be present'); + + if (!isAtRule(parentRule) && !isRule(parentRule)) { + return; + } + if (!parentRule.raws.semicolon && parentRule.last === decl) { return; } @@ -55,7 +61,7 @@ function rule(expectation) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/declaration-block-semicolon-space-after/index.js b/lib/rules/declaration-block-semicolon-space-after/index.js index 4ef28ec4cf..c661c4ee0c 100644 --- a/lib/rules/declaration-block-semicolon-space-after/index.js +++ b/lib/rules/declaration-block-semicolon-space-after/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const blockString = require('../../utils/blockString'); @@ -8,6 +6,7 @@ const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); const whitespaceChecker = require('../../utils/whitespaceChecker'); +const { isAtRule, isRule } = require('../../utils/typeGuards'); const ruleName = 'declaration-block-semicolon-space-after'; @@ -20,12 +19,13 @@ const messages = ruleMessages(ruleName, { 'Unexpected whitespace after ";" in a single-line declaration block', }); -function rule(expectation, options, context) { - const checker = whitespaceChecker('space', expectation, messages); +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, _secondaryOptions, context) => { + const checker = whitespaceChecker('space', primary, messages); return function (root, result) { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: ['always', 'never', 'always-single-line', 'never-single-line'], }); @@ -37,6 +37,12 @@ function rule(expectation, options, context) { // Ignore last declaration if there's no trailing semicolon const parentRule = decl.parent; + if (!parentRule) throw new Error('A parent node must be present'); + + if (!isAtRule(parentRule) && !isRule(parentRule)) { + return; + } + if (!parentRule.raws.semicolon && parentRule.last === decl) { return; } @@ -53,13 +59,13 @@ function rule(expectation, options, context) { lineCheckStr: blockString(parentRule), err: (m) => { if (context.fix) { - if (expectation.startsWith('always')) { + if (primary.startsWith('always')) { nextDecl.raws.before = ' '; return; } - if (expectation.startsWith('never')) { + if (primary.startsWith('never')) { nextDecl.raws.before = ''; return; @@ -77,7 +83,7 @@ function rule(expectation, options, context) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/declaration-block-semicolon-space-before/index.js b/lib/rules/declaration-block-semicolon-space-before/index.js index 2ba8e71b3e..f3eaa222e9 100644 --- a/lib/rules/declaration-block-semicolon-space-before/index.js +++ b/lib/rules/declaration-block-semicolon-space-before/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const blockString = require('../../utils/blockString'); @@ -9,6 +7,7 @@ const ruleMessages = require('../../utils/ruleMessages'); const setDeclarationValue = require('../../utils/setDeclarationValue'); const validateOptions = require('../../utils/validateOptions'); const whitespaceChecker = require('../../utils/whitespaceChecker'); +const { isAtRule, isRule } = require('../../utils/typeGuards'); const ruleName = 'declaration-block-semicolon-space-before'; @@ -21,12 +20,13 @@ const messages = ruleMessages(ruleName, { 'Unexpected whitespace before ";" in a single-line declaration block', }); -function rule(expectation, options, context) { - const checker = whitespaceChecker('space', expectation, messages); +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, _secondaryOptions, context) => { + const checker = whitespaceChecker('space', primary, messages); return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: ['always', 'never', 'always-single-line', 'never-single-line'], }); @@ -38,6 +38,12 @@ function rule(expectation, options, context) { // Ignore last declaration if there's no trailing semicolon const parentRule = decl.parent; + if (!parentRule) throw new Error('A parent node must be present'); + + if (!isAtRule(parentRule) && !isRule(parentRule)) { + return; + } + if (!parentRule.raws.semicolon && parentRule.last === decl) { return; } @@ -52,7 +58,7 @@ function rule(expectation, options, context) { if (context.fix) { const value = getDeclarationValue(decl); - if (expectation.startsWith('always')) { + if (primary.startsWith('always')) { if (decl.important) { decl.raws.important = ' !important '; } else { @@ -62,8 +68,8 @@ function rule(expectation, options, context) { return; } - if (expectation.startsWith('never')) { - if (decl.important) { + if (primary.startsWith('never')) { + if (decl.raws.important) { decl.raws.important = decl.raws.important.replace(/\s*$/, ''); } else { setDeclarationValue(decl, value.replace(/\s*$/, '')); @@ -84,7 +90,7 @@ function rule(expectation, options, context) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/declaration-block-single-line-max-declarations/index.js b/lib/rules/declaration-block-single-line-max-declarations/index.js index 37e73e888f..845cfa7b98 100644 --- a/lib/rules/declaration-block-single-line-max-declarations/index.js +++ b/lib/rules/declaration-block-single-line-max-declarations/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const beforeBlockString = require('../../utils/beforeBlockString'); @@ -16,10 +14,11 @@ const messages = ruleMessages(ruleName, { expected: (max) => `Expected no more than ${max} ${max === 1 ? 'declaration' : 'declarations'}`, }); -function rule(quantity) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary) => { return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: quantity, + actual: primary, possible: [isNumber], }); @@ -38,12 +37,12 @@ function rule(quantity) { const decls = ruleNode.nodes.filter((node) => node.type === 'decl'); - if (decls.length <= quantity) { + if (decls.length <= primary) { return; } report({ - message: messages.expected(quantity), + message: messages.expected(primary), node: ruleNode, index: beforeBlockString(ruleNode, { noRawBefore: true }).length, result, @@ -51,7 +50,7 @@ function rule(quantity) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/declaration-block-trailing-semicolon/index.js b/lib/rules/declaration-block-trailing-semicolon/index.js index 02df6dfb02..8719a79f06 100644 --- a/lib/rules/declaration-block-trailing-semicolon/index.js +++ b/lib/rules/declaration-block-trailing-semicolon/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const hasBlock = require('../../utils/hasBlock'); @@ -15,17 +13,18 @@ const messages = ruleMessages(ruleName, { rejected: 'Unexpected trailing semicolon', }); -function rule(expectation, options, context) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, secondaryOptions, context) => { return (root, result) => { const validOptions = validateOptions( result, ruleName, { - actual: expectation, + actual: primary, possible: ['always', 'never'], }, { - actual: options, + actual: secondaryOptions, possible: { ignore: ['single-declaration'], }, @@ -38,6 +37,8 @@ function rule(expectation, options, context) { } root.walkAtRules((atRule) => { + if (!atRule.parent) throw new Error('A parent node must be present'); + if (atRule.parent === root) { return; } @@ -54,6 +55,8 @@ function rule(expectation, options, context) { }); root.walkDecls((decl) => { + if (!decl.parent) throw new Error('A parent node must be present'); + if (decl.parent.type === 'object') { return; } @@ -65,16 +68,26 @@ function rule(expectation, options, context) { checkLastNode(decl); }); + /** + * @param {import('postcss').Node} node + */ function checkLastNode(node) { + if (!node.parent) throw new Error('A parent node must be present'); + const hasSemicolon = node.parent.raws.semicolon; - const ignoreSingleDeclaration = optionsMatches(options, 'ignore', 'single-declaration'); - let message; + const ignoreSingleDeclaration = optionsMatches( + secondaryOptions, + 'ignore', + 'single-declaration', + ); if (ignoreSingleDeclaration && node.parent.first === node) { return; } - if (expectation === 'always') { + let message; + + if (primary === 'always') { if (hasSemicolon) { return; } @@ -92,7 +105,7 @@ function rule(expectation, options, context) { } message = messages.expected; - } else if (expectation === 'never') { + } else if (primary === 'never') { if (!hasSemicolon) { return; } @@ -105,6 +118,8 @@ function rule(expectation, options, context) { } message = messages.rejected; + } else { + throw new Error(`Unexpected primary option: "${primary}"`); } report({ @@ -116,7 +131,7 @@ function rule(expectation, options, context) { }); } }; -} +}; rule.ruleName = ruleName; rule.messages = messages; From 52f2474a5fb884f1e5bd589f426f0b807946bab1 Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Thu, 19 Aug 2021 01:52:10 +0900 Subject: [PATCH 103/194] Refactor to improve types for `declaration-*` rules (#5485) This change removes `// @ts-nocheck` from the remaining `declaration-*` rules. Also, this adds 2 type parameters to the `StylelintRule` type to pass the type-check. --- .../declaration-bang-space-after/index.js | 2 + .../declaration-bang-space-before/index.js | 2 + .../declaration-colon-newline-after/index.js | 14 ++++--- .../declaration-colon-space-after/index.js | 19 ++++++---- .../declaration-colon-space-before/index.js | 19 ++++++---- .../declaration-empty-line-before/index.js | 38 ++++++++++++------- lib/rules/declaration-no-important/index.js | 9 ++--- .../index.js | 22 ++++++----- .../index.js | 18 +++++---- .../index.js | 18 +++++---- .../index.js | 18 +++++---- lib/rules/declarationBangSpaceChecker.js | 2 +- lib/rules/declarationColonSpaceChecker.js | 19 +++++++--- types/stylelint/index.d.ts | 6 +-- 14 files changed, 126 insertions(+), 80 deletions(-) diff --git a/lib/rules/declaration-bang-space-after/index.js b/lib/rules/declaration-bang-space-after/index.js index 2df8a367b5..e02e04cde3 100644 --- a/lib/rules/declaration-bang-space-after/index.js +++ b/lib/rules/declaration-bang-space-after/index.js @@ -71,6 +71,8 @@ const rule = (primary, _secondaryOptions, context) => { return true; } + + return false; } : null, }); diff --git a/lib/rules/declaration-bang-space-before/index.js b/lib/rules/declaration-bang-space-before/index.js index 361d51839f..1adf6266cb 100644 --- a/lib/rules/declaration-bang-space-before/index.js +++ b/lib/rules/declaration-bang-space-before/index.js @@ -72,6 +72,8 @@ const rule = (primary, _secondaryOptions, context) => { return true; } + + return false; } : null, }); diff --git a/lib/rules/declaration-colon-newline-after/index.js b/lib/rules/declaration-colon-newline-after/index.js index e2f3c2a326..b5c00f1435 100644 --- a/lib/rules/declaration-colon-newline-after/index.js +++ b/lib/rules/declaration-colon-newline-after/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const declarationValueIndex = require('../../utils/declarationValueIndex'); @@ -16,12 +14,13 @@ const messages = ruleMessages(ruleName, { expectedAfterMultiLine: () => 'Expected newline after ":" with a multi-line declaration', }); -function rule(expectation, options, context) { - const checker = whitespaceChecker('newline', expectation, messages); +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, _secondaryOptions, context) => { + const checker = whitespaceChecker('newline', primary, messages); return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: ['always', 'always-multi-line'], }); @@ -57,6 +56,9 @@ function rule(expectation, options, context) { err: (m) => { if (context.fix) { const between = decl.raws.between; + + if (between == null) throw new Error('`between` must be present'); + const betweenStart = declarationValueIndex(decl) - between.length; const sliceIndex = indexToCheck - betweenStart + 1; const betweenBefore = between.slice(0, sliceIndex); @@ -83,7 +85,7 @@ function rule(expectation, options, context) { } }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/declaration-colon-space-after/index.js b/lib/rules/declaration-colon-space-after/index.js index 5ae72e1cce..91b235fb63 100644 --- a/lib/rules/declaration-colon-space-after/index.js +++ b/lib/rules/declaration-colon-space-after/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const declarationColonSpaceChecker = require('../declarationColonSpaceChecker'); @@ -16,12 +14,13 @@ const messages = ruleMessages(ruleName, { expectedAfterSingleLine: () => 'Expected single space after ":" with a single-line declaration', }); -function rule(expectation, options, context) { - const checker = whitespaceChecker('space', expectation, messages); +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, _secondaryOptions, context) => { + const checker = whitespaceChecker('space', primary, messages); return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: ['always', 'never', 'always-single-line'], }); @@ -39,24 +38,28 @@ function rule(expectation, options, context) { const colonIndex = index - declarationValueIndex(decl); const between = decl.raws.between; - if (expectation.startsWith('always')) { + if (between == null) throw new Error('`between` must be present'); + + if (primary.startsWith('always')) { decl.raws.between = between.slice(0, colonIndex) + between.slice(colonIndex).replace(/^:\s*/, ': '); return true; } - if (expectation === 'never') { + if (primary === 'never') { decl.raws.between = between.slice(0, colonIndex) + between.slice(colonIndex).replace(/^:\s*/, ':'); return true; } + + return false; } : null, }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/declaration-colon-space-before/index.js b/lib/rules/declaration-colon-space-before/index.js index d113c6ad8a..d9cce89917 100644 --- a/lib/rules/declaration-colon-space-before/index.js +++ b/lib/rules/declaration-colon-space-before/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const declarationColonSpaceChecker = require('../declarationColonSpaceChecker'); @@ -15,12 +13,13 @@ const messages = ruleMessages(ruleName, { rejectedBefore: () => 'Unexpected whitespace before ":"', }); -function rule(expectation, options, context) { - const checker = whitespaceChecker('space', expectation, messages); +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, _secondaryOptions, context) => { + const checker = whitespaceChecker('space', primary, messages); return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: ['always', 'never'], }); @@ -38,24 +37,28 @@ function rule(expectation, options, context) { const colonIndex = index - declarationValueIndex(decl); const between = decl.raws.between; - if (expectation === 'always') { + if (between == null) throw new Error('`between` must be present'); + + if (primary === 'always') { decl.raws.between = between.slice(0, colonIndex).replace(/\s*$/, ' ') + between.slice(colonIndex); return true; } - if (expectation === 'never') { + if (primary === 'never') { decl.raws.between = between.slice(0, colonIndex).replace(/\s*$/, '') + between.slice(colonIndex); return true; } + + return false; } : null, }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/declaration-empty-line-before/index.js b/lib/rules/declaration-empty-line-before/index.js index 86a7a7cb83..bf0512cd6c 100644 --- a/lib/rules/declaration-empty-line-before/index.js +++ b/lib/rules/declaration-empty-line-before/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const addEmptyLineBefore = require('../../utils/addEmptyLineBefore'); @@ -17,6 +15,7 @@ const removeEmptyLinesBefore = require('../../utils/removeEmptyLinesBefore'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isAtRule, isRule } = require('../../utils/typeGuards'); const ruleName = 'declaration-empty-line-before'; @@ -25,17 +24,18 @@ const messages = ruleMessages(ruleName, { rejected: 'Unexpected empty line before declaration', }); -function rule(expectation, options, context) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, secondaryOptions, context) => { return (root, result) => { const validOptions = validateOptions( result, ruleName, { - actual: expectation, + actual: primary, possible: ['always', 'never'], }, { - actual: options, + actual: secondaryOptions, possible: { except: ['first-nested', 'after-comment', 'after-declaration'], ignore: [ @@ -57,11 +57,19 @@ function rule(expectation, options, context) { const prop = decl.prop; const parent = decl.parent; + if (parent == null) { + return; + } + // Ignore the first node if (isFirstNodeOfRoot(decl)) { return; } + if (!isAtRule(parent) && !isRule(parent)) { + return; + } + if (!isStandardSyntaxDeclaration(decl)) { return; } @@ -71,38 +79,38 @@ function rule(expectation, options, context) { } // Optionally ignore the node if a comment precedes it - if (optionsMatches(options, 'ignore', 'after-comment') && isAfterComment(decl)) { + if (optionsMatches(secondaryOptions, 'ignore', 'after-comment') && isAfterComment(decl)) { return; } // Optionally ignore the node if a declaration precedes it if ( - optionsMatches(options, 'ignore', 'after-declaration') && + optionsMatches(secondaryOptions, 'ignore', 'after-declaration') && isAfterStandardPropertyDeclaration(decl) ) { return; } // Optionally ignore the node if it is the first nested - if (optionsMatches(options, 'ignore', 'first-nested') && isFirstNested(decl)) { + if (optionsMatches(secondaryOptions, 'ignore', 'first-nested') && isFirstNested(decl)) { return; } // Optionally ignore nodes inside single-line blocks if ( - optionsMatches(options, 'ignore', 'inside-single-line-block') && + optionsMatches(secondaryOptions, 'ignore', 'inside-single-line-block') && isSingleLineString(blockString(parent)) ) { return; } - let expectEmptyLineBefore = expectation === 'always'; + let expectEmptyLineBefore = primary === 'always'; // Optionally reverse the expectation if any exceptions apply if ( - (optionsMatches(options, 'except', 'first-nested') && isFirstNested(decl)) || - (optionsMatches(options, 'except', 'after-comment') && isAfterComment(decl)) || - (optionsMatches(options, 'except', 'after-declaration') && + (optionsMatches(secondaryOptions, 'except', 'first-nested') && isFirstNested(decl)) || + (optionsMatches(secondaryOptions, 'except', 'after-comment') && isAfterComment(decl)) || + (optionsMatches(secondaryOptions, 'except', 'after-declaration') && isAfterStandardPropertyDeclaration(decl)) ) { expectEmptyLineBefore = !expectEmptyLineBefore; @@ -118,6 +126,8 @@ function rule(expectation, options, context) { // Fix if (context.fix) { + if (context.newline == null) return; + if (expectEmptyLineBefore) { addEmptyLineBefore(decl, context.newline); } else { @@ -132,7 +142,7 @@ function rule(expectation, options, context) { report({ message, node: decl, result, ruleName }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/declaration-no-important/index.js b/lib/rules/declaration-no-important/index.js index 5dd75cb29e..0fd42bee69 100644 --- a/lib/rules/declaration-no-important/index.js +++ b/lib/rules/declaration-no-important/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const report = require('../../utils/report'); @@ -12,9 +10,10 @@ const messages = ruleMessages(ruleName, { rejected: 'Unexpected !important', }); -function rule(actual) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary) => { return (root, result) => { - const validOptions = validateOptions(result, ruleName, { actual }); + const validOptions = validateOptions(result, ruleName, { actual: primary }); if (!validOptions) { return; @@ -34,7 +33,7 @@ function rule(actual) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/declaration-property-unit-allowed-list/index.js b/lib/rules/declaration-property-unit-allowed-list/index.js index 07b6da13e5..9b35001fbf 100644 --- a/lib/rules/declaration-property-unit-allowed-list/index.js +++ b/lib/rules/declaration-property-unit-allowed-list/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const declarationValueIndex = require('../../utils/declarationValueIndex'); @@ -19,17 +17,18 @@ const messages = ruleMessages(ruleName, { rejected: (property, unit) => `Unexpected unit "${unit}" for property "${property}"`, }); -function rule(list, options) { +/** @type {import('stylelint').StylelintRule>} */ +const rule = (primary, secondaryOptions) => { return (root, result) => { const validOptions = validateOptions( result, ruleName, { - actual: list, + actual: primary, possible: [isPlainObject], }, { - actual: options, + actual: secondaryOptions, possible: { ignore: ['inside-function'], }, @@ -47,10 +46,15 @@ function rule(list, options) { const unprefixedProp = vendor.unprefixed(prop); - const propKey = Object.keys(list).find((propIdentifier) => + const propKey = Object.keys(primary).find((propIdentifier) => matchesStringOrRegExp(unprefixedProp, propIdentifier), ); - const propList = list[propKey]; + + if (!propKey) { + return; + } + + const propList = primary[propKey]; if (!propList) { return; @@ -63,7 +67,7 @@ function rule(list, options) { return false; } - if (optionsMatches(options, 'ignore', 'inside-function')) { + if (optionsMatches(secondaryOptions, 'ignore', 'inside-function')) { return false; } } @@ -88,7 +92,7 @@ function rule(list, options) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/declaration-property-unit-disallowed-list/index.js b/lib/rules/declaration-property-unit-disallowed-list/index.js index 6d971aa93b..c2113686f3 100644 --- a/lib/rules/declaration-property-unit-disallowed-list/index.js +++ b/lib/rules/declaration-property-unit-disallowed-list/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const declarationValueIndex = require('../../utils/declarationValueIndex'); @@ -18,10 +16,11 @@ const messages = ruleMessages(ruleName, { rejected: (property, unit) => `Unexpected unit "${unit}" for property "${property}"`, }); -function rule(list) { +/** @type {import('stylelint').StylelintRule>} */ +const rule = (primary) => { return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: list, + actual: primary, possible: [isPlainObject], }); @@ -35,10 +34,15 @@ function rule(list) { const unprefixedProp = vendor.unprefixed(prop); - const propKey = Object.keys(list).find((propIdentifier) => + const propKey = Object.keys(primary).find((propIdentifier) => matchesStringOrRegExp(unprefixedProp, propIdentifier), ); - const propList = list[propKey]; + + if (!propKey) { + return; + } + + const propList = primary[propKey]; if (!propList) { return; @@ -70,7 +74,7 @@ function rule(list) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/declaration-property-value-allowed-list/index.js b/lib/rules/declaration-property-value-allowed-list/index.js index 5b19224a79..7177e31be6 100644 --- a/lib/rules/declaration-property-value-allowed-list/index.js +++ b/lib/rules/declaration-property-value-allowed-list/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); @@ -15,10 +13,11 @@ const messages = ruleMessages(ruleName, { rejected: (property, value) => `Unexpected value "${value}" for property "${property}"`, }); -function rule(list) { +/** @type {import('stylelint').StylelintRule>} */ +const rule = (primary) => { return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: list, + actual: primary, possible: [isPlainObject], }); @@ -31,10 +30,15 @@ function rule(list) { const value = decl.value; const unprefixedProp = vendor.unprefixed(prop); - const propKey = Object.keys(list).find((propIdentifier) => + const propKey = Object.keys(primary).find((propIdentifier) => matchesStringOrRegExp(unprefixedProp, propIdentifier), ); - const propList = list[propKey]; + + if (!propKey) { + return; + } + + const propList = primary[propKey]; if (!propList || propList.length === 0) { return; @@ -52,7 +56,7 @@ function rule(list) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/declaration-property-value-disallowed-list/index.js b/lib/rules/declaration-property-value-disallowed-list/index.js index dc69e1fd84..77af31eff2 100644 --- a/lib/rules/declaration-property-value-disallowed-list/index.js +++ b/lib/rules/declaration-property-value-disallowed-list/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp'); @@ -15,10 +13,11 @@ const messages = ruleMessages(ruleName, { rejected: (property, value) => `Unexpected value "${value}" for property "${property}"`, }); -function rule(list) { +/** @type {import('stylelint').StylelintRule>} */ +const rule = (primary) => { return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: list, + actual: primary, possible: [isPlainObject], }); @@ -31,10 +30,15 @@ function rule(list) { const value = decl.value; const unprefixedProp = vendor.unprefixed(prop); - const propKey = Object.keys(list).find((propIdentifier) => + const propKey = Object.keys(primary).find((propIdentifier) => matchesStringOrRegExp(unprefixedProp, propIdentifier), ); - const propList = list[propKey]; + + if (!propKey) { + return; + } + + const propList = primary[propKey]; if (!propList || propList.length === 0) { return; @@ -52,7 +56,7 @@ function rule(list) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/declarationBangSpaceChecker.js b/lib/rules/declarationBangSpaceChecker.js index eab4aa11d8..ad17cd22ff 100644 --- a/lib/rules/declarationBangSpaceChecker.js +++ b/lib/rules/declarationBangSpaceChecker.js @@ -14,7 +14,7 @@ const styleSearch = require('style-search'); * locationChecker: LocationChecker, * result: import('stylelint').PostcssResult, * checkedRuleName: string, - * fix: ((decl: Declaration, index: number) => void) | null, + * fix: ((decl: Declaration, index: number) => boolean) | null, * }} opts * @returns {void} */ diff --git a/lib/rules/declarationColonSpaceChecker.js b/lib/rules/declarationColonSpaceChecker.js index aa179c86e7..1f84e1d300 100644 --- a/lib/rules/declarationColonSpaceChecker.js +++ b/lib/rules/declarationColonSpaceChecker.js @@ -1,12 +1,21 @@ -// @ts-nocheck - 'use strict'; const declarationValueIndex = require('../utils/declarationValueIndex'); const isStandardSyntaxDeclaration = require('../utils/isStandardSyntaxDeclaration'); const report = require('../utils/report'); -module.exports = function (opts) { +/** @typedef {(args: { source: string, index: number, lineCheckStr: string, err: (message: string) => void }) => void} LocationChecker */ + +/** + * @param {{ + * root: import('postcss').Root, + * locationChecker: LocationChecker, + * fix: ((decl: import('postcss').Declaration, index: number) => boolean) | null, + * result: import('stylelint').PostcssResult, + * checkedRuleName: string, + * }} opts + */ +module.exports = function declarationColonSpaceChecker(opts) { opts.root.walkDecls((decl) => { if (!isStandardSyntaxDeclaration(decl)) { return; @@ -28,13 +37,13 @@ module.exports = function (opts) { source: propPlusColon, index: i, lineCheckStr: decl.value, - err: (m) => { + err: (message) => { if (opts.fix && opts.fix(decl, i)) { return; } report({ - message: m, + message, node: decl, index: decl.prop.toString().length + 1, result: opts.result, diff --git a/types/stylelint/index.d.ts b/types/stylelint/index.d.ts index 8e83d41a5c..87fc3aaac2 100644 --- a/types/stylelint/index.d.ts +++ b/types/stylelint/index.d.ts @@ -146,9 +146,9 @@ declare module 'stylelint' { export type StylelintRuleMessages = Record string)>; - export type StylelintRule = (( - primaryOption: any, - secondaryOptions: Record, + export type StylelintRule

= (( + primaryOption: P, + secondaryOptions: Record, context: StylelintPluginContext, ) => (root: Root, result: PostcssResult) => Promise | void) & { ruleName: string; From 544d85763f2a36ac83aa5d924e41713b1177d3bf Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Thu, 19 Aug 2021 01:55:42 +0900 Subject: [PATCH 104/194] Refactor to improve types for `font-*` rules (#5486) This change removes `// @ts-nocheck` from the `font-*` rules. --- lib/rules/font-family-name-quotes/index.js | 46 ++++++++++++++----- .../font-family-no-duplicate-names/index.js | 23 ++++++---- .../index.js | 38 +++++++++------ lib/rules/font-weight-notation/index.js | 32 +++++++++---- lib/utils/findFontFamily.js | 2 +- 5 files changed, 96 insertions(+), 45 deletions(-) diff --git a/lib/rules/font-family-name-quotes/index.js b/lib/rules/font-family-name-quotes/index.js index abe9c4478c..a66fc8906c 100644 --- a/lib/rules/font-family-name-quotes/index.js +++ b/lib/rules/font-family-name-quotes/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const findFontFamily = require('../../utils/findFontFamily'); @@ -17,6 +15,10 @@ const messages = ruleMessages(ruleName, { rejected: (family) => `Unexpected quotes around "${family}"`, }); +/** + * @param {string} font + * @returns {boolean} + */ function isSystemFontKeyword(font) { if (font.startsWith('-apple-')) { return true; @@ -29,25 +31,36 @@ function isSystemFontKeyword(font) { return false; } -// "To avoid mistakes in escaping, it is recommended to quote font family names -// that contain white space, digits, or punctuation characters other than hyphens" -// (https://www.w3.org/TR/CSS2/fonts.html#font-family-prop) +/** + * "To avoid mistakes in escaping, it is recommended to quote font family names + * that contain white space, digits, or punctuation characters other than hyphens" + * (https://www.w3.org/TR/CSS2/fonts.html#font-family-prop) + * + * @param {string} family + * @returns {boolean} + */ function quotesRecommended(family) { return !/^[-a-zA-Z]+$/.test(family); } -// Quotes are required if the family is not a valid CSS identifier -// (regexes from https://mathiasbynens.be/notes/unquoted-font-family) +/** + * Quotes are required if the family is not a valid CSS identifier + * (regexes from https://mathiasbynens.be/notes/unquoted-font-family) + * + * @param {string} family + * @returns {boolean} + */ function quotesRequired(family) { return family.split(/\s+/).some((word) => { return /^(-?\d|--)/.test(word) || !/^[-_a-zA-Z0-9\u{00A0}-\u{10FFFF}]+$/u.test(word); }); } -function rule(expectation) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary) => { return (root, result) => { const validOptions = validateOptions(result, ruleName, { - actual: expectation, + actual: primary, possible: ['always-where-required', 'always-where-recommended', 'always-unless-keyword'], }); @@ -65,7 +78,7 @@ function rule(expectation) { fontFamilies.forEach((fontFamilyNode) => { let rawFamily = fontFamilyNode.value; - if (fontFamilyNode.quote) { + if ('quote' in fontFamilyNode) { rawFamily = fontFamilyNode.quote + rawFamily + fontFamilyNode.quote; } @@ -73,6 +86,10 @@ function rule(expectation) { }); }); + /** + * @param {string} rawFamily + * @param {import('postcss').Declaration} decl + */ function checkFamilyName(rawFamily, decl) { if (!isStandardSyntaxValue(rawFamily)) { return; @@ -100,7 +117,7 @@ function rule(expectation) { const required = quotesRequired(family); const recommended = quotesRecommended(family); - switch (expectation) { + switch (primary) { case 'always-unless-keyword': if (!hasQuotes) { return complain(messages.expected(family), family, decl); @@ -130,6 +147,11 @@ function rule(expectation) { } } + /** + * @param {string} message + * @param {string} family + * @param {import('postcss').Declaration} decl + */ function complain(message, family, decl) { report({ result, @@ -140,7 +162,7 @@ function rule(expectation) { }); } }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/font-family-no-duplicate-names/index.js b/lib/rules/font-family-no-duplicate-names/index.js index 0604d70a18..25f759f9d7 100644 --- a/lib/rules/font-family-no-duplicate-names/index.js +++ b/lib/rules/font-family-no-duplicate-names/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const declarationValueIndex = require('../../utils/declarationValueIndex'); @@ -17,17 +15,21 @@ const messages = ruleMessages(ruleName, { rejected: (name) => `Unexpected duplicate name ${name}`, }); +/** + * @param {import('postcss-value-parser').Node} node + */ const isFamilyNameKeyword = (node) => - !node.quote && keywordSets.fontFamilyKeywords.has(node.value.toLowerCase()); + !('quote' in node) && keywordSets.fontFamilyKeywords.has(node.value.toLowerCase()); -function rule(actual, options) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, secondaryOptions) => { return (root, result) => { const validOptions = validateOptions( result, ruleName, - { actual }, + { actual: primary }, { - actual: options, + actual: secondaryOptions, possible: { ignoreFontFamilyNames: [isString, isRegExp], }, @@ -52,7 +54,7 @@ function rule(actual, options) { fontFamilies.forEach((fontFamilyNode) => { const family = fontFamilyNode.value.trim(); - if (optionsMatches(options, 'ignoreFontFamilyNames', fontFamilyNode.value.trim())) { + if (optionsMatches(secondaryOptions, 'ignoreFontFamilyNames', family)) { return; } @@ -86,6 +88,11 @@ function rule(actual, options) { }); }); + /** + * @param {string} message + * @param {number} index + * @param {import('postcss').Declaration} decl + */ function complain(message, index, decl) { report({ result, @@ -96,7 +103,7 @@ function rule(actual, options) { }); } }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/font-family-no-missing-generic-family-keyword/index.js b/lib/rules/font-family-no-missing-generic-family-keyword/index.js index 1ee0201ef6..4c4124ce71 100644 --- a/lib/rules/font-family-no-missing-generic-family-keyword/index.js +++ b/lib/rules/font-family-no-missing-generic-family-keyword/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const declarationValueIndex = require('../../utils/declarationValueIndex'); @@ -12,6 +10,7 @@ const postcss = require('postcss'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isAtRule } = require('../../utils/typeGuards'); const { isRegExp, isString } = require('../../utils/validateTypes'); const ruleName = 'font-family-no-missing-generic-family-keyword'; @@ -20,23 +19,32 @@ const messages = ruleMessages(ruleName, { rejected: 'Unexpected missing generic font family', }); +/** + * @param {import('postcss-value-parser').Node} node + * @returns {boolean} + */ const isFamilyNameKeyword = (node) => - !node.quote && keywordSets.fontFamilyKeywords.has(node.value.toLowerCase()); + !('quote' in node) && keywordSets.fontFamilyKeywords.has(node.value.toLowerCase()); +/** + * @param {string} value + * @returns {boolean} + */ const isLastFontFamilyVariable = (value) => { const lastValue = postcss.list.comma(value).pop(); - return isVariable(lastValue) || !isStandardSyntaxValue(lastValue); + return lastValue != null && (isVariable(lastValue) || !isStandardSyntaxValue(lastValue)); }; -function rule(actual, options) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, secondaryOptions) => { return (root, result) => { const validOptions = validateOptions( result, ruleName, - { actual }, + { actual: primary }, { - actual: options, + actual: secondaryOptions, possible: { ignoreFontFamilies: [isString, isRegExp], }, @@ -50,11 +58,9 @@ function rule(actual, options) { root.walkDecls(/^font(-family)?$/i, (decl) => { // Ignore @font-face - if ( - decl.parent && - decl.parent.type === 'atrule' && - decl.parent.name.toLowerCase() === 'font-face' - ) { + const parent = decl.parent; + + if (parent && isAtRule(parent) && parent.name.toLowerCase() === 'font-face') { return; } @@ -76,7 +82,11 @@ function rule(actual, options) { return; } - if (fontFamilies.some((node) => optionsMatches(options, 'ignoreFontFamilies', node.value))) { + if ( + fontFamilies.some((node) => + optionsMatches(secondaryOptions, 'ignoreFontFamilies', node.value), + ) + ) { return; } @@ -89,7 +99,7 @@ function rule(actual, options) { }); }); }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/rules/font-weight-notation/index.js b/lib/rules/font-weight-notation/index.js index 09db3b1c27..7c7aa2f134 100644 --- a/lib/rules/font-weight-notation/index.js +++ b/lib/rules/font-weight-notation/index.js @@ -1,5 +1,3 @@ -// @ts-nocheck - 'use strict'; const declarationValueIndex = require('../../utils/declarationValueIndex'); @@ -12,6 +10,7 @@ const postcss = require('postcss'); const report = require('../../utils/report'); const ruleMessages = require('../../utils/ruleMessages'); const validateOptions = require('../../utils/validateOptions'); +const { isAtRule } = require('../../utils/typeGuards'); const ruleName = 'font-weight-notation'; @@ -25,17 +24,18 @@ const INITIAL_KEYWORD = 'initial'; const NORMAL_KEYWORD = 'normal'; const WEIGHTS_WITH_KEYWORD_EQUIVALENTS = new Set(['400', '700']); -function rule(expectation, options) { +/** @type {import('stylelint').StylelintRule} */ +const rule = (primary, secondaryOptions) => { return (root, result) => { const validOptions = validateOptions( result, ruleName, { - actual: expectation, + actual: primary, possible: ['numeric', 'named-where-possible'], }, { - actual: options, + actual: secondaryOptions, possible: { ignore: ['relative'], }, @@ -57,6 +57,9 @@ function rule(expectation, options) { } }); + /** + * @param {import('postcss').Declaration} decl + */ function checkFont(decl) { const valueList = postcss.list.space(decl.value); // We do not need to more carefully distinguish font-weight @@ -78,6 +81,10 @@ function rule(expectation, options) { } } + /** + * @param {string} weightValue + * @param {import('postcss').Declaration} decl + */ function checkWeight(weightValue, decl) { if (!isStandardSyntaxValue(weightValue)) { return; @@ -95,7 +102,7 @@ function rule(expectation, options) { } if ( - optionsMatches(options, 'ignore', 'relative') && + optionsMatches(secondaryOptions, 'ignore', 'relative') && keywordSets.fontWeightRelativeKeywords.has(weightValue.toLowerCase()) ) { return; @@ -103,8 +110,10 @@ function rule(expectation, options) { const weightValueOffset = decl.value.indexOf(weightValue); - if (expectation === 'numeric') { - if (decl.parent.type === 'atrule' && decl.parent.name.toLowerCase() === 'font-face') { + if (primary === 'numeric') { + const parent = decl.parent; + + if (parent && isAtRule(parent) && parent.name.toLowerCase() === 'font-face') { const weightValueNumbers = postcss.list.space(weightValue); if (!weightValueNumbers.every(isNumbery)) { @@ -119,7 +128,7 @@ function rule(expectation, options) { } } - if (expectation === 'named-where-possible') { + if (primary === 'named-where-possible') { if (isNumbery(weightValue)) { if (WEIGHTS_WITH_KEYWORD_EQUIVALENTS.has(weightValue)) { complain(messages.expected('named')); @@ -136,6 +145,9 @@ function rule(expectation, options) { } } + /** + * @param {string} message + */ function complain(message) { report({ ruleName, @@ -147,7 +159,7 @@ function rule(expectation, options) { } } }; -} +}; rule.ruleName = ruleName; rule.messages = messages; diff --git a/lib/utils/findFontFamily.js b/lib/utils/findFontFamily.js index 8038a92b5f..e5d39325c5 100644 --- a/lib/utils/findFontFamily.js +++ b/lib/utils/findFontFamily.js @@ -29,7 +29,7 @@ function joinValueNodes(firstNode, secondNode, charactersBetween) { * Get the font-families within a `font` shorthand property value. * * @param {string} value - * @return {object} Collection font-family nodes + * @returns {Node[]} Collection font-family nodes */ module.exports = function findFontFamily(value) { /** @type {Node[]} */ From d555890f2ce607217ffff4fb790c7ff9eaa7dde5 Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Fri, 20 Aug 2021 22:00:20 +0900 Subject: [PATCH 105/194] Improve message of `function-url-quotes` rule (#5488) This change is derived from the discussion: https://github.com/stylelint/stylelint/pull/5487/files#r692264717 A new message will include a problematic function name like this: ```diff -Expected quotes +Expected quotes around "url" function argument ``` --- .../function-url-quotes/__tests__/index.js | 90 +++++++++---------- lib/rules/function-url-quotes/index.js | 4 +- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/lib/rules/function-url-quotes/__tests__/index.js b/lib/rules/function-url-quotes/__tests__/index.js index 9ae17bcaae..e2a6dc3f70 100644 --- a/lib/rules/function-url-quotes/__tests__/index.js +++ b/lib/rules/function-url-quotes/__tests__/index.js @@ -180,13 +180,13 @@ testRule({ reject: [ { code: '@import url(foo.css);', - message: messages.expected(), + message: messages.expected('url'), line: 1, column: 13, }, { code: '@import url( foo.css );', - message: messages.expected(), + message: messages.expected('url'), line: 1, column: 14, }, @@ -204,55 +204,55 @@ testRule({ }, { code: "@font-face { font-family: 'foo'; src: url(foo.ttf); }", - message: messages.expected(), + message: messages.expected('url'), line: 1, column: 43, }, { code: "@font-face { font-family: 'foo'; src: url( foo.ttf ); }", - message: messages.expected(), + message: messages.expected('url'), line: 1, column: 44, }, { code: 'a { cursor: url(foo.png); }', - message: messages.expected(), + message: messages.expected('url'), line: 1, column: 17, }, { code: 'a { background-image: url(foo.css), url("bar.css"), url("baz.css"); }', - message: messages.expected(), + message: messages.expected('url'), line: 1, column: 27, }, { code: 'a { background-image: url( foo.css ), url("bar.css"), url("baz.css"); }', - message: messages.expected(), + message: messages.expected('url'), line: 1, column: 28, }, { code: 'a { background-image: url("foo.css"), url(bar.css), url("baz.css"); }', - message: messages.expected(), + message: messages.expected('url'), line: 1, column: 43, }, { code: 'a { background-image: url("foo.css"), url( bar.css ), url("baz.css"); }', - message: messages.expected(), + message: messages.expected('url'), line: 1, column: 44, }, { code: 'a { background-image: url("foo.css"), url("bar.css"), url(baz.css); }', - message: messages.expected(), + message: messages.expected('url'), line: 1, column: 59, }, { code: 'a { background-image: url("foo.css"), url("bar.css"), url( baz.css ); }', - message: messages.expected(), + message: messages.expected('url'), line: 1, column: 60, }, @@ -371,49 +371,49 @@ testRule({ reject: [ { code: '@import url("foo.css");', - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 13, }, { code: '@import uRl("foo.css");', - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 13, }, { code: '@import URL("foo.css");', - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 13, }, { code: '@import url( "foo.css" );', - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 14, }, { code: "@import url('foo.css');", - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 13, }, { code: "@import url( 'foo.css' );", - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 14, }, { code: '@document url("http://www.w3.org/");', - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 15, }, { code: '@document url( "http://www.w3.org/" );', - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 16, }, @@ -443,91 +443,91 @@ testRule({ }, { code: "@font-face { font-family: foo; src: url('foo.ttf'); }", - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 41, }, { code: "@font-face { font-family: foo; src: url( 'foo.ttf' ); }", - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 42, }, { code: 'a { background: url("foo.css"); }', - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 21, }, { code: 'a { background: uRl("foo.css"); }', - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 21, }, { code: 'a { background: URL("foo.css"); }', - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 21, }, { code: 'a { background: url( "foo.css" ); }', - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 22, }, { code: 'a { background: url( "foo.css" ); }', - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 23, }, { code: 'a { cursor: url("foo.png"); }', - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 17, }, { code: "a { background-image: url('foo.css'), url(bar.css), url(baz.css); }", - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 27, }, { code: "a { background-image: url( 'foo.css' ), url(bar.css), url(baz.css); }", - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 28, }, { code: "a { background-image: url(foo.css), url('bar.css'), url(baz.css); }", - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 41, }, { code: "a { background-image: url(foo.css), url( 'bar.css' ), url(baz.css); }", - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 42, }, { code: "a { background-image: url(foo.css), url(bar.css), url('baz.css'); }", - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 55, }, { code: "a { background-image: url(foo.css), url(bar.css), url( 'baz.css' ); }", - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 56, }, { code: 'a { background: url("/images/my_image@2x.png") }', - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 21, }, @@ -550,19 +550,19 @@ testRule({ reject: [ { code: '@import url(foo.css);', - message: messages.expected(), + message: messages.expected('url'), line: 1, column: 13, }, { code: "@import url('');", - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 13, }, { code: '@import url("");', - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 13, }, @@ -591,21 +591,21 @@ testRule({ reject: [ { code: '@-moz-document url-prefix() {}', - message: messages.expected(), + message: messages.expected('url-prefix'), }, { code: 'a { background: url() }', - message: messages.expected(), + message: messages.expected('url'), }, { code: '@import url("foo.css");', - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 13, }, { code: "@import url('foo.css');", - message: messages.rejected(), + message: messages.rejected('url'), line: 1, column: 13, }, @@ -621,13 +621,13 @@ testRule({ reject: [ { code: '