├── .editorconfig ├── .gitignore ├── .tape.js ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── index.mjs ├── lib ├── are-rules-potential-nesting-at-rule.mjs ├── are-rules-potential-nesting-media-rule.mjs ├── are-rules-potential-nesting-rule.mjs ├── fix-nesting-at-rule.mjs ├── fix-nesting-media-rule.mjs ├── fix-nesting-rule.mjs └── is.mjs ├── package-lock.json └── package.json /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | indent_style = tab 7 | insert_final_newline = true 8 | trim_trailing_whitespace = true 9 | 10 | [*.md] 11 | trim_trailing_whitespace = false 12 | 13 | [*.{json,md,yml}] 14 | indent_size = 2 15 | indent_style = space 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log* 3 | .eslintcache 4 | -------------------------------------------------------------------------------- /.tape.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 'csstools/use-nesting': [ 3 | /* Test Nesting Rules */ 4 | { 5 | source: '.foo { color: blue; } .foo:hover, .foo:focus { color: rebeccapurple; } .foo:focus-within { color: red; }', 6 | warnings: [ 7 | 'Expected ".foo:hover, .foo:focus" inside ".foo". (csstools/use-nesting)' 8 | ] 9 | }, 10 | { 11 | source: '.foo { color: blue; } .foo:hover, .foo:focus { color: rebeccapurple; } .foo:focus-within { color: red; }', 12 | warnings: 0, 13 | args: ['always', { except: /^:(hover|:focus)$/i }] 14 | }, 15 | { 16 | source: '.foo { color: blue; } .foo:hover, .foo:focus { color: rebeccapurple; } .foo:focus-within { color: red; }', 17 | warnings: 0, 18 | args: ['always', { only: /^:focus-within$/i }] 19 | }, 20 | { 21 | source: '.foo { color: blue; } .foo:hover, .foo:focus { color: rebeccapurple; } .foo:focus-within { color: red; }', 22 | expect: '.foo { color: blue; &:hover, &:focus { color: rebeccapurple; } &:focus-within { color: red; } }', 23 | args: ['always'] 24 | }, 25 | { 26 | source: '.foo { color: blue; } .foo[data-bar] { color: red; }', 27 | expect: '.foo { color: blue; &[data-bar] { color: red; } }', 28 | args: ['always'] 29 | }, 30 | { 31 | source: '.foo { color: blue; } .foo:hover, .foo:focus { color: rebeccapurple; } .foo:focus-within { color: red; }', 32 | expect: '.foo { color: blue; &:hover, &:focus { color: rebeccapurple; } } .foo:focus-within { color: red; }', 33 | args: ['always', { except: /^:focus-within/i }] 34 | }, 35 | { 36 | source: '.foo { color: blue; } .foo:hover, .foo:focus { color: rebeccapurple; } .foo:focus-within { color: red; }', 37 | expect: '.foo { color: blue; &:hover, &:focus { color: rebeccapurple; } } .foo:focus-within { color: red; }', 38 | args: ['always', { except: ':focus-within' }] 39 | }, 40 | { 41 | source: '.foo { color: blue; } .foo:hover, .foo:focus { color: rebeccapurple; } .foo:focus-within { color: red; }', 42 | expect: '.foo { color: blue; &:hover, &:focus { color: rebeccapurple; } } .foo:focus-within { color: red; }', 43 | args: ['always', { only: /^:(hover|focus)$/i }] 44 | }, 45 | { 46 | source: '.foo { color: blue; } .foo:hover, .foo:focus { color: rebeccapurple; } .foo:focus-within { color: red; }', 47 | expect: '.foo { color: blue; &:hover, &:focus { color: rebeccapurple; } } .foo:focus-within { color: red; }', 48 | args: ['always', { only: [':hover', ':focus'] }] 49 | }, 50 | 51 | /* Test Nesting At-Rules */ 52 | { 53 | source: '.foo { color: blue; } body .foo { color: rebeccapurple; } html .foo { color: red; }', 54 | warnings: 1 55 | }, 56 | { 57 | source: '.foo { color: blue; } body .foo { color: rebeccapurple; } html .foo { color: red; }', 58 | warnings: 0, 59 | args: ['always', { except: /^body$/i }] 60 | }, 61 | { 62 | source: '.foo { color: blue; } body .foo { color: rebeccapurple; } html .foo { color: red; }', 63 | warnings: 0, 64 | args: ['always', { only: /^html$/i }] 65 | }, 66 | 67 | // Proposal nesting syntax 68 | { 69 | source: '.foo { color: blue; } body .foo { color: rebeccapurple; } html .foo { color: red; }', 70 | expect: '.foo { color: blue; body & { color: rebeccapurple; } html & { color: red; } }', 71 | args: ['always'] 72 | }, 73 | { 74 | source: '.foo { color: blue; } body .foo { color: rebeccapurple; } html .foo { color: red; }', 75 | expect: '.foo { color: blue; body & { color: rebeccapurple; } } html .foo { color: red; }', 76 | args: ['always', { except: /^html$/i }] 77 | }, 78 | { 79 | source: '.foo { color: blue; } body .foo { color: rebeccapurple; } html .foo { color: red; }', 80 | expect: '.foo { color: blue; body & { color: rebeccapurple; } } html .foo { color: red; }', 81 | args: ['always', { except: 'html' }] 82 | }, 83 | { 84 | source: '.foo { color: blue; } body .foo { color: rebeccapurple; } html .foo { color: red; }', 85 | expect: '.foo { color: blue; body & { color: rebeccapurple; } } html .foo { color: red; }', 86 | args: ['always', { only: /^body$/i }] 87 | }, 88 | { 89 | source: '.foo { color: blue; } body .foo { color: rebeccapurple; } html .foo { color: red; }', 90 | expect: '.foo { color: blue; body & { color: rebeccapurple; } } html .foo { color: red; }', 91 | args: ['always', { only: 'body' }] 92 | }, 93 | 94 | // SCSS nesting syntax 95 | { 96 | source: '.foo { color: blue; } body .foo { color: rebeccapurple; } html .foo { color: red; }', 97 | expect: '.foo { color: blue; body & { color: rebeccapurple; } html & { color: red; } }', 98 | args: ['always', { syntax: 'scss' }] 99 | }, 100 | { 101 | source: '.foo { color: blue; } body .foo { color: rebeccapurple; } html .foo { color: red; }', 102 | expect: '.foo { color: blue; body & { color: rebeccapurple; } } html .foo { color: red; }', 103 | args: ['always', { syntax: 'scss', except: /^html$/i }] 104 | }, 105 | { 106 | source: '.foo { color: blue; } body .foo { color: rebeccapurple; } html .foo { color: red; }', 107 | expect: '.foo { color: blue; body & { color: rebeccapurple; } } html .foo { color: red; }', 108 | args: ['always', { syntax: 'scss', except: 'html' }] 109 | }, 110 | { 111 | source: '.foo { color: blue; } body .foo { color: rebeccapurple; } html .foo { color: red; }', 112 | expect: '.foo { color: blue; body & { color: rebeccapurple; } } html .foo { color: red; }', 113 | args: ['always', { syntax: 'scss', only: /^body$/i }] 114 | }, 115 | { 116 | source: '.foo { color: blue; } body .foo { color: rebeccapurple; } html .foo { color: red; }', 117 | expect: '.foo { color: blue; body & { color: rebeccapurple; } } html .foo { color: red; }', 118 | args: ['always', { syntax: 'scss', only: 'body' }] 119 | }, 120 | 121 | /* Test Nesting Media Rules */ 122 | { 123 | source: '.foo { color: blue; } @media (min-width: 960px) { .foo { color: rebeccapurple; } }', 124 | warnings: [ 125 | 'Expected "@media (min-width: 960px)" inside ".foo". (csstools/use-nesting)' 126 | ] 127 | }, 128 | { 129 | source: '.foo { color: blue; } @media (min-width: 960px) { .foo { color: rebeccapurple; } }', 130 | warnings: 0, 131 | args: ['always', { except: /foo$/i }] 132 | }, 133 | { 134 | source: '.foo { color: blue; } @media (min-width: 960px) { .foo { color: rebeccapurple; } }', 135 | warnings: 0, 136 | args: ['always', { only: /bar/i }] 137 | }, 138 | { 139 | source: '.foo { color: blue; } @media (min-width: 960px) { .foo { color: rebeccapurple; } }', 140 | expect: '.foo { color: blue; @media (min-width: 960px) { color: rebeccapurple } }', 141 | args: ['always'] 142 | }, 143 | 144 | /* Test Ignores Rules */ 145 | { 146 | source: '.foo { color: blue; } .foo__bar { color: rebeccapurple; } .foo--bar { color: red; }', 147 | warnings: 0, 148 | args: ['always'] 149 | }, 150 | { 151 | source: '.foo { color: blue; } .foo__bar { color: rebeccapurple; } .foo--bar { color: red; }', 152 | expect: '.foo { color: blue; } .foo__bar { color: rebeccapurple; } .foo--bar { color: red; }', 153 | args: ['always'] 154 | }, 155 | { 156 | source: '.test-foo__bar {} .test-foo__bar svg, .test-qux__bar svg {}', 157 | expect: '.test-foo__bar {} .test-foo__bar svg, .test-qux__bar svg {}', 158 | warnings: 0, 159 | args: ['always'] 160 | } 161 | ] 162 | }; 163 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changes to Stylelint Use Nesting 2 | 3 | ### 6.0.0 4 | 5 | - Updated: minimum Stylelint version to `v16.9.0` 6 | - Updated: use the new `report.fix` API 7 | 8 | ### 5.1.2 (Jul 28, 2024) 9 | 10 | - Fix `Unknown rule csstools/use-nesting` error 11 | 12 | ### 5.1.1 (March 6, 2024) 13 | 14 | - Remove `exports` field from `package.json` [#18](https://github.com/csstools/stylelint-use-nesting/issues/18) 15 | 16 | ### 5.1.0 (March 3, 2024) 17 | 18 | - Remove `@nest` [#15](https://github.com/csstools/stylelint-use-nesting/issues/15) 19 | 20 | ### 5.0.0 (March 3, 2024) 21 | 22 | - Updated: peer `stylelint` to >= 16 (major) 23 | - Updated: Node 20+ compatibility (major) 24 | - Drop commonjs support (major) 25 | 26 | ### 4.1.0 (March 8, 2022) 27 | 28 | - Added: support for SCSS syntax 29 | 30 | ### 4.0.0 (Jul 29, 2022) 31 | 32 | - Updated: peer `stylelint` to >= 10 (major) 33 | - Updated: Node 16+ compatibility (major) 34 | - Added: attribute selector support (minor) 35 | 36 | ### 3.0.0 (May 12, 2020) 37 | 38 | - Updated: peer `stylelint` to 10 - 13 (major) 39 | - Updated: Node 10+ compatibility (major) 40 | 41 | ### 2.0.0 (May 12, 2018) 42 | 43 | - Updated: peer `stylelint` to 10.0.1 (major) 44 | - Updated: Node 8+ compatibility (major) 45 | 46 | ### 1.2.1 (February 27, 2019) 47 | 48 | - Fixed an issue with nested media not warning correctly 49 | 50 | ### 1.2.0 (February 26, 2019) 51 | 52 | - Added support for nestable `@media` queries 53 | - Added support for recursive changes 54 | 55 | ### 1.1.0 (November 27, 2018) 56 | 57 | - Added `except` and `only` options to future configure nesting rules 58 | 59 | ### 1.0.0 (November 25, 2018) 60 | 61 | - Initial version 62 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Stylelint Use Nesting 2 | 3 | You want to help? You rock! Now, take a moment to be sure your contributions 4 | make sense to everyone else. 5 | 6 | ## Reporting Issues 7 | 8 | Found a problem? Want a new feature? 9 | 10 | - See if your issue or idea has [already been reported]. 11 | - Provide a [reduced test case] or a [live example]. 12 | 13 | Remember, a bug is a _demonstrable problem_ caused by _our_ code. 14 | 15 | ## Submitting Pull Requests 16 | 17 | Pull requests are the greatest contributions, so be sure they are focused in 18 | scope and avoid unrelated commits. 19 | 20 | 1. To begin; [fork this project], clone your fork, and add our upstream. 21 | ```shell 22 | # Clone your fork of the repo into the current directory 23 | git clone git@github.com:YOUR_USER/stylelint-use-nesting.git 24 | 25 | # Navigate to the newly cloned directory 26 | cd stylelint-use-nesting 27 | 28 | # Assign the original repo to a remote called "upstream" 29 | git remote add upstream git@github.com:csstools/stylelint-use-nesting.git 30 | 31 | # Install the tools necessary for testing 32 | npm install 33 | ``` 34 | 35 | 2. Create a branch for your feature or fix: 36 | ```shell 37 | # Move into a new branch for your feature 38 | git checkout -b feature/thing 39 | ``` 40 | ```shell 41 | # Move into a new branch for your fix 42 | git checkout -b fix/something 43 | ``` 44 | 45 | 3. If your code follows our practices, then push your feature branch: 46 | ```shell 47 | # Test current code 48 | npm test 49 | ``` 50 | ```shell 51 | # Push the branch for your new feature 52 | git push origin feature/thing 53 | ``` 54 | ```shell 55 | # Or, push the branch for your update 56 | git push origin update/something 57 | ``` 58 | 59 | That’s it! Now [open a pull request] with a clear title and description. 60 | 61 | [already been reported]: issues 62 | [fork this project]: fork 63 | [live example]: https://codepen.io/pen 64 | [open a pull request]: https://help.github.com/articles/using-pull-requests/ 65 | [reduced test case]: https://css-tricks.com/reduced-test-cases/ 66 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # CC0 1.0 Universal 2 | 3 | ## Statement of Purpose 4 | 5 | The laws of most jurisdictions throughout the world automatically confer 6 | exclusive Copyright and Related Rights (defined below) upon the creator and 7 | subsequent owner(s) (each and all, an “owner”) of an original work of 8 | authorship and/or a database (each, a “Work”). 9 | 10 | Certain owners wish to permanently relinquish those rights to a Work for the 11 | purpose of contributing to a commons of creative, cultural and scientific works 12 | (“Commons”) that the public can reliably and without fear of later claims of 13 | infringement build upon, modify, incorporate in other works, reuse and 14 | redistribute as freely as possible in any form whatsoever and for any purposes, 15 | including without limitation commercial purposes. These owners may contribute 16 | to the Commons to promote the ideal of a free culture and the further 17 | production of creative, cultural and scientific works, or to gain reputation or 18 | greater distribution for their Work in part through the use and efforts of 19 | others. 20 | 21 | For these and/or other purposes and motivations, and without any expectation of 22 | additional consideration or compensation, the person associating CC0 with a 23 | Work (the “Affirmer”), to the extent that he or she is an owner of Copyright 24 | and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and 25 | publicly distribute the Work under its terms, with knowledge of his or her 26 | Copyright and Related Rights in the Work and the meaning and intended legal 27 | effect of CC0 on those rights. 28 | 29 | 1. Copyright and Related Rights. A Work made available under CC0 may be 30 | protected by copyright and related or neighboring rights (“Copyright and 31 | Related Rights”). Copyright and Related Rights include, but are not limited 32 | to, the following: 33 | 1. the right to reproduce, adapt, distribute, perform, display, communicate, 34 | and translate a Work; 35 | 2. moral rights retained by the original author(s) and/or performer(s); 36 | 3. publicity and privacy rights pertaining to a person’s image or likeness 37 | depicted in a Work; 38 | 4. rights protecting against unfair competition in regards to a Work, 39 | subject to the limitations in paragraph 4(i), below; 40 | 5. rights protecting the extraction, dissemination, use and reuse of data in 41 | a Work; 42 | 6. database rights (such as those arising under Directive 96/9/EC of the 43 | European Parliament and of the Council of 11 March 1996 on the legal 44 | protection of databases, and under any national implementation thereof, 45 | including any amended or successor version of such directive); and 46 | 7. other similar, equivalent or corresponding rights throughout the world 47 | based on applicable law or treaty, and any national implementations 48 | thereof. 49 | 50 | 2. Waiver. To the greatest extent permitted by, but not in contravention of, 51 | applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and 52 | unconditionally waives, abandons, and surrenders all of Affirmer’s Copyright 53 | and Related Rights and associated claims and causes of action, whether now 54 | known or unknown (including existing as well as future claims and causes of 55 | action), in the Work (i) in all territories worldwide, (ii) for the maximum 56 | duration provided by applicable law or treaty (including future time 57 | extensions), (iii) in any current or future medium and for any number of 58 | copies, and (iv) for any purpose whatsoever, including without limitation 59 | commercial, advertising or promotional purposes (the “Waiver”). Affirmer 60 | makes the Waiver for the benefit of each member of the public at large and 61 | to the detriment of Affirmer’s heirs and successors, fully intending that 62 | such Waiver shall not be subject to revocation, rescission, cancellation, 63 | termination, or any other legal or equitable action to disrupt the quiet 64 | enjoyment of the Work by the public as contemplated by Affirmer’s express 65 | Statement of Purpose. 66 | 67 | 3. Public License Fallback. Should any part of the Waiver for any reason be 68 | judged legally invalid or ineffective under applicable law, then the Waiver 69 | shall be preserved to the maximum extent permitted taking into account 70 | Affirmer’s express Statement of Purpose. In addition, to the extent the 71 | Waiver is so judged Affirmer hereby grants to each affected person a 72 | royalty-free, non transferable, non sublicensable, non exclusive, 73 | irrevocable and unconditional license to exercise Affirmer’s Copyright and 74 | Related Rights in the Work (i) in all territories worldwide, (ii) for the 75 | maximum duration provided by applicable law or treaty (including future time 76 | extensions), (iii) in any current or future medium and for any number of 77 | copies, and (iv) for any purpose whatsoever, including without limitation 78 | commercial, advertising or promotional purposes (the “License”). The License 79 | shall be deemed effective as of the date CC0 was applied by Affirmer to the 80 | Work. Should any part of the License for any reason be judged legally 81 | invalid or ineffective under applicable law, such partial invalidity or 82 | ineffectiveness shall not invalidate the remainder of the License, and in 83 | such case Affirmer hereby affirms that he or she will not (i) exercise any 84 | of his or her remaining Copyright and Related Rights in the Work or (ii) 85 | assert any associated claims and causes of action with respect to the Work, 86 | in either case contrary to Affirmer’s express Statement of Purpose. 87 | 88 | 4. Limitations and Disclaimers. 89 | 1. No trademark or patent rights held by Affirmer are waived, abandoned, 90 | surrendered, licensed or otherwise affected by this document. 91 | 2. Affirmer offers the Work as-is and makes no representations or warranties 92 | of any kind concerning the Work, express, implied, statutory or 93 | otherwise, including without limitation warranties of title, 94 | merchantability, fitness for a particular purpose, non infringement, or 95 | the absence of latent or other defects, accuracy, or the present or 96 | absence of errors, whether or not discoverable, all to the greatest 97 | extent permissible under applicable law. 98 | 3. Affirmer disclaims responsibility for clearing rights of other persons 99 | that may apply to the Work or any use thereof, including without 100 | limitation any person’s Copyright and Related Rights in the Work. 101 | Further, Affirmer disclaims responsibility for obtaining any necessary 102 | consents, permissions or other rights required for any use of the Work. 103 | 4. Affirmer understands and acknowledges that Creative Commons is not a 104 | party to this document and has no duty or obligation with respect to this 105 | CC0 or use of the Work. 106 | 107 | For more information, please see 108 | http://creativecommons.org/publicdomain/zero/1.0/. 109 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Stylelint Use Nesting [stylelint][stylelint] 2 | 3 | [![NPM Version][npm-img]][npm-url] 4 | [![Build Status][cli-img]][cli-url] 5 | [![Support Chat][git-img]][git-url] 6 | 7 | [Stylelint Use Nesting] is a [stylelint] rule to enforce nesting when it is 8 | possible in CSS. 9 | 10 | ## Usage 11 | 12 | Add [stylelint] and [Stylelint Use Nesting] to your project. 13 | 14 | ```shell 15 | npm install stylelint stylelint-use-nesting --save-dev 16 | ``` 17 | 18 | Add [Stylelint Use Nesting] to your [stylelint configuration]. 19 | 20 | ```js 21 | { 22 | "plugins": [ 23 | "stylelint-use-nesting" 24 | ], 25 | "rules": { 26 | "csstools/use-nesting": "always" || "ignore" 27 | } 28 | } 29 | ``` 30 | 31 | ## Options 32 | 33 | ### always 34 | 35 | If the first option is `"always"` or `true`, then [Stylelint Use Nesting] 36 | requires all nodes to be linted, and the following patterns are _not_ 37 | considered violations: 38 | 39 | ```pcss 40 | .example { 41 | color: blue; 42 | 43 | &:hover { 44 | color: rebeccapurple; 45 | } 46 | } 47 | ``` 48 | 49 | ```pcss 50 | .example { 51 | color: blue; 52 | 53 | @media (min-width: 640px) { 54 | color: rebeccapurple; 55 | } 56 | } 57 | ``` 58 | 59 | While the following patterns are considered violations: 60 | 61 | ```pcss 62 | .example { 63 | color: blue; 64 | } 65 | 66 | .example:hover { 67 | color: rebeccapurple; 68 | } 69 | ``` 70 | 71 | ```pcss 72 | .example { 73 | color: blue; 74 | } 75 | 76 | @media (min-width: 640px) { 77 | .example { 78 | color: rebeccapurple; 79 | } 80 | } 81 | ``` 82 | 83 | ### ignore 84 | 85 | If the first option is `"ignore"` or `null`, then [Stylelint Use Nesting] does 86 | nothing. 87 | 88 | ## Secondary Options 89 | 90 | ### except 91 | 92 | The `except` option ignores reporting or autofixing rules where the potentially 93 | nesting portion of the selector matches a case-insensitive string or regular 94 | expression. 95 | 96 | ```js 97 | { 98 | "rules": { 99 | "csstools/use-nesting": ["always", { "except": [':selection', /^:dir/i] }] 100 | } 101 | } 102 | ``` 103 | 104 | ### only 105 | 106 | The `except` option limits reporting and autofixing to rules where the 107 | potentially nesting portion of the selector matches a case-insensitive string 108 | or regular expression. 109 | 110 | ```js 111 | { 112 | "rules": { 113 | "csstools/use-nesting": ["always", { "only": ['.js', /^:(hover|focus)/i] }] 114 | } 115 | } 116 | ``` 117 | 118 | ### syntax 119 | 120 | The `syntax` option allows you to specify the syntax of the source files being processed. For SCSS syntax set the value to `scss`. 121 | 122 | ```js 123 | { 124 | "rules": { 125 | "csstools/use-nesting": ["always", { "syntax": "scss" }] 126 | } 127 | } 128 | ``` 129 | 130 | [cli-img]: https://img.shields.io/travis/csstools/stylelint-use-nesting/main.svg 131 | [cli-url]: https://travis-ci.org/csstools/stylelint-use-nesting 132 | [git-img]: https://img.shields.io/badge/support-chat-blue.svg 133 | [git-url]: https://gitter.im/stylelint/stylelint 134 | [npm-img]: https://img.shields.io/npm/v/stylelint-use-nesting.svg 135 | [npm-url]: https://www.npmjs.com/package/stylelint-use-nesting 136 | 137 | [stylelint]: https://github.com/stylelint/stylelint 138 | [stylelint configuration]: https://github.com/stylelint/stylelint/blob/main/docs/user-guide/configuration.md#readme 139 | [Stylelint Use Nesting]: https://github.com/csstools/stylelint-use-nesting 140 | -------------------------------------------------------------------------------- /index.mjs: -------------------------------------------------------------------------------- 1 | import stylelint from 'stylelint'; 2 | 3 | import is from './lib/is.mjs'; 4 | import areRulesPotentialNestingAtRule from './lib/are-rules-potential-nesting-at-rule.mjs'; 5 | import areRulesPotentialNestingMediaRule from './lib/are-rules-potential-nesting-media-rule.mjs'; 6 | import areRulesPotentialNestingRule from './lib/are-rules-potential-nesting-rule.mjs'; 7 | import fixNestingAtRule from './lib/fix-nesting-at-rule.mjs'; 8 | import fixNestingMediaRule from './lib/fix-nesting-media-rule.mjs'; 9 | import fixNestingRule from './lib/fix-nesting-rule.mjs'; 10 | 11 | const ruleName = 'csstools/use-nesting'; 12 | 13 | const meta = { 14 | url: 'https://github.com/csstools/stylelint-use-nesting', 15 | fixable: true, 16 | }; 17 | 18 | const ruleFunction = (action, opts) => { 19 | return async (root, result) => { 20 | // validate the action 21 | const isActionValid = stylelint.utils.validateOptions(result, ruleName, { 22 | actual: action, 23 | possible() { 24 | return is(action, [ 'always', 'ignore', true, false, null ]); 25 | } 26 | }); 27 | 28 | if (isActionValid) { 29 | if (is(action, [ 'always', true ])) { 30 | result.root.walk(rule => { 31 | let isProcessing = true; 32 | 33 | while (isProcessing) { 34 | isProcessing = false; 35 | 36 | const prev = rule.prev(); 37 | 38 | const isRuleValid = rule && (rule.type === 'rule' || rule.type === 'atrule'); 39 | const isPrevValid = prev && (prev.type === 'rule' || prev.type === 'atrule'); 40 | 41 | // if the previous node is also a rule 42 | if (!isRuleValid || !isPrevValid) { 43 | continue; 44 | } 45 | 46 | if (areRulesPotentialNestingRule(rule, prev, opts)) { 47 | report( 48 | rule, 49 | prev, 50 | result, 51 | () => { 52 | isProcessing = true; 53 | 54 | fixNestingRule(rule, prev) 55 | } 56 | ); 57 | 58 | continue; 59 | } 60 | 61 | if (areRulesPotentialNestingRule(prev, rule, opts)) { 62 | report( 63 | prev, 64 | rule, 65 | result, 66 | () => { 67 | isProcessing = true; 68 | 69 | fixNestingRule(prev, rule) 70 | } 71 | ); 72 | 73 | continue; 74 | } 75 | 76 | if (areRulesPotentialNestingAtRule(rule, prev, opts)) { 77 | report( 78 | rule, 79 | prev, 80 | result, 81 | () => { 82 | isProcessing = true; 83 | 84 | fixNestingAtRule(rule, prev, opts); 85 | } 86 | ); 87 | 88 | continue; 89 | } 90 | 91 | if (areRulesPotentialNestingAtRule(prev, rule, opts)) { 92 | report( 93 | prev, 94 | rule, 95 | result, 96 | () => { 97 | isProcessing = true; 98 | 99 | fixNestingAtRule(prev, rule, opts); 100 | } 101 | ); 102 | 103 | continue; 104 | } 105 | 106 | if (areRulesPotentialNestingMediaRule(rule, prev, opts)) { 107 | report( 108 | rule, 109 | prev, 110 | result, 111 | () => { 112 | isProcessing = true; 113 | 114 | fixNestingMediaRule(rule, prev); 115 | } 116 | ); 117 | 118 | continue; 119 | } 120 | 121 | if (areRulesPotentialNestingMediaRule(prev, rule, opts)) { 122 | report( 123 | prev, 124 | rule, 125 | result, 126 | () => { 127 | isProcessing = true; 128 | 129 | fixNestingMediaRule(prev, rule); 130 | } 131 | ); 132 | 133 | continue; 134 | } 135 | } 136 | }); 137 | } 138 | } 139 | }; 140 | } 141 | 142 | const messages = stylelint.utils.ruleMessages(ruleName, { 143 | expected: (node, prev) => { 144 | const outside = prev.type === 'atrule' ? `@${prev.name} ${prev.params}` : node.selector; 145 | const inside = prev.type === 'atrule' ? node.selector : prev.selector; 146 | const message = `Expected "${outside}" inside "${inside}".`; 147 | 148 | return message; 149 | } 150 | }); 151 | 152 | const report = (rule1, rule2, result, fix) => { 153 | stylelint.utils.report({ 154 | message: messages.expected(rule1, rule2), 155 | node: rule1, 156 | result, 157 | ruleName, 158 | fix 159 | }); 160 | }; 161 | 162 | ruleFunction.ruleName = ruleName; 163 | ruleFunction.meta = meta; 164 | ruleFunction.messages = messages; 165 | 166 | export default stylelint.createPlugin(ruleName, ruleFunction); 167 | -------------------------------------------------------------------------------- /lib/are-rules-potential-nesting-at-rule.mjs: -------------------------------------------------------------------------------- 1 | export default function areRulesPotentialNestingAtRule(rule1, rule2, opts) { 2 | const except = [].concat(Object(opts).except || []); 3 | const only = [].concat(Object(opts).only || []); 4 | 5 | return rule1.selectors && rule2.selectors && rule2.selectors.every( 6 | rule2Selector => rule1.selectors.every( 7 | rule1Selector => 8 | rule2Selector.length < rule1Selector.length && 9 | ` ${rule2Selector}` === rule1Selector.slice(-rule2Selector.length - 1) && 10 | (!except.length || except.some( 11 | entry => entry instanceof RegExp 12 | ? !entry.test(rule1Selector.slice(0, -rule2Selector.length - 1)) 13 | : entry !== rule1Selector.slice(0, -rule2Selector.length - 1) 14 | )) && 15 | (!only.length || only.some( 16 | entry => entry instanceof RegExp 17 | ? entry.test(rule1Selector.slice(0, -rule2Selector.length - 1)) 18 | : entry === rule1Selector.slice(0, -rule2Selector.length - 1) 19 | )) 20 | ) 21 | ); 22 | } 23 | -------------------------------------------------------------------------------- /lib/are-rules-potential-nesting-media-rule.mjs: -------------------------------------------------------------------------------- 1 | export default function areRulesPotentialNestingMediaRule(rule1, rule2, opts) { 2 | const except = [].concat(Object(opts).except || []); 3 | const only = [].concat(Object(opts).only || []); 4 | 5 | const isRule2MediaRule = rule2.type === 'atrule' && rule2.name === 'media'; 6 | const rule3 = isRule2MediaRule && rule2.nodes && rule2.nodes[0]; 7 | 8 | return rule1 && rule3 && 9 | rule1.selector && rule3.selector && 10 | rule1.selector === rule3.selector && 11 | (!except.length || except.some( 12 | entry => entry instanceof RegExp 13 | ? !entry.test(rule1.selector) 14 | : entry !== rule1.selector 15 | )) && 16 | (!only.length || only.some( 17 | entry => entry instanceof RegExp 18 | ? entry.test(rule1.selector) 19 | : entry === rule1.selector 20 | )); 21 | } 22 | -------------------------------------------------------------------------------- /lib/are-rules-potential-nesting-rule.mjs: -------------------------------------------------------------------------------- 1 | export default function areRulesPotentialNestingRule(rule1, rule2, opts) { 2 | const except = [].concat(Object(opts).except || []); 3 | const only = [].concat(Object(opts).only || []); 4 | 5 | const result = rule1.selectors && rule2.selectors && rule2.selectors.every( 6 | rule2Selector => rule1.selectors.every( 7 | rule1Selector => 8 | rule2Selector.length < rule1Selector.length && 9 | rule2Selector === rule1Selector.slice(0, rule2Selector.length) && 10 | !/^[A-Za-z0-9-_]/.test(rule1Selector.slice(rule2Selector.length)) && 11 | (!except.length || except.some( 12 | entry => entry instanceof RegExp 13 | ? !entry.test(rule1Selector.slice(rule2Selector.length)) 14 | : entry !== rule1Selector.slice(rule2Selector.length) 15 | )) && 16 | (!only.length || only.some( 17 | entry => entry instanceof RegExp 18 | ? entry.test(rule1Selector.slice(rule2Selector.length)) 19 | : entry === rule1Selector.slice(rule2Selector.length) 20 | )) 21 | ) 22 | ); 23 | return result 24 | } 25 | -------------------------------------------------------------------------------- /lib/fix-nesting-at-rule.mjs: -------------------------------------------------------------------------------- 1 | import postcss from 'postcss'; 2 | 3 | export default function fixNestingAtRule(rule1, rule2, opts) { 4 | rule1.remove(); 5 | 6 | rule1.selectors = rule1.selectors.map( 7 | selector => `${selector.slice(0, -rule2.selector.length - 1)} &` 8 | ); 9 | 10 | const ruleOrAtRule = postcss.rule({ 11 | selector: String(rule1.selector), 12 | }); 13 | 14 | const rule = Object.assign( 15 | ruleOrAtRule, 16 | { 17 | raws: Object.assign(rule1.raws, { 18 | afterName: ' ' 19 | }), 20 | source: rule1.source 21 | } 22 | ); 23 | 24 | rule.append(...rule1.nodes); 25 | 26 | rule2.append(rule); 27 | } 28 | -------------------------------------------------------------------------------- /lib/fix-nesting-media-rule.mjs: -------------------------------------------------------------------------------- 1 | export default function fixNestingMediaRule(rule1, media) { 2 | const isMediaMediaRule = media.type === 'atrule' && media.name === 'media'; 3 | 4 | if (isMediaMediaRule) { 5 | const rule2 = media.nodes[0]; 6 | const mediaRule = media.clone().removeAll(); 7 | 8 | mediaRule.append( 9 | rule2.nodes.map(node => node.clone()) 10 | ); 11 | 12 | rule1.append(mediaRule); 13 | 14 | rule2.remove(); 15 | 16 | if (!media.nodes.length) { 17 | media.remove(); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/fix-nesting-rule.mjs: -------------------------------------------------------------------------------- 1 | export default function fixNestingRule(rule1, rule2) { 2 | rule1.selectors = rule1.selectors.map( 3 | selector => `&${selector.slice(rule2.selector.length)}` 4 | ); 5 | 6 | rule2.append(rule1); 7 | } 8 | -------------------------------------------------------------------------------- /lib/is.mjs: -------------------------------------------------------------------------------- 1 | export default function is(value, ...keys) { 2 | const length = keys.length; 3 | const matches = keys.pop(); 4 | const subvalue = keys.reduce((result, key) => Object(result)[key], value); 5 | 6 | return length 7 | ? [].concat(matches).some( 8 | match => match instanceof RegExp 9 | ? match.test(subvalue) 10 | : match === subvalue 11 | ) 12 | : Boolean(value); 13 | } 14 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "stylelint-use-nesting", 3 | "version": "6.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "stylelint-use-nesting", 9 | "version": "6.0.0", 10 | "license": "CC0-1.0", 11 | "devDependencies": { 12 | "eslint": "^8.35.0", 13 | "eslint-config-dev": "^3.1.0", 14 | "stylelint": "^16.9.0", 15 | "stylelint-tape": "^5.0.1" 16 | }, 17 | "engines": { 18 | "node": ">=20.0.0" 19 | }, 20 | "peerDependencies": { 21 | "stylelint": ">= 16.9.0" 22 | } 23 | }, 24 | "node_modules/@babel/code-frame": { 25 | "version": "7.26.2", 26 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", 27 | "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", 28 | "dev": true, 29 | "license": "MIT", 30 | "dependencies": { 31 | "@babel/helper-validator-identifier": "^7.25.9", 32 | "js-tokens": "^4.0.0", 33 | "picocolors": "^1.0.0" 34 | }, 35 | "engines": { 36 | "node": ">=6.9.0" 37 | } 38 | }, 39 | "node_modules/@babel/helper-validator-identifier": { 40 | "version": "7.25.9", 41 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", 42 | "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", 43 | "dev": true, 44 | "license": "MIT", 45 | "engines": { 46 | "node": ">=6.9.0" 47 | } 48 | }, 49 | "node_modules/@csstools/css-parser-algorithms": { 50 | "version": "3.0.4", 51 | "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", 52 | "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", 53 | "dev": true, 54 | "funding": [ 55 | { 56 | "type": "github", 57 | "url": "https://github.com/sponsors/csstools" 58 | }, 59 | { 60 | "type": "opencollective", 61 | "url": "https://opencollective.com/csstools" 62 | } 63 | ], 64 | "license": "MIT", 65 | "engines": { 66 | "node": ">=18" 67 | }, 68 | "peerDependencies": { 69 | "@csstools/css-tokenizer": "^3.0.3" 70 | } 71 | }, 72 | "node_modules/@csstools/css-tokenizer": { 73 | "version": "3.0.3", 74 | "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", 75 | "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", 76 | "dev": true, 77 | "funding": [ 78 | { 79 | "type": "github", 80 | "url": "https://github.com/sponsors/csstools" 81 | }, 82 | { 83 | "type": "opencollective", 84 | "url": "https://opencollective.com/csstools" 85 | } 86 | ], 87 | "license": "MIT", 88 | "engines": { 89 | "node": ">=18" 90 | } 91 | }, 92 | "node_modules/@csstools/media-query-list-parser": { 93 | "version": "4.0.2", 94 | "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", 95 | "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", 96 | "dev": true, 97 | "funding": [ 98 | { 99 | "type": "github", 100 | "url": "https://github.com/sponsors/csstools" 101 | }, 102 | { 103 | "type": "opencollective", 104 | "url": "https://opencollective.com/csstools" 105 | } 106 | ], 107 | "license": "MIT", 108 | "engines": { 109 | "node": ">=18" 110 | }, 111 | "peerDependencies": { 112 | "@csstools/css-parser-algorithms": "^3.0.4", 113 | "@csstools/css-tokenizer": "^3.0.3" 114 | } 115 | }, 116 | "node_modules/@csstools/selector-specificity": { 117 | "version": "5.0.0", 118 | "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", 119 | "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", 120 | "dev": true, 121 | "funding": [ 122 | { 123 | "type": "github", 124 | "url": "https://github.com/sponsors/csstools" 125 | }, 126 | { 127 | "type": "opencollective", 128 | "url": "https://opencollective.com/csstools" 129 | } 130 | ], 131 | "license": "MIT-0", 132 | "engines": { 133 | "node": ">=18" 134 | }, 135 | "peerDependencies": { 136 | "postcss-selector-parser": "^7.0.0" 137 | } 138 | }, 139 | "node_modules/@dual-bundle/import-meta-resolve": { 140 | "version": "4.1.0", 141 | "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", 142 | "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", 143 | "dev": true, 144 | "license": "MIT", 145 | "funding": { 146 | "type": "github", 147 | "url": "https://github.com/sponsors/wooorm" 148 | } 149 | }, 150 | "node_modules/@eslint-community/eslint-utils": { 151 | "version": "4.4.1", 152 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", 153 | "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", 154 | "dev": true, 155 | "license": "MIT", 156 | "dependencies": { 157 | "eslint-visitor-keys": "^3.4.3" 158 | }, 159 | "engines": { 160 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 161 | }, 162 | "funding": { 163 | "url": "https://opencollective.com/eslint" 164 | }, 165 | "peerDependencies": { 166 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 167 | } 168 | }, 169 | "node_modules/@eslint-community/regexpp": { 170 | "version": "4.12.1", 171 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", 172 | "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", 173 | "dev": true, 174 | "license": "MIT", 175 | "engines": { 176 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 177 | } 178 | }, 179 | "node_modules/@eslint/eslintrc": { 180 | "version": "2.1.4", 181 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", 182 | "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", 183 | "dev": true, 184 | "license": "MIT", 185 | "dependencies": { 186 | "ajv": "^6.12.4", 187 | "debug": "^4.3.2", 188 | "espree": "^9.6.0", 189 | "globals": "^13.19.0", 190 | "ignore": "^5.2.0", 191 | "import-fresh": "^3.2.1", 192 | "js-yaml": "^4.1.0", 193 | "minimatch": "^3.1.2", 194 | "strip-json-comments": "^3.1.1" 195 | }, 196 | "engines": { 197 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 198 | }, 199 | "funding": { 200 | "url": "https://opencollective.com/eslint" 201 | } 202 | }, 203 | "node_modules/@eslint/js": { 204 | "version": "8.57.1", 205 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", 206 | "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", 207 | "dev": true, 208 | "license": "MIT", 209 | "engines": { 210 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 211 | } 212 | }, 213 | "node_modules/@humanwhocodes/config-array": { 214 | "version": "0.13.0", 215 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", 216 | "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", 217 | "deprecated": "Use @eslint/config-array instead", 218 | "dev": true, 219 | "license": "Apache-2.0", 220 | "dependencies": { 221 | "@humanwhocodes/object-schema": "^2.0.3", 222 | "debug": "^4.3.1", 223 | "minimatch": "^3.0.5" 224 | }, 225 | "engines": { 226 | "node": ">=10.10.0" 227 | } 228 | }, 229 | "node_modules/@humanwhocodes/module-importer": { 230 | "version": "1.0.1", 231 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 232 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 233 | "dev": true, 234 | "license": "Apache-2.0", 235 | "engines": { 236 | "node": ">=12.22" 237 | }, 238 | "funding": { 239 | "type": "github", 240 | "url": "https://github.com/sponsors/nzakas" 241 | } 242 | }, 243 | "node_modules/@humanwhocodes/object-schema": { 244 | "version": "2.0.3", 245 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", 246 | "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", 247 | "deprecated": "Use @eslint/object-schema instead", 248 | "dev": true, 249 | "license": "BSD-3-Clause" 250 | }, 251 | "node_modules/@nodelib/fs.scandir": { 252 | "version": "2.1.5", 253 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 254 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 255 | "dev": true, 256 | "license": "MIT", 257 | "dependencies": { 258 | "@nodelib/fs.stat": "2.0.5", 259 | "run-parallel": "^1.1.9" 260 | }, 261 | "engines": { 262 | "node": ">= 8" 263 | } 264 | }, 265 | "node_modules/@nodelib/fs.stat": { 266 | "version": "2.0.5", 267 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 268 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 269 | "dev": true, 270 | "license": "MIT", 271 | "engines": { 272 | "node": ">= 8" 273 | } 274 | }, 275 | "node_modules/@nodelib/fs.walk": { 276 | "version": "1.2.8", 277 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 278 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 279 | "dev": true, 280 | "license": "MIT", 281 | "dependencies": { 282 | "@nodelib/fs.scandir": "2.1.5", 283 | "fastq": "^1.6.0" 284 | }, 285 | "engines": { 286 | "node": ">= 8" 287 | } 288 | }, 289 | "node_modules/@ungap/structured-clone": { 290 | "version": "1.2.1", 291 | "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz", 292 | "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==", 293 | "dev": true, 294 | "license": "ISC" 295 | }, 296 | "node_modules/acorn": { 297 | "version": "8.14.0", 298 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", 299 | "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", 300 | "dev": true, 301 | "license": "MIT", 302 | "bin": { 303 | "acorn": "bin/acorn" 304 | }, 305 | "engines": { 306 | "node": ">=0.4.0" 307 | } 308 | }, 309 | "node_modules/acorn-jsx": { 310 | "version": "5.3.2", 311 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 312 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 313 | "dev": true, 314 | "license": "MIT", 315 | "peerDependencies": { 316 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 317 | } 318 | }, 319 | "node_modules/ajv": { 320 | "version": "6.12.6", 321 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 322 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 323 | "dev": true, 324 | "license": "MIT", 325 | "dependencies": { 326 | "fast-deep-equal": "^3.1.1", 327 | "fast-json-stable-stringify": "^2.0.0", 328 | "json-schema-traverse": "^0.4.1", 329 | "uri-js": "^4.2.2" 330 | }, 331 | "funding": { 332 | "type": "github", 333 | "url": "https://github.com/sponsors/epoberezkin" 334 | } 335 | }, 336 | "node_modules/ansi-escapes": { 337 | "version": "4.3.2", 338 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", 339 | "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", 340 | "dev": true, 341 | "license": "MIT", 342 | "dependencies": { 343 | "type-fest": "^0.21.3" 344 | }, 345 | "engines": { 346 | "node": ">=8" 347 | }, 348 | "funding": { 349 | "url": "https://github.com/sponsors/sindresorhus" 350 | } 351 | }, 352 | "node_modules/ansi-escapes/node_modules/type-fest": { 353 | "version": "0.21.3", 354 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", 355 | "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", 356 | "dev": true, 357 | "license": "(MIT OR CC0-1.0)", 358 | "engines": { 359 | "node": ">=10" 360 | }, 361 | "funding": { 362 | "url": "https://github.com/sponsors/sindresorhus" 363 | } 364 | }, 365 | "node_modules/ansi-regex": { 366 | "version": "5.0.1", 367 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 368 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 369 | "dev": true, 370 | "license": "MIT", 371 | "engines": { 372 | "node": ">=8" 373 | } 374 | }, 375 | "node_modules/ansi-styles": { 376 | "version": "4.3.0", 377 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 378 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 379 | "dev": true, 380 | "license": "MIT", 381 | "dependencies": { 382 | "color-convert": "^2.0.1" 383 | }, 384 | "engines": { 385 | "node": ">=8" 386 | }, 387 | "funding": { 388 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 389 | } 390 | }, 391 | "node_modules/argparse": { 392 | "version": "2.0.1", 393 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 394 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 395 | "dev": true, 396 | "license": "Python-2.0" 397 | }, 398 | "node_modules/array-union": { 399 | "version": "2.1.0", 400 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 401 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 402 | "dev": true, 403 | "license": "MIT", 404 | "engines": { 405 | "node": ">=8" 406 | } 407 | }, 408 | "node_modules/astral-regex": { 409 | "version": "2.0.0", 410 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", 411 | "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", 412 | "dev": true, 413 | "license": "MIT", 414 | "engines": { 415 | "node": ">=8" 416 | } 417 | }, 418 | "node_modules/balanced-match": { 419 | "version": "1.0.2", 420 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 421 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 422 | "dev": true, 423 | "license": "MIT" 424 | }, 425 | "node_modules/brace-expansion": { 426 | "version": "1.1.11", 427 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 428 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 429 | "dev": true, 430 | "license": "MIT", 431 | "dependencies": { 432 | "balanced-match": "^1.0.0", 433 | "concat-map": "0.0.1" 434 | } 435 | }, 436 | "node_modules/braces": { 437 | "version": "3.0.3", 438 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 439 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 440 | "dev": true, 441 | "license": "MIT", 442 | "dependencies": { 443 | "fill-range": "^7.1.1" 444 | }, 445 | "engines": { 446 | "node": ">=8" 447 | } 448 | }, 449 | "node_modules/callsites": { 450 | "version": "3.1.0", 451 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 452 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 453 | "dev": true, 454 | "license": "MIT", 455 | "engines": { 456 | "node": ">=6" 457 | } 458 | }, 459 | "node_modules/chalk": { 460 | "version": "4.1.2", 461 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 462 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 463 | "dev": true, 464 | "license": "MIT", 465 | "dependencies": { 466 | "ansi-styles": "^4.1.0", 467 | "supports-color": "^7.1.0" 468 | }, 469 | "engines": { 470 | "node": ">=10" 471 | }, 472 | "funding": { 473 | "url": "https://github.com/chalk/chalk?sponsor=1" 474 | } 475 | }, 476 | "node_modules/cli-cursor": { 477 | "version": "3.1.0", 478 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 479 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 480 | "dev": true, 481 | "license": "MIT", 482 | "dependencies": { 483 | "restore-cursor": "^3.1.0" 484 | }, 485 | "engines": { 486 | "node": ">=8" 487 | } 488 | }, 489 | "node_modules/color-convert": { 490 | "version": "2.0.1", 491 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 492 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 493 | "dev": true, 494 | "license": "MIT", 495 | "dependencies": { 496 | "color-name": "~1.1.4" 497 | }, 498 | "engines": { 499 | "node": ">=7.0.0" 500 | } 501 | }, 502 | "node_modules/color-name": { 503 | "version": "1.1.4", 504 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 505 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 506 | "dev": true, 507 | "license": "MIT" 508 | }, 509 | "node_modules/colord": { 510 | "version": "2.9.3", 511 | "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", 512 | "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", 513 | "dev": true, 514 | "license": "MIT" 515 | }, 516 | "node_modules/concat-map": { 517 | "version": "0.0.1", 518 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 519 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 520 | "dev": true, 521 | "license": "MIT" 522 | }, 523 | "node_modules/cosmiconfig": { 524 | "version": "9.0.0", 525 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", 526 | "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", 527 | "dev": true, 528 | "license": "MIT", 529 | "dependencies": { 530 | "env-paths": "^2.2.1", 531 | "import-fresh": "^3.3.0", 532 | "js-yaml": "^4.1.0", 533 | "parse-json": "^5.2.0" 534 | }, 535 | "engines": { 536 | "node": ">=14" 537 | }, 538 | "funding": { 539 | "url": "https://github.com/sponsors/d-fischer" 540 | }, 541 | "peerDependencies": { 542 | "typescript": ">=4.9.5" 543 | }, 544 | "peerDependenciesMeta": { 545 | "typescript": { 546 | "optional": true 547 | } 548 | } 549 | }, 550 | "node_modules/cross-spawn": { 551 | "version": "7.0.6", 552 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 553 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 554 | "dev": true, 555 | "license": "MIT", 556 | "dependencies": { 557 | "path-key": "^3.1.0", 558 | "shebang-command": "^2.0.0", 559 | "which": "^2.0.1" 560 | }, 561 | "engines": { 562 | "node": ">= 8" 563 | } 564 | }, 565 | "node_modules/css-functions-list": { 566 | "version": "3.2.3", 567 | "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", 568 | "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", 569 | "dev": true, 570 | "license": "MIT", 571 | "engines": { 572 | "node": ">=12 || >=16" 573 | } 574 | }, 575 | "node_modules/css-tree": { 576 | "version": "3.1.0", 577 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", 578 | "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", 579 | "dev": true, 580 | "license": "MIT", 581 | "dependencies": { 582 | "mdn-data": "2.12.2", 583 | "source-map-js": "^1.0.1" 584 | }, 585 | "engines": { 586 | "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" 587 | } 588 | }, 589 | "node_modules/cssesc": { 590 | "version": "3.0.0", 591 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 592 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 593 | "dev": true, 594 | "license": "MIT", 595 | "bin": { 596 | "cssesc": "bin/cssesc" 597 | }, 598 | "engines": { 599 | "node": ">=4" 600 | } 601 | }, 602 | "node_modules/debug": { 603 | "version": "4.4.0", 604 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", 605 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", 606 | "dev": true, 607 | "license": "MIT", 608 | "dependencies": { 609 | "ms": "^2.1.3" 610 | }, 611 | "engines": { 612 | "node": ">=6.0" 613 | }, 614 | "peerDependenciesMeta": { 615 | "supports-color": { 616 | "optional": true 617 | } 618 | } 619 | }, 620 | "node_modules/deep-is": { 621 | "version": "0.1.4", 622 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 623 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 624 | "dev": true, 625 | "license": "MIT" 626 | }, 627 | "node_modules/dir-glob": { 628 | "version": "3.0.1", 629 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 630 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 631 | "dev": true, 632 | "license": "MIT", 633 | "dependencies": { 634 | "path-type": "^4.0.0" 635 | }, 636 | "engines": { 637 | "node": ">=8" 638 | } 639 | }, 640 | "node_modules/doctrine": { 641 | "version": "3.0.0", 642 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 643 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 644 | "dev": true, 645 | "license": "Apache-2.0", 646 | "dependencies": { 647 | "esutils": "^2.0.2" 648 | }, 649 | "engines": { 650 | "node": ">=6.0.0" 651 | } 652 | }, 653 | "node_modules/emoji-regex": { 654 | "version": "8.0.0", 655 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 656 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 657 | "dev": true, 658 | "license": "MIT" 659 | }, 660 | "node_modules/env-paths": { 661 | "version": "2.2.1", 662 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", 663 | "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", 664 | "dev": true, 665 | "license": "MIT", 666 | "engines": { 667 | "node": ">=6" 668 | } 669 | }, 670 | "node_modules/error-ex": { 671 | "version": "1.3.2", 672 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 673 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 674 | "dev": true, 675 | "license": "MIT", 676 | "dependencies": { 677 | "is-arrayish": "^0.2.1" 678 | } 679 | }, 680 | "node_modules/escape-string-regexp": { 681 | "version": "4.0.0", 682 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 683 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 684 | "dev": true, 685 | "license": "MIT", 686 | "engines": { 687 | "node": ">=10" 688 | }, 689 | "funding": { 690 | "url": "https://github.com/sponsors/sindresorhus" 691 | } 692 | }, 693 | "node_modules/eslint": { 694 | "version": "8.57.1", 695 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", 696 | "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", 697 | "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", 698 | "dev": true, 699 | "license": "MIT", 700 | "dependencies": { 701 | "@eslint-community/eslint-utils": "^4.2.0", 702 | "@eslint-community/regexpp": "^4.6.1", 703 | "@eslint/eslintrc": "^2.1.4", 704 | "@eslint/js": "8.57.1", 705 | "@humanwhocodes/config-array": "^0.13.0", 706 | "@humanwhocodes/module-importer": "^1.0.1", 707 | "@nodelib/fs.walk": "^1.2.8", 708 | "@ungap/structured-clone": "^1.2.0", 709 | "ajv": "^6.12.4", 710 | "chalk": "^4.0.0", 711 | "cross-spawn": "^7.0.2", 712 | "debug": "^4.3.2", 713 | "doctrine": "^3.0.0", 714 | "escape-string-regexp": "^4.0.0", 715 | "eslint-scope": "^7.2.2", 716 | "eslint-visitor-keys": "^3.4.3", 717 | "espree": "^9.6.1", 718 | "esquery": "^1.4.2", 719 | "esutils": "^2.0.2", 720 | "fast-deep-equal": "^3.1.3", 721 | "file-entry-cache": "^6.0.1", 722 | "find-up": "^5.0.0", 723 | "glob-parent": "^6.0.2", 724 | "globals": "^13.19.0", 725 | "graphemer": "^1.4.0", 726 | "ignore": "^5.2.0", 727 | "imurmurhash": "^0.1.4", 728 | "is-glob": "^4.0.0", 729 | "is-path-inside": "^3.0.3", 730 | "js-yaml": "^4.1.0", 731 | "json-stable-stringify-without-jsonify": "^1.0.1", 732 | "levn": "^0.4.1", 733 | "lodash.merge": "^4.6.2", 734 | "minimatch": "^3.1.2", 735 | "natural-compare": "^1.4.0", 736 | "optionator": "^0.9.3", 737 | "strip-ansi": "^6.0.1", 738 | "text-table": "^0.2.0" 739 | }, 740 | "bin": { 741 | "eslint": "bin/eslint.js" 742 | }, 743 | "engines": { 744 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 745 | }, 746 | "funding": { 747 | "url": "https://opencollective.com/eslint" 748 | } 749 | }, 750 | "node_modules/eslint-config-dev": { 751 | "version": "3.3.1", 752 | "resolved": "https://registry.npmjs.org/eslint-config-dev/-/eslint-config-dev-3.3.1.tgz", 753 | "integrity": "sha512-qFf7Y8y655tpas8QJxVkJI2MgcyQ1VingfxUm/pkFq/4r9XxW3fBTlGHr9zIizEWnnkTCnSk6uJLB0pl8Z16gQ==", 754 | "dev": true, 755 | "license": "CC0-1.0", 756 | "peerDependencies": { 757 | "eslint": "^8" 758 | } 759 | }, 760 | "node_modules/eslint-scope": { 761 | "version": "7.2.2", 762 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", 763 | "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", 764 | "dev": true, 765 | "license": "BSD-2-Clause", 766 | "dependencies": { 767 | "esrecurse": "^4.3.0", 768 | "estraverse": "^5.2.0" 769 | }, 770 | "engines": { 771 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 772 | }, 773 | "funding": { 774 | "url": "https://opencollective.com/eslint" 775 | } 776 | }, 777 | "node_modules/eslint-visitor-keys": { 778 | "version": "3.4.3", 779 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 780 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 781 | "dev": true, 782 | "license": "Apache-2.0", 783 | "engines": { 784 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 785 | }, 786 | "funding": { 787 | "url": "https://opencollective.com/eslint" 788 | } 789 | }, 790 | "node_modules/espree": { 791 | "version": "9.6.1", 792 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", 793 | "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", 794 | "dev": true, 795 | "license": "BSD-2-Clause", 796 | "dependencies": { 797 | "acorn": "^8.9.0", 798 | "acorn-jsx": "^5.3.2", 799 | "eslint-visitor-keys": "^3.4.1" 800 | }, 801 | "engines": { 802 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 803 | }, 804 | "funding": { 805 | "url": "https://opencollective.com/eslint" 806 | } 807 | }, 808 | "node_modules/esquery": { 809 | "version": "1.6.0", 810 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", 811 | "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", 812 | "dev": true, 813 | "license": "BSD-3-Clause", 814 | "dependencies": { 815 | "estraverse": "^5.1.0" 816 | }, 817 | "engines": { 818 | "node": ">=0.10" 819 | } 820 | }, 821 | "node_modules/esrecurse": { 822 | "version": "4.3.0", 823 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 824 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 825 | "dev": true, 826 | "license": "BSD-2-Clause", 827 | "dependencies": { 828 | "estraverse": "^5.2.0" 829 | }, 830 | "engines": { 831 | "node": ">=4.0" 832 | } 833 | }, 834 | "node_modules/estraverse": { 835 | "version": "5.3.0", 836 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 837 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 838 | "dev": true, 839 | "license": "BSD-2-Clause", 840 | "engines": { 841 | "node": ">=4.0" 842 | } 843 | }, 844 | "node_modules/esutils": { 845 | "version": "2.0.3", 846 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 847 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 848 | "dev": true, 849 | "license": "BSD-2-Clause", 850 | "engines": { 851 | "node": ">=0.10.0" 852 | } 853 | }, 854 | "node_modules/fast-deep-equal": { 855 | "version": "3.1.3", 856 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 857 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 858 | "dev": true, 859 | "license": "MIT" 860 | }, 861 | "node_modules/fast-glob": { 862 | "version": "3.3.2", 863 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", 864 | "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", 865 | "dev": true, 866 | "license": "MIT", 867 | "dependencies": { 868 | "@nodelib/fs.stat": "^2.0.2", 869 | "@nodelib/fs.walk": "^1.2.3", 870 | "glob-parent": "^5.1.2", 871 | "merge2": "^1.3.0", 872 | "micromatch": "^4.0.4" 873 | }, 874 | "engines": { 875 | "node": ">=8.6.0" 876 | } 877 | }, 878 | "node_modules/fast-glob/node_modules/glob-parent": { 879 | "version": "5.1.2", 880 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 881 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 882 | "dev": true, 883 | "license": "ISC", 884 | "dependencies": { 885 | "is-glob": "^4.0.1" 886 | }, 887 | "engines": { 888 | "node": ">= 6" 889 | } 890 | }, 891 | "node_modules/fast-json-stable-stringify": { 892 | "version": "2.1.0", 893 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 894 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 895 | "dev": true, 896 | "license": "MIT" 897 | }, 898 | "node_modules/fast-levenshtein": { 899 | "version": "2.0.6", 900 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 901 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 902 | "dev": true, 903 | "license": "MIT" 904 | }, 905 | "node_modules/fast-uri": { 906 | "version": "3.0.3", 907 | "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", 908 | "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", 909 | "dev": true, 910 | "license": "BSD-3-Clause" 911 | }, 912 | "node_modules/fastest-levenshtein": { 913 | "version": "1.0.16", 914 | "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", 915 | "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", 916 | "dev": true, 917 | "license": "MIT", 918 | "engines": { 919 | "node": ">= 4.9.1" 920 | } 921 | }, 922 | "node_modules/fastq": { 923 | "version": "1.18.0", 924 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", 925 | "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", 926 | "dev": true, 927 | "license": "ISC", 928 | "dependencies": { 929 | "reusify": "^1.0.4" 930 | } 931 | }, 932 | "node_modules/file-entry-cache": { 933 | "version": "6.0.1", 934 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 935 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 936 | "dev": true, 937 | "license": "MIT", 938 | "dependencies": { 939 | "flat-cache": "^3.0.4" 940 | }, 941 | "engines": { 942 | "node": "^10.12.0 || >=12.0.0" 943 | } 944 | }, 945 | "node_modules/fill-range": { 946 | "version": "7.1.1", 947 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 948 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 949 | "dev": true, 950 | "license": "MIT", 951 | "dependencies": { 952 | "to-regex-range": "^5.0.1" 953 | }, 954 | "engines": { 955 | "node": ">=8" 956 | } 957 | }, 958 | "node_modules/find-up": { 959 | "version": "5.0.0", 960 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 961 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 962 | "dev": true, 963 | "license": "MIT", 964 | "dependencies": { 965 | "locate-path": "^6.0.0", 966 | "path-exists": "^4.0.0" 967 | }, 968 | "engines": { 969 | "node": ">=10" 970 | }, 971 | "funding": { 972 | "url": "https://github.com/sponsors/sindresorhus" 973 | } 974 | }, 975 | "node_modules/flat-cache": { 976 | "version": "3.2.0", 977 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", 978 | "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", 979 | "dev": true, 980 | "license": "MIT", 981 | "dependencies": { 982 | "flatted": "^3.2.9", 983 | "keyv": "^4.5.3", 984 | "rimraf": "^3.0.2" 985 | }, 986 | "engines": { 987 | "node": "^10.12.0 || >=12.0.0" 988 | } 989 | }, 990 | "node_modules/flatted": { 991 | "version": "3.3.2", 992 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", 993 | "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", 994 | "dev": true, 995 | "license": "ISC" 996 | }, 997 | "node_modules/fs.realpath": { 998 | "version": "1.0.0", 999 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1000 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1001 | "dev": true, 1002 | "license": "ISC" 1003 | }, 1004 | "node_modules/glob": { 1005 | "version": "7.2.3", 1006 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1007 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1008 | "deprecated": "Glob versions prior to v9 are no longer supported", 1009 | "dev": true, 1010 | "license": "ISC", 1011 | "dependencies": { 1012 | "fs.realpath": "^1.0.0", 1013 | "inflight": "^1.0.4", 1014 | "inherits": "2", 1015 | "minimatch": "^3.1.1", 1016 | "once": "^1.3.0", 1017 | "path-is-absolute": "^1.0.0" 1018 | }, 1019 | "engines": { 1020 | "node": "*" 1021 | }, 1022 | "funding": { 1023 | "url": "https://github.com/sponsors/isaacs" 1024 | } 1025 | }, 1026 | "node_modules/glob-parent": { 1027 | "version": "6.0.2", 1028 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1029 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1030 | "dev": true, 1031 | "license": "ISC", 1032 | "dependencies": { 1033 | "is-glob": "^4.0.3" 1034 | }, 1035 | "engines": { 1036 | "node": ">=10.13.0" 1037 | } 1038 | }, 1039 | "node_modules/global-modules": { 1040 | "version": "2.0.0", 1041 | "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", 1042 | "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", 1043 | "dev": true, 1044 | "license": "MIT", 1045 | "dependencies": { 1046 | "global-prefix": "^3.0.0" 1047 | }, 1048 | "engines": { 1049 | "node": ">=6" 1050 | } 1051 | }, 1052 | "node_modules/global-prefix": { 1053 | "version": "3.0.0", 1054 | "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", 1055 | "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", 1056 | "dev": true, 1057 | "license": "MIT", 1058 | "dependencies": { 1059 | "ini": "^1.3.5", 1060 | "kind-of": "^6.0.2", 1061 | "which": "^1.3.1" 1062 | }, 1063 | "engines": { 1064 | "node": ">=6" 1065 | } 1066 | }, 1067 | "node_modules/global-prefix/node_modules/which": { 1068 | "version": "1.3.1", 1069 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 1070 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 1071 | "dev": true, 1072 | "license": "ISC", 1073 | "dependencies": { 1074 | "isexe": "^2.0.0" 1075 | }, 1076 | "bin": { 1077 | "which": "bin/which" 1078 | } 1079 | }, 1080 | "node_modules/globals": { 1081 | "version": "13.24.0", 1082 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", 1083 | "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", 1084 | "dev": true, 1085 | "license": "MIT", 1086 | "dependencies": { 1087 | "type-fest": "^0.20.2" 1088 | }, 1089 | "engines": { 1090 | "node": ">=8" 1091 | }, 1092 | "funding": { 1093 | "url": "https://github.com/sponsors/sindresorhus" 1094 | } 1095 | }, 1096 | "node_modules/globby": { 1097 | "version": "11.1.0", 1098 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", 1099 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", 1100 | "dev": true, 1101 | "license": "MIT", 1102 | "dependencies": { 1103 | "array-union": "^2.1.0", 1104 | "dir-glob": "^3.0.1", 1105 | "fast-glob": "^3.2.9", 1106 | "ignore": "^5.2.0", 1107 | "merge2": "^1.4.1", 1108 | "slash": "^3.0.0" 1109 | }, 1110 | "engines": { 1111 | "node": ">=10" 1112 | }, 1113 | "funding": { 1114 | "url": "https://github.com/sponsors/sindresorhus" 1115 | } 1116 | }, 1117 | "node_modules/globjoin": { 1118 | "version": "0.1.4", 1119 | "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", 1120 | "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", 1121 | "dev": true, 1122 | "license": "MIT" 1123 | }, 1124 | "node_modules/graphemer": { 1125 | "version": "1.4.0", 1126 | "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 1127 | "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 1128 | "dev": true, 1129 | "license": "MIT" 1130 | }, 1131 | "node_modules/has-flag": { 1132 | "version": "4.0.0", 1133 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1134 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1135 | "dev": true, 1136 | "license": "MIT", 1137 | "engines": { 1138 | "node": ">=8" 1139 | } 1140 | }, 1141 | "node_modules/html-tags": { 1142 | "version": "3.3.1", 1143 | "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", 1144 | "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", 1145 | "dev": true, 1146 | "license": "MIT", 1147 | "engines": { 1148 | "node": ">=8" 1149 | }, 1150 | "funding": { 1151 | "url": "https://github.com/sponsors/sindresorhus" 1152 | } 1153 | }, 1154 | "node_modules/ignore": { 1155 | "version": "5.3.2", 1156 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", 1157 | "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", 1158 | "dev": true, 1159 | "license": "MIT", 1160 | "engines": { 1161 | "node": ">= 4" 1162 | } 1163 | }, 1164 | "node_modules/import-fresh": { 1165 | "version": "3.3.0", 1166 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1167 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1168 | "dev": true, 1169 | "license": "MIT", 1170 | "dependencies": { 1171 | "parent-module": "^1.0.0", 1172 | "resolve-from": "^4.0.0" 1173 | }, 1174 | "engines": { 1175 | "node": ">=6" 1176 | }, 1177 | "funding": { 1178 | "url": "https://github.com/sponsors/sindresorhus" 1179 | } 1180 | }, 1181 | "node_modules/imurmurhash": { 1182 | "version": "0.1.4", 1183 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1184 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 1185 | "dev": true, 1186 | "license": "MIT", 1187 | "engines": { 1188 | "node": ">=0.8.19" 1189 | } 1190 | }, 1191 | "node_modules/inflight": { 1192 | "version": "1.0.6", 1193 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1194 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1195 | "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", 1196 | "dev": true, 1197 | "license": "ISC", 1198 | "dependencies": { 1199 | "once": "^1.3.0", 1200 | "wrappy": "1" 1201 | } 1202 | }, 1203 | "node_modules/inherits": { 1204 | "version": "2.0.4", 1205 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1206 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1207 | "dev": true, 1208 | "license": "ISC" 1209 | }, 1210 | "node_modules/ini": { 1211 | "version": "1.3.8", 1212 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 1213 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 1214 | "dev": true, 1215 | "license": "ISC" 1216 | }, 1217 | "node_modules/is-arrayish": { 1218 | "version": "0.2.1", 1219 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1220 | "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", 1221 | "dev": true, 1222 | "license": "MIT" 1223 | }, 1224 | "node_modules/is-extglob": { 1225 | "version": "2.1.1", 1226 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1227 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1228 | "dev": true, 1229 | "license": "MIT", 1230 | "engines": { 1231 | "node": ">=0.10.0" 1232 | } 1233 | }, 1234 | "node_modules/is-fullwidth-code-point": { 1235 | "version": "3.0.0", 1236 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1237 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1238 | "dev": true, 1239 | "license": "MIT", 1240 | "engines": { 1241 | "node": ">=8" 1242 | } 1243 | }, 1244 | "node_modules/is-glob": { 1245 | "version": "4.0.3", 1246 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1247 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1248 | "dev": true, 1249 | "license": "MIT", 1250 | "dependencies": { 1251 | "is-extglob": "^2.1.1" 1252 | }, 1253 | "engines": { 1254 | "node": ">=0.10.0" 1255 | } 1256 | }, 1257 | "node_modules/is-number": { 1258 | "version": "7.0.0", 1259 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1260 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1261 | "dev": true, 1262 | "license": "MIT", 1263 | "engines": { 1264 | "node": ">=0.12.0" 1265 | } 1266 | }, 1267 | "node_modules/is-path-inside": { 1268 | "version": "3.0.3", 1269 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 1270 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 1271 | "dev": true, 1272 | "license": "MIT", 1273 | "engines": { 1274 | "node": ">=8" 1275 | } 1276 | }, 1277 | "node_modules/is-plain-object": { 1278 | "version": "5.0.0", 1279 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", 1280 | "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", 1281 | "dev": true, 1282 | "license": "MIT", 1283 | "engines": { 1284 | "node": ">=0.10.0" 1285 | } 1286 | }, 1287 | "node_modules/isexe": { 1288 | "version": "2.0.0", 1289 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1290 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1291 | "dev": true, 1292 | "license": "ISC" 1293 | }, 1294 | "node_modules/js-tokens": { 1295 | "version": "4.0.0", 1296 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1297 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1298 | "dev": true, 1299 | "license": "MIT" 1300 | }, 1301 | "node_modules/js-yaml": { 1302 | "version": "4.1.0", 1303 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1304 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1305 | "dev": true, 1306 | "license": "MIT", 1307 | "dependencies": { 1308 | "argparse": "^2.0.1" 1309 | }, 1310 | "bin": { 1311 | "js-yaml": "bin/js-yaml.js" 1312 | } 1313 | }, 1314 | "node_modules/json-buffer": { 1315 | "version": "3.0.1", 1316 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 1317 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 1318 | "dev": true, 1319 | "license": "MIT" 1320 | }, 1321 | "node_modules/json-parse-even-better-errors": { 1322 | "version": "2.3.1", 1323 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 1324 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 1325 | "dev": true, 1326 | "license": "MIT" 1327 | }, 1328 | "node_modules/json-schema-traverse": { 1329 | "version": "0.4.1", 1330 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1331 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1332 | "dev": true, 1333 | "license": "MIT" 1334 | }, 1335 | "node_modules/json-stable-stringify-without-jsonify": { 1336 | "version": "1.0.1", 1337 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1338 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 1339 | "dev": true, 1340 | "license": "MIT" 1341 | }, 1342 | "node_modules/keyv": { 1343 | "version": "4.5.4", 1344 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 1345 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 1346 | "dev": true, 1347 | "license": "MIT", 1348 | "dependencies": { 1349 | "json-buffer": "3.0.1" 1350 | } 1351 | }, 1352 | "node_modules/kind-of": { 1353 | "version": "6.0.3", 1354 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", 1355 | "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", 1356 | "dev": true, 1357 | "license": "MIT", 1358 | "engines": { 1359 | "node": ">=0.10.0" 1360 | } 1361 | }, 1362 | "node_modules/known-css-properties": { 1363 | "version": "0.35.0", 1364 | "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz", 1365 | "integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==", 1366 | "dev": true, 1367 | "license": "MIT" 1368 | }, 1369 | "node_modules/levn": { 1370 | "version": "0.4.1", 1371 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1372 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1373 | "dev": true, 1374 | "license": "MIT", 1375 | "dependencies": { 1376 | "prelude-ls": "^1.2.1", 1377 | "type-check": "~0.4.0" 1378 | }, 1379 | "engines": { 1380 | "node": ">= 0.8.0" 1381 | } 1382 | }, 1383 | "node_modules/lines-and-columns": { 1384 | "version": "1.2.4", 1385 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 1386 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 1387 | "dev": true, 1388 | "license": "MIT" 1389 | }, 1390 | "node_modules/locate-path": { 1391 | "version": "6.0.0", 1392 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 1393 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 1394 | "dev": true, 1395 | "license": "MIT", 1396 | "dependencies": { 1397 | "p-locate": "^5.0.0" 1398 | }, 1399 | "engines": { 1400 | "node": ">=10" 1401 | }, 1402 | "funding": { 1403 | "url": "https://github.com/sponsors/sindresorhus" 1404 | } 1405 | }, 1406 | "node_modules/lodash.merge": { 1407 | "version": "4.6.2", 1408 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 1409 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 1410 | "dev": true, 1411 | "license": "MIT" 1412 | }, 1413 | "node_modules/lodash.truncate": { 1414 | "version": "4.4.2", 1415 | "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", 1416 | "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", 1417 | "dev": true, 1418 | "license": "MIT" 1419 | }, 1420 | "node_modules/log-update": { 1421 | "version": "4.0.0", 1422 | "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", 1423 | "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", 1424 | "dev": true, 1425 | "license": "MIT", 1426 | "dependencies": { 1427 | "ansi-escapes": "^4.3.0", 1428 | "cli-cursor": "^3.1.0", 1429 | "slice-ansi": "^4.0.0", 1430 | "wrap-ansi": "^6.2.0" 1431 | }, 1432 | "engines": { 1433 | "node": ">=10" 1434 | }, 1435 | "funding": { 1436 | "url": "https://github.com/sponsors/sindresorhus" 1437 | } 1438 | }, 1439 | "node_modules/mathml-tag-names": { 1440 | "version": "2.1.3", 1441 | "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", 1442 | "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", 1443 | "dev": true, 1444 | "license": "MIT", 1445 | "funding": { 1446 | "type": "github", 1447 | "url": "https://github.com/sponsors/wooorm" 1448 | } 1449 | }, 1450 | "node_modules/mdn-data": { 1451 | "version": "2.12.2", 1452 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", 1453 | "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", 1454 | "dev": true, 1455 | "license": "CC0-1.0" 1456 | }, 1457 | "node_modules/meow": { 1458 | "version": "13.2.0", 1459 | "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", 1460 | "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", 1461 | "dev": true, 1462 | "license": "MIT", 1463 | "engines": { 1464 | "node": ">=18" 1465 | }, 1466 | "funding": { 1467 | "url": "https://github.com/sponsors/sindresorhus" 1468 | } 1469 | }, 1470 | "node_modules/merge2": { 1471 | "version": "1.4.1", 1472 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1473 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1474 | "dev": true, 1475 | "license": "MIT", 1476 | "engines": { 1477 | "node": ">= 8" 1478 | } 1479 | }, 1480 | "node_modules/micromatch": { 1481 | "version": "4.0.8", 1482 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", 1483 | "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", 1484 | "dev": true, 1485 | "license": "MIT", 1486 | "dependencies": { 1487 | "braces": "^3.0.3", 1488 | "picomatch": "^2.3.1" 1489 | }, 1490 | "engines": { 1491 | "node": ">=8.6" 1492 | } 1493 | }, 1494 | "node_modules/mimic-fn": { 1495 | "version": "2.1.0", 1496 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1497 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 1498 | "dev": true, 1499 | "license": "MIT", 1500 | "engines": { 1501 | "node": ">=6" 1502 | } 1503 | }, 1504 | "node_modules/minimatch": { 1505 | "version": "3.1.2", 1506 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1507 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1508 | "dev": true, 1509 | "license": "ISC", 1510 | "dependencies": { 1511 | "brace-expansion": "^1.1.7" 1512 | }, 1513 | "engines": { 1514 | "node": "*" 1515 | } 1516 | }, 1517 | "node_modules/ms": { 1518 | "version": "2.1.3", 1519 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1520 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1521 | "dev": true, 1522 | "license": "MIT" 1523 | }, 1524 | "node_modules/nanoid": { 1525 | "version": "3.3.8", 1526 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", 1527 | "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", 1528 | "dev": true, 1529 | "funding": [ 1530 | { 1531 | "type": "github", 1532 | "url": "https://github.com/sponsors/ai" 1533 | } 1534 | ], 1535 | "license": "MIT", 1536 | "bin": { 1537 | "nanoid": "bin/nanoid.cjs" 1538 | }, 1539 | "engines": { 1540 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1541 | } 1542 | }, 1543 | "node_modules/natural-compare": { 1544 | "version": "1.4.0", 1545 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1546 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 1547 | "dev": true, 1548 | "license": "MIT" 1549 | }, 1550 | "node_modules/normalize-path": { 1551 | "version": "3.0.0", 1552 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1553 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1554 | "dev": true, 1555 | "license": "MIT", 1556 | "engines": { 1557 | "node": ">=0.10.0" 1558 | } 1559 | }, 1560 | "node_modules/once": { 1561 | "version": "1.4.0", 1562 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1563 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1564 | "dev": true, 1565 | "license": "ISC", 1566 | "dependencies": { 1567 | "wrappy": "1" 1568 | } 1569 | }, 1570 | "node_modules/onetime": { 1571 | "version": "5.1.2", 1572 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 1573 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 1574 | "dev": true, 1575 | "license": "MIT", 1576 | "dependencies": { 1577 | "mimic-fn": "^2.1.0" 1578 | }, 1579 | "engines": { 1580 | "node": ">=6" 1581 | }, 1582 | "funding": { 1583 | "url": "https://github.com/sponsors/sindresorhus" 1584 | } 1585 | }, 1586 | "node_modules/optionator": { 1587 | "version": "0.9.4", 1588 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", 1589 | "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", 1590 | "dev": true, 1591 | "license": "MIT", 1592 | "dependencies": { 1593 | "deep-is": "^0.1.3", 1594 | "fast-levenshtein": "^2.0.6", 1595 | "levn": "^0.4.1", 1596 | "prelude-ls": "^1.2.1", 1597 | "type-check": "^0.4.0", 1598 | "word-wrap": "^1.2.5" 1599 | }, 1600 | "engines": { 1601 | "node": ">= 0.8.0" 1602 | } 1603 | }, 1604 | "node_modules/p-limit": { 1605 | "version": "3.1.0", 1606 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 1607 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1608 | "dev": true, 1609 | "license": "MIT", 1610 | "dependencies": { 1611 | "yocto-queue": "^0.1.0" 1612 | }, 1613 | "engines": { 1614 | "node": ">=10" 1615 | }, 1616 | "funding": { 1617 | "url": "https://github.com/sponsors/sindresorhus" 1618 | } 1619 | }, 1620 | "node_modules/p-locate": { 1621 | "version": "5.0.0", 1622 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 1623 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1624 | "dev": true, 1625 | "license": "MIT", 1626 | "dependencies": { 1627 | "p-limit": "^3.0.2" 1628 | }, 1629 | "engines": { 1630 | "node": ">=10" 1631 | }, 1632 | "funding": { 1633 | "url": "https://github.com/sponsors/sindresorhus" 1634 | } 1635 | }, 1636 | "node_modules/parent-module": { 1637 | "version": "1.0.1", 1638 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1639 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1640 | "dev": true, 1641 | "license": "MIT", 1642 | "dependencies": { 1643 | "callsites": "^3.0.0" 1644 | }, 1645 | "engines": { 1646 | "node": ">=6" 1647 | } 1648 | }, 1649 | "node_modules/parse-json": { 1650 | "version": "5.2.0", 1651 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 1652 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 1653 | "dev": true, 1654 | "license": "MIT", 1655 | "dependencies": { 1656 | "@babel/code-frame": "^7.0.0", 1657 | "error-ex": "^1.3.1", 1658 | "json-parse-even-better-errors": "^2.3.0", 1659 | "lines-and-columns": "^1.1.6" 1660 | }, 1661 | "engines": { 1662 | "node": ">=8" 1663 | }, 1664 | "funding": { 1665 | "url": "https://github.com/sponsors/sindresorhus" 1666 | } 1667 | }, 1668 | "node_modules/path-exists": { 1669 | "version": "4.0.0", 1670 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1671 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1672 | "dev": true, 1673 | "license": "MIT", 1674 | "engines": { 1675 | "node": ">=8" 1676 | } 1677 | }, 1678 | "node_modules/path-is-absolute": { 1679 | "version": "1.0.1", 1680 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1681 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1682 | "dev": true, 1683 | "license": "MIT", 1684 | "engines": { 1685 | "node": ">=0.10.0" 1686 | } 1687 | }, 1688 | "node_modules/path-key": { 1689 | "version": "3.1.1", 1690 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1691 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1692 | "dev": true, 1693 | "license": "MIT", 1694 | "engines": { 1695 | "node": ">=8" 1696 | } 1697 | }, 1698 | "node_modules/path-type": { 1699 | "version": "4.0.0", 1700 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 1701 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 1702 | "dev": true, 1703 | "license": "MIT", 1704 | "engines": { 1705 | "node": ">=8" 1706 | } 1707 | }, 1708 | "node_modules/picocolors": { 1709 | "version": "1.1.1", 1710 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 1711 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 1712 | "dev": true, 1713 | "license": "ISC" 1714 | }, 1715 | "node_modules/picomatch": { 1716 | "version": "2.3.1", 1717 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1718 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1719 | "dev": true, 1720 | "license": "MIT", 1721 | "engines": { 1722 | "node": ">=8.6" 1723 | }, 1724 | "funding": { 1725 | "url": "https://github.com/sponsors/jonschlinkert" 1726 | } 1727 | }, 1728 | "node_modules/postcss": { 1729 | "version": "8.4.49", 1730 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", 1731 | "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", 1732 | "dev": true, 1733 | "funding": [ 1734 | { 1735 | "type": "opencollective", 1736 | "url": "https://opencollective.com/postcss/" 1737 | }, 1738 | { 1739 | "type": "tidelift", 1740 | "url": "https://tidelift.com/funding/github/npm/postcss" 1741 | }, 1742 | { 1743 | "type": "github", 1744 | "url": "https://github.com/sponsors/ai" 1745 | } 1746 | ], 1747 | "license": "MIT", 1748 | "dependencies": { 1749 | "nanoid": "^3.3.7", 1750 | "picocolors": "^1.1.1", 1751 | "source-map-js": "^1.2.1" 1752 | }, 1753 | "engines": { 1754 | "node": "^10 || ^12 || >=14" 1755 | } 1756 | }, 1757 | "node_modules/postcss-resolve-nested-selector": { 1758 | "version": "0.1.6", 1759 | "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", 1760 | "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", 1761 | "dev": true, 1762 | "license": "MIT" 1763 | }, 1764 | "node_modules/postcss-safe-parser": { 1765 | "version": "7.0.1", 1766 | "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", 1767 | "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", 1768 | "dev": true, 1769 | "funding": [ 1770 | { 1771 | "type": "opencollective", 1772 | "url": "https://opencollective.com/postcss/" 1773 | }, 1774 | { 1775 | "type": "tidelift", 1776 | "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" 1777 | }, 1778 | { 1779 | "type": "github", 1780 | "url": "https://github.com/sponsors/ai" 1781 | } 1782 | ], 1783 | "license": "MIT", 1784 | "engines": { 1785 | "node": ">=18.0" 1786 | }, 1787 | "peerDependencies": { 1788 | "postcss": "^8.4.31" 1789 | } 1790 | }, 1791 | "node_modules/postcss-selector-parser": { 1792 | "version": "7.0.0", 1793 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", 1794 | "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", 1795 | "dev": true, 1796 | "license": "MIT", 1797 | "dependencies": { 1798 | "cssesc": "^3.0.0", 1799 | "util-deprecate": "^1.0.2" 1800 | }, 1801 | "engines": { 1802 | "node": ">=4" 1803 | } 1804 | }, 1805 | "node_modules/postcss-value-parser": { 1806 | "version": "4.2.0", 1807 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 1808 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 1809 | "dev": true, 1810 | "license": "MIT" 1811 | }, 1812 | "node_modules/prelude-ls": { 1813 | "version": "1.2.1", 1814 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 1815 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 1816 | "dev": true, 1817 | "license": "MIT", 1818 | "engines": { 1819 | "node": ">= 0.8.0" 1820 | } 1821 | }, 1822 | "node_modules/punycode": { 1823 | "version": "2.3.1", 1824 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 1825 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 1826 | "dev": true, 1827 | "license": "MIT", 1828 | "engines": { 1829 | "node": ">=6" 1830 | } 1831 | }, 1832 | "node_modules/queue-microtask": { 1833 | "version": "1.2.3", 1834 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1835 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1836 | "dev": true, 1837 | "funding": [ 1838 | { 1839 | "type": "github", 1840 | "url": "https://github.com/sponsors/feross" 1841 | }, 1842 | { 1843 | "type": "patreon", 1844 | "url": "https://www.patreon.com/feross" 1845 | }, 1846 | { 1847 | "type": "consulting", 1848 | "url": "https://feross.org/support" 1849 | } 1850 | ], 1851 | "license": "MIT" 1852 | }, 1853 | "node_modules/require-from-string": { 1854 | "version": "2.0.2", 1855 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 1856 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 1857 | "dev": true, 1858 | "license": "MIT", 1859 | "engines": { 1860 | "node": ">=0.10.0" 1861 | } 1862 | }, 1863 | "node_modules/resolve-from": { 1864 | "version": "4.0.0", 1865 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1866 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1867 | "dev": true, 1868 | "license": "MIT", 1869 | "engines": { 1870 | "node": ">=4" 1871 | } 1872 | }, 1873 | "node_modules/restore-cursor": { 1874 | "version": "3.1.0", 1875 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 1876 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 1877 | "dev": true, 1878 | "license": "MIT", 1879 | "dependencies": { 1880 | "onetime": "^5.1.0", 1881 | "signal-exit": "^3.0.2" 1882 | }, 1883 | "engines": { 1884 | "node": ">=8" 1885 | } 1886 | }, 1887 | "node_modules/reusify": { 1888 | "version": "1.0.4", 1889 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1890 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1891 | "dev": true, 1892 | "license": "MIT", 1893 | "engines": { 1894 | "iojs": ">=1.0.0", 1895 | "node": ">=0.10.0" 1896 | } 1897 | }, 1898 | "node_modules/rimraf": { 1899 | "version": "3.0.2", 1900 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1901 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1902 | "deprecated": "Rimraf versions prior to v4 are no longer supported", 1903 | "dev": true, 1904 | "license": "ISC", 1905 | "dependencies": { 1906 | "glob": "^7.1.3" 1907 | }, 1908 | "bin": { 1909 | "rimraf": "bin.js" 1910 | }, 1911 | "funding": { 1912 | "url": "https://github.com/sponsors/isaacs" 1913 | } 1914 | }, 1915 | "node_modules/run-parallel": { 1916 | "version": "1.2.0", 1917 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1918 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1919 | "dev": true, 1920 | "funding": [ 1921 | { 1922 | "type": "github", 1923 | "url": "https://github.com/sponsors/feross" 1924 | }, 1925 | { 1926 | "type": "patreon", 1927 | "url": "https://www.patreon.com/feross" 1928 | }, 1929 | { 1930 | "type": "consulting", 1931 | "url": "https://feross.org/support" 1932 | } 1933 | ], 1934 | "license": "MIT", 1935 | "dependencies": { 1936 | "queue-microtask": "^1.2.2" 1937 | } 1938 | }, 1939 | "node_modules/shebang-command": { 1940 | "version": "2.0.0", 1941 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1942 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1943 | "dev": true, 1944 | "license": "MIT", 1945 | "dependencies": { 1946 | "shebang-regex": "^3.0.0" 1947 | }, 1948 | "engines": { 1949 | "node": ">=8" 1950 | } 1951 | }, 1952 | "node_modules/shebang-regex": { 1953 | "version": "3.0.0", 1954 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1955 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1956 | "dev": true, 1957 | "license": "MIT", 1958 | "engines": { 1959 | "node": ">=8" 1960 | } 1961 | }, 1962 | "node_modules/signal-exit": { 1963 | "version": "3.0.7", 1964 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 1965 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 1966 | "dev": true, 1967 | "license": "ISC" 1968 | }, 1969 | "node_modules/slash": { 1970 | "version": "3.0.0", 1971 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 1972 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 1973 | "dev": true, 1974 | "license": "MIT", 1975 | "engines": { 1976 | "node": ">=8" 1977 | } 1978 | }, 1979 | "node_modules/slice-ansi": { 1980 | "version": "4.0.0", 1981 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", 1982 | "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", 1983 | "dev": true, 1984 | "license": "MIT", 1985 | "dependencies": { 1986 | "ansi-styles": "^4.0.0", 1987 | "astral-regex": "^2.0.0", 1988 | "is-fullwidth-code-point": "^3.0.0" 1989 | }, 1990 | "engines": { 1991 | "node": ">=10" 1992 | }, 1993 | "funding": { 1994 | "url": "https://github.com/chalk/slice-ansi?sponsor=1" 1995 | } 1996 | }, 1997 | "node_modules/source-map-js": { 1998 | "version": "1.2.1", 1999 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 2000 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 2001 | "dev": true, 2002 | "license": "BSD-3-Clause", 2003 | "engines": { 2004 | "node": ">=0.10.0" 2005 | } 2006 | }, 2007 | "node_modules/string-width": { 2008 | "version": "4.2.3", 2009 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2010 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2011 | "dev": true, 2012 | "license": "MIT", 2013 | "dependencies": { 2014 | "emoji-regex": "^8.0.0", 2015 | "is-fullwidth-code-point": "^3.0.0", 2016 | "strip-ansi": "^6.0.1" 2017 | }, 2018 | "engines": { 2019 | "node": ">=8" 2020 | } 2021 | }, 2022 | "node_modules/strip-ansi": { 2023 | "version": "6.0.1", 2024 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2025 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2026 | "dev": true, 2027 | "license": "MIT", 2028 | "dependencies": { 2029 | "ansi-regex": "^5.0.1" 2030 | }, 2031 | "engines": { 2032 | "node": ">=8" 2033 | } 2034 | }, 2035 | "node_modules/strip-json-comments": { 2036 | "version": "3.1.1", 2037 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 2038 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 2039 | "dev": true, 2040 | "license": "MIT", 2041 | "engines": { 2042 | "node": ">=8" 2043 | }, 2044 | "funding": { 2045 | "url": "https://github.com/sponsors/sindresorhus" 2046 | } 2047 | }, 2048 | "node_modules/stylelint": { 2049 | "version": "16.12.0", 2050 | "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.12.0.tgz", 2051 | "integrity": "sha512-F8zZ3L/rBpuoBZRvI4JVT20ZanPLXfQLzMOZg1tzPflRVh9mKpOZ8qcSIhh1my3FjAjZWG4T2POwGnmn6a6hbg==", 2052 | "dev": true, 2053 | "funding": [ 2054 | { 2055 | "type": "opencollective", 2056 | "url": "https://opencollective.com/stylelint" 2057 | }, 2058 | { 2059 | "type": "github", 2060 | "url": "https://github.com/sponsors/stylelint" 2061 | } 2062 | ], 2063 | "license": "MIT", 2064 | "dependencies": { 2065 | "@csstools/css-parser-algorithms": "^3.0.4", 2066 | "@csstools/css-tokenizer": "^3.0.3", 2067 | "@csstools/media-query-list-parser": "^4.0.2", 2068 | "@csstools/selector-specificity": "^5.0.0", 2069 | "@dual-bundle/import-meta-resolve": "^4.1.0", 2070 | "balanced-match": "^2.0.0", 2071 | "colord": "^2.9.3", 2072 | "cosmiconfig": "^9.0.0", 2073 | "css-functions-list": "^3.2.3", 2074 | "css-tree": "^3.0.1", 2075 | "debug": "^4.3.7", 2076 | "fast-glob": "^3.3.2", 2077 | "fastest-levenshtein": "^1.0.16", 2078 | "file-entry-cache": "^9.1.0", 2079 | "global-modules": "^2.0.0", 2080 | "globby": "^11.1.0", 2081 | "globjoin": "^0.1.4", 2082 | "html-tags": "^3.3.1", 2083 | "ignore": "^6.0.2", 2084 | "imurmurhash": "^0.1.4", 2085 | "is-plain-object": "^5.0.0", 2086 | "known-css-properties": "^0.35.0", 2087 | "mathml-tag-names": "^2.1.3", 2088 | "meow": "^13.2.0", 2089 | "micromatch": "^4.0.8", 2090 | "normalize-path": "^3.0.0", 2091 | "picocolors": "^1.1.1", 2092 | "postcss": "^8.4.49", 2093 | "postcss-resolve-nested-selector": "^0.1.6", 2094 | "postcss-safe-parser": "^7.0.1", 2095 | "postcss-selector-parser": "^7.0.0", 2096 | "postcss-value-parser": "^4.2.0", 2097 | "resolve-from": "^5.0.0", 2098 | "string-width": "^4.2.3", 2099 | "supports-hyperlinks": "^3.1.0", 2100 | "svg-tags": "^1.0.0", 2101 | "table": "^6.9.0", 2102 | "write-file-atomic": "^5.0.1" 2103 | }, 2104 | "bin": { 2105 | "stylelint": "bin/stylelint.mjs" 2106 | }, 2107 | "engines": { 2108 | "node": ">=18.12.0" 2109 | } 2110 | }, 2111 | "node_modules/stylelint-tape": { 2112 | "version": "5.0.1", 2113 | "resolved": "https://registry.npmjs.org/stylelint-tape/-/stylelint-tape-5.0.1.tgz", 2114 | "integrity": "sha512-CHQ6Qq7CVnRhGMTTGFHaOEyZirBmtQN4cpO01Kf/LbqzzcfM8UMwMTHyFwf2d3yHSZJmbI7N3MwatGn/QU5szw==", 2115 | "dev": true, 2116 | "license": "CC0-1.0", 2117 | "dependencies": { 2118 | "log-update": "^4" 2119 | }, 2120 | "bin": { 2121 | "stylelint-tape": "cli.mjs" 2122 | }, 2123 | "engines": { 2124 | "node": ">=20.0.0" 2125 | }, 2126 | "peerDependencies": { 2127 | "stylelint": ">= 16" 2128 | } 2129 | }, 2130 | "node_modules/stylelint/node_modules/balanced-match": { 2131 | "version": "2.0.0", 2132 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", 2133 | "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", 2134 | "dev": true, 2135 | "license": "MIT" 2136 | }, 2137 | "node_modules/stylelint/node_modules/file-entry-cache": { 2138 | "version": "9.1.0", 2139 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz", 2140 | "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==", 2141 | "dev": true, 2142 | "license": "MIT", 2143 | "dependencies": { 2144 | "flat-cache": "^5.0.0" 2145 | }, 2146 | "engines": { 2147 | "node": ">=18" 2148 | } 2149 | }, 2150 | "node_modules/stylelint/node_modules/flat-cache": { 2151 | "version": "5.0.0", 2152 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", 2153 | "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", 2154 | "dev": true, 2155 | "license": "MIT", 2156 | "dependencies": { 2157 | "flatted": "^3.3.1", 2158 | "keyv": "^4.5.4" 2159 | }, 2160 | "engines": { 2161 | "node": ">=18" 2162 | } 2163 | }, 2164 | "node_modules/stylelint/node_modules/ignore": { 2165 | "version": "6.0.2", 2166 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz", 2167 | "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==", 2168 | "dev": true, 2169 | "license": "MIT", 2170 | "engines": { 2171 | "node": ">= 4" 2172 | } 2173 | }, 2174 | "node_modules/stylelint/node_modules/resolve-from": { 2175 | "version": "5.0.0", 2176 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 2177 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 2178 | "dev": true, 2179 | "license": "MIT", 2180 | "engines": { 2181 | "node": ">=8" 2182 | } 2183 | }, 2184 | "node_modules/supports-color": { 2185 | "version": "7.2.0", 2186 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2187 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2188 | "dev": true, 2189 | "license": "MIT", 2190 | "dependencies": { 2191 | "has-flag": "^4.0.0" 2192 | }, 2193 | "engines": { 2194 | "node": ">=8" 2195 | } 2196 | }, 2197 | "node_modules/supports-hyperlinks": { 2198 | "version": "3.1.0", 2199 | "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz", 2200 | "integrity": "sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==", 2201 | "dev": true, 2202 | "license": "MIT", 2203 | "dependencies": { 2204 | "has-flag": "^4.0.0", 2205 | "supports-color": "^7.0.0" 2206 | }, 2207 | "engines": { 2208 | "node": ">=14.18" 2209 | }, 2210 | "funding": { 2211 | "url": "https://github.com/sponsors/sindresorhus" 2212 | } 2213 | }, 2214 | "node_modules/svg-tags": { 2215 | "version": "1.0.0", 2216 | "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", 2217 | "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", 2218 | "dev": true 2219 | }, 2220 | "node_modules/table": { 2221 | "version": "6.9.0", 2222 | "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", 2223 | "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", 2224 | "dev": true, 2225 | "license": "BSD-3-Clause", 2226 | "dependencies": { 2227 | "ajv": "^8.0.1", 2228 | "lodash.truncate": "^4.4.2", 2229 | "slice-ansi": "^4.0.0", 2230 | "string-width": "^4.2.3", 2231 | "strip-ansi": "^6.0.1" 2232 | }, 2233 | "engines": { 2234 | "node": ">=10.0.0" 2235 | } 2236 | }, 2237 | "node_modules/table/node_modules/ajv": { 2238 | "version": "8.17.1", 2239 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", 2240 | "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", 2241 | "dev": true, 2242 | "license": "MIT", 2243 | "dependencies": { 2244 | "fast-deep-equal": "^3.1.3", 2245 | "fast-uri": "^3.0.1", 2246 | "json-schema-traverse": "^1.0.0", 2247 | "require-from-string": "^2.0.2" 2248 | }, 2249 | "funding": { 2250 | "type": "github", 2251 | "url": "https://github.com/sponsors/epoberezkin" 2252 | } 2253 | }, 2254 | "node_modules/table/node_modules/json-schema-traverse": { 2255 | "version": "1.0.0", 2256 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 2257 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 2258 | "dev": true, 2259 | "license": "MIT" 2260 | }, 2261 | "node_modules/text-table": { 2262 | "version": "0.2.0", 2263 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 2264 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 2265 | "dev": true, 2266 | "license": "MIT" 2267 | }, 2268 | "node_modules/to-regex-range": { 2269 | "version": "5.0.1", 2270 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2271 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2272 | "dev": true, 2273 | "license": "MIT", 2274 | "dependencies": { 2275 | "is-number": "^7.0.0" 2276 | }, 2277 | "engines": { 2278 | "node": ">=8.0" 2279 | } 2280 | }, 2281 | "node_modules/type-check": { 2282 | "version": "0.4.0", 2283 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 2284 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 2285 | "dev": true, 2286 | "license": "MIT", 2287 | "dependencies": { 2288 | "prelude-ls": "^1.2.1" 2289 | }, 2290 | "engines": { 2291 | "node": ">= 0.8.0" 2292 | } 2293 | }, 2294 | "node_modules/type-fest": { 2295 | "version": "0.20.2", 2296 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 2297 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 2298 | "dev": true, 2299 | "license": "(MIT OR CC0-1.0)", 2300 | "engines": { 2301 | "node": ">=10" 2302 | }, 2303 | "funding": { 2304 | "url": "https://github.com/sponsors/sindresorhus" 2305 | } 2306 | }, 2307 | "node_modules/uri-js": { 2308 | "version": "4.4.1", 2309 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 2310 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 2311 | "dev": true, 2312 | "license": "BSD-2-Clause", 2313 | "dependencies": { 2314 | "punycode": "^2.1.0" 2315 | } 2316 | }, 2317 | "node_modules/util-deprecate": { 2318 | "version": "1.0.2", 2319 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2320 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 2321 | "dev": true, 2322 | "license": "MIT" 2323 | }, 2324 | "node_modules/which": { 2325 | "version": "2.0.2", 2326 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2327 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2328 | "dev": true, 2329 | "license": "ISC", 2330 | "dependencies": { 2331 | "isexe": "^2.0.0" 2332 | }, 2333 | "bin": { 2334 | "node-which": "bin/node-which" 2335 | }, 2336 | "engines": { 2337 | "node": ">= 8" 2338 | } 2339 | }, 2340 | "node_modules/word-wrap": { 2341 | "version": "1.2.5", 2342 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", 2343 | "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", 2344 | "dev": true, 2345 | "license": "MIT", 2346 | "engines": { 2347 | "node": ">=0.10.0" 2348 | } 2349 | }, 2350 | "node_modules/wrap-ansi": { 2351 | "version": "6.2.0", 2352 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", 2353 | "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", 2354 | "dev": true, 2355 | "license": "MIT", 2356 | "dependencies": { 2357 | "ansi-styles": "^4.0.0", 2358 | "string-width": "^4.1.0", 2359 | "strip-ansi": "^6.0.0" 2360 | }, 2361 | "engines": { 2362 | "node": ">=8" 2363 | } 2364 | }, 2365 | "node_modules/wrappy": { 2366 | "version": "1.0.2", 2367 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2368 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 2369 | "dev": true, 2370 | "license": "ISC" 2371 | }, 2372 | "node_modules/write-file-atomic": { 2373 | "version": "5.0.1", 2374 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", 2375 | "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", 2376 | "dev": true, 2377 | "license": "ISC", 2378 | "dependencies": { 2379 | "imurmurhash": "^0.1.4", 2380 | "signal-exit": "^4.0.1" 2381 | }, 2382 | "engines": { 2383 | "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 2384 | } 2385 | }, 2386 | "node_modules/write-file-atomic/node_modules/signal-exit": { 2387 | "version": "4.1.0", 2388 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 2389 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 2390 | "dev": true, 2391 | "license": "ISC", 2392 | "engines": { 2393 | "node": ">=14" 2394 | }, 2395 | "funding": { 2396 | "url": "https://github.com/sponsors/isaacs" 2397 | } 2398 | }, 2399 | "node_modules/yocto-queue": { 2400 | "version": "0.1.0", 2401 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 2402 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 2403 | "dev": true, 2404 | "license": "MIT", 2405 | "engines": { 2406 | "node": ">=10" 2407 | }, 2408 | "funding": { 2409 | "url": "https://github.com/sponsors/sindresorhus" 2410 | } 2411 | } 2412 | } 2413 | } 2414 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "stylelint-use-nesting", 3 | "version": "6.0.0", 4 | "description": "Enforce nesting when it is possible in CSS", 5 | "author": "Jonathan Neal ", 6 | "license": "CC0-1.0", 7 | "repository": "csstools/stylelint-use-nesting", 8 | "homepage": "https://github.com/csstools/stylelint-use-nesting#readme", 9 | "bugs": "https://github.com/csstools/stylelint-use-nesting/issues", 10 | "main": "index.mjs", 11 | "type": "module", 12 | "files": [ 13 | "lib", 14 | "index.mjs" 15 | ], 16 | "scripts": { 17 | "prepublishOnly": "npm test", 18 | "test": "npm run test:js && npm run test:tape", 19 | "test:js": "eslint index.mjs lib/*.mjs --cache --ignore-path .gitignore --quiet", 20 | "test:tape": "stylelint-tape --cwd ./ --plugin index.mjs" 21 | }, 22 | "engines": { 23 | "node": ">=20.0.0" 24 | }, 25 | "devDependencies": { 26 | "eslint": "^8.35.0", 27 | "eslint-config-dev": "^3.1.0", 28 | "stylelint": "^16.9.0", 29 | "stylelint-tape": "^5.0.1" 30 | }, 31 | "peerDependencies": { 32 | "stylelint": ">= 16.9.0" 33 | }, 34 | "eslintConfig": { 35 | "extends": "dev" 36 | }, 37 | "keywords": [ 38 | "stylelint", 39 | "stylelint-plugin", 40 | "css", 41 | "prefer", 42 | "nesting" 43 | ] 44 | } 45 | --------------------------------------------------------------------------------