├── .editorconfig ├── .github ├── FUNDING.yml └── workflows │ ├── release.yml │ └── test.yml ├── .gitignore ├── .npmignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── eslint.config.mjs ├── index.js ├── package.json ├── pnpm-lock.yaml └── test ├── deps ├── f.js └── g.js ├── index.test.js ├── mixins ├── a.js ├── b.json ├── c.CSS ├── d.sss └── e.pcss └── other └── c.js /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | open_collective: postcss 2 | github: ai 3 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | on: 3 | push: 4 | tags: 5 | - '*' 6 | permissions: 7 | contents: write 8 | jobs: 9 | release: 10 | name: Release On Tag 11 | if: startsWith(github.ref, 'refs/tags/') 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Checkout the repository 15 | uses: actions/checkout@v4 16 | - name: Extract the changelog 17 | id: changelog 18 | run: | 19 | TAG_NAME=${GITHUB_REF/refs\/tags\//} 20 | READ_SECTION=false 21 | CHANGELOG="" 22 | while IFS= read -r line; do 23 | if [[ "$line" =~ ^#+\ +(.*) ]]; then 24 | if [[ "${BASH_REMATCH[1]}" == "$TAG_NAME" ]]; then 25 | READ_SECTION=true 26 | elif [[ "$READ_SECTION" == true ]]; then 27 | break 28 | fi 29 | elif [[ "$READ_SECTION" == true ]]; then 30 | CHANGELOG+="$line"$'\n' 31 | fi 32 | done < "CHANGELOG.md" 33 | CHANGELOG=$(echo "$CHANGELOG" | awk '/./ {$1=$1;print}') 34 | echo "changelog_content<> $GITHUB_OUTPUT 35 | echo "$CHANGELOG" >> $GITHUB_OUTPUT 36 | echo "EOF" >> $GITHUB_OUTPUT 37 | - name: Create the release 38 | if: steps.changelog.outputs.changelog_content != '' 39 | uses: softprops/action-gh-release@v2 40 | with: 41 | name: ${{ github.ref_name }} 42 | body: '${{ steps.changelog.outputs.changelog_content }}' 43 | draft: false 44 | prerelease: false 45 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | on: 3 | push: 4 | branches: 5 | - main 6 | pull_request: 7 | permissions: 8 | contents: read 9 | jobs: 10 | full: 11 | name: Node.js Latest Full 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Checkout the repository 15 | uses: actions/checkout@v4 16 | - name: Install pnpm 17 | uses: pnpm/action-setup@v4 18 | with: 19 | version: 9 20 | - name: Install Node.js 21 | uses: actions/setup-node@v4 22 | with: 23 | node-version: 22 24 | cache: pnpm 25 | - name: Install dependencies 26 | run: pnpm install --ignore-scripts 27 | - name: Run tests 28 | run: pnpm test 29 | short: 30 | runs-on: ubuntu-latest 31 | strategy: 32 | matrix: 33 | node-version: 34 | - 20 35 | - 18 36 | name: Node.js ${{ matrix.node-version }} Quick 37 | steps: 38 | - name: Checkout the repository 39 | uses: actions/checkout@v4 40 | - name: Install pnpm 41 | uses: pnpm/action-setup@v4 42 | with: 43 | version: 9 44 | - name: Install Node.js ${{ matrix.node-version }} 45 | uses: actions/setup-node@v4 46 | with: 47 | node-version: ${{ matrix.node-version }} 48 | cache: pnpm 49 | - name: Install dependencies 50 | run: pnpm install --ignore-scripts 51 | - name: Run unit tests 52 | run: pnpm unit 53 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | 3 | coverage/ 4 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | test/ 2 | tsconfig.json 3 | coverage/ 4 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | This project adheres to [Semantic Versioning](http://semver.org/). 3 | 4 | ## 11.0.3 5 | * Fixed `node_modules` support in `mixinsFiles` (by @SuperchupuDev). 6 | 7 | ## 11.0.2 8 | * Fixed glob pattern performance (by @SuperchupuDev). 9 | 10 | ## 11.0.1 11 | * Fixed compatibility with `fast-glob` (by @ziebam). 12 | 13 | ## 11.0.0 14 | * Replaced `fast-glob` to `tinyglobby` to reduce dependencies (by @ziebam). 15 | * Moved to case-insensitive `mixinsFiles` (by @ziebam). 16 | 17 | ## 10.0.1 18 | * Fixed `.cjs` mixin support (by @pridyok). 19 | * Fixed `.mjs` mixin support. 20 | 21 | ## 10.0.0 22 | * Added `single-arg()` support (by @pciarach). 23 | * Removed Node.js 16 and 14 support. 24 | 25 | ## 9.0.4 26 | * Moved to `postcss-simple-vars` 7. 27 | 28 | ## 9.0.3 29 | * Fixed hot reload (by Andrey Grandilevskiy). 30 | * Fixed Windows support (by Andrey Grandilevskiy). 31 | 32 | ## 9.0.2 33 | * Fixed at-rules in `@mixin-content` in function mixins (by Vasily Polovnyov). 34 | * Updated `postcss-js`. 35 | 36 | ## 9.0.1 37 | * Reduced package size. 38 | 39 | ## 9.0 40 | * Moved to sync APIs (by Charles Suh). 41 | * Moved from `globby` to `fast-glob` to reduce dependencies. 42 | 43 | ## 8.1 44 | * Added `dir-dependency` message (by @Eddort). 45 | 46 | ## 8.0 47 | * Removed Node.js 10 support. 48 | * Added better error message on `(` in mixin name. 49 | 50 | ## 7.0.3 51 | * Fixed file pattern on Windows (by Gene Alyson Fortunado Torcende). 52 | 53 | ## 7.0.2 54 | * Fixed `postcss-js` loading (by Paul Welsh). 55 | 56 | ## 7.0.1 57 | * Added funding links. 58 | 59 | ## 7.0 60 | * Moved to PostCSS 8. 61 | * Moved `postcss` to `peerDependencies`. 62 | * Fix docs (by Frank Showalter). 63 | 64 | ## 6.2.3 65 | * Fix plugin to work with webpack watch (by @Mesqalito). 66 | 67 | ## 6.2.2 68 | * Fix source map for mixins from SugarSS and CSS files. 69 | 70 | ## 6.2.1 71 | * Update `sugarss` and `postcss-simple-vars` (by @ambar). 72 | 73 | ## 6.2 74 | * Add `@mixin-content` support for object mixins. 75 | 76 | ## 6.1.1 77 | * Add `parent` to `dependency` message (by Keisuke Kan). 78 | * Throw error on wrong mixin type. 79 | 80 | ## 6.1 81 | * Pass `dependency` message for every loaded mixin files for `postcss-loader`. 82 | 83 | ## 6.0.1 84 | * Fix multiple `@mixin-content` usage. 85 | 86 | ## 6.0 87 | * Use PostCSS 6.0. 88 | 89 | ## 5.4.1 90 | * Fix support nested function mixins (by Lam Tran). 91 | 92 | ## 5.4 93 | * Add `add-mixin` alias for `@mixin` for Sass migration process. 94 | 95 | ## 5.3 96 | * Do not use asynchronous API if it is unnecessary. 97 | * Use SugarSS 0.2. 98 | 99 | ## 5.2 100 | * Add `.pcss` extension support in `mixinsDir`. 101 | 102 | ## 5.1 103 | * Add SugarSS support in `mixinsDir`. 104 | 105 | ## 5.0.1 106 | * Use globby 6 and PostCSS 5.1. 107 | 108 | ## 5.0 109 | * Use `postcss-simple-vars` 3.0 with special syntax for comment variables 110 | and nested variables support. 111 | 112 | ## 4.0.2 113 | * Fix default argument values in function mixins. 114 | 115 | ## 4.0.1 116 | * Fix Windows support for `mixinsFiles` and `mixinsDir` (by Hugo Agbonon). 117 | 118 | ## 4.0.0 119 | * Remove space-separated parameters. They were depreacted in 0.3. 120 | 121 | ## 3.0.2 122 | * Fix `@mixin-content` usage with empty body. 123 | 124 | ## 3.0.1 125 | * Fix default arguments in nested mixins. 126 | * Fix `@mixin-content` for declarations content. 127 | 128 | ## 3.0 129 | * Add nested mixins support. 130 | * Use `postcss-js` to convert objects into CSS in JS mixins. 131 | * Case insensitive mixin file search. 132 | 133 | ## 2.1.1 134 | * Async CSS mixin files loading (by Jed Mao). 135 | 136 | ## 2.1 137 | * Add CSS files support for mixins from dir (by Jed Mao). 138 | 139 | ## 2.0 140 | * `mixinsDir` loads JSON mixins too (by Jed Mao). 141 | 142 | ## 1.0.2 143 | * Do not throw error on missed mixin dir (by Bogdan Chadkin). 144 | * Use async plugin API (by Bogdan Chadkin). 145 | 146 | ## 1.0.1 147 | * Fix using relative URL in `mixinsDir` (by Bogdan Chadkin). 148 | 149 | ## 1.0 150 | * Use PostCSS 5.0 API. 151 | 152 | ## 0.4 153 | * Add `mixinsFiles` option (by Jed Mao). 154 | 155 | ## 0.3 156 | * Change syntax to comma separated arguments. 157 | Use: `@mixin name 1, 2` instead of `@mixin name 1 2`. 158 | * Add default value for arguments. 159 | 160 | ## 0.2 161 | * Add block mixins support. 162 | * Support PostCSS 4.1 API. 163 | * Convert all JS mixins values to string. 164 | 165 | ## 0.1.1 166 | * Use `postcss-simple-vars` 0.2. 167 | 168 | ## 0.1 169 | * Initial release. 170 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright 2015 Andrey Sitnik 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PostCSS Mixins 2 | 3 | 6 | 7 | [PostCSS] plugin for mixins. 8 | 9 | Note, that you must set this plugin before [postcss-simple-vars] 10 | and [postcss-nested]. 11 | 12 | ```css 13 | @define-mixin icon $network, $color: blue { 14 | .icon.is-$(network) { 15 | color: $color; 16 | @mixin-content; 17 | } 18 | .icon.is-$(network):hover { 19 | color: white; 20 | background: $color; 21 | } 22 | } 23 | 24 | @mixin icon twitter { 25 | background: url(twt.png); 26 | } 27 | @mixin icon youtube, red { 28 | background: url(youtube.png); 29 | } 30 | ``` 31 | 32 | ```css 33 | .icon.is-twitter { 34 | color: blue; 35 | background: url(twt.png); 36 | } 37 | .icon.is-twitter:hover { 38 | color: white; 39 | background: blue; 40 | } 41 | .icon.is-youtube { 42 | color: red; 43 | background: url(youtube.png); 44 | } 45 | .icon.is-youtube:hover { 46 | color: white; 47 | background: red; 48 | } 49 | ``` 50 | 51 | [postcss-utilities] collection is better for `clearfix` and other popular hacks. 52 | For simple cases you can use [postcss-define-property]. 53 | 54 | [postcss-define-property]: https://github.com/daleeidd/postcss-define-property 55 | [postcss-utilities]: https://github.com/ismamz/postcss-utilities 56 | [postcss-simple-vars]: https://github.com/postcss/postcss-simple-vars 57 | [postcss-nested]: https://github.com/postcss/postcss-nested 58 | [PostCSS]: https://github.com/postcss/postcss 59 | 60 | 61 | Sponsored by Evil Martians 63 | 64 | 65 | 66 | ## Usage 67 | 68 | **Step 1:** Install plugin: 69 | 70 | ```sh 71 | npm install --save-dev postcss postcss-mixins 72 | ``` 73 | 74 | **Step 2:** Check your project for existed PostCSS config: `postcss.config.js` 75 | in the project root, `"postcss"` section in `package.json` 76 | or `postcss` in bundle config. 77 | 78 | If you do not use PostCSS, add it according to [official docs] 79 | and set this plugin in settings. 80 | 81 | **Step 3:** Add the plugin to plugins list: 82 | 83 | ```diff 84 | module.exports = { 85 | plugins: [ 86 | + require('postcss-mixins'), 87 | require('autoprefixer') 88 | ] 89 | } 90 | ``` 91 | 92 | 93 | ### CSS Mixin 94 | 95 | Simple template defined directly in CSS to prevent repeating yourself. 96 | 97 | See [postcss-simple-vars] docs for arguments syntax. 98 | 99 | You can use it with [postcss-nested] plugin: 100 | 101 | ```css 102 | @define-mixin icon $name { 103 | padding-left: 16px; 104 | &::after { 105 | content: ""; 106 | background: url(/icons/$(name).png); 107 | } 108 | } 109 | 110 | .search { 111 | @mixin icon search; 112 | } 113 | ``` 114 | 115 | Unlike Sass, PostCSS has no `if` or `while` statements. If you need some 116 | complicated logic, you should use function mixin. 117 | 118 | [postcss-nested]: https://github.com/postcss/postcss-nested 119 | [postcss-simple-vars]: https://github.com/postcss/postcss-simple-vars 120 | 121 | 122 | ### Function Mixin 123 | 124 | This type of mixin gives you full power of JavaScript. 125 | You can define this mixins in `mixins` option. 126 | 127 | This type is ideal for CSS hacks or business logic. 128 | 129 | Also, you should use function mixin if you need to change property names 130 | in mixin, because [postcss-simple-vars] doesn’t support variables 131 | in properties yet. 132 | 133 | First argument will be `@mixin` node, that called this mixin. 134 | You can insert your declarations or rule before or after this node. 135 | Other arguments will be taken from at-rule parameters. 136 | 137 | See [PostCSS API](https://postcss.org/api/) about nodes API. 138 | 139 | ```js 140 | require('postcss-mixins')({ 141 | mixins: { 142 | icons: function (mixin, dir) { 143 | fs.readdirSync('/images/' + dir).forEach(function (file) { 144 | var icon = file.replace(/\.svg$/, ''); 145 | var rule = postcss.rule({ selector: '.icon.icon-' + icon }); 146 | rule.append({ 147 | prop: 'background', 148 | value: 'url(' + dir + '/' + file + ')' 149 | }); 150 | mixin.replaceWith(rule); 151 | }); 152 | } 153 | } 154 | }); 155 | ``` 156 | 157 | ```css 158 | @mixin icons signin; 159 | ``` 160 | 161 | ```css 162 | .icon.icon-back { background: url(signin/back.svg) } 163 | .icon.icon-secret { background: url(signin/secret.svg) } 164 | ``` 165 | 166 | You can also return an object if you don’t want to create each node manually: 167 | 168 | ```js 169 | require('postcss-mixins')({ 170 | mixins: { 171 | image: function (mixin, path, dpi) { 172 | return { 173 | '&': { 174 | background: 'url(' + path + ')' 175 | }, 176 | ['@media (min-resolution: '+ dpi +'dpi)']: { 177 | '&': { 178 | background: 'url(' + path + '@2x)' 179 | } 180 | } 181 | } 182 | } 183 | } 184 | }); 185 | ``` 186 | 187 | Mixin body will be in `mixin.nodes`: 188 | 189 | ```js 190 | var postcss = require('postcss'); 191 | 192 | require('postcss-mixins')({ 193 | mixins: { 194 | hover: function (mixin) { 195 | let rule = postcss.rule({ selector: '&:hover, &.hover' }); 196 | rule.append(mixin.nodes); 197 | mixin.replaceWith(rule); 198 | } 199 | } 200 | }); 201 | ``` 202 | 203 | Or you can use object instead of function: 204 | 205 | ```js 206 | require('postcss-mixins')({ 207 | mixins: { 208 | clearfix: { 209 | '&::after': { 210 | content: '""', 211 | display: 'table', 212 | clear: 'both' 213 | } 214 | } 215 | } 216 | }); 217 | ``` 218 | 219 | ### Mixin Content 220 | 221 | `@mixin-content` at-rule will be replaced with mixin `@mixin` children. 222 | For example, CSS mixins: 223 | 224 | ```SCSS 225 | @define-mixin isIE { 226 | .isIE & { 227 | @mixin-content; 228 | } 229 | } 230 | ``` 231 | 232 | or JS mixins: 233 | 234 | ```js 235 | require('postcss-mixins')({ 236 | mixins: { 237 | isIe: function () { 238 | '@mixin-content': {}, 239 | } 240 | } 241 | }); 242 | ``` 243 | 244 | could be used like this: 245 | 246 | ```scss 247 | .foo { 248 | color: blue; 249 | 250 | @mixin isIE { 251 | color: red; 252 | } 253 | } 254 | 255 | // output 256 | .foo { color: blue; } 257 | .isIE .foo { color: red; } 258 | ``` 259 | 260 | ### Mixin parameters with comma 261 | 262 | In order to pass a comma-separated value as an argument to a mixin, you can use 263 | the special `single-arg` keyword. For example: 264 | 265 | ```css 266 | @define-mixin transition $properties, $duration { 267 | transition-property: $properties; 268 | transition-duration: $duration; 269 | } 270 | 271 | .foo { 272 | @mixin transition single-arg(color, background-color), 0.5s; 273 | } 274 | ``` 275 | 276 | ### Migration from Sass 277 | 278 | If you need to use Sass and PostCSS mixins together 279 | (for example, while migration), you could use `@add-mixin`, 280 | instead of `@mixin`. Just put PostCSS after Sass. 281 | 282 | ```sass 283 | // Legacy SCSS 284 | @mixin old { 285 | … 286 | } 287 | @include old; 288 | 289 | // New code 290 | @define-mixin new { 291 | … 292 | } 293 | @add-mixin new; 294 | ``` 295 | 296 | ## Options 297 | 298 | Call plugin function to set options: 299 | 300 | ```js 301 | postcss([ require('postcss-mixins')({ mixins: { … } }) ]) 302 | ``` 303 | 304 | ### `mixins` 305 | 306 | Type: `Object` 307 | 308 | Object of function mixins. 309 | 310 | ### `mixinsDir` 311 | 312 | Type: `string|string[]` 313 | 314 | Autoload all mixins from one or more dirs. Mixin name will be taken from file 315 | name. 316 | 317 | ```js 318 | // gulpfile.js 319 | 320 | require('postcss-mixins')({ 321 | mixinsDir: path.join(__dirname, 'mixins') 322 | }) 323 | 324 | // mixins/clearfix.js 325 | 326 | module.exports = { 327 | '&::after': { 328 | content: '""', 329 | display: 'table', 330 | clear: 'both' 331 | } 332 | } 333 | 334 | // mixins/size.pcss 335 | 336 | @define-mixin size $size { 337 | width: $size; 338 | height: $size; 339 | } 340 | 341 | // mixins/circle.sss 342 | 343 | @define-mixin circle $size 344 | border-radius: 50% 345 | width: $size 346 | height: $size 347 | ``` 348 | 349 | ### `mixinsFiles` 350 | 351 | Type: `string|string[]` 352 | 353 | Similar to [`mixinsDir`](#mixinsdir); except, you can provide 354 | [tinyglobby](https://github.com/SuperchupuDev/tinyglobby) syntax 355 | to target or not target specific files. 356 | 357 | ```js 358 | require('postcss-mixins')({ 359 | mixinsFiles: path.join(__dirname, 'mixins', '!(*.spec.js)') 360 | }) 361 | ``` 362 | 363 | ### `silent` 364 | 365 | Remove unknown mixins and do not throw a error. Default is `false`. 366 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import loguxConfig from '@logux/eslint-config' 2 | 3 | export default [ 4 | ...loguxConfig, 5 | { 6 | rules: { 7 | 'n/global-require': 'off' 8 | } 9 | } 10 | ] 11 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | let { readFileSync } = require('node:fs') 2 | let { basename, extname, join, relative } = require('node:path') 3 | let { parse } = require('postcss-js') 4 | let vars = require('postcss-simple-vars') 5 | let sugarss = require('sugarss') 6 | let { globSync } = require('tinyglobby') 7 | 8 | let MIXINS_GLOB = '*.{js,cjs,mjs,json,css,sss,pcss}' 9 | 10 | function addMixin(helpers, mixins, rule, file) { 11 | let name = rule.params.split(/\s/, 1)[0] 12 | let other = rule.params.slice(name.length).trim() 13 | 14 | let args = [] 15 | if (other.length) { 16 | args = helpers.list.comma(other).map(str => { 17 | let arg = str.split(':', 1)[0] 18 | let defaults = str.slice(arg.length + 1) 19 | return [arg.slice(1).trim(), defaults.trim()] 20 | }) 21 | } 22 | 23 | let content = false 24 | rule.walkAtRules('mixin-content', () => { 25 | content = true 26 | return false 27 | }) 28 | 29 | mixins[name] = { args, content, mixin: rule } 30 | if (file) mixins[name].file = file 31 | rule.remove() 32 | } 33 | 34 | function processModulesForHotReloadRecursively(module, helpers) { 35 | let moduleId = module.id 36 | module.children.forEach(childModule => { 37 | helpers.result.messages.push({ 38 | file: childModule.id, 39 | parent: moduleId, 40 | type: 'dependency' 41 | }) 42 | processModulesForHotReloadRecursively(childModule, helpers) 43 | }) 44 | delete require.cache[moduleId] 45 | } 46 | 47 | function loadGlobalMixin(helpers, globs) { 48 | let cwd = process.cwd() 49 | let files = globSync(globs, { 50 | caseSensitiveMatch: false, 51 | expandDirectories: false, 52 | ignore: ['**/.git/**'] 53 | }) 54 | let mixins = {} 55 | files.forEach(i => { 56 | let ext = extname(i).toLowerCase() 57 | let name = basename(i, extname(i)) 58 | let path = join(cwd, relative(cwd, i)) 59 | if (ext === '.css' || ext === '.pcss' || ext === '.sss') { 60 | let content = readFileSync(path) 61 | let root 62 | if (ext === '.sss') { 63 | root = sugarss.parse(content, { from: path }) 64 | } else { 65 | root = helpers.parse(content, { from: path }) 66 | } 67 | root.walkAtRules('define-mixin', atrule => { 68 | addMixin(helpers, mixins, atrule, path) 69 | }) 70 | } else { 71 | try { 72 | mixins[name] = { file: path, mixin: require(path) } 73 | let module = require.cache[require.resolve(path)] 74 | if (module) { 75 | processModulesForHotReloadRecursively(module, helpers) 76 | } 77 | } catch {} 78 | } 79 | }) 80 | return mixins 81 | } 82 | 83 | function addGlobalMixins(helpers, local, global, parent) { 84 | for (let name in global) { 85 | helpers.result.messages.push({ 86 | file: global[name].file, 87 | parent: parent || '', 88 | type: 'dependency' 89 | }) 90 | local[name] = global[name] 91 | } 92 | } 93 | 94 | function watchNewMixins(helpers, mixinsDirs) { 95 | let uniqueDirsPath = Array.from(new Set(mixinsDirs)) 96 | for (let dir of uniqueDirsPath) { 97 | helpers.result.messages.push({ 98 | dir, 99 | glob: MIXINS_GLOB, 100 | parent: '', 101 | type: 'dir-dependency' 102 | }) 103 | } 104 | } 105 | 106 | function processMixinContent(rule, from) { 107 | rule.walkAtRules('mixin-content', content => { 108 | if (from.nodes && from.nodes.length > 0) { 109 | content.replaceWith(from.clone().nodes) 110 | } else { 111 | content.remove() 112 | } 113 | }) 114 | } 115 | 116 | function insertObject(rule, obj, singeArgumentsMap) { 117 | let root = parse(obj) 118 | root.each(node => { 119 | node.source = rule.source 120 | }) 121 | processMixinContent(root, rule) 122 | unwrapSingleArguments(root.nodes, singeArgumentsMap) 123 | rule.parent.insertBefore(rule, root) 124 | } 125 | 126 | function unwrapSingleArguments(rules, singleArgumentsMap) { 127 | if (singleArgumentsMap.size <= 0) { 128 | return 129 | } 130 | 131 | for (let rule of rules) { 132 | if (rule.type === 'decl') { 133 | if (rule.value.includes('single-arg')) { 134 | let newValue = rule.value 135 | for (let [key, value] of singleArgumentsMap) { 136 | newValue = newValue.replace(key, value) 137 | } 138 | rule.value = newValue 139 | } 140 | } else if (rule.type === 'rule') { 141 | unwrapSingleArguments(rule.nodes, singleArgumentsMap) 142 | } 143 | } 144 | } 145 | 146 | function resolveSingleArgumentValue(value, parentNode) { 147 | let content = value.slice('single-arg'.length).trim() 148 | 149 | if (!content.startsWith('(') || !content.endsWith(')')) { 150 | throw parentNode.error( 151 | 'Content of single-arg must be wrapped in brackets: ' + value 152 | ) 153 | } 154 | 155 | return content.slice(1, -1) 156 | } 157 | 158 | function insertMixin(helpers, mixins, rule, opts) { 159 | let name = rule.params.split(/\s/, 1)[0] 160 | let rest = rule.params.slice(name.length).trim() 161 | 162 | if (name.includes('(')) { 163 | throw rule.error( 164 | 'Remove brackets from mixin. Like: @mixin name(1px) → @mixin name 1px' 165 | ) 166 | } 167 | 168 | let params 169 | if (rest.trim() === '') { 170 | params = [] 171 | } else { 172 | params = helpers.list.comma(rest) 173 | } 174 | 175 | let meta = mixins[name] 176 | let mixin = meta && meta.mixin 177 | let singleArgumentsMap = new Map( 178 | params 179 | .filter(param => param.startsWith('single-arg')) 180 | .map(param => [param, resolveSingleArgumentValue(param, rule)]) 181 | ) 182 | 183 | if (!meta) { 184 | if (!opts.silent) { 185 | throw rule.error('Undefined mixin ' + name) 186 | } 187 | } else if (mixin.name === 'define-mixin') { 188 | let i 189 | let values = {} 190 | for (i = 0; i < meta.args.length; i++) { 191 | values[meta.args[i][0]] = params[i] || meta.args[i][1] 192 | } 193 | 194 | let proxy = new helpers.Root() 195 | for (i = 0; i < mixin.nodes.length; i++) { 196 | let node = mixin.nodes[i].clone() 197 | delete node.raws.before 198 | proxy.append(node) 199 | } 200 | 201 | if (meta.args.length) { 202 | proxy = helpers.postcss([vars({ only: values })]).process(proxy).root 203 | } 204 | 205 | if (meta.content) processMixinContent(proxy, rule) 206 | 207 | unwrapSingleArguments(proxy.nodes, singleArgumentsMap) 208 | 209 | rule.parent.insertBefore(rule, proxy) 210 | } else if (typeof mixin === 'object') { 211 | insertObject(rule, mixin, singleArgumentsMap) 212 | } else if (typeof mixin === 'function') { 213 | let args = [rule].concat(params) 214 | rule.walkAtRules(atRule => { 215 | if (atRule.name === 'add-mixin' || atRule.name === 'mixin') { 216 | insertMixin(helpers, mixins, atRule, opts) 217 | } 218 | }) 219 | let nodes = mixin(...args) 220 | if (typeof nodes === 'object') { 221 | insertObject(rule, nodes, singleArgumentsMap) 222 | } 223 | } else { 224 | throw new Error('Wrong ' + name + ' mixin type ' + typeof mixin) 225 | } 226 | 227 | if (rule.parent) rule.remove() 228 | } 229 | 230 | module.exports = (opts = {}) => { 231 | let loadFrom = [] 232 | if (opts.mixinsDir) { 233 | if (!Array.isArray(opts.mixinsDir)) { 234 | opts.mixinsDir = [opts.mixinsDir] 235 | } 236 | loadFrom = opts.mixinsDir.map(dir => join(dir, MIXINS_GLOB)) 237 | } 238 | if (opts.mixinsFiles) loadFrom = loadFrom.concat(opts.mixinsFiles) 239 | loadFrom = loadFrom.map(path => path.replace(/\\/g, '/')) 240 | 241 | return { 242 | postcssPlugin: 'postcss-mixins', 243 | 244 | prepare() { 245 | let mixins = {} 246 | 247 | if (typeof opts.mixins === 'object') { 248 | for (let i in opts.mixins) { 249 | mixins[i] = { mixin: opts.mixins[i] } 250 | } 251 | } 252 | 253 | return { 254 | AtRule: { 255 | 'add-mixin': (node, helpers) => { 256 | insertMixin(helpers, mixins, node, opts) 257 | }, 258 | 'define-mixin': (node, helpers) => { 259 | addMixin(helpers, mixins, node) 260 | node.remove() 261 | }, 262 | 'mixin': (node, helpers) => { 263 | insertMixin(helpers, mixins, node, opts) 264 | } 265 | }, 266 | Once(root, helpers) { 267 | if (loadFrom.length > 0) { 268 | try { 269 | let global = loadGlobalMixin(helpers, loadFrom) 270 | addGlobalMixins(helpers, mixins, global, opts.parent) 271 | } catch {} 272 | } 273 | }, 274 | OnceExit(_, helpers) { 275 | if (opts.mixinsDir && opts.mixinsDir.length > 0) { 276 | watchNewMixins(helpers, opts.mixinsDir) 277 | } 278 | } 279 | } 280 | } 281 | } 282 | } 283 | module.exports.postcss = true 284 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "postcss-mixins", 3 | "version": "11.0.3", 4 | "description": "PostCSS plugin for mixins", 5 | "keywords": [ 6 | "postcss", 7 | "css", 8 | "postcss-plugin", 9 | "mixins", 10 | "sass" 11 | ], 12 | "scripts": { 13 | "unit": "node --test test/index.test.js", 14 | "test:coverage": "c8 pnpm unit", 15 | "test:lint": "eslint .", 16 | "test": "pnpm run /^test:/" 17 | }, 18 | "author": "Andrey Sitnik ", 19 | "license": "MIT", 20 | "repository": "postcss/postcss-mixins", 21 | "engines": { 22 | "node": "^18.0 || ^ 20.0 || >= 22.0" 23 | }, 24 | "funding": [ 25 | { 26 | "type": "opencollective", 27 | "url": "https://opencollective.com/postcss/" 28 | }, 29 | { 30 | "type": "github", 31 | "url": "https://github.com/sponsors/ai" 32 | } 33 | ], 34 | "peerDependencies": { 35 | "postcss": "^8.2.14" 36 | }, 37 | "dependencies": { 38 | "postcss-js": "^4.0.1", 39 | "postcss-simple-vars": "^7.0.1", 40 | "sugarss": "^4.0.1", 41 | "tinyglobby": "^0.2.7" 42 | }, 43 | "devDependencies": { 44 | "@logux/eslint-config": "^53.4.0", 45 | "c8": "^10.1.2", 46 | "clean-publish": "^5.0.0", 47 | "eslint": "^9.11.1", 48 | "postcss": "^8.4.47" 49 | }, 50 | "prettier": { 51 | "arrowParens": "avoid", 52 | "jsxSingleQuote": false, 53 | "quoteProps": "consistent", 54 | "semi": false, 55 | "singleQuote": true, 56 | "trailingComma": "none" 57 | }, 58 | "c8": { 59 | "exclude": [ 60 | "**/*.test.*" 61 | ], 62 | "lines": 100, 63 | "reporter": "lcov", 64 | "check-coverage": true 65 | }, 66 | "clean-publish": { 67 | "cleanDocs": true 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | postcss-js: 12 | specifier: ^4.0.1 13 | version: 4.0.1(postcss@8.4.47) 14 | postcss-simple-vars: 15 | specifier: ^7.0.1 16 | version: 7.0.1(postcss@8.4.47) 17 | sugarss: 18 | specifier: ^4.0.1 19 | version: 4.0.1(postcss@8.4.47) 20 | tinyglobby: 21 | specifier: ^0.2.7 22 | version: 0.2.7 23 | devDependencies: 24 | '@logux/eslint-config': 25 | specifier: ^53.4.0 26 | version: 53.4.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2) 27 | c8: 28 | specifier: ^10.1.2 29 | version: 10.1.2 30 | clean-publish: 31 | specifier: ^5.0.0 32 | version: 5.0.0 33 | eslint: 34 | specifier: ^9.11.1 35 | version: 9.11.1 36 | postcss: 37 | specifier: ^8.4.47 38 | version: 8.4.47 39 | 40 | packages: 41 | 42 | '@bcoe/v8-coverage@0.2.3': 43 | resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} 44 | 45 | '@eslint-community/eslint-utils@4.4.0': 46 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 47 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 48 | peerDependencies: 49 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 50 | 51 | '@eslint-community/regexpp@4.11.1': 52 | resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} 53 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 54 | 55 | '@eslint/config-array@0.18.0': 56 | resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} 57 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 58 | 59 | '@eslint/core@0.6.0': 60 | resolution: {integrity: sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==} 61 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 62 | 63 | '@eslint/eslintrc@3.1.0': 64 | resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} 65 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 66 | 67 | '@eslint/js@9.11.1': 68 | resolution: {integrity: sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA==} 69 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 70 | 71 | '@eslint/object-schema@2.1.4': 72 | resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} 73 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 74 | 75 | '@eslint/plugin-kit@0.2.0': 76 | resolution: {integrity: sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==} 77 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 78 | 79 | '@humanwhocodes/module-importer@1.0.1': 80 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 81 | engines: {node: '>=12.22'} 82 | 83 | '@humanwhocodes/retry@0.3.0': 84 | resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} 85 | engines: {node: '>=18.18'} 86 | 87 | '@isaacs/cliui@8.0.2': 88 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 89 | engines: {node: '>=12'} 90 | 91 | '@istanbuljs/schema@0.1.3': 92 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 93 | engines: {node: '>=8'} 94 | 95 | '@jridgewell/resolve-uri@3.1.2': 96 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 97 | engines: {node: '>=6.0.0'} 98 | 99 | '@jridgewell/sourcemap-codec@1.5.0': 100 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 101 | 102 | '@jridgewell/trace-mapping@0.3.25': 103 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 104 | 105 | '@logux/eslint-config@53.4.0': 106 | resolution: {integrity: sha512-eu3uEhWSar51TM/1cZL4lm/WMiOMtefBVPZPZG3kIfE+TCReg2eCkkafLe7gj34IpUNh5Qt268tWCUNFV5DdYA==} 107 | engines: {node: '>=18.0.0'} 108 | peerDependencies: 109 | eslint: ^8.57.0 || ^9.0.0 110 | eslint-plugin-svelte: ^2.35.1 111 | svelte: ^4.2.12 112 | peerDependenciesMeta: 113 | eslint-plugin-svelte: 114 | optional: true 115 | svelte: 116 | optional: true 117 | 118 | '@nodelib/fs.scandir@2.1.5': 119 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 120 | engines: {node: '>= 8'} 121 | 122 | '@nodelib/fs.stat@2.0.5': 123 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 124 | engines: {node: '>= 8'} 125 | 126 | '@nodelib/fs.walk@1.2.8': 127 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 128 | engines: {node: '>= 8'} 129 | 130 | '@pkgjs/parseargs@0.11.0': 131 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 132 | engines: {node: '>=14'} 133 | 134 | '@rtsao/scc@1.1.0': 135 | resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} 136 | 137 | '@types/estree@1.0.6': 138 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 139 | 140 | '@types/istanbul-lib-coverage@2.0.6': 141 | resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} 142 | 143 | '@types/json-schema@7.0.15': 144 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 145 | 146 | '@types/json5@0.0.29': 147 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 148 | 149 | '@typescript-eslint/eslint-plugin@8.8.0': 150 | resolution: {integrity: sha512-wORFWjU30B2WJ/aXBfOm1LX9v9nyt9D3jsSOxC3cCaTQGCW5k4jNpmjFv3U7p/7s4yvdjHzwtv2Sd2dOyhjS0A==} 151 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 152 | peerDependencies: 153 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 154 | eslint: ^8.57.0 || ^9.0.0 155 | typescript: '*' 156 | peerDependenciesMeta: 157 | typescript: 158 | optional: true 159 | 160 | '@typescript-eslint/parser@8.8.0': 161 | resolution: {integrity: sha512-uEFUsgR+tl8GmzmLjRqz+VrDv4eoaMqMXW7ruXfgThaAShO9JTciKpEsB+TvnfFfbg5IpujgMXVV36gOJRLtZg==} 162 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 163 | peerDependencies: 164 | eslint: ^8.57.0 || ^9.0.0 165 | typescript: '*' 166 | peerDependenciesMeta: 167 | typescript: 168 | optional: true 169 | 170 | '@typescript-eslint/scope-manager@8.8.0': 171 | resolution: {integrity: sha512-EL8eaGC6gx3jDd8GwEFEV091210U97J0jeEHrAYvIYosmEGet4wJ+g0SYmLu+oRiAwbSA5AVrt6DxLHfdd+bUg==} 172 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 173 | 174 | '@typescript-eslint/type-utils@8.8.0': 175 | resolution: {integrity: sha512-IKwJSS7bCqyCeG4NVGxnOP6lLT9Okc3Zj8hLO96bpMkJab+10HIfJbMouLrlpyOr3yrQ1cA413YPFiGd1mW9/Q==} 176 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 177 | peerDependencies: 178 | typescript: '*' 179 | peerDependenciesMeta: 180 | typescript: 181 | optional: true 182 | 183 | '@typescript-eslint/types@8.8.0': 184 | resolution: {integrity: sha512-QJwc50hRCgBd/k12sTykOJbESe1RrzmX6COk8Y525C9l7oweZ+1lw9JiU56im7Amm8swlz00DRIlxMYLizr2Vw==} 185 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 186 | 187 | '@typescript-eslint/typescript-estree@8.8.0': 188 | resolution: {integrity: sha512-ZaMJwc/0ckLz5DaAZ+pNLmHv8AMVGtfWxZe/x2JVEkD5LnmhWiQMMcYT7IY7gkdJuzJ9P14fRy28lUrlDSWYdw==} 189 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 190 | peerDependencies: 191 | typescript: '*' 192 | peerDependenciesMeta: 193 | typescript: 194 | optional: true 195 | 196 | '@typescript-eslint/utils@8.8.0': 197 | resolution: {integrity: sha512-QE2MgfOTem00qrlPgyByaCHay9yb1+9BjnMFnSFkUKQfu7adBXDTnCAivURnuPPAG/qiB+kzKkZKmKfaMT0zVg==} 198 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 199 | peerDependencies: 200 | eslint: ^8.57.0 || ^9.0.0 201 | 202 | '@typescript-eslint/visitor-keys@8.8.0': 203 | resolution: {integrity: sha512-8mq51Lx6Hpmd7HnA2fcHQo3YgfX1qbccxQOgZcb4tvasu//zXRaA1j5ZRFeCw/VRAdFi4mRM9DnZw0Nu0Q2d1g==} 204 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 205 | 206 | acorn-jsx@5.3.2: 207 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 208 | peerDependencies: 209 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 210 | 211 | acorn@8.12.1: 212 | resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} 213 | engines: {node: '>=0.4.0'} 214 | hasBin: true 215 | 216 | ajv@6.12.6: 217 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 218 | 219 | ansi-regex@5.0.1: 220 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 221 | engines: {node: '>=8'} 222 | 223 | ansi-regex@6.1.0: 224 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 225 | engines: {node: '>=12'} 226 | 227 | ansi-styles@4.3.0: 228 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 229 | engines: {node: '>=8'} 230 | 231 | ansi-styles@6.2.1: 232 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 233 | engines: {node: '>=12'} 234 | 235 | argparse@2.0.1: 236 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 237 | 238 | array-buffer-byte-length@1.0.1: 239 | resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} 240 | engines: {node: '>= 0.4'} 241 | 242 | array-includes@3.1.8: 243 | resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} 244 | engines: {node: '>= 0.4'} 245 | 246 | array.prototype.findlastindex@1.2.5: 247 | resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} 248 | engines: {node: '>= 0.4'} 249 | 250 | array.prototype.flat@1.3.2: 251 | resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} 252 | engines: {node: '>= 0.4'} 253 | 254 | array.prototype.flatmap@1.3.2: 255 | resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} 256 | engines: {node: '>= 0.4'} 257 | 258 | arraybuffer.prototype.slice@1.0.3: 259 | resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} 260 | engines: {node: '>= 0.4'} 261 | 262 | available-typed-arrays@1.0.7: 263 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 264 | engines: {node: '>= 0.4'} 265 | 266 | balanced-match@1.0.2: 267 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 268 | 269 | brace-expansion@1.1.11: 270 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 271 | 272 | brace-expansion@2.0.1: 273 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 274 | 275 | braces@3.0.3: 276 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 277 | engines: {node: '>=8'} 278 | 279 | c8@10.1.2: 280 | resolution: {integrity: sha512-Qr6rj76eSshu5CgRYvktW0uM0CFY0yi4Fd5D0duDXO6sYinyopmftUiJVuzBQxQcwQLor7JWDVRP+dUfCmzgJw==} 281 | engines: {node: '>=18'} 282 | hasBin: true 283 | peerDependencies: 284 | monocart-coverage-reports: ^2 285 | peerDependenciesMeta: 286 | monocart-coverage-reports: 287 | optional: true 288 | 289 | call-bind@1.0.7: 290 | resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} 291 | engines: {node: '>= 0.4'} 292 | 293 | callsites@3.1.0: 294 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 295 | engines: {node: '>=6'} 296 | 297 | camelcase-css@2.0.1: 298 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 299 | engines: {node: '>= 6'} 300 | 301 | chalk@4.1.2: 302 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 303 | engines: {node: '>=10'} 304 | 305 | clean-publish@5.0.0: 306 | resolution: {integrity: sha512-1qjtqP3piZL4t8SqGojOyA12bg8AtbFPIQstNvxmss1fhwfma3CqMJ/Y/kbRvAllLX2/c4ZKjcCCKDqEtpcymA==} 307 | engines: {node: '>= 18.0.0'} 308 | hasBin: true 309 | 310 | cliui@8.0.1: 311 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 312 | engines: {node: '>=12'} 313 | 314 | color-convert@2.0.1: 315 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 316 | engines: {node: '>=7.0.0'} 317 | 318 | color-name@1.1.4: 319 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 320 | 321 | concat-map@0.0.1: 322 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 323 | 324 | convert-source-map@2.0.0: 325 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 326 | 327 | cross-spawn@7.0.3: 328 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 329 | engines: {node: '>= 8'} 330 | 331 | data-view-buffer@1.0.1: 332 | resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} 333 | engines: {node: '>= 0.4'} 334 | 335 | data-view-byte-length@1.0.1: 336 | resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} 337 | engines: {node: '>= 0.4'} 338 | 339 | data-view-byte-offset@1.0.0: 340 | resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} 341 | engines: {node: '>= 0.4'} 342 | 343 | debug@3.2.7: 344 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 345 | peerDependencies: 346 | supports-color: '*' 347 | peerDependenciesMeta: 348 | supports-color: 349 | optional: true 350 | 351 | debug@4.3.7: 352 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} 353 | engines: {node: '>=6.0'} 354 | peerDependencies: 355 | supports-color: '*' 356 | peerDependenciesMeta: 357 | supports-color: 358 | optional: true 359 | 360 | deep-is@0.1.4: 361 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 362 | 363 | define-data-property@1.1.4: 364 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 365 | engines: {node: '>= 0.4'} 366 | 367 | define-properties@1.2.1: 368 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 369 | engines: {node: '>= 0.4'} 370 | 371 | doctrine@2.1.0: 372 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 373 | engines: {node: '>=0.10.0'} 374 | 375 | eastasianwidth@0.2.0: 376 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 377 | 378 | emoji-regex@8.0.0: 379 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 380 | 381 | emoji-regex@9.2.2: 382 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 383 | 384 | enhanced-resolve@5.17.1: 385 | resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} 386 | engines: {node: '>=10.13.0'} 387 | 388 | es-abstract@1.23.3: 389 | resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} 390 | engines: {node: '>= 0.4'} 391 | 392 | es-define-property@1.0.0: 393 | resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} 394 | engines: {node: '>= 0.4'} 395 | 396 | es-errors@1.3.0: 397 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 398 | engines: {node: '>= 0.4'} 399 | 400 | es-object-atoms@1.0.0: 401 | resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} 402 | engines: {node: '>= 0.4'} 403 | 404 | es-set-tostringtag@2.0.3: 405 | resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} 406 | engines: {node: '>= 0.4'} 407 | 408 | es-shim-unscopables@1.0.2: 409 | resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} 410 | 411 | es-to-primitive@1.2.1: 412 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 413 | engines: {node: '>= 0.4'} 414 | 415 | escalade@3.2.0: 416 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 417 | engines: {node: '>=6'} 418 | 419 | escape-string-regexp@4.0.0: 420 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 421 | engines: {node: '>=10'} 422 | 423 | eslint-compat-utils@0.5.1: 424 | resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} 425 | engines: {node: '>=12'} 426 | peerDependencies: 427 | eslint: '>=6.0.0' 428 | 429 | eslint-config-standard@17.1.0: 430 | resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} 431 | engines: {node: '>=12.0.0'} 432 | peerDependencies: 433 | eslint: ^8.0.1 434 | eslint-plugin-import: ^2.25.2 435 | eslint-plugin-n: '^15.0.0 || ^16.0.0 ' 436 | eslint-plugin-promise: ^6.0.0 437 | 438 | eslint-import-resolver-node@0.3.9: 439 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} 440 | 441 | eslint-module-utils@2.12.0: 442 | resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} 443 | engines: {node: '>=4'} 444 | peerDependencies: 445 | '@typescript-eslint/parser': '*' 446 | eslint: '*' 447 | eslint-import-resolver-node: '*' 448 | eslint-import-resolver-typescript: '*' 449 | eslint-import-resolver-webpack: '*' 450 | peerDependenciesMeta: 451 | '@typescript-eslint/parser': 452 | optional: true 453 | eslint: 454 | optional: true 455 | eslint-import-resolver-node: 456 | optional: true 457 | eslint-import-resolver-typescript: 458 | optional: true 459 | eslint-import-resolver-webpack: 460 | optional: true 461 | 462 | eslint-plugin-es-x@7.8.0: 463 | resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} 464 | engines: {node: ^14.18.0 || >=16.0.0} 465 | peerDependencies: 466 | eslint: '>=8' 467 | 468 | eslint-plugin-import@2.30.0: 469 | resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} 470 | engines: {node: '>=4'} 471 | peerDependencies: 472 | '@typescript-eslint/parser': '*' 473 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 474 | peerDependenciesMeta: 475 | '@typescript-eslint/parser': 476 | optional: true 477 | 478 | eslint-plugin-n@17.10.3: 479 | resolution: {integrity: sha512-ySZBfKe49nQZWR1yFaA0v/GsH6Fgp8ah6XV0WDz6CN8WO0ek4McMzb7A2xnf4DCYV43frjCygvb9f/wx7UUxRw==} 480 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 481 | peerDependencies: 482 | eslint: '>=8.23.0' 483 | 484 | eslint-plugin-perfectionist@3.8.0: 485 | resolution: {integrity: sha512-BYJWbQVOjvIGK9V1xUfn790HuvkePjxti8epOi1H6sdzo0N4RehBmQ8coHPbgA/f12BUG1NIoDtQhI9mUm+o2A==} 486 | engines: {node: ^18.0.0 || >=20.0.0} 487 | peerDependencies: 488 | astro-eslint-parser: ^1.0.2 489 | eslint: '>=8.0.0' 490 | svelte: '>=3.0.0' 491 | svelte-eslint-parser: ^0.41.1 492 | vue-eslint-parser: '>=9.0.0' 493 | peerDependenciesMeta: 494 | astro-eslint-parser: 495 | optional: true 496 | svelte: 497 | optional: true 498 | svelte-eslint-parser: 499 | optional: true 500 | vue-eslint-parser: 501 | optional: true 502 | 503 | eslint-plugin-prefer-let@4.0.0: 504 | resolution: {integrity: sha512-X4ep5PMO1320HKaNC9DM5+p6XvOhwv+RcqGjhv3aiw9iAtHhiFtdIUB5l0Zya0iM22ys2BGKzrNI9Xpw/ZHooQ==} 505 | engines: {node: '>=0.10.0'} 506 | 507 | eslint-plugin-promise@7.1.0: 508 | resolution: {integrity: sha512-8trNmPxdAy3W620WKDpaS65NlM5yAumod6XeC4LOb+jxlkG4IVcp68c6dXY2ev+uT4U1PtG57YDV6EGAXN0GbQ==} 509 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 510 | peerDependencies: 511 | eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 512 | 513 | eslint-scope@8.1.0: 514 | resolution: {integrity: sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==} 515 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 516 | 517 | eslint-visitor-keys@3.4.3: 518 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 519 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 520 | 521 | eslint-visitor-keys@4.1.0: 522 | resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==} 523 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 524 | 525 | eslint@9.11.1: 526 | resolution: {integrity: sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==} 527 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 528 | hasBin: true 529 | peerDependencies: 530 | jiti: '*' 531 | peerDependenciesMeta: 532 | jiti: 533 | optional: true 534 | 535 | espree@10.2.0: 536 | resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==} 537 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 538 | 539 | esquery@1.6.0: 540 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 541 | engines: {node: '>=0.10'} 542 | 543 | esrecurse@4.3.0: 544 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 545 | engines: {node: '>=4.0'} 546 | 547 | estraverse@5.3.0: 548 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 549 | engines: {node: '>=4.0'} 550 | 551 | esutils@2.0.3: 552 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 553 | engines: {node: '>=0.10.0'} 554 | 555 | fast-deep-equal@3.1.3: 556 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 557 | 558 | fast-glob@3.3.2: 559 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 560 | engines: {node: '>=8.6.0'} 561 | 562 | fast-json-stable-stringify@2.1.0: 563 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 564 | 565 | fast-levenshtein@2.0.6: 566 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 567 | 568 | fastq@1.17.1: 569 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 570 | 571 | fdir@6.4.0: 572 | resolution: {integrity: sha512-3oB133prH1o4j/L5lLW7uOCF1PlD+/It2L0eL/iAqWMB91RBbqTewABqxhj0ibBd90EEmWZq7ntIWzVaWcXTGQ==} 573 | peerDependencies: 574 | picomatch: ^3 || ^4 575 | peerDependenciesMeta: 576 | picomatch: 577 | optional: true 578 | 579 | file-entry-cache@8.0.0: 580 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 581 | engines: {node: '>=16.0.0'} 582 | 583 | fill-range@7.1.1: 584 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 585 | engines: {node: '>=8'} 586 | 587 | find-up@5.0.0: 588 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 589 | engines: {node: '>=10'} 590 | 591 | flat-cache@4.0.1: 592 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 593 | engines: {node: '>=16'} 594 | 595 | flatted@3.3.1: 596 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} 597 | 598 | for-each@0.3.3: 599 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 600 | 601 | foreground-child@3.3.0: 602 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 603 | engines: {node: '>=14'} 604 | 605 | function-bind@1.1.2: 606 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 607 | 608 | function.prototype.name@1.1.6: 609 | resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} 610 | engines: {node: '>= 0.4'} 611 | 612 | functions-have-names@1.2.3: 613 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 614 | 615 | get-caller-file@2.0.5: 616 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 617 | engines: {node: 6.* || 8.* || >= 10.*} 618 | 619 | get-intrinsic@1.2.4: 620 | resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} 621 | engines: {node: '>= 0.4'} 622 | 623 | get-symbol-description@1.0.2: 624 | resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} 625 | engines: {node: '>= 0.4'} 626 | 627 | get-tsconfig@4.8.1: 628 | resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} 629 | 630 | glob-parent@5.1.2: 631 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 632 | engines: {node: '>= 6'} 633 | 634 | glob-parent@6.0.2: 635 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 636 | engines: {node: '>=10.13.0'} 637 | 638 | glob@10.4.5: 639 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 640 | hasBin: true 641 | 642 | globals@14.0.0: 643 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 644 | engines: {node: '>=18'} 645 | 646 | globals@15.9.0: 647 | resolution: {integrity: sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==} 648 | engines: {node: '>=18'} 649 | 650 | globalthis@1.0.4: 651 | resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} 652 | engines: {node: '>= 0.4'} 653 | 654 | gopd@1.0.1: 655 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 656 | 657 | graceful-fs@4.2.11: 658 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 659 | 660 | graphemer@1.4.0: 661 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 662 | 663 | has-bigints@1.0.2: 664 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 665 | 666 | has-flag@4.0.0: 667 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 668 | engines: {node: '>=8'} 669 | 670 | has-property-descriptors@1.0.2: 671 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 672 | 673 | has-proto@1.0.3: 674 | resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} 675 | engines: {node: '>= 0.4'} 676 | 677 | has-symbols@1.0.3: 678 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 679 | engines: {node: '>= 0.4'} 680 | 681 | has-tostringtag@1.0.2: 682 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 683 | engines: {node: '>= 0.4'} 684 | 685 | hasown@2.0.2: 686 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 687 | engines: {node: '>= 0.4'} 688 | 689 | html-escaper@2.0.2: 690 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 691 | 692 | ignore@5.3.2: 693 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 694 | engines: {node: '>= 4'} 695 | 696 | import-fresh@3.3.0: 697 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 698 | engines: {node: '>=6'} 699 | 700 | imurmurhash@0.1.4: 701 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 702 | engines: {node: '>=0.8.19'} 703 | 704 | internal-slot@1.0.7: 705 | resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} 706 | engines: {node: '>= 0.4'} 707 | 708 | is-array-buffer@3.0.4: 709 | resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} 710 | engines: {node: '>= 0.4'} 711 | 712 | is-bigint@1.0.4: 713 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 714 | 715 | is-boolean-object@1.1.2: 716 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 717 | engines: {node: '>= 0.4'} 718 | 719 | is-callable@1.2.7: 720 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 721 | engines: {node: '>= 0.4'} 722 | 723 | is-core-module@2.15.1: 724 | resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} 725 | engines: {node: '>= 0.4'} 726 | 727 | is-data-view@1.0.1: 728 | resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} 729 | engines: {node: '>= 0.4'} 730 | 731 | is-date-object@1.0.5: 732 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 733 | engines: {node: '>= 0.4'} 734 | 735 | is-extglob@2.1.1: 736 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 737 | engines: {node: '>=0.10.0'} 738 | 739 | is-fullwidth-code-point@3.0.0: 740 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 741 | engines: {node: '>=8'} 742 | 743 | is-glob@4.0.3: 744 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 745 | engines: {node: '>=0.10.0'} 746 | 747 | is-negative-zero@2.0.3: 748 | resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} 749 | engines: {node: '>= 0.4'} 750 | 751 | is-number-object@1.0.7: 752 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 753 | engines: {node: '>= 0.4'} 754 | 755 | is-number@7.0.0: 756 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 757 | engines: {node: '>=0.12.0'} 758 | 759 | is-path-inside@3.0.3: 760 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 761 | engines: {node: '>=8'} 762 | 763 | is-regex@1.1.4: 764 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 765 | engines: {node: '>= 0.4'} 766 | 767 | is-shared-array-buffer@1.0.3: 768 | resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} 769 | engines: {node: '>= 0.4'} 770 | 771 | is-string@1.0.7: 772 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 773 | engines: {node: '>= 0.4'} 774 | 775 | is-symbol@1.0.4: 776 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 777 | engines: {node: '>= 0.4'} 778 | 779 | is-typed-array@1.1.13: 780 | resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} 781 | engines: {node: '>= 0.4'} 782 | 783 | is-weakref@1.0.2: 784 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 785 | 786 | isarray@2.0.5: 787 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 788 | 789 | isexe@2.0.0: 790 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 791 | 792 | istanbul-lib-coverage@3.2.2: 793 | resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} 794 | engines: {node: '>=8'} 795 | 796 | istanbul-lib-report@3.0.1: 797 | resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} 798 | engines: {node: '>=10'} 799 | 800 | istanbul-reports@3.1.7: 801 | resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} 802 | engines: {node: '>=8'} 803 | 804 | jackspeak@3.4.3: 805 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 806 | 807 | js-yaml@4.1.0: 808 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 809 | hasBin: true 810 | 811 | json-buffer@3.0.1: 812 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 813 | 814 | json-schema-traverse@0.4.1: 815 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 816 | 817 | json-stable-stringify-without-jsonify@1.0.1: 818 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 819 | 820 | json5@1.0.2: 821 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} 822 | hasBin: true 823 | 824 | keyv@4.5.4: 825 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 826 | 827 | levn@0.4.1: 828 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 829 | engines: {node: '>= 0.8.0'} 830 | 831 | lilconfig@3.1.2: 832 | resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} 833 | engines: {node: '>=14'} 834 | 835 | locate-path@6.0.0: 836 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 837 | engines: {node: '>=10'} 838 | 839 | lodash.merge@4.6.2: 840 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 841 | 842 | lru-cache@10.4.3: 843 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 844 | 845 | make-dir@4.0.0: 846 | resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} 847 | engines: {node: '>=10'} 848 | 849 | merge2@1.4.1: 850 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 851 | engines: {node: '>= 8'} 852 | 853 | micromatch@4.0.8: 854 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 855 | engines: {node: '>=8.6'} 856 | 857 | minimatch@3.1.2: 858 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 859 | 860 | minimatch@9.0.5: 861 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 862 | engines: {node: '>=16 || 14 >=14.17'} 863 | 864 | minimist@1.2.8: 865 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 866 | 867 | minipass@7.1.2: 868 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 869 | engines: {node: '>=16 || 14 >=14.17'} 870 | 871 | ms@2.1.3: 872 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 873 | 874 | nanoid@3.3.7: 875 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 876 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 877 | hasBin: true 878 | 879 | natural-compare-lite@1.4.0: 880 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} 881 | 882 | natural-compare@1.4.0: 883 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 884 | 885 | object-inspect@1.13.2: 886 | resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} 887 | engines: {node: '>= 0.4'} 888 | 889 | object-keys@1.1.1: 890 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 891 | engines: {node: '>= 0.4'} 892 | 893 | object.assign@4.1.5: 894 | resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} 895 | engines: {node: '>= 0.4'} 896 | 897 | object.fromentries@2.0.8: 898 | resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} 899 | engines: {node: '>= 0.4'} 900 | 901 | object.groupby@1.0.3: 902 | resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} 903 | engines: {node: '>= 0.4'} 904 | 905 | object.values@1.2.0: 906 | resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} 907 | engines: {node: '>= 0.4'} 908 | 909 | optionator@0.9.4: 910 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 911 | engines: {node: '>= 0.8.0'} 912 | 913 | p-limit@3.1.0: 914 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 915 | engines: {node: '>=10'} 916 | 917 | p-locate@5.0.0: 918 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 919 | engines: {node: '>=10'} 920 | 921 | package-json-from-dist@1.0.1: 922 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 923 | 924 | parent-module@1.0.1: 925 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 926 | engines: {node: '>=6'} 927 | 928 | path-exists@4.0.0: 929 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 930 | engines: {node: '>=8'} 931 | 932 | path-key@3.1.1: 933 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 934 | engines: {node: '>=8'} 935 | 936 | path-parse@1.0.7: 937 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 938 | 939 | path-scurry@1.11.1: 940 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 941 | engines: {node: '>=16 || 14 >=14.18'} 942 | 943 | picocolors@1.1.0: 944 | resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} 945 | 946 | picomatch@2.3.1: 947 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 948 | engines: {node: '>=8.6'} 949 | 950 | picomatch@4.0.2: 951 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 952 | engines: {node: '>=12'} 953 | 954 | possible-typed-array-names@1.0.0: 955 | resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} 956 | engines: {node: '>= 0.4'} 957 | 958 | postcss-js@4.0.1: 959 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 960 | engines: {node: ^12 || ^14 || >= 16} 961 | peerDependencies: 962 | postcss: ^8.4.21 963 | 964 | postcss-simple-vars@7.0.1: 965 | resolution: {integrity: sha512-5GLLXaS8qmzHMOjVxqkk1TZPf1jMqesiI7qLhnlyERalG0sMbHIbJqrcnrpmZdKCLglHnRHoEBB61RtGTsj++A==} 966 | engines: {node: '>=14.0'} 967 | peerDependencies: 968 | postcss: ^8.2.1 969 | 970 | postcss@8.4.47: 971 | resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} 972 | engines: {node: ^10 || ^12 || >=14} 973 | 974 | prelude-ls@1.2.1: 975 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 976 | engines: {node: '>= 0.8.0'} 977 | 978 | punycode@2.3.1: 979 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 980 | engines: {node: '>=6'} 981 | 982 | queue-microtask@1.2.3: 983 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 984 | 985 | regexp.prototype.flags@1.5.2: 986 | resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} 987 | engines: {node: '>= 0.4'} 988 | 989 | require-directory@2.1.1: 990 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 991 | engines: {node: '>=0.10.0'} 992 | 993 | requireindex@1.2.0: 994 | resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} 995 | engines: {node: '>=0.10.5'} 996 | 997 | resolve-from@4.0.0: 998 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 999 | engines: {node: '>=4'} 1000 | 1001 | resolve-pkg-maps@1.0.0: 1002 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 1003 | 1004 | resolve@1.22.8: 1005 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 1006 | hasBin: true 1007 | 1008 | reusify@1.0.4: 1009 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1010 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1011 | 1012 | run-parallel@1.2.0: 1013 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1014 | 1015 | safe-array-concat@1.1.2: 1016 | resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} 1017 | engines: {node: '>=0.4'} 1018 | 1019 | safe-regex-test@1.0.3: 1020 | resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} 1021 | engines: {node: '>= 0.4'} 1022 | 1023 | semver@6.3.1: 1024 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1025 | hasBin: true 1026 | 1027 | semver@7.6.3: 1028 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1029 | engines: {node: '>=10'} 1030 | hasBin: true 1031 | 1032 | set-function-length@1.2.2: 1033 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 1034 | engines: {node: '>= 0.4'} 1035 | 1036 | set-function-name@2.0.2: 1037 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 1038 | engines: {node: '>= 0.4'} 1039 | 1040 | shebang-command@2.0.0: 1041 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1042 | engines: {node: '>=8'} 1043 | 1044 | shebang-regex@3.0.0: 1045 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1046 | engines: {node: '>=8'} 1047 | 1048 | side-channel@1.0.6: 1049 | resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} 1050 | engines: {node: '>= 0.4'} 1051 | 1052 | signal-exit@4.1.0: 1053 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1054 | engines: {node: '>=14'} 1055 | 1056 | source-map-js@1.2.1: 1057 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1058 | engines: {node: '>=0.10.0'} 1059 | 1060 | string-width@4.2.3: 1061 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1062 | engines: {node: '>=8'} 1063 | 1064 | string-width@5.1.2: 1065 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1066 | engines: {node: '>=12'} 1067 | 1068 | string.prototype.trim@1.2.9: 1069 | resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} 1070 | engines: {node: '>= 0.4'} 1071 | 1072 | string.prototype.trimend@1.0.8: 1073 | resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} 1074 | 1075 | string.prototype.trimstart@1.0.8: 1076 | resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} 1077 | engines: {node: '>= 0.4'} 1078 | 1079 | strip-ansi@6.0.1: 1080 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1081 | engines: {node: '>=8'} 1082 | 1083 | strip-ansi@7.1.0: 1084 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1085 | engines: {node: '>=12'} 1086 | 1087 | strip-bom@3.0.0: 1088 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1089 | engines: {node: '>=4'} 1090 | 1091 | strip-json-comments@3.1.1: 1092 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1093 | engines: {node: '>=8'} 1094 | 1095 | sugarss@4.0.1: 1096 | resolution: {integrity: sha512-WCjS5NfuVJjkQzK10s8WOBY+hhDxxNt/N6ZaGwxFZ+wN3/lKKFSaaKUNecULcTTvE4urLcKaZFQD8vO0mOZujw==} 1097 | engines: {node: '>=12.0'} 1098 | peerDependencies: 1099 | postcss: ^8.3.3 1100 | 1101 | supports-color@7.2.0: 1102 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1103 | engines: {node: '>=8'} 1104 | 1105 | supports-preserve-symlinks-flag@1.0.0: 1106 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1107 | engines: {node: '>= 0.4'} 1108 | 1109 | tapable@2.2.1: 1110 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 1111 | engines: {node: '>=6'} 1112 | 1113 | test-exclude@7.0.1: 1114 | resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} 1115 | engines: {node: '>=18'} 1116 | 1117 | text-table@0.2.0: 1118 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1119 | 1120 | tinyglobby@0.2.7: 1121 | resolution: {integrity: sha512-qFWYeNxBQxrOTRHvGjlRdBamy8JFqu6c0bwRru9leE+q8J72tLtlT0L3v+2T7fbLXN7FGzDNBhXkWiJqHUHD9g==} 1122 | engines: {node: '>=12.0.0'} 1123 | 1124 | to-regex-range@5.0.1: 1125 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1126 | engines: {node: '>=8.0'} 1127 | 1128 | ts-api-utils@1.3.0: 1129 | resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} 1130 | engines: {node: '>=16'} 1131 | peerDependencies: 1132 | typescript: '>=4.2.0' 1133 | 1134 | tsconfig-paths@3.15.0: 1135 | resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} 1136 | 1137 | type-check@0.4.0: 1138 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1139 | engines: {node: '>= 0.8.0'} 1140 | 1141 | typed-array-buffer@1.0.2: 1142 | resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} 1143 | engines: {node: '>= 0.4'} 1144 | 1145 | typed-array-byte-length@1.0.1: 1146 | resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} 1147 | engines: {node: '>= 0.4'} 1148 | 1149 | typed-array-byte-offset@1.0.2: 1150 | resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} 1151 | engines: {node: '>= 0.4'} 1152 | 1153 | typed-array-length@1.0.6: 1154 | resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} 1155 | engines: {node: '>= 0.4'} 1156 | 1157 | typescript-eslint@8.8.0: 1158 | resolution: {integrity: sha512-BjIT/VwJ8+0rVO01ZQ2ZVnjE1svFBiRczcpr1t1Yxt7sT25VSbPfrJtDsQ8uQTy2pilX5nI9gwxhUyLULNentw==} 1159 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1160 | peerDependencies: 1161 | typescript: '*' 1162 | peerDependenciesMeta: 1163 | typescript: 1164 | optional: true 1165 | 1166 | typescript@5.6.2: 1167 | resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} 1168 | engines: {node: '>=14.17'} 1169 | hasBin: true 1170 | 1171 | unbox-primitive@1.0.2: 1172 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 1173 | 1174 | uri-js@4.4.1: 1175 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1176 | 1177 | v8-to-istanbul@9.3.0: 1178 | resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} 1179 | engines: {node: '>=10.12.0'} 1180 | 1181 | which-boxed-primitive@1.0.2: 1182 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 1183 | 1184 | which-typed-array@1.1.15: 1185 | resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} 1186 | engines: {node: '>= 0.4'} 1187 | 1188 | which@2.0.2: 1189 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1190 | engines: {node: '>= 8'} 1191 | hasBin: true 1192 | 1193 | word-wrap@1.2.5: 1194 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1195 | engines: {node: '>=0.10.0'} 1196 | 1197 | wrap-ansi@7.0.0: 1198 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1199 | engines: {node: '>=10'} 1200 | 1201 | wrap-ansi@8.1.0: 1202 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1203 | engines: {node: '>=12'} 1204 | 1205 | y18n@5.0.8: 1206 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 1207 | engines: {node: '>=10'} 1208 | 1209 | yargs-parser@21.1.1: 1210 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 1211 | engines: {node: '>=12'} 1212 | 1213 | yargs@17.7.2: 1214 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 1215 | engines: {node: '>=12'} 1216 | 1217 | yocto-queue@0.1.0: 1218 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1219 | engines: {node: '>=10'} 1220 | 1221 | snapshots: 1222 | 1223 | '@bcoe/v8-coverage@0.2.3': {} 1224 | 1225 | '@eslint-community/eslint-utils@4.4.0(eslint@9.11.1)': 1226 | dependencies: 1227 | eslint: 9.11.1 1228 | eslint-visitor-keys: 3.4.3 1229 | 1230 | '@eslint-community/regexpp@4.11.1': {} 1231 | 1232 | '@eslint/config-array@0.18.0': 1233 | dependencies: 1234 | '@eslint/object-schema': 2.1.4 1235 | debug: 4.3.7 1236 | minimatch: 3.1.2 1237 | transitivePeerDependencies: 1238 | - supports-color 1239 | 1240 | '@eslint/core@0.6.0': {} 1241 | 1242 | '@eslint/eslintrc@3.1.0': 1243 | dependencies: 1244 | ajv: 6.12.6 1245 | debug: 4.3.7 1246 | espree: 10.2.0 1247 | globals: 14.0.0 1248 | ignore: 5.3.2 1249 | import-fresh: 3.3.0 1250 | js-yaml: 4.1.0 1251 | minimatch: 3.1.2 1252 | strip-json-comments: 3.1.1 1253 | transitivePeerDependencies: 1254 | - supports-color 1255 | 1256 | '@eslint/js@9.11.1': {} 1257 | 1258 | '@eslint/object-schema@2.1.4': {} 1259 | 1260 | '@eslint/plugin-kit@0.2.0': 1261 | dependencies: 1262 | levn: 0.4.1 1263 | 1264 | '@humanwhocodes/module-importer@1.0.1': {} 1265 | 1266 | '@humanwhocodes/retry@0.3.0': {} 1267 | 1268 | '@isaacs/cliui@8.0.2': 1269 | dependencies: 1270 | string-width: 5.1.2 1271 | string-width-cjs: string-width@4.2.3 1272 | strip-ansi: 7.1.0 1273 | strip-ansi-cjs: strip-ansi@6.0.1 1274 | wrap-ansi: 8.1.0 1275 | wrap-ansi-cjs: wrap-ansi@7.0.0 1276 | 1277 | '@istanbuljs/schema@0.1.3': {} 1278 | 1279 | '@jridgewell/resolve-uri@3.1.2': {} 1280 | 1281 | '@jridgewell/sourcemap-codec@1.5.0': {} 1282 | 1283 | '@jridgewell/trace-mapping@0.3.25': 1284 | dependencies: 1285 | '@jridgewell/resolve-uri': 3.1.2 1286 | '@jridgewell/sourcemap-codec': 1.5.0 1287 | 1288 | '@logux/eslint-config@53.4.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2)': 1289 | dependencies: 1290 | '@eslint/eslintrc': 3.1.0 1291 | eslint: 9.11.1 1292 | eslint-config-standard: 17.1.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1))(eslint-plugin-n@17.10.3(eslint@9.11.1))(eslint-plugin-promise@7.1.0(eslint@9.11.1))(eslint@9.11.1) 1293 | eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1) 1294 | eslint-plugin-n: 17.10.3(eslint@9.11.1) 1295 | eslint-plugin-perfectionist: 3.8.0(eslint@9.11.1)(typescript@5.6.2) 1296 | eslint-plugin-prefer-let: 4.0.0 1297 | eslint-plugin-promise: 7.1.0(eslint@9.11.1) 1298 | typescript-eslint: 8.8.0(eslint@9.11.1)(typescript@5.6.2) 1299 | transitivePeerDependencies: 1300 | - '@typescript-eslint/parser' 1301 | - astro-eslint-parser 1302 | - eslint-import-resolver-typescript 1303 | - eslint-import-resolver-webpack 1304 | - supports-color 1305 | - svelte-eslint-parser 1306 | - typescript 1307 | - vue-eslint-parser 1308 | 1309 | '@nodelib/fs.scandir@2.1.5': 1310 | dependencies: 1311 | '@nodelib/fs.stat': 2.0.5 1312 | run-parallel: 1.2.0 1313 | 1314 | '@nodelib/fs.stat@2.0.5': {} 1315 | 1316 | '@nodelib/fs.walk@1.2.8': 1317 | dependencies: 1318 | '@nodelib/fs.scandir': 2.1.5 1319 | fastq: 1.17.1 1320 | 1321 | '@pkgjs/parseargs@0.11.0': 1322 | optional: true 1323 | 1324 | '@rtsao/scc@1.1.0': {} 1325 | 1326 | '@types/estree@1.0.6': {} 1327 | 1328 | '@types/istanbul-lib-coverage@2.0.6': {} 1329 | 1330 | '@types/json-schema@7.0.15': {} 1331 | 1332 | '@types/json5@0.0.29': {} 1333 | 1334 | '@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2)': 1335 | dependencies: 1336 | '@eslint-community/regexpp': 4.11.1 1337 | '@typescript-eslint/parser': 8.8.0(eslint@9.11.1)(typescript@5.6.2) 1338 | '@typescript-eslint/scope-manager': 8.8.0 1339 | '@typescript-eslint/type-utils': 8.8.0(eslint@9.11.1)(typescript@5.6.2) 1340 | '@typescript-eslint/utils': 8.8.0(eslint@9.11.1)(typescript@5.6.2) 1341 | '@typescript-eslint/visitor-keys': 8.8.0 1342 | eslint: 9.11.1 1343 | graphemer: 1.4.0 1344 | ignore: 5.3.2 1345 | natural-compare: 1.4.0 1346 | ts-api-utils: 1.3.0(typescript@5.6.2) 1347 | optionalDependencies: 1348 | typescript: 5.6.2 1349 | transitivePeerDependencies: 1350 | - supports-color 1351 | 1352 | '@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2)': 1353 | dependencies: 1354 | '@typescript-eslint/scope-manager': 8.8.0 1355 | '@typescript-eslint/types': 8.8.0 1356 | '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2) 1357 | '@typescript-eslint/visitor-keys': 8.8.0 1358 | debug: 4.3.7 1359 | eslint: 9.11.1 1360 | optionalDependencies: 1361 | typescript: 5.6.2 1362 | transitivePeerDependencies: 1363 | - supports-color 1364 | 1365 | '@typescript-eslint/scope-manager@8.8.0': 1366 | dependencies: 1367 | '@typescript-eslint/types': 8.8.0 1368 | '@typescript-eslint/visitor-keys': 8.8.0 1369 | 1370 | '@typescript-eslint/type-utils@8.8.0(eslint@9.11.1)(typescript@5.6.2)': 1371 | dependencies: 1372 | '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2) 1373 | '@typescript-eslint/utils': 8.8.0(eslint@9.11.1)(typescript@5.6.2) 1374 | debug: 4.3.7 1375 | ts-api-utils: 1.3.0(typescript@5.6.2) 1376 | optionalDependencies: 1377 | typescript: 5.6.2 1378 | transitivePeerDependencies: 1379 | - eslint 1380 | - supports-color 1381 | 1382 | '@typescript-eslint/types@8.8.0': {} 1383 | 1384 | '@typescript-eslint/typescript-estree@8.8.0(typescript@5.6.2)': 1385 | dependencies: 1386 | '@typescript-eslint/types': 8.8.0 1387 | '@typescript-eslint/visitor-keys': 8.8.0 1388 | debug: 4.3.7 1389 | fast-glob: 3.3.2 1390 | is-glob: 4.0.3 1391 | minimatch: 9.0.5 1392 | semver: 7.6.3 1393 | ts-api-utils: 1.3.0(typescript@5.6.2) 1394 | optionalDependencies: 1395 | typescript: 5.6.2 1396 | transitivePeerDependencies: 1397 | - supports-color 1398 | 1399 | '@typescript-eslint/utils@8.8.0(eslint@9.11.1)(typescript@5.6.2)': 1400 | dependencies: 1401 | '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1) 1402 | '@typescript-eslint/scope-manager': 8.8.0 1403 | '@typescript-eslint/types': 8.8.0 1404 | '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2) 1405 | eslint: 9.11.1 1406 | transitivePeerDependencies: 1407 | - supports-color 1408 | - typescript 1409 | 1410 | '@typescript-eslint/visitor-keys@8.8.0': 1411 | dependencies: 1412 | '@typescript-eslint/types': 8.8.0 1413 | eslint-visitor-keys: 3.4.3 1414 | 1415 | acorn-jsx@5.3.2(acorn@8.12.1): 1416 | dependencies: 1417 | acorn: 8.12.1 1418 | 1419 | acorn@8.12.1: {} 1420 | 1421 | ajv@6.12.6: 1422 | dependencies: 1423 | fast-deep-equal: 3.1.3 1424 | fast-json-stable-stringify: 2.1.0 1425 | json-schema-traverse: 0.4.1 1426 | uri-js: 4.4.1 1427 | 1428 | ansi-regex@5.0.1: {} 1429 | 1430 | ansi-regex@6.1.0: {} 1431 | 1432 | ansi-styles@4.3.0: 1433 | dependencies: 1434 | color-convert: 2.0.1 1435 | 1436 | ansi-styles@6.2.1: {} 1437 | 1438 | argparse@2.0.1: {} 1439 | 1440 | array-buffer-byte-length@1.0.1: 1441 | dependencies: 1442 | call-bind: 1.0.7 1443 | is-array-buffer: 3.0.4 1444 | 1445 | array-includes@3.1.8: 1446 | dependencies: 1447 | call-bind: 1.0.7 1448 | define-properties: 1.2.1 1449 | es-abstract: 1.23.3 1450 | es-object-atoms: 1.0.0 1451 | get-intrinsic: 1.2.4 1452 | is-string: 1.0.7 1453 | 1454 | array.prototype.findlastindex@1.2.5: 1455 | dependencies: 1456 | call-bind: 1.0.7 1457 | define-properties: 1.2.1 1458 | es-abstract: 1.23.3 1459 | es-errors: 1.3.0 1460 | es-object-atoms: 1.0.0 1461 | es-shim-unscopables: 1.0.2 1462 | 1463 | array.prototype.flat@1.3.2: 1464 | dependencies: 1465 | call-bind: 1.0.7 1466 | define-properties: 1.2.1 1467 | es-abstract: 1.23.3 1468 | es-shim-unscopables: 1.0.2 1469 | 1470 | array.prototype.flatmap@1.3.2: 1471 | dependencies: 1472 | call-bind: 1.0.7 1473 | define-properties: 1.2.1 1474 | es-abstract: 1.23.3 1475 | es-shim-unscopables: 1.0.2 1476 | 1477 | arraybuffer.prototype.slice@1.0.3: 1478 | dependencies: 1479 | array-buffer-byte-length: 1.0.1 1480 | call-bind: 1.0.7 1481 | define-properties: 1.2.1 1482 | es-abstract: 1.23.3 1483 | es-errors: 1.3.0 1484 | get-intrinsic: 1.2.4 1485 | is-array-buffer: 3.0.4 1486 | is-shared-array-buffer: 1.0.3 1487 | 1488 | available-typed-arrays@1.0.7: 1489 | dependencies: 1490 | possible-typed-array-names: 1.0.0 1491 | 1492 | balanced-match@1.0.2: {} 1493 | 1494 | brace-expansion@1.1.11: 1495 | dependencies: 1496 | balanced-match: 1.0.2 1497 | concat-map: 0.0.1 1498 | 1499 | brace-expansion@2.0.1: 1500 | dependencies: 1501 | balanced-match: 1.0.2 1502 | 1503 | braces@3.0.3: 1504 | dependencies: 1505 | fill-range: 7.1.1 1506 | 1507 | c8@10.1.2: 1508 | dependencies: 1509 | '@bcoe/v8-coverage': 0.2.3 1510 | '@istanbuljs/schema': 0.1.3 1511 | find-up: 5.0.0 1512 | foreground-child: 3.3.0 1513 | istanbul-lib-coverage: 3.2.2 1514 | istanbul-lib-report: 3.0.1 1515 | istanbul-reports: 3.1.7 1516 | test-exclude: 7.0.1 1517 | v8-to-istanbul: 9.3.0 1518 | yargs: 17.7.2 1519 | yargs-parser: 21.1.1 1520 | 1521 | call-bind@1.0.7: 1522 | dependencies: 1523 | es-define-property: 1.0.0 1524 | es-errors: 1.3.0 1525 | function-bind: 1.1.2 1526 | get-intrinsic: 1.2.4 1527 | set-function-length: 1.2.2 1528 | 1529 | callsites@3.1.0: {} 1530 | 1531 | camelcase-css@2.0.1: {} 1532 | 1533 | chalk@4.1.2: 1534 | dependencies: 1535 | ansi-styles: 4.3.0 1536 | supports-color: 7.2.0 1537 | 1538 | clean-publish@5.0.0: 1539 | dependencies: 1540 | cross-spawn: 7.0.3 1541 | fast-glob: 3.3.2 1542 | lilconfig: 3.1.2 1543 | micromatch: 4.0.8 1544 | 1545 | cliui@8.0.1: 1546 | dependencies: 1547 | string-width: 4.2.3 1548 | strip-ansi: 6.0.1 1549 | wrap-ansi: 7.0.0 1550 | 1551 | color-convert@2.0.1: 1552 | dependencies: 1553 | color-name: 1.1.4 1554 | 1555 | color-name@1.1.4: {} 1556 | 1557 | concat-map@0.0.1: {} 1558 | 1559 | convert-source-map@2.0.0: {} 1560 | 1561 | cross-spawn@7.0.3: 1562 | dependencies: 1563 | path-key: 3.1.1 1564 | shebang-command: 2.0.0 1565 | which: 2.0.2 1566 | 1567 | data-view-buffer@1.0.1: 1568 | dependencies: 1569 | call-bind: 1.0.7 1570 | es-errors: 1.3.0 1571 | is-data-view: 1.0.1 1572 | 1573 | data-view-byte-length@1.0.1: 1574 | dependencies: 1575 | call-bind: 1.0.7 1576 | es-errors: 1.3.0 1577 | is-data-view: 1.0.1 1578 | 1579 | data-view-byte-offset@1.0.0: 1580 | dependencies: 1581 | call-bind: 1.0.7 1582 | es-errors: 1.3.0 1583 | is-data-view: 1.0.1 1584 | 1585 | debug@3.2.7: 1586 | dependencies: 1587 | ms: 2.1.3 1588 | 1589 | debug@4.3.7: 1590 | dependencies: 1591 | ms: 2.1.3 1592 | 1593 | deep-is@0.1.4: {} 1594 | 1595 | define-data-property@1.1.4: 1596 | dependencies: 1597 | es-define-property: 1.0.0 1598 | es-errors: 1.3.0 1599 | gopd: 1.0.1 1600 | 1601 | define-properties@1.2.1: 1602 | dependencies: 1603 | define-data-property: 1.1.4 1604 | has-property-descriptors: 1.0.2 1605 | object-keys: 1.1.1 1606 | 1607 | doctrine@2.1.0: 1608 | dependencies: 1609 | esutils: 2.0.3 1610 | 1611 | eastasianwidth@0.2.0: {} 1612 | 1613 | emoji-regex@8.0.0: {} 1614 | 1615 | emoji-regex@9.2.2: {} 1616 | 1617 | enhanced-resolve@5.17.1: 1618 | dependencies: 1619 | graceful-fs: 4.2.11 1620 | tapable: 2.2.1 1621 | 1622 | es-abstract@1.23.3: 1623 | dependencies: 1624 | array-buffer-byte-length: 1.0.1 1625 | arraybuffer.prototype.slice: 1.0.3 1626 | available-typed-arrays: 1.0.7 1627 | call-bind: 1.0.7 1628 | data-view-buffer: 1.0.1 1629 | data-view-byte-length: 1.0.1 1630 | data-view-byte-offset: 1.0.0 1631 | es-define-property: 1.0.0 1632 | es-errors: 1.3.0 1633 | es-object-atoms: 1.0.0 1634 | es-set-tostringtag: 2.0.3 1635 | es-to-primitive: 1.2.1 1636 | function.prototype.name: 1.1.6 1637 | get-intrinsic: 1.2.4 1638 | get-symbol-description: 1.0.2 1639 | globalthis: 1.0.4 1640 | gopd: 1.0.1 1641 | has-property-descriptors: 1.0.2 1642 | has-proto: 1.0.3 1643 | has-symbols: 1.0.3 1644 | hasown: 2.0.2 1645 | internal-slot: 1.0.7 1646 | is-array-buffer: 3.0.4 1647 | is-callable: 1.2.7 1648 | is-data-view: 1.0.1 1649 | is-negative-zero: 2.0.3 1650 | is-regex: 1.1.4 1651 | is-shared-array-buffer: 1.0.3 1652 | is-string: 1.0.7 1653 | is-typed-array: 1.1.13 1654 | is-weakref: 1.0.2 1655 | object-inspect: 1.13.2 1656 | object-keys: 1.1.1 1657 | object.assign: 4.1.5 1658 | regexp.prototype.flags: 1.5.2 1659 | safe-array-concat: 1.1.2 1660 | safe-regex-test: 1.0.3 1661 | string.prototype.trim: 1.2.9 1662 | string.prototype.trimend: 1.0.8 1663 | string.prototype.trimstart: 1.0.8 1664 | typed-array-buffer: 1.0.2 1665 | typed-array-byte-length: 1.0.1 1666 | typed-array-byte-offset: 1.0.2 1667 | typed-array-length: 1.0.6 1668 | unbox-primitive: 1.0.2 1669 | which-typed-array: 1.1.15 1670 | 1671 | es-define-property@1.0.0: 1672 | dependencies: 1673 | get-intrinsic: 1.2.4 1674 | 1675 | es-errors@1.3.0: {} 1676 | 1677 | es-object-atoms@1.0.0: 1678 | dependencies: 1679 | es-errors: 1.3.0 1680 | 1681 | es-set-tostringtag@2.0.3: 1682 | dependencies: 1683 | get-intrinsic: 1.2.4 1684 | has-tostringtag: 1.0.2 1685 | hasown: 2.0.2 1686 | 1687 | es-shim-unscopables@1.0.2: 1688 | dependencies: 1689 | hasown: 2.0.2 1690 | 1691 | es-to-primitive@1.2.1: 1692 | dependencies: 1693 | is-callable: 1.2.7 1694 | is-date-object: 1.0.5 1695 | is-symbol: 1.0.4 1696 | 1697 | escalade@3.2.0: {} 1698 | 1699 | escape-string-regexp@4.0.0: {} 1700 | 1701 | eslint-compat-utils@0.5.1(eslint@9.11.1): 1702 | dependencies: 1703 | eslint: 9.11.1 1704 | semver: 7.6.3 1705 | 1706 | eslint-config-standard@17.1.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1))(eslint-plugin-n@17.10.3(eslint@9.11.1))(eslint-plugin-promise@7.1.0(eslint@9.11.1))(eslint@9.11.1): 1707 | dependencies: 1708 | eslint: 9.11.1 1709 | eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1) 1710 | eslint-plugin-n: 17.10.3(eslint@9.11.1) 1711 | eslint-plugin-promise: 7.1.0(eslint@9.11.1) 1712 | 1713 | eslint-import-resolver-node@0.3.9: 1714 | dependencies: 1715 | debug: 3.2.7 1716 | is-core-module: 2.15.1 1717 | resolve: 1.22.8 1718 | transitivePeerDependencies: 1719 | - supports-color 1720 | 1721 | eslint-module-utils@2.12.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@9.11.1): 1722 | dependencies: 1723 | debug: 3.2.7 1724 | optionalDependencies: 1725 | '@typescript-eslint/parser': 8.8.0(eslint@9.11.1)(typescript@5.6.2) 1726 | eslint: 9.11.1 1727 | eslint-import-resolver-node: 0.3.9 1728 | transitivePeerDependencies: 1729 | - supports-color 1730 | 1731 | eslint-plugin-es-x@7.8.0(eslint@9.11.1): 1732 | dependencies: 1733 | '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1) 1734 | '@eslint-community/regexpp': 4.11.1 1735 | eslint: 9.11.1 1736 | eslint-compat-utils: 0.5.1(eslint@9.11.1) 1737 | 1738 | eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1): 1739 | dependencies: 1740 | '@rtsao/scc': 1.1.0 1741 | array-includes: 3.1.8 1742 | array.prototype.findlastindex: 1.2.5 1743 | array.prototype.flat: 1.3.2 1744 | array.prototype.flatmap: 1.3.2 1745 | debug: 3.2.7 1746 | doctrine: 2.1.0 1747 | eslint: 9.11.1 1748 | eslint-import-resolver-node: 0.3.9 1749 | eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@9.11.1) 1750 | hasown: 2.0.2 1751 | is-core-module: 2.15.1 1752 | is-glob: 4.0.3 1753 | minimatch: 3.1.2 1754 | object.fromentries: 2.0.8 1755 | object.groupby: 1.0.3 1756 | object.values: 1.2.0 1757 | semver: 6.3.1 1758 | tsconfig-paths: 3.15.0 1759 | optionalDependencies: 1760 | '@typescript-eslint/parser': 8.8.0(eslint@9.11.1)(typescript@5.6.2) 1761 | transitivePeerDependencies: 1762 | - eslint-import-resolver-typescript 1763 | - eslint-import-resolver-webpack 1764 | - supports-color 1765 | 1766 | eslint-plugin-n@17.10.3(eslint@9.11.1): 1767 | dependencies: 1768 | '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1) 1769 | enhanced-resolve: 5.17.1 1770 | eslint: 9.11.1 1771 | eslint-plugin-es-x: 7.8.0(eslint@9.11.1) 1772 | get-tsconfig: 4.8.1 1773 | globals: 15.9.0 1774 | ignore: 5.3.2 1775 | minimatch: 9.0.5 1776 | semver: 7.6.3 1777 | 1778 | eslint-plugin-perfectionist@3.8.0(eslint@9.11.1)(typescript@5.6.2): 1779 | dependencies: 1780 | '@typescript-eslint/types': 8.8.0 1781 | '@typescript-eslint/utils': 8.8.0(eslint@9.11.1)(typescript@5.6.2) 1782 | eslint: 9.11.1 1783 | minimatch: 9.0.5 1784 | natural-compare-lite: 1.4.0 1785 | transitivePeerDependencies: 1786 | - supports-color 1787 | - typescript 1788 | 1789 | eslint-plugin-prefer-let@4.0.0: 1790 | dependencies: 1791 | requireindex: 1.2.0 1792 | 1793 | eslint-plugin-promise@7.1.0(eslint@9.11.1): 1794 | dependencies: 1795 | eslint: 9.11.1 1796 | 1797 | eslint-scope@8.1.0: 1798 | dependencies: 1799 | esrecurse: 4.3.0 1800 | estraverse: 5.3.0 1801 | 1802 | eslint-visitor-keys@3.4.3: {} 1803 | 1804 | eslint-visitor-keys@4.1.0: {} 1805 | 1806 | eslint@9.11.1: 1807 | dependencies: 1808 | '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1) 1809 | '@eslint-community/regexpp': 4.11.1 1810 | '@eslint/config-array': 0.18.0 1811 | '@eslint/core': 0.6.0 1812 | '@eslint/eslintrc': 3.1.0 1813 | '@eslint/js': 9.11.1 1814 | '@eslint/plugin-kit': 0.2.0 1815 | '@humanwhocodes/module-importer': 1.0.1 1816 | '@humanwhocodes/retry': 0.3.0 1817 | '@nodelib/fs.walk': 1.2.8 1818 | '@types/estree': 1.0.6 1819 | '@types/json-schema': 7.0.15 1820 | ajv: 6.12.6 1821 | chalk: 4.1.2 1822 | cross-spawn: 7.0.3 1823 | debug: 4.3.7 1824 | escape-string-regexp: 4.0.0 1825 | eslint-scope: 8.1.0 1826 | eslint-visitor-keys: 4.1.0 1827 | espree: 10.2.0 1828 | esquery: 1.6.0 1829 | esutils: 2.0.3 1830 | fast-deep-equal: 3.1.3 1831 | file-entry-cache: 8.0.0 1832 | find-up: 5.0.0 1833 | glob-parent: 6.0.2 1834 | ignore: 5.3.2 1835 | imurmurhash: 0.1.4 1836 | is-glob: 4.0.3 1837 | is-path-inside: 3.0.3 1838 | json-stable-stringify-without-jsonify: 1.0.1 1839 | lodash.merge: 4.6.2 1840 | minimatch: 3.1.2 1841 | natural-compare: 1.4.0 1842 | optionator: 0.9.4 1843 | strip-ansi: 6.0.1 1844 | text-table: 0.2.0 1845 | transitivePeerDependencies: 1846 | - supports-color 1847 | 1848 | espree@10.2.0: 1849 | dependencies: 1850 | acorn: 8.12.1 1851 | acorn-jsx: 5.3.2(acorn@8.12.1) 1852 | eslint-visitor-keys: 4.1.0 1853 | 1854 | esquery@1.6.0: 1855 | dependencies: 1856 | estraverse: 5.3.0 1857 | 1858 | esrecurse@4.3.0: 1859 | dependencies: 1860 | estraverse: 5.3.0 1861 | 1862 | estraverse@5.3.0: {} 1863 | 1864 | esutils@2.0.3: {} 1865 | 1866 | fast-deep-equal@3.1.3: {} 1867 | 1868 | fast-glob@3.3.2: 1869 | dependencies: 1870 | '@nodelib/fs.stat': 2.0.5 1871 | '@nodelib/fs.walk': 1.2.8 1872 | glob-parent: 5.1.2 1873 | merge2: 1.4.1 1874 | micromatch: 4.0.8 1875 | 1876 | fast-json-stable-stringify@2.1.0: {} 1877 | 1878 | fast-levenshtein@2.0.6: {} 1879 | 1880 | fastq@1.17.1: 1881 | dependencies: 1882 | reusify: 1.0.4 1883 | 1884 | fdir@6.4.0(picomatch@4.0.2): 1885 | optionalDependencies: 1886 | picomatch: 4.0.2 1887 | 1888 | file-entry-cache@8.0.0: 1889 | dependencies: 1890 | flat-cache: 4.0.1 1891 | 1892 | fill-range@7.1.1: 1893 | dependencies: 1894 | to-regex-range: 5.0.1 1895 | 1896 | find-up@5.0.0: 1897 | dependencies: 1898 | locate-path: 6.0.0 1899 | path-exists: 4.0.0 1900 | 1901 | flat-cache@4.0.1: 1902 | dependencies: 1903 | flatted: 3.3.1 1904 | keyv: 4.5.4 1905 | 1906 | flatted@3.3.1: {} 1907 | 1908 | for-each@0.3.3: 1909 | dependencies: 1910 | is-callable: 1.2.7 1911 | 1912 | foreground-child@3.3.0: 1913 | dependencies: 1914 | cross-spawn: 7.0.3 1915 | signal-exit: 4.1.0 1916 | 1917 | function-bind@1.1.2: {} 1918 | 1919 | function.prototype.name@1.1.6: 1920 | dependencies: 1921 | call-bind: 1.0.7 1922 | define-properties: 1.2.1 1923 | es-abstract: 1.23.3 1924 | functions-have-names: 1.2.3 1925 | 1926 | functions-have-names@1.2.3: {} 1927 | 1928 | get-caller-file@2.0.5: {} 1929 | 1930 | get-intrinsic@1.2.4: 1931 | dependencies: 1932 | es-errors: 1.3.0 1933 | function-bind: 1.1.2 1934 | has-proto: 1.0.3 1935 | has-symbols: 1.0.3 1936 | hasown: 2.0.2 1937 | 1938 | get-symbol-description@1.0.2: 1939 | dependencies: 1940 | call-bind: 1.0.7 1941 | es-errors: 1.3.0 1942 | get-intrinsic: 1.2.4 1943 | 1944 | get-tsconfig@4.8.1: 1945 | dependencies: 1946 | resolve-pkg-maps: 1.0.0 1947 | 1948 | glob-parent@5.1.2: 1949 | dependencies: 1950 | is-glob: 4.0.3 1951 | 1952 | glob-parent@6.0.2: 1953 | dependencies: 1954 | is-glob: 4.0.3 1955 | 1956 | glob@10.4.5: 1957 | dependencies: 1958 | foreground-child: 3.3.0 1959 | jackspeak: 3.4.3 1960 | minimatch: 9.0.5 1961 | minipass: 7.1.2 1962 | package-json-from-dist: 1.0.1 1963 | path-scurry: 1.11.1 1964 | 1965 | globals@14.0.0: {} 1966 | 1967 | globals@15.9.0: {} 1968 | 1969 | globalthis@1.0.4: 1970 | dependencies: 1971 | define-properties: 1.2.1 1972 | gopd: 1.0.1 1973 | 1974 | gopd@1.0.1: 1975 | dependencies: 1976 | get-intrinsic: 1.2.4 1977 | 1978 | graceful-fs@4.2.11: {} 1979 | 1980 | graphemer@1.4.0: {} 1981 | 1982 | has-bigints@1.0.2: {} 1983 | 1984 | has-flag@4.0.0: {} 1985 | 1986 | has-property-descriptors@1.0.2: 1987 | dependencies: 1988 | es-define-property: 1.0.0 1989 | 1990 | has-proto@1.0.3: {} 1991 | 1992 | has-symbols@1.0.3: {} 1993 | 1994 | has-tostringtag@1.0.2: 1995 | dependencies: 1996 | has-symbols: 1.0.3 1997 | 1998 | hasown@2.0.2: 1999 | dependencies: 2000 | function-bind: 1.1.2 2001 | 2002 | html-escaper@2.0.2: {} 2003 | 2004 | ignore@5.3.2: {} 2005 | 2006 | import-fresh@3.3.0: 2007 | dependencies: 2008 | parent-module: 1.0.1 2009 | resolve-from: 4.0.0 2010 | 2011 | imurmurhash@0.1.4: {} 2012 | 2013 | internal-slot@1.0.7: 2014 | dependencies: 2015 | es-errors: 1.3.0 2016 | hasown: 2.0.2 2017 | side-channel: 1.0.6 2018 | 2019 | is-array-buffer@3.0.4: 2020 | dependencies: 2021 | call-bind: 1.0.7 2022 | get-intrinsic: 1.2.4 2023 | 2024 | is-bigint@1.0.4: 2025 | dependencies: 2026 | has-bigints: 1.0.2 2027 | 2028 | is-boolean-object@1.1.2: 2029 | dependencies: 2030 | call-bind: 1.0.7 2031 | has-tostringtag: 1.0.2 2032 | 2033 | is-callable@1.2.7: {} 2034 | 2035 | is-core-module@2.15.1: 2036 | dependencies: 2037 | hasown: 2.0.2 2038 | 2039 | is-data-view@1.0.1: 2040 | dependencies: 2041 | is-typed-array: 1.1.13 2042 | 2043 | is-date-object@1.0.5: 2044 | dependencies: 2045 | has-tostringtag: 1.0.2 2046 | 2047 | is-extglob@2.1.1: {} 2048 | 2049 | is-fullwidth-code-point@3.0.0: {} 2050 | 2051 | is-glob@4.0.3: 2052 | dependencies: 2053 | is-extglob: 2.1.1 2054 | 2055 | is-negative-zero@2.0.3: {} 2056 | 2057 | is-number-object@1.0.7: 2058 | dependencies: 2059 | has-tostringtag: 1.0.2 2060 | 2061 | is-number@7.0.0: {} 2062 | 2063 | is-path-inside@3.0.3: {} 2064 | 2065 | is-regex@1.1.4: 2066 | dependencies: 2067 | call-bind: 1.0.7 2068 | has-tostringtag: 1.0.2 2069 | 2070 | is-shared-array-buffer@1.0.3: 2071 | dependencies: 2072 | call-bind: 1.0.7 2073 | 2074 | is-string@1.0.7: 2075 | dependencies: 2076 | has-tostringtag: 1.0.2 2077 | 2078 | is-symbol@1.0.4: 2079 | dependencies: 2080 | has-symbols: 1.0.3 2081 | 2082 | is-typed-array@1.1.13: 2083 | dependencies: 2084 | which-typed-array: 1.1.15 2085 | 2086 | is-weakref@1.0.2: 2087 | dependencies: 2088 | call-bind: 1.0.7 2089 | 2090 | isarray@2.0.5: {} 2091 | 2092 | isexe@2.0.0: {} 2093 | 2094 | istanbul-lib-coverage@3.2.2: {} 2095 | 2096 | istanbul-lib-report@3.0.1: 2097 | dependencies: 2098 | istanbul-lib-coverage: 3.2.2 2099 | make-dir: 4.0.0 2100 | supports-color: 7.2.0 2101 | 2102 | istanbul-reports@3.1.7: 2103 | dependencies: 2104 | html-escaper: 2.0.2 2105 | istanbul-lib-report: 3.0.1 2106 | 2107 | jackspeak@3.4.3: 2108 | dependencies: 2109 | '@isaacs/cliui': 8.0.2 2110 | optionalDependencies: 2111 | '@pkgjs/parseargs': 0.11.0 2112 | 2113 | js-yaml@4.1.0: 2114 | dependencies: 2115 | argparse: 2.0.1 2116 | 2117 | json-buffer@3.0.1: {} 2118 | 2119 | json-schema-traverse@0.4.1: {} 2120 | 2121 | json-stable-stringify-without-jsonify@1.0.1: {} 2122 | 2123 | json5@1.0.2: 2124 | dependencies: 2125 | minimist: 1.2.8 2126 | 2127 | keyv@4.5.4: 2128 | dependencies: 2129 | json-buffer: 3.0.1 2130 | 2131 | levn@0.4.1: 2132 | dependencies: 2133 | prelude-ls: 1.2.1 2134 | type-check: 0.4.0 2135 | 2136 | lilconfig@3.1.2: {} 2137 | 2138 | locate-path@6.0.0: 2139 | dependencies: 2140 | p-locate: 5.0.0 2141 | 2142 | lodash.merge@4.6.2: {} 2143 | 2144 | lru-cache@10.4.3: {} 2145 | 2146 | make-dir@4.0.0: 2147 | dependencies: 2148 | semver: 7.6.3 2149 | 2150 | merge2@1.4.1: {} 2151 | 2152 | micromatch@4.0.8: 2153 | dependencies: 2154 | braces: 3.0.3 2155 | picomatch: 2.3.1 2156 | 2157 | minimatch@3.1.2: 2158 | dependencies: 2159 | brace-expansion: 1.1.11 2160 | 2161 | minimatch@9.0.5: 2162 | dependencies: 2163 | brace-expansion: 2.0.1 2164 | 2165 | minimist@1.2.8: {} 2166 | 2167 | minipass@7.1.2: {} 2168 | 2169 | ms@2.1.3: {} 2170 | 2171 | nanoid@3.3.7: {} 2172 | 2173 | natural-compare-lite@1.4.0: {} 2174 | 2175 | natural-compare@1.4.0: {} 2176 | 2177 | object-inspect@1.13.2: {} 2178 | 2179 | object-keys@1.1.1: {} 2180 | 2181 | object.assign@4.1.5: 2182 | dependencies: 2183 | call-bind: 1.0.7 2184 | define-properties: 1.2.1 2185 | has-symbols: 1.0.3 2186 | object-keys: 1.1.1 2187 | 2188 | object.fromentries@2.0.8: 2189 | dependencies: 2190 | call-bind: 1.0.7 2191 | define-properties: 1.2.1 2192 | es-abstract: 1.23.3 2193 | es-object-atoms: 1.0.0 2194 | 2195 | object.groupby@1.0.3: 2196 | dependencies: 2197 | call-bind: 1.0.7 2198 | define-properties: 1.2.1 2199 | es-abstract: 1.23.3 2200 | 2201 | object.values@1.2.0: 2202 | dependencies: 2203 | call-bind: 1.0.7 2204 | define-properties: 1.2.1 2205 | es-object-atoms: 1.0.0 2206 | 2207 | optionator@0.9.4: 2208 | dependencies: 2209 | deep-is: 0.1.4 2210 | fast-levenshtein: 2.0.6 2211 | levn: 0.4.1 2212 | prelude-ls: 1.2.1 2213 | type-check: 0.4.0 2214 | word-wrap: 1.2.5 2215 | 2216 | p-limit@3.1.0: 2217 | dependencies: 2218 | yocto-queue: 0.1.0 2219 | 2220 | p-locate@5.0.0: 2221 | dependencies: 2222 | p-limit: 3.1.0 2223 | 2224 | package-json-from-dist@1.0.1: {} 2225 | 2226 | parent-module@1.0.1: 2227 | dependencies: 2228 | callsites: 3.1.0 2229 | 2230 | path-exists@4.0.0: {} 2231 | 2232 | path-key@3.1.1: {} 2233 | 2234 | path-parse@1.0.7: {} 2235 | 2236 | path-scurry@1.11.1: 2237 | dependencies: 2238 | lru-cache: 10.4.3 2239 | minipass: 7.1.2 2240 | 2241 | picocolors@1.1.0: {} 2242 | 2243 | picomatch@2.3.1: {} 2244 | 2245 | picomatch@4.0.2: {} 2246 | 2247 | possible-typed-array-names@1.0.0: {} 2248 | 2249 | postcss-js@4.0.1(postcss@8.4.47): 2250 | dependencies: 2251 | camelcase-css: 2.0.1 2252 | postcss: 8.4.47 2253 | 2254 | postcss-simple-vars@7.0.1(postcss@8.4.47): 2255 | dependencies: 2256 | postcss: 8.4.47 2257 | 2258 | postcss@8.4.47: 2259 | dependencies: 2260 | nanoid: 3.3.7 2261 | picocolors: 1.1.0 2262 | source-map-js: 1.2.1 2263 | 2264 | prelude-ls@1.2.1: {} 2265 | 2266 | punycode@2.3.1: {} 2267 | 2268 | queue-microtask@1.2.3: {} 2269 | 2270 | regexp.prototype.flags@1.5.2: 2271 | dependencies: 2272 | call-bind: 1.0.7 2273 | define-properties: 1.2.1 2274 | es-errors: 1.3.0 2275 | set-function-name: 2.0.2 2276 | 2277 | require-directory@2.1.1: {} 2278 | 2279 | requireindex@1.2.0: {} 2280 | 2281 | resolve-from@4.0.0: {} 2282 | 2283 | resolve-pkg-maps@1.0.0: {} 2284 | 2285 | resolve@1.22.8: 2286 | dependencies: 2287 | is-core-module: 2.15.1 2288 | path-parse: 1.0.7 2289 | supports-preserve-symlinks-flag: 1.0.0 2290 | 2291 | reusify@1.0.4: {} 2292 | 2293 | run-parallel@1.2.0: 2294 | dependencies: 2295 | queue-microtask: 1.2.3 2296 | 2297 | safe-array-concat@1.1.2: 2298 | dependencies: 2299 | call-bind: 1.0.7 2300 | get-intrinsic: 1.2.4 2301 | has-symbols: 1.0.3 2302 | isarray: 2.0.5 2303 | 2304 | safe-regex-test@1.0.3: 2305 | dependencies: 2306 | call-bind: 1.0.7 2307 | es-errors: 1.3.0 2308 | is-regex: 1.1.4 2309 | 2310 | semver@6.3.1: {} 2311 | 2312 | semver@7.6.3: {} 2313 | 2314 | set-function-length@1.2.2: 2315 | dependencies: 2316 | define-data-property: 1.1.4 2317 | es-errors: 1.3.0 2318 | function-bind: 1.1.2 2319 | get-intrinsic: 1.2.4 2320 | gopd: 1.0.1 2321 | has-property-descriptors: 1.0.2 2322 | 2323 | set-function-name@2.0.2: 2324 | dependencies: 2325 | define-data-property: 1.1.4 2326 | es-errors: 1.3.0 2327 | functions-have-names: 1.2.3 2328 | has-property-descriptors: 1.0.2 2329 | 2330 | shebang-command@2.0.0: 2331 | dependencies: 2332 | shebang-regex: 3.0.0 2333 | 2334 | shebang-regex@3.0.0: {} 2335 | 2336 | side-channel@1.0.6: 2337 | dependencies: 2338 | call-bind: 1.0.7 2339 | es-errors: 1.3.0 2340 | get-intrinsic: 1.2.4 2341 | object-inspect: 1.13.2 2342 | 2343 | signal-exit@4.1.0: {} 2344 | 2345 | source-map-js@1.2.1: {} 2346 | 2347 | string-width@4.2.3: 2348 | dependencies: 2349 | emoji-regex: 8.0.0 2350 | is-fullwidth-code-point: 3.0.0 2351 | strip-ansi: 6.0.1 2352 | 2353 | string-width@5.1.2: 2354 | dependencies: 2355 | eastasianwidth: 0.2.0 2356 | emoji-regex: 9.2.2 2357 | strip-ansi: 7.1.0 2358 | 2359 | string.prototype.trim@1.2.9: 2360 | dependencies: 2361 | call-bind: 1.0.7 2362 | define-properties: 1.2.1 2363 | es-abstract: 1.23.3 2364 | es-object-atoms: 1.0.0 2365 | 2366 | string.prototype.trimend@1.0.8: 2367 | dependencies: 2368 | call-bind: 1.0.7 2369 | define-properties: 1.2.1 2370 | es-object-atoms: 1.0.0 2371 | 2372 | string.prototype.trimstart@1.0.8: 2373 | dependencies: 2374 | call-bind: 1.0.7 2375 | define-properties: 1.2.1 2376 | es-object-atoms: 1.0.0 2377 | 2378 | strip-ansi@6.0.1: 2379 | dependencies: 2380 | ansi-regex: 5.0.1 2381 | 2382 | strip-ansi@7.1.0: 2383 | dependencies: 2384 | ansi-regex: 6.1.0 2385 | 2386 | strip-bom@3.0.0: {} 2387 | 2388 | strip-json-comments@3.1.1: {} 2389 | 2390 | sugarss@4.0.1(postcss@8.4.47): 2391 | dependencies: 2392 | postcss: 8.4.47 2393 | 2394 | supports-color@7.2.0: 2395 | dependencies: 2396 | has-flag: 4.0.0 2397 | 2398 | supports-preserve-symlinks-flag@1.0.0: {} 2399 | 2400 | tapable@2.2.1: {} 2401 | 2402 | test-exclude@7.0.1: 2403 | dependencies: 2404 | '@istanbuljs/schema': 0.1.3 2405 | glob: 10.4.5 2406 | minimatch: 9.0.5 2407 | 2408 | text-table@0.2.0: {} 2409 | 2410 | tinyglobby@0.2.7: 2411 | dependencies: 2412 | fdir: 6.4.0(picomatch@4.0.2) 2413 | picomatch: 4.0.2 2414 | 2415 | to-regex-range@5.0.1: 2416 | dependencies: 2417 | is-number: 7.0.0 2418 | 2419 | ts-api-utils@1.3.0(typescript@5.6.2): 2420 | dependencies: 2421 | typescript: 5.6.2 2422 | 2423 | tsconfig-paths@3.15.0: 2424 | dependencies: 2425 | '@types/json5': 0.0.29 2426 | json5: 1.0.2 2427 | minimist: 1.2.8 2428 | strip-bom: 3.0.0 2429 | 2430 | type-check@0.4.0: 2431 | dependencies: 2432 | prelude-ls: 1.2.1 2433 | 2434 | typed-array-buffer@1.0.2: 2435 | dependencies: 2436 | call-bind: 1.0.7 2437 | es-errors: 1.3.0 2438 | is-typed-array: 1.1.13 2439 | 2440 | typed-array-byte-length@1.0.1: 2441 | dependencies: 2442 | call-bind: 1.0.7 2443 | for-each: 0.3.3 2444 | gopd: 1.0.1 2445 | has-proto: 1.0.3 2446 | is-typed-array: 1.1.13 2447 | 2448 | typed-array-byte-offset@1.0.2: 2449 | dependencies: 2450 | available-typed-arrays: 1.0.7 2451 | call-bind: 1.0.7 2452 | for-each: 0.3.3 2453 | gopd: 1.0.1 2454 | has-proto: 1.0.3 2455 | is-typed-array: 1.1.13 2456 | 2457 | typed-array-length@1.0.6: 2458 | dependencies: 2459 | call-bind: 1.0.7 2460 | for-each: 0.3.3 2461 | gopd: 1.0.1 2462 | has-proto: 1.0.3 2463 | is-typed-array: 1.1.13 2464 | possible-typed-array-names: 1.0.0 2465 | 2466 | typescript-eslint@8.8.0(eslint@9.11.1)(typescript@5.6.2): 2467 | dependencies: 2468 | '@typescript-eslint/eslint-plugin': 8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1)(typescript@5.6.2))(eslint@9.11.1)(typescript@5.6.2) 2469 | '@typescript-eslint/parser': 8.8.0(eslint@9.11.1)(typescript@5.6.2) 2470 | '@typescript-eslint/utils': 8.8.0(eslint@9.11.1)(typescript@5.6.2) 2471 | optionalDependencies: 2472 | typescript: 5.6.2 2473 | transitivePeerDependencies: 2474 | - eslint 2475 | - supports-color 2476 | 2477 | typescript@5.6.2: {} 2478 | 2479 | unbox-primitive@1.0.2: 2480 | dependencies: 2481 | call-bind: 1.0.7 2482 | has-bigints: 1.0.2 2483 | has-symbols: 1.0.3 2484 | which-boxed-primitive: 1.0.2 2485 | 2486 | uri-js@4.4.1: 2487 | dependencies: 2488 | punycode: 2.3.1 2489 | 2490 | v8-to-istanbul@9.3.0: 2491 | dependencies: 2492 | '@jridgewell/trace-mapping': 0.3.25 2493 | '@types/istanbul-lib-coverage': 2.0.6 2494 | convert-source-map: 2.0.0 2495 | 2496 | which-boxed-primitive@1.0.2: 2497 | dependencies: 2498 | is-bigint: 1.0.4 2499 | is-boolean-object: 1.1.2 2500 | is-number-object: 1.0.7 2501 | is-string: 1.0.7 2502 | is-symbol: 1.0.4 2503 | 2504 | which-typed-array@1.1.15: 2505 | dependencies: 2506 | available-typed-arrays: 1.0.7 2507 | call-bind: 1.0.7 2508 | for-each: 0.3.3 2509 | gopd: 1.0.1 2510 | has-tostringtag: 1.0.2 2511 | 2512 | which@2.0.2: 2513 | dependencies: 2514 | isexe: 2.0.0 2515 | 2516 | word-wrap@1.2.5: {} 2517 | 2518 | wrap-ansi@7.0.0: 2519 | dependencies: 2520 | ansi-styles: 4.3.0 2521 | string-width: 4.2.3 2522 | strip-ansi: 6.0.1 2523 | 2524 | wrap-ansi@8.1.0: 2525 | dependencies: 2526 | ansi-styles: 6.2.1 2527 | string-width: 5.1.2 2528 | strip-ansi: 7.1.0 2529 | 2530 | y18n@5.0.8: {} 2531 | 2532 | yargs-parser@21.1.1: {} 2533 | 2534 | yargs@17.7.2: 2535 | dependencies: 2536 | cliui: 8.0.1 2537 | escalade: 3.2.0 2538 | get-caller-file: 2.0.5 2539 | require-directory: 2.1.1 2540 | string-width: 4.2.3 2541 | y18n: 5.0.8 2542 | yargs-parser: 21.1.1 2543 | 2544 | yocto-queue@0.1.0: {} 2545 | -------------------------------------------------------------------------------- /test/deps/f.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./g') 2 | -------------------------------------------------------------------------------- /test/deps/g.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | g: '5' 3 | } 4 | -------------------------------------------------------------------------------- /test/index.test.js: -------------------------------------------------------------------------------- 1 | let { deepStrictEqual, equal } = require('node:assert') 2 | let { join } = require('node:path') 3 | let { test } = require('node:test') 4 | let postcss = require('postcss') 5 | 6 | let mixins = require('../') 7 | 8 | async function run(input, output, opts) { 9 | let result = await postcss([mixins(opts)]).process(input, { from: undefined }) 10 | equal(result.css, output) 11 | equal(result.warnings().length, 0) 12 | return result 13 | } 14 | 15 | async function catchError(fn) { 16 | let error 17 | try { 18 | await fn() 19 | } catch (e) { 20 | error = e 21 | } 22 | return error 23 | } 24 | 25 | test('throws error on unknown mixin', async () => { 26 | let error = await catchError(() => run('@mixin A')) 27 | equal(error.message, 'postcss-mixins: :1:1: Undefined mixin A') 28 | }) 29 | 30 | test('throws error on brackets in mixin', async () => { 31 | let error = await catchError(() => run('@define-mixin a $p {}; @mixin a($p)')) 32 | equal( 33 | error.message, 34 | 'postcss-mixins: :1:24: Remove brackets from mixin. ' + 35 | 'Like: @mixin name(1px) → @mixin name 1px' 36 | ) 37 | }) 38 | 39 | test('does not throw error on brackets in at-rules inside function mixins', async () => { 40 | await run( 41 | '@mixin a { @supports (max(0px)) { color: black; } }', 42 | '.a { @supports (max(0px)) { color: black; } }', 43 | { 44 | mixins: { 45 | a() { 46 | return { '.a': { '@mixin-content': {} } } 47 | } 48 | } 49 | } 50 | ) 51 | }) 52 | 53 | test('cans remove unknown mixin on request', async () => { 54 | await run('@mixin A; a{}', 'a{}', { silent: true }) 55 | }) 56 | 57 | test('supports functions mixins', async () => { 58 | await run('a { @mixin color black; }', 'a { color: black; }', { 59 | mixins: { 60 | color(rule, color) { 61 | rule.replaceWith({ prop: 'color', value: color }) 62 | } 63 | } 64 | }) 65 | }) 66 | 67 | test('removes mixin at-rule', async () => { 68 | await run('a { @mixin none; }', 'a { }', { 69 | mixins: { 70 | none() {} 71 | } 72 | }) 73 | }) 74 | 75 | test('converts object from function to nodes', async () => { 76 | await run('a { @mixin color black; }', 'a { color: black; }', { 77 | mixins: { 78 | color(rule, color) { 79 | return { color } 80 | } 81 | } 82 | }) 83 | }) 84 | 85 | test('passes undefined on missed parameters', async () => { 86 | await run('a { @mixin test; @mixin test ; }', 'a { }', { 87 | mixins: { 88 | test(rule, param1) { 89 | equal(typeof param1, 'undefined') 90 | return {} 91 | } 92 | } 93 | }) 94 | }) 95 | 96 | test('supports object mixins', async () => { 97 | await run( 98 | '@mixin obj;', 99 | '@media screen {\n b {\n one: 1\n }\n}', 100 | { 101 | mixins: { 102 | obj: { 103 | '@media screen': { 104 | b: { 105 | one: '1' 106 | } 107 | } 108 | } 109 | } 110 | } 111 | ) 112 | }) 113 | 114 | test('supports nested function mixins', async () => { 115 | await run( 116 | 'a { color: black; @mixin parent { @mixin child; } }', 117 | 'a { color: black; .parent { color: white } }', 118 | { 119 | mixins: { 120 | child() { 121 | return { color: 'white' } 122 | }, 123 | parent(mixin) { 124 | let rule = postcss.rule({ selector: '.parent' }) 125 | if (mixin.nodes) { 126 | rule.append(mixin.nodes) 127 | } 128 | mixin.replaceWith(rule) 129 | } 130 | } 131 | } 132 | ) 133 | }) 134 | 135 | test('throws on unknown mixin type', async () => { 136 | let error = await catchError(() => 137 | run('@mixin a', '', { 138 | mixins: { 139 | a: 1 140 | } 141 | }) 142 | ) 143 | equal(error.message, 'Wrong a mixin type number') 144 | }) 145 | 146 | test('supports CSS mixins', async () => { 147 | await run( 148 | '@define-mixin black { color: black; } a { @mixin black; }', 149 | 'a { color: black; }' 150 | ) 151 | }) 152 | 153 | test('uses variable', async () => { 154 | await run( 155 | '@define-mixin color $color { color: $color $other; } ' + 156 | 'a { @mixin color black; }', 157 | 'a { color: black $other; }' 158 | ) 159 | }) 160 | 161 | test('supports default value', async () => { 162 | await run( 163 | '@define-mixin c $color: black { color: $color; } a { @mixin c; }', 164 | 'a { color: black; }' 165 | ) 166 | }) 167 | 168 | test('supports mixins with content', async () => { 169 | await run( 170 | '@define-mixin m { @media { @mixin-content; } } @mixin m { a {} }', 171 | '@media { a {} }' 172 | ) 173 | }) 174 | 175 | test('supports mixins with declarations content', async () => { 176 | await run( 177 | '@define-mixin m { a: 1; @mixin-content; } .m { @mixin m { b: 2 } }', 178 | '.m { a: 1; b: 2 }' 179 | ) 180 | }) 181 | 182 | test('supports mixins with empty content', async () => { 183 | await run( 184 | '@define-mixin m { a: 1; @mixin-content; } .m { @mixin m; }', 185 | '.m { a: 1; }' 186 | ) 187 | }) 188 | 189 | test('supports mixins with multiple content', async () => { 190 | await run( 191 | '@define-mixin m { @mixin-content; @mixin-content; } ' + 192 | '.m { @mixin m { a: 1 } }', 193 | '.m { a: 1; a: 1 }' 194 | ) 195 | }) 196 | 197 | test('supports object mixins with content', async () => { 198 | await run('@mixin obj { b {} }', 'a { b {}\n}', { 199 | mixins: { 200 | obj: { 201 | a: { 202 | '@mixin-content': {} 203 | } 204 | } 205 | } 206 | }) 207 | }) 208 | 209 | test('uses variables', async () => { 210 | await run( 211 | '@define-mixin m $a, $b: b, $c: c { v: $a $b $c; } @mixin m 1, 2;', 212 | 'v: 1 2 c;' 213 | ) 214 | }) 215 | 216 | test('loads mixins from dir', async () => { 217 | let result = await run( 218 | 'a { @mixin a 1; @mixin b; @mixin c; @mixin d; @mixin e; }', 219 | 'a { a: 1; b: 2; c: 3; d: 4; e: 5; }', 220 | { 221 | mixinsDir: join(__dirname, 'mixins') 222 | } 223 | ) 224 | deepStrictEqual( 225 | result.messages.sort((a, b) => a.file && a.file.localeCompare(b.file)), 226 | [ 227 | { 228 | file: join(__dirname, 'mixins/a.js'), 229 | parent: '', 230 | type: 'dependency' 231 | }, 232 | { 233 | file: join(__dirname, 'mixins/b.json'), 234 | parent: '', 235 | type: 'dependency' 236 | }, 237 | { 238 | file: join(__dirname, 'mixins/c.CSS'), 239 | parent: '', 240 | type: 'dependency' 241 | }, 242 | { 243 | file: join(__dirname, 'mixins/d.sss'), 244 | parent: '', 245 | type: 'dependency' 246 | }, 247 | { 248 | file: join(__dirname, 'mixins/e.pcss'), 249 | parent: '', 250 | type: 'dependency' 251 | }, 252 | { 253 | dir: join(__dirname, 'mixins'), 254 | glob: '*.{js,cjs,mjs,json,css,sss,pcss}', 255 | parent: '', 256 | type: 'dir-dependency' 257 | } 258 | ] 259 | ) 260 | }) 261 | 262 | test('loads mixins from dir with parent options', async () => { 263 | let parent = join(__dirname, 'a.js') 264 | let result = await run( 265 | 'a { @mixin a 1; @mixin b; @mixin c; @mixin d; @mixin e; }', 266 | 'a { a: 1; b: 2; c: 3; d: 4; e: 5; }', 267 | { 268 | mixinsDir: join(__dirname, 'mixins'), 269 | parent: join(__dirname, 'a.js') 270 | } 271 | ) 272 | deepStrictEqual( 273 | result.messages.sort((a, b) => a.file && a.file.localeCompare(b.file)), 274 | [ 275 | { 276 | file: join(__dirname, 'mixins/a.js'), 277 | parent, 278 | type: 'dependency' 279 | }, 280 | { 281 | file: join(__dirname, 'mixins/b.json'), 282 | parent, 283 | type: 'dependency' 284 | }, 285 | { 286 | file: join(__dirname, 'mixins/c.CSS'), 287 | parent, 288 | type: 'dependency' 289 | }, 290 | { 291 | file: join(__dirname, 'mixins/d.sss'), 292 | parent, 293 | type: 'dependency' 294 | }, 295 | { 296 | file: join(__dirname, 'mixins/e.pcss'), 297 | parent, 298 | type: 'dependency' 299 | }, 300 | { 301 | dir: join(__dirname, 'mixins'), 302 | glob: '*.{js,cjs,mjs,json,css,sss,pcss}', 303 | parent: '', 304 | type: 'dir-dependency' 305 | } 306 | ] 307 | ) 308 | }) 309 | 310 | test('loads mixins from dirs', async () => { 311 | await run('a { @mixin a 1; @mixin c; }', 'a { a: 1; c: 3; }', { 312 | mixinsDir: [join(__dirname, 'mixins'), join(__dirname, 'other')] 313 | }) 314 | }) 315 | 316 | test('loads mixins from relative dir', async () => { 317 | await run( 318 | 'a { @mixin a 1; @mixin b; @mixin c; @mixin d; @mixin e; }', 319 | 'a { a: 1; b: 2; c: 3; d: 4; e: 5; }', 320 | { 321 | mixinsDir: 'test/mixins/' 322 | } 323 | ) 324 | }) 325 | 326 | test('loads mixins from relative dirs', async () => { 327 | await run('a { @mixin a 1; @mixin c; }', 'a { a: 1; c: 3; }', { 328 | mixinsDir: ['test/mixins', 'test/other'] 329 | }) 330 | }) 331 | 332 | test('loads mixins from file glob', async () => { 333 | await run('a { @mixin a 1; @mixin b; }', 'a { a: 1; b: 2; }', { 334 | mixinsFiles: join(__dirname, 'mixins', '*.{js,json}') 335 | }) 336 | }) 337 | 338 | test('loads mixins from file globs', async () => { 339 | await run('a { @mixin a 1; @mixin c; }', 'a { a: 1; c: 3; }', { 340 | mixinsFiles: [ 341 | join(__dirname, 'mixins', '*.!(json|css)'), 342 | join(__dirname, 'other', '*') 343 | ] 344 | }) 345 | }) 346 | 347 | test('loads mixins with dependencies', async () => { 348 | let result = await run('a { @mixin f; }', 'a { g: 5; }', { 349 | mixinsFiles: join(__dirname, 'deps', 'f.js') 350 | }) 351 | deepStrictEqual( 352 | result.messages.sort((a, b) => a.file && a.file.localeCompare(b.file)), 353 | [ 354 | { 355 | file: join(__dirname, 'deps/f.js'), 356 | parent: '', 357 | type: 'dependency' 358 | }, 359 | { 360 | file: join(__dirname, 'deps/g.js'), 361 | parent: join(__dirname, 'deps/f.js'), 362 | type: 'dependency' 363 | } 364 | ] 365 | ) 366 | }) 367 | 368 | test('coverts mixins values', async () => { 369 | let processor = postcss( 370 | mixins({ 371 | mixins: { 372 | empty() { 373 | return { width: 0 } 374 | } 375 | } 376 | }) 377 | ) 378 | let result = await processor.process('a{ @mixin empty; }', { from: 'a.css' }) 379 | equal(typeof result.root.first.first.value, 'string') 380 | }) 381 | 382 | test('supports nested mixins', async () => { 383 | await run( 384 | '@define-mixin a $a { a: $a; } ' + 385 | '@define-mixin b $b { @mixin a $b; } ' + 386 | '@mixin b 1;', 387 | 'a: 1;' 388 | ) 389 | }) 390 | 391 | test('supports nested mixins in mixin-content', async () => { 392 | await run( 393 | '@define-mixin a { a: 1 } ' + 394 | '@define-mixin b { b { @mixin-content } } ' + 395 | '@mixin b { @mixin a }', 396 | 'b { a: 1}' 397 | ) 398 | }) 399 | 400 | test('supports nested mixins on object mixins', async () => { 401 | await run('@define-mixin a { a: a; } @mixin b;', 'a: a;', { 402 | mixins: { 403 | b: { 404 | '@mixin a': {} 405 | } 406 | } 407 | }) 408 | }) 409 | 410 | test('supports default arguments in nested mixins', async () => { 411 | await run( 412 | '@define-mixin a $a: 1 { a: $a } ' + 413 | '@define-mixin b $b { @mixin a $b } ' + 414 | '@mixin b;', 415 | 'a: 1;' 416 | ) 417 | }) 418 | 419 | test('works in sync mode on no option', () => { 420 | let input = '@define-mixin a { a: 1 }; @mixin a' 421 | let out = 'a: 1' 422 | equal(postcss(mixins()).process(input, { from: 'a.css' }).css, out) 423 | }) 424 | 425 | test('has @add-mixin alias', async () => { 426 | await run('@define-mixin a { a: 1 } @add-mixin a', 'a: 1') 427 | }) 428 | 429 | test('treats single-arg content as a single argument', async () => { 430 | await run( 431 | '@define-mixin a $x, $y { a: $x; b: $y; } ' + 432 | '@mixin a single-arg(1, 2), 3;', 433 | 'a: 1, 2;\nb: 3;' 434 | ) 435 | }) 436 | 437 | test('throws error when single-arg does not have start parenthesis', async () => { 438 | let error = await catchError(() => 439 | run('@define-mixin a $p {}; @mixin a single-arg 1, 2);') 440 | ) 441 | 442 | equal( 443 | error.message, 444 | 'postcss-mixins: :1:24: ' + 445 | 'Content of single-arg must be wrapped in brackets: single-arg 1' 446 | ) 447 | }) 448 | 449 | test('throws error when single-arg does not have end parenthesis', async () => { 450 | let error = await catchError(() => 451 | run('@define-mixin a $p {}; @mixin a single-arg(1, 2;') 452 | ) 453 | 454 | equal( 455 | error.message, 456 | 'postcss-mixins: :1:24: ' + 457 | 'Content of single-arg must be wrapped in brackets: single-arg(1, 2;' 458 | ) 459 | }) 460 | 461 | test('ignores whitespaces outside of single-arg parentheses', async () => { 462 | await run( 463 | '@define-mixin a $x, $y { a: $x; b: $y; } ' + 464 | '@mixin a single-arg (1, 2) , 3;', 465 | 'a: 1, 2;\nb: 3;' 466 | ) 467 | }) 468 | 469 | test('can replace multiple single-arg contents', async () => { 470 | await run( 471 | '@define-mixin a $x, $y { a: $x; b: $y; } ' + 472 | '@mixin a single-arg(1, 2), single-arg(3, 4);', 473 | 'a: 1, 2;\nb: 3, 4;' 474 | ) 475 | }) 476 | 477 | test('can replace multiple single-arg contents inside single declaration', async () => { 478 | await run( 479 | '@define-mixin a $x, $y { a: $x, $y; } ' + 480 | '@mixin a single-arg(1, 2), single-arg(3, 4);', 481 | 'a: 1, 2, 3, 4;' 482 | ) 483 | }) 484 | 485 | test('can replace single-arg contents with nested parentheses', async () => { 486 | await run( 487 | '@define-mixin a $x { a: $x } ' + '@mixin a single-arg(1, (2), 3);', 488 | 'a: 1, (2), 3;' 489 | ) 490 | }) 491 | 492 | test('handles single-arg inside rules', async () => { 493 | await run( 494 | '@define-mixin a $x, $y { .s { a: $x; b: $y; } } ' + 495 | '@mixin a single-arg(1, 2), 3;', 496 | '.s { a: 1, 2; b: 3; }' 497 | ) 498 | }) 499 | 500 | test('passes single-arg to the nested mixin', async () => { 501 | await run( 502 | '@define-mixin a $p { a: $p; } ' + 503 | '@define-mixin b $x, $y { @mixin a $x; b: $y; } ' + 504 | '@mixin b single-arg(1, 2), 3;', 505 | 'a: 1, 2;\nb: 3;' 506 | ) 507 | }) 508 | 509 | test('passes single-arg to the nested function mixin', async () => { 510 | await run('@mixin b single-arg(1, 2), 3;', 'a: 1, 2;\nb: 3;', { 511 | mixins: { 512 | a(rule, p) { 513 | return { a: p } 514 | }, 515 | b(rule, x, y) { 516 | return { ['@mixin a ' + x]: {}, b: y } 517 | } 518 | } 519 | }) 520 | }) 521 | -------------------------------------------------------------------------------- /test/mixins/a.js: -------------------------------------------------------------------------------- 1 | module.exports = (mixin, value) => ({ a: value }) 2 | -------------------------------------------------------------------------------- /test/mixins/b.json: -------------------------------------------------------------------------------- 1 | { 2 | "b": "2" 3 | } 4 | -------------------------------------------------------------------------------- /test/mixins/c.CSS: -------------------------------------------------------------------------------- 1 | @define-mixin c { 2 | c: 3; 3 | } 4 | -------------------------------------------------------------------------------- /test/mixins/d.sss: -------------------------------------------------------------------------------- 1 | @define-mixin d 2 | d: 4 3 | -------------------------------------------------------------------------------- /test/mixins/e.pcss: -------------------------------------------------------------------------------- 1 | @define-mixin e { 2 | e: 5; 3 | } 4 | -------------------------------------------------------------------------------- /test/other/c.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | c: '3' 3 | } 4 | --------------------------------------------------------------------------------