├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .github ├── FUNDING.yml └── workflows │ └── test.yml ├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── example.png ├── index.js ├── lib ├── formatter.js ├── reporter.js └── util.js ├── package.json ├── pnpm-lock.yaml └── test ├── fixtures ├── forVisual.css ├── less-bar.less └── less-foo.less ├── formatter.js ├── index.js ├── lessIntegration.js ├── reporter.js └── visual.js /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | charset = utf-8 11 | 12 | [*.js] 13 | quote_type = single 14 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "parserOptions": { 3 | "ecmaVersion": 6 4 | }, 5 | "env": { 6 | "node": true, 7 | "es6": true 8 | }, 9 | "rules": { 10 | "comma-dangle": [2, "always-multiline"], 11 | "curly": 0, 12 | "radix": 2, 13 | "wrap-iife": 2, 14 | "brace-style": 0, 15 | "comma-style": 2, 16 | "consistent-this": [2, "_that"], 17 | "no-lonely-if": 2, 18 | "no-nested-ternary": 2, 19 | "no-process-exit": 0, 20 | "no-spaced-func": 2, 21 | "no-use-before-define": [2, "nofunc"], 22 | "quotes": [2, "single"], 23 | "keyword-spacing": [2, { "before": true, "after": true }], 24 | "space-before-blocks": [2, "always"], 25 | "space-in-parens": [2, "never"], 26 | "space-unary-ops": 2, 27 | "strict": 0 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | open_collective: postcss 2 | github: ai 3 | -------------------------------------------------------------------------------- /.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 20 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@v2 18 | with: 19 | version: 8 20 | - name: Install Node.js 21 | uses: actions/setup-node@v3 22 | with: 23 | node-version: 20 24 | cache: pnpm 25 | - name: Install dependencies 26 | run: pnpm install --frozen-lockfile --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 | - 18 35 | - 16 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@v2 42 | with: 43 | version: 8 44 | - name: Install Node.js ${{ matrix.node-version }} 45 | uses: actions/setup-node@v3 46 | with: 47 | node-version: ${{ matrix.node-version }} 48 | cache: pnpm 49 | - name: Install dependencies 50 | run: pnpm install --frozen-lockfile --ignore-scripts 51 | - name: Run unit tests 52 | run: pnpm unit 53 | old: 54 | runs-on: ubuntu-latest 55 | strategy: 56 | matrix: 57 | node-version: 58 | - 14 59 | - 12 60 | name: Node.js ${{ matrix.node-version }} Quick 61 | steps: 62 | - name: Checkout the repository 63 | uses: actions/checkout@v4 64 | - name: Install pnpm 65 | uses: pnpm/action-setup@v1 66 | with: 67 | version: 3 68 | env: 69 | ACTIONS_ALLOW_UNSECURE_COMMANDS: true 70 | - name: Install Node.js ${{ matrix.node-version }} 71 | uses: actions/setup-node@v3 72 | with: 73 | node-version: ${{ matrix.node-version }} 74 | - name: Install dependencies 75 | run: pnpm install --no-frozen-lockfile --ignore-scripts 76 | - name: Run unit tests 77 | run: pnpm unit 78 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log 3 | tmp 4 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## 7.1 4 | 5 | - Added better `error` message support (by Stéphane Goetz). 6 | 7 | ## 7.0.5 8 | 9 | - Reduced dependencies (by @onigoetz). 10 | 11 | ## 7.0.4 12 | 13 | - Replaced `nanocolors` with `picocolors`. 14 | - Reduced package size. 15 | 16 | ## 7.0.3 17 | 18 | - Replaced `colorette` with `nanocolors`. 19 | 20 | ## 7.0.2 21 | 22 | - Reduced dependencies (by @ludofischer). 23 | 24 | ## 7.0.1 25 | 26 | - Moved to PostCSS 8.1. 27 | - Added funding links. 28 | 29 | ## 7.0.0 30 | 31 | - Moved to PostCSS 8. 32 | - Moved `postcss` to `peerDependencies`. 33 | 34 | ## 6.0.1 35 | 36 | - Fix support for messages without text (by @nodaguti). 37 | 38 | ## 6.0.0 39 | 40 | - Upgrade to PostCSS 7. 41 | - Drop support for Node 4. 42 | 43 | ## 5.0.0 44 | 45 | - Move PostCSS from `peerDependencies` to `dependencies`. 46 | - Drop support for Node 0.12. 47 | 48 | ## 4.0.0 49 | 50 | - Upgrade to PostCSS v6. (If you still use PostCSS v5, stick with v3 until you can upgrade your PostCSS.) 51 | - Switched PostCSS to a peer dependency. 52 | 53 | ## 3.0.0 54 | 55 | - Replace `clearMessages` option with `clearReportedMessages` and `clearAllMessages`. 56 | 57 | ## 2.0.0 58 | 59 | - Only log warning messages (`type: "warning"`) by default. 60 | 61 | ## 1.4.1 62 | - Add `filter` option. 63 | - Add blacklist functionality to `plugins` option with `!` prefix`. 64 | 65 | ## 1.3.3 66 | - Fix regression that caused positions from sources without incoming sourcemaps not to be logged. 67 | 68 | ## 1.3.2 69 | - Find more accurate positions of preprocessed files with sourcemaps. 70 | 71 | ## 1.3.1 72 | - Fix Windows path bug. 73 | 74 | ## 1.3.0 75 | - Check individual messages for distinct sources, then group messages by those sources, 76 | instead of always using the PostCSS Result's source. 77 | - Output empty string from `formatter` if there are no messages, instead of `undefined`. 78 | 79 | ## 1.2.1 80 | - Handle variable and absent input sources. 81 | 82 | ## 1.2.0 83 | - Add `noIcon` and `noPlugin` options to both reporter and formatter. 84 | 85 | ## 1.1.0 86 | - Use PostCSS 5's line/column properties on warnings, instead of relying on the source node. 87 | 88 | ## 1.0.0 89 | - Upgrade to PostCSS 5. 90 | 91 | ## 0.4.0 92 | - Add `positionless` option (to both the reporter and the formatter), with default value `"first"`. 93 | - Cleaner npm install (files specified in `package.json`). 94 | 95 | ## 0.3.1 96 | - Remove leftover debugging log statement. 97 | 98 | ## 0.3.0 99 | - Add `sortByPosition` option (to both the reporter and the formatter), with default value `true`. 100 | 101 | ## 0.2.0 102 | - Alter `defaultFormatter` to use warning symbol and not repeat `# postcss-reporter`. 103 | 104 | ## 0.1.0 105 | - First release. 106 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 David Clark 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, 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, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # postcss-reporter 2 | 3 | A PostCSS plugin to `console.log()` the messages (warnings, etc.) registered by other PostCSS plugins. 4 | 5 | --- 6 | 7 | **SEEKING A NEW MAINTAINER!** Interested in contributing to the ecosystem of PostCSS and Stylelint? Please open an issue if you'd like to take over maintenance of this package. 8 | 9 | --- 10 | 11 | ## Purpose 12 | 13 | As of PostCSS 4.1, a single PostCSS process can accumulate messages from all of the plugins it uses. 14 | Most of these messages are [warnings](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#32-use-resultwarn-for-warnings). 15 | Presumably, plugin authors want you to see those messages. 16 | So this plugin exists to read the accumulated messages (or messages from only the plugins you've specified), format them, and print them to the console. 17 | 18 | By default, the messages are formatted for human legibility and sorted according to the line/column positions attached to the messages. But another formatting function can be passed in with an option, and sorting can be turned off with an option. 19 | 20 | *By default, only warnings are logged*. If you would like to see more messages, you can change the `filter` function. 21 | 22 | ## Example Output 23 | 24 | ![Example](example.png?raw=true) 25 | 26 | ## Installation 27 | 28 | ```shell 29 | npm install --save-dev postcss postcss-reporter 30 | ``` 31 | 32 | Version 1.0.0+ is compatible with PostCSS 5+. (Earlier versions are compatible with PostCSS 4.) 33 | 34 | ## Usage 35 | 36 | Add it to your plugin list *after any plugins whose messages you want to log*, and optionally pass it an object of options. 37 | 38 | For example, using [gulp-postcss](https://github.com/postcss/gulp-postcss): 39 | 40 | ```js 41 | gulp.task('css', function() { 42 | return gulp.src('./src/*.css') 43 | .pipe(postcss([ 44 | bemLinter(), 45 | customProperties(), 46 | calc(), 47 | rejectAllColors(), 48 | reporter(myOptions) // <------ ding 49 | ])) 50 | .pipe(gulp.dest('./dist')); 51 | }); 52 | ``` 53 | 54 | ## Options 55 | 56 | **clearReportedMessages** (boolean, default = `false`) 57 | 58 | If true, the plugin will clear the result's messages after it logs them. This prevents other plugins, or the task runner you use, from logging the same information again and causing confusion. 59 | 60 | See also `clearAllMessages`. 61 | 62 | **formatter** (function, default = the default formatter) 63 | 64 | By default, this reporter will format the messages for human legibility in the console. 65 | To use another formatter, pass a function that 66 | 67 | - accepts an object containing a `messages` array and a `source` string 68 | - returns the string to report 69 | 70 | For example, you could write a formatter like this: 71 | 72 | ```js 73 | reporter({ 74 | formatter: function(input) { 75 | return input.source + ' produced ' + input.messages.length + ' messages'; 76 | } 77 | }) 78 | ``` 79 | 80 | **plugins** (array of strings, default = `[]`) 81 | 82 | If `plugins` is empty (as it is by default), the reporter will log messages from every PostCSS plugin. 83 | 84 | There are 2 ways to limit output: 85 | 86 | - **Whitelist:** Provide an array of the plugins whose messages you would like to show. 87 | For example, `{ plugins: ['postcss-bem-linter'] }` will only log messages from the `postcss-bem-linter` plugin. 88 | - **Blacklist:** Prefix all plugins in the array with `!` to specify only those plugins whose messages you would like to hide. 89 | (All other plugins will be shown.) 90 | For example, `{ plugins: ['!postcss-bem-linter'] }` will never log messages from the `postcss-bem-linter` plugin; but will log messages from every other plugin. 91 | 92 | **filter** (function) 93 | 94 | Provide a filter function. It receives the message object and returns a truthy or falsy value, indicating whether that particular message should be reported or not. 95 | 96 | By default, only messages with `type: "warning"` are logged. (These are the messages produced when the plugin author uses PostCSS's `warn()` function.) 97 | 98 | For example, `function(message) { return true }` will return every message, regardless of whether or not the plugin declares it as a warning. 99 | 100 | **clearAllMessages** (boolean, default = `false`) 101 | 102 | If `true`, the plugin won't pass any messages into other plugins, or the task runner you use. 103 | 104 | See also `clearReportedMessages`. 105 | 106 | **throwError** (boolean, default = `false`) 107 | 108 | If `true`, after the plugin logs your messages it will throw an error if it found any warnings. 109 | 110 | **sortByPosition** (boolean, default = `true`) 111 | 112 | If `false`, messages will not be sorted by line/column position. 113 | 114 | **positionless** (`"first"|"last"|"any"`, default = `"first"`) 115 | 116 | By default, messages without line/column positions will be grouped at the beginning of the output. 117 | To put them at the end, instead, use `"last"`. 118 | To not bother sorting these, use `"any"`. 119 | 120 | **noIcon** (boolean, default = `false`) 121 | 122 | If `true`, no exclamatory triangle icons will be printed next to warnings. 123 | 124 | **noPlugin** (boolean, default = `false`) 125 | 126 | If `true`, plugin names will not be printed in brackets after messages. 127 | 128 | ## How to get output without colors 129 | 130 | If you would like no colors in the console output, simply pass `--no-colors` when you invoke whatever command runs this plugin. (This works because of [chalk](https://github.com/sindresorhus/chalk).) 131 | 132 | ## Standalone formatter 133 | 134 | You can also use this module's formatter as a library, with following API: 135 | 136 | ```js 137 | var formatter = require('postcss-reporter/lib/formatter'); 138 | var myFormatter = formatter(myOptions); 139 | // to use defaults, just pass no options: `formatter()` 140 | var warningLog = myFormatter({ 141 | messages: someMessages, 142 | source: someSource 143 | }); 144 | console.log(warningLog); 145 | ``` 146 | 147 | These are the formatter's options: 148 | 149 | - sortByPosition (boolean, default = `true`) 150 | - noIcon (boolean, default = `false`) - Do not print any warning exclamatory triangle icons 151 | - noPlugin (boolean, default = `false`) - Do not print plugin names 152 | -------------------------------------------------------------------------------- /example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/postcss/postcss-reporter/5d4a102347bf6a78365d50cb1675969cb549153f/example.png -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var reporter = require('./lib/reporter'); 2 | 3 | module.exports = reporter; 4 | module.exports.postcss = true; 5 | -------------------------------------------------------------------------------- /lib/formatter.js: -------------------------------------------------------------------------------- 1 | var pico = require('picocolors'); 2 | var path = require('path'); 3 | var firstBy = require('thenby'); 4 | var util = require('./util'); 5 | 6 | function createSortFunction(positionless, sortByPosition) { 7 | var positionValue = 0 8 | 9 | if (positionless === 'any') { positionValue = 1; } 10 | if (positionless === 'first') { positionValue = 2; } 11 | if (positionless === 'last') { positionValue = 0; } 12 | 13 | var sortFunction = firstBy((m) => { 14 | if (!m.line) return 1; 15 | return positionValue; 16 | }) 17 | 18 | if (sortByPosition) { 19 | sortFunction = sortFunction.thenBy('line').thenBy('column'); 20 | } 21 | 22 | return sortFunction; 23 | } 24 | 25 | module.exports = function (opts) { 26 | var options = opts || {}; 27 | var sortByPosition = 28 | typeof options.sortByPosition !== 'undefined' 29 | ? options.sortByPosition 30 | : true; 31 | var positionless = options.positionless || 'first'; 32 | 33 | var sortFunction = createSortFunction(positionless, sortByPosition); 34 | 35 | return function (input) { 36 | var messages = input.messages.filter(function (message) { 37 | return typeof message.text === 'string'; 38 | }); 39 | var source = input.source; 40 | 41 | if (!messages.length) return ''; 42 | 43 | var orderedMessages = messages.sort(sortFunction); 44 | 45 | var output = '\n'; 46 | 47 | if (source) { 48 | output += pico.bold(pico.underline(logFrom(source))) + '\n'; 49 | } 50 | 51 | orderedMessages.forEach(function (w) { 52 | output += messageToString(w) + '\n'; 53 | }); 54 | 55 | return output; 56 | 57 | function messageToString(message) { 58 | var location = util.getLocation(message); 59 | var str = ''; 60 | 61 | if (location.line) { 62 | str += pico.bold(location.line); 63 | } 64 | 65 | if (location.column) { 66 | str += pico.bold(':' + location.column); 67 | } 68 | 69 | if (location.line || location.column) { 70 | str += '\t'; 71 | } 72 | 73 | if (!options.noIcon) { 74 | if (message.type === 'warning') { 75 | str += pico.yellow(util.warningSymbol + ' '); 76 | } else if (message.type === 'error') { 77 | str += pico.red(util.errorSymbol + ' '); 78 | } 79 | } 80 | 81 | str += message.text; 82 | if (!options.noPlugin) { 83 | str += pico.yellow(' [' + message.plugin + ']'); 84 | } 85 | return str; 86 | } 87 | 88 | function logFrom(fromValue) { 89 | if (fromValue.charAt(0) === '<') return fromValue; 90 | return path.relative(process.cwd(), fromValue).split(path.sep).join('/'); 91 | } 92 | }; 93 | }; 94 | -------------------------------------------------------------------------------- /lib/reporter.js: -------------------------------------------------------------------------------- 1 | var defaultFormatter = require('./formatter'); 2 | var pico = require('picocolors'); 3 | var util = require('./util'); 4 | 5 | module.exports = function (opts = {}) { 6 | var formatter = 7 | opts.formatter || 8 | defaultFormatter({ 9 | noIcon: opts.noIcon, 10 | noPlugin: opts.noPlugin, 11 | }); 12 | 13 | var pluginFilter; 14 | if (!opts.plugins) { 15 | // Every plugin 16 | pluginFilter = function () { 17 | return true; 18 | }; 19 | } else if ( 20 | opts.plugins.every(function (plugin) { 21 | return plugin[0] === '!'; 22 | }) 23 | ) { 24 | // Deny list 25 | pluginFilter = function (message) { 26 | return opts.plugins.indexOf('!' + message.plugin) === -1; 27 | }; 28 | } else { 29 | // Allow list 30 | pluginFilter = function (message) { 31 | return opts.plugins.indexOf(message.plugin) !== -1; 32 | }; 33 | } 34 | 35 | var messageFilter = opts.filter || ((message) => message.type === 'warning' || message.type === 'error'); 36 | 37 | return { 38 | postcssPlugin: 'postcss-reporter', 39 | OnceExit(css, { result }) { 40 | var messagesToLog = result.messages 41 | .filter(pluginFilter) 42 | .filter(messageFilter); 43 | 44 | var resultSource = !result.root.source 45 | ? '' 46 | : result.root.source.input.file || result.root.source.input.id; 47 | 48 | let errorCount = 0; 49 | let warningCount = 0; 50 | 51 | var sourceGroupedMessages = messagesToLog.reduce((grouped, message) => { 52 | const key = util.getLocation(message).file || resultSource; 53 | 54 | if (!grouped.hasOwnProperty(key)) { 55 | grouped[key] = []; 56 | } 57 | 58 | if (message.type === 'error') { 59 | errorCount++; 60 | } else if (message.type === 'warning') { 61 | warningCount++; 62 | } 63 | 64 | grouped[key].push(message); 65 | 66 | return grouped; 67 | }, {}); 68 | 69 | var report = ''; 70 | for (const source in sourceGroupedMessages) { 71 | if (sourceGroupedMessages.hasOwnProperty(source)) { 72 | report += formatter({ 73 | messages: sourceGroupedMessages[source], 74 | source: source, 75 | }); 76 | } 77 | } 78 | 79 | if (opts.clearReportedMessages) { 80 | result.messages = result.messages.filter(message => !messagesToLog.includes(message)); 81 | } 82 | 83 | if (opts.clearAllMessages) { 84 | var messagesToClear = result.messages.filter(pluginFilter); 85 | result.messages = result.messages.filter(message => !messagesToClear.includes(message)); 86 | } 87 | 88 | if (!report) return; 89 | 90 | const summaryColor = errorCount > 0 ? 'red' : 'yellow'; 91 | const summarySymbol = errorCount > 0 ? util.errorSymbol : util.warningSymbol; 92 | const summary = `${summarySymbol} ${messagesToLog.length} ${util.plur('problem', messagesToLog.length)} (${errorCount} ${util.plur('error')}, ${warningCount} ${util.plur('warning')})` 93 | 94 | report += `\n ${pico[summaryColor](pico.bold(summary))}\n`; 95 | 96 | console.log(report); 97 | 98 | if (shouldThrowError()) { 99 | throw new Error( 100 | pico.red( 101 | pico.bold('\n** postcss-reporter: warnings or errors were found **') 102 | ) 103 | ); 104 | } 105 | 106 | function shouldThrowError() { 107 | return opts.throwError || errorCount > 0; 108 | } 109 | }, 110 | }; 111 | }; 112 | -------------------------------------------------------------------------------- /lib/util.js: -------------------------------------------------------------------------------- 1 | var supportsLargeCharset = 2 | process.platform !== 'win32' || 3 | process.env.CI || 4 | process.env.TERM === 'xterm-256color'; 5 | 6 | exports.getLocation = function (message) { 7 | var messageNode = message.node; 8 | 9 | var location = { 10 | line: message.line, 11 | column: message.column, 12 | }; 13 | 14 | var messageInput = messageNode && messageNode.source && messageNode.source.input; 15 | 16 | if (!messageInput) return location; 17 | 18 | var originLocation = 19 | messageInput.origin && messageInput.origin(message.line, message.column); 20 | if (originLocation) return originLocation; 21 | 22 | location.file = messageInput.file || messageInput.id; 23 | return location; 24 | }; 25 | 26 | exports.plur = function plur(word, count) { 27 | return (count === 1 ? word : `${word}s`); 28 | } 29 | 30 | exports.warningSymbol = supportsLargeCharset ? '⚠' : '!!'; 31 | exports.errorSymbol = supportsLargeCharset ? '✖' : 'xx'; 32 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "postcss-reporter", 3 | "version": "7.1.0", 4 | "description": "Log PostCSS messages in the console", 5 | "main": "index.js", 6 | "scripts": { 7 | "lint": "eslint .", 8 | "unit": "tape test", 9 | "test": "pnpm lint && pnpm unit && pnpm visual", 10 | "visual": "node test/visual.js" 11 | }, 12 | "files": [ 13 | "index.js", 14 | "lib" 15 | ], 16 | "engines": { 17 | "node": ">=10" 18 | }, 19 | "repository": "postcss/postcss-reporter", 20 | "author": { 21 | "name": "David Clark", 22 | "email": "david.dave.clark@gmail.com", 23 | "url": "https://davidtheclark.com" 24 | }, 25 | "license": "MIT", 26 | "funding": [ 27 | { 28 | "type": "opencollective", 29 | "url": "https://opencollective.com/postcss/" 30 | }, 31 | { 32 | "type": "github", 33 | "url": "https://github.com/sponsors/ai" 34 | } 35 | ], 36 | "peerDependencies": { 37 | "postcss": "^8.1.0" 38 | }, 39 | "devDependencies": { 40 | "clean-publish": "^4.2.0", 41 | "eslint": "8.56.0", 42 | "less": "4.2.0", 43 | "postcss": "^8.4.33", 44 | "source-map": "0.7.4", 45 | "strip-color": "^0.1.0", 46 | "stylelint": "16.1.0", 47 | "tape": "^5.7.3" 48 | }, 49 | "dependencies": { 50 | "picocolors": "^1.0.0", 51 | "thenby": "^1.3.4" 52 | }, 53 | "clean-publish": { 54 | "cleanDocs": true 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | picocolors: 9 | specifier: ^1.0.0 10 | version: 1.0.0 11 | thenby: 12 | specifier: ^1.3.4 13 | version: 1.3.4 14 | 15 | devDependencies: 16 | clean-publish: 17 | specifier: ^4.2.0 18 | version: 4.2.0 19 | eslint: 20 | specifier: 8.56.0 21 | version: 8.56.0 22 | less: 23 | specifier: 4.2.0 24 | version: 4.2.0 25 | postcss: 26 | specifier: ^8.4.33 27 | version: 8.4.33 28 | source-map: 29 | specifier: 0.7.4 30 | version: 0.7.4 31 | strip-color: 32 | specifier: ^0.1.0 33 | version: 0.1.0 34 | stylelint: 35 | specifier: 16.1.0 36 | version: 16.1.0 37 | tape: 38 | specifier: ^5.7.3 39 | version: 5.7.3 40 | 41 | packages: 42 | 43 | /@aashutoshrathi/word-wrap@1.2.6: 44 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 45 | engines: {node: '>=0.10.0'} 46 | dev: true 47 | 48 | /@babel/code-frame@7.23.5: 49 | resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} 50 | engines: {node: '>=6.9.0'} 51 | dependencies: 52 | '@babel/highlight': 7.23.4 53 | chalk: 2.4.2 54 | dev: true 55 | 56 | /@babel/helper-validator-identifier@7.22.20: 57 | resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} 58 | engines: {node: '>=6.9.0'} 59 | dev: true 60 | 61 | /@babel/highlight@7.23.4: 62 | resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} 63 | engines: {node: '>=6.9.0'} 64 | dependencies: 65 | '@babel/helper-validator-identifier': 7.22.20 66 | chalk: 2.4.2 67 | js-tokens: 4.0.0 68 | dev: true 69 | 70 | /@csstools/css-parser-algorithms@2.5.0(@csstools/css-tokenizer@2.2.3): 71 | resolution: {integrity: sha512-abypo6m9re3clXA00eu5syw+oaPHbJTPapu9C4pzNsJ4hdZDzushT50Zhu+iIYXgEe1CxnRMn7ngsbV+MLrlpQ==} 72 | engines: {node: ^14 || ^16 || >=18} 73 | peerDependencies: 74 | '@csstools/css-tokenizer': ^2.2.3 75 | dependencies: 76 | '@csstools/css-tokenizer': 2.2.3 77 | dev: true 78 | 79 | /@csstools/css-tokenizer@2.2.3: 80 | resolution: {integrity: sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==} 81 | engines: {node: ^14 || ^16 || >=18} 82 | dev: true 83 | 84 | /@csstools/media-query-list-parser@2.1.7(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3): 85 | resolution: {integrity: sha512-lHPKJDkPUECsyAvD60joYfDmp8UERYxHGkFfyLJFTVK/ERJe0sVlIFLXU5XFxdjNDTerp5L4KeaKG+Z5S94qxQ==} 86 | engines: {node: ^14 || ^16 || >=18} 87 | peerDependencies: 88 | '@csstools/css-parser-algorithms': ^2.5.0 89 | '@csstools/css-tokenizer': ^2.2.3 90 | dependencies: 91 | '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) 92 | '@csstools/css-tokenizer': 2.2.3 93 | dev: true 94 | 95 | /@csstools/selector-specificity@3.0.1(postcss-selector-parser@6.0.15): 96 | resolution: {integrity: sha512-NPljRHkq4a14YzZ3YD406uaxh7s0g6eAq3L9aLOWywoqe8PkYamAvtsh7KNX6c++ihDrJ0RiU+/z7rGnhlZ5ww==} 97 | engines: {node: ^14 || ^16 || >=18} 98 | peerDependencies: 99 | postcss-selector-parser: ^6.0.13 100 | dependencies: 101 | postcss-selector-parser: 6.0.15 102 | dev: true 103 | 104 | /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): 105 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 106 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 107 | peerDependencies: 108 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 109 | dependencies: 110 | eslint: 8.56.0 111 | eslint-visitor-keys: 3.4.3 112 | dev: true 113 | 114 | /@eslint-community/regexpp@4.10.0: 115 | resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} 116 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 117 | dev: true 118 | 119 | /@eslint/eslintrc@2.1.4: 120 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 121 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 122 | dependencies: 123 | ajv: 6.12.6 124 | debug: 4.3.4 125 | espree: 9.6.1 126 | globals: 13.24.0 127 | ignore: 5.3.0 128 | import-fresh: 3.3.0 129 | js-yaml: 4.1.0 130 | minimatch: 3.1.2 131 | strip-json-comments: 3.1.1 132 | transitivePeerDependencies: 133 | - supports-color 134 | dev: true 135 | 136 | /@eslint/js@8.56.0: 137 | resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} 138 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 139 | dev: true 140 | 141 | /@humanwhocodes/config-array@0.11.14: 142 | resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} 143 | engines: {node: '>=10.10.0'} 144 | dependencies: 145 | '@humanwhocodes/object-schema': 2.0.2 146 | debug: 4.3.4 147 | minimatch: 3.1.2 148 | transitivePeerDependencies: 149 | - supports-color 150 | dev: true 151 | 152 | /@humanwhocodes/module-importer@1.0.1: 153 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 154 | engines: {node: '>=12.22'} 155 | dev: true 156 | 157 | /@humanwhocodes/object-schema@2.0.2: 158 | resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} 159 | dev: true 160 | 161 | /@isaacs/cliui@8.0.2: 162 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 163 | engines: {node: '>=12'} 164 | dependencies: 165 | string-width: 5.1.2 166 | string-width-cjs: /string-width@4.2.3 167 | strip-ansi: 7.1.0 168 | strip-ansi-cjs: /strip-ansi@6.0.1 169 | wrap-ansi: 8.1.0 170 | wrap-ansi-cjs: /wrap-ansi@7.0.0 171 | dev: true 172 | 173 | /@ljharb/resumer@0.0.1: 174 | resolution: {integrity: sha512-skQiAOrCfO7vRTq53cxznMpks7wS1va95UCidALlOVWqvBAzwPVErwizDwoMqNVMEn1mDq0utxZd02eIrvF1lw==} 175 | engines: {node: '>= 0.4'} 176 | dependencies: 177 | '@ljharb/through': 2.3.11 178 | dev: true 179 | 180 | /@ljharb/through@2.3.11: 181 | resolution: {integrity: sha512-ccfcIDlogiXNq5KcbAwbaO7lMh3Tm1i3khMPYpxlK8hH/W53zN81KM9coerRLOnTGu3nfXIniAmQbRI9OxbC0w==} 182 | engines: {node: '>= 0.4'} 183 | dependencies: 184 | call-bind: 1.0.5 185 | dev: true 186 | 187 | /@nodelib/fs.scandir@2.1.5: 188 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 189 | engines: {node: '>= 8'} 190 | dependencies: 191 | '@nodelib/fs.stat': 2.0.5 192 | run-parallel: 1.2.0 193 | dev: true 194 | 195 | /@nodelib/fs.stat@2.0.5: 196 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 197 | engines: {node: '>= 8'} 198 | dev: true 199 | 200 | /@nodelib/fs.walk@1.2.8: 201 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 202 | engines: {node: '>= 8'} 203 | dependencies: 204 | '@nodelib/fs.scandir': 2.1.5 205 | fastq: 1.16.0 206 | dev: true 207 | 208 | /@pkgjs/parseargs@0.11.0: 209 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 210 | engines: {node: '>=14'} 211 | requiresBuild: true 212 | dev: true 213 | optional: true 214 | 215 | /@ungap/structured-clone@1.2.0: 216 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 217 | dev: true 218 | 219 | /acorn-jsx@5.3.2(acorn@8.11.3): 220 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 221 | peerDependencies: 222 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 223 | dependencies: 224 | acorn: 8.11.3 225 | dev: true 226 | 227 | /acorn@8.11.3: 228 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} 229 | engines: {node: '>=0.4.0'} 230 | hasBin: true 231 | dev: true 232 | 233 | /ajv@6.12.6: 234 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 235 | dependencies: 236 | fast-deep-equal: 3.1.3 237 | fast-json-stable-stringify: 2.1.0 238 | json-schema-traverse: 0.4.1 239 | uri-js: 4.4.1 240 | dev: true 241 | 242 | /ajv@8.12.0: 243 | resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} 244 | dependencies: 245 | fast-deep-equal: 3.1.3 246 | json-schema-traverse: 1.0.0 247 | require-from-string: 2.0.2 248 | uri-js: 4.4.1 249 | dev: true 250 | 251 | /ansi-regex@5.0.1: 252 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 253 | engines: {node: '>=8'} 254 | dev: true 255 | 256 | /ansi-regex@6.0.1: 257 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} 258 | engines: {node: '>=12'} 259 | dev: true 260 | 261 | /ansi-styles@3.2.1: 262 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 263 | engines: {node: '>=4'} 264 | dependencies: 265 | color-convert: 1.9.3 266 | dev: true 267 | 268 | /ansi-styles@4.3.0: 269 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 270 | engines: {node: '>=8'} 271 | dependencies: 272 | color-convert: 2.0.1 273 | dev: true 274 | 275 | /ansi-styles@6.2.1: 276 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 277 | engines: {node: '>=12'} 278 | dev: true 279 | 280 | /argparse@2.0.1: 281 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 282 | dev: true 283 | 284 | /array-buffer-byte-length@1.0.0: 285 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} 286 | dependencies: 287 | call-bind: 1.0.5 288 | is-array-buffer: 3.0.2 289 | dev: true 290 | 291 | /array-union@2.1.0: 292 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 293 | engines: {node: '>=8'} 294 | dev: true 295 | 296 | /array.prototype.every@1.1.5: 297 | resolution: {integrity: sha512-FfMQJ+/joFGXpRCltbzV3znaP5QxIhLFySo0fEPn3GuoYlud9LhknMCIxdYKC2qsM/6VHoSp6YGwe3EZXrEcwQ==} 298 | engines: {node: '>= 0.4'} 299 | dependencies: 300 | call-bind: 1.0.5 301 | define-properties: 1.2.1 302 | es-abstract: 1.22.3 303 | is-string: 1.0.7 304 | dev: true 305 | 306 | /arraybuffer.prototype.slice@1.0.2: 307 | resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} 308 | engines: {node: '>= 0.4'} 309 | dependencies: 310 | array-buffer-byte-length: 1.0.0 311 | call-bind: 1.0.5 312 | define-properties: 1.2.1 313 | es-abstract: 1.22.3 314 | get-intrinsic: 1.2.2 315 | is-array-buffer: 3.0.2 316 | is-shared-array-buffer: 1.0.2 317 | dev: true 318 | 319 | /astral-regex@2.0.0: 320 | resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} 321 | engines: {node: '>=8'} 322 | dev: true 323 | 324 | /available-typed-arrays@1.0.5: 325 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} 326 | engines: {node: '>= 0.4'} 327 | dev: true 328 | 329 | /balanced-match@1.0.2: 330 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 331 | dev: true 332 | 333 | /balanced-match@2.0.0: 334 | resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} 335 | dev: true 336 | 337 | /brace-expansion@1.1.11: 338 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 339 | dependencies: 340 | balanced-match: 1.0.2 341 | concat-map: 0.0.1 342 | dev: true 343 | 344 | /brace-expansion@2.0.1: 345 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 346 | dependencies: 347 | balanced-match: 1.0.2 348 | dev: true 349 | 350 | /braces@3.0.3: 351 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 352 | engines: {node: '>=8'} 353 | dependencies: 354 | fill-range: 7.1.1 355 | dev: true 356 | 357 | /call-bind@1.0.5: 358 | resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} 359 | dependencies: 360 | function-bind: 1.1.2 361 | get-intrinsic: 1.2.2 362 | set-function-length: 1.2.0 363 | dev: true 364 | 365 | /callsites@3.1.0: 366 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 367 | engines: {node: '>=6'} 368 | dev: true 369 | 370 | /chalk@2.4.2: 371 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 372 | engines: {node: '>=4'} 373 | dependencies: 374 | ansi-styles: 3.2.1 375 | escape-string-regexp: 1.0.5 376 | supports-color: 5.5.0 377 | dev: true 378 | 379 | /chalk@4.1.2: 380 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 381 | engines: {node: '>=10'} 382 | dependencies: 383 | ansi-styles: 4.3.0 384 | supports-color: 7.2.0 385 | dev: true 386 | 387 | /clean-publish@4.2.0: 388 | resolution: {integrity: sha512-dqZF5y6KtlkYhbnJoXiOCP4L1TPdI7HtuDysslUrbI8vLPu65ZjVO3pu5xp4qH0X2cWdDN/La04woe6fg4LNSw==} 389 | engines: {node: '>= 16.0.0'} 390 | hasBin: true 391 | dependencies: 392 | cross-spawn: 7.0.3 393 | fast-glob: 3.3.2 394 | lilconfig: 2.1.0 395 | micromatch: 4.0.5 396 | dev: true 397 | 398 | /color-convert@1.9.3: 399 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 400 | dependencies: 401 | color-name: 1.1.3 402 | dev: true 403 | 404 | /color-convert@2.0.1: 405 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 406 | engines: {node: '>=7.0.0'} 407 | dependencies: 408 | color-name: 1.1.4 409 | dev: true 410 | 411 | /color-name@1.1.3: 412 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 413 | dev: true 414 | 415 | /color-name@1.1.4: 416 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 417 | dev: true 418 | 419 | /colord@2.9.3: 420 | resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} 421 | dev: true 422 | 423 | /concat-map@0.0.1: 424 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 425 | dev: true 426 | 427 | /copy-anything@2.0.6: 428 | resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} 429 | dependencies: 430 | is-what: 3.14.1 431 | dev: true 432 | 433 | /cosmiconfig@9.0.0: 434 | resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} 435 | engines: {node: '>=14'} 436 | peerDependencies: 437 | typescript: '>=4.9.5' 438 | peerDependenciesMeta: 439 | typescript: 440 | optional: true 441 | dependencies: 442 | env-paths: 2.2.1 443 | import-fresh: 3.3.0 444 | js-yaml: 4.1.0 445 | parse-json: 5.2.0 446 | dev: true 447 | 448 | /cross-spawn@7.0.3: 449 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 450 | engines: {node: '>= 8'} 451 | dependencies: 452 | path-key: 3.1.1 453 | shebang-command: 2.0.0 454 | which: 2.0.2 455 | dev: true 456 | 457 | /css-functions-list@3.2.1: 458 | resolution: {integrity: sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==} 459 | engines: {node: '>=12 || >=16'} 460 | dev: true 461 | 462 | /css-tree@2.3.1: 463 | resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} 464 | engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} 465 | dependencies: 466 | mdn-data: 2.0.30 467 | source-map-js: 1.0.2 468 | dev: true 469 | 470 | /cssesc@3.0.0: 471 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 472 | engines: {node: '>=4'} 473 | hasBin: true 474 | dev: true 475 | 476 | /debug@4.3.4: 477 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 478 | engines: {node: '>=6.0'} 479 | peerDependencies: 480 | supports-color: '*' 481 | peerDependenciesMeta: 482 | supports-color: 483 | optional: true 484 | dependencies: 485 | ms: 2.1.2 486 | dev: true 487 | 488 | /deep-equal@2.2.3: 489 | resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} 490 | engines: {node: '>= 0.4'} 491 | dependencies: 492 | array-buffer-byte-length: 1.0.0 493 | call-bind: 1.0.5 494 | es-get-iterator: 1.1.3 495 | get-intrinsic: 1.2.2 496 | is-arguments: 1.1.1 497 | is-array-buffer: 3.0.2 498 | is-date-object: 1.0.5 499 | is-regex: 1.1.4 500 | is-shared-array-buffer: 1.0.2 501 | isarray: 2.0.5 502 | object-is: 1.1.5 503 | object-keys: 1.1.1 504 | object.assign: 4.1.5 505 | regexp.prototype.flags: 1.5.1 506 | side-channel: 1.0.4 507 | which-boxed-primitive: 1.0.2 508 | which-collection: 1.0.1 509 | which-typed-array: 1.1.13 510 | dev: true 511 | 512 | /deep-is@0.1.4: 513 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 514 | dev: true 515 | 516 | /define-data-property@1.1.1: 517 | resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} 518 | engines: {node: '>= 0.4'} 519 | dependencies: 520 | get-intrinsic: 1.2.2 521 | gopd: 1.0.1 522 | has-property-descriptors: 1.0.1 523 | dev: true 524 | 525 | /define-properties@1.2.1: 526 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 527 | engines: {node: '>= 0.4'} 528 | dependencies: 529 | define-data-property: 1.1.1 530 | has-property-descriptors: 1.0.1 531 | object-keys: 1.1.1 532 | dev: true 533 | 534 | /defined@1.0.1: 535 | resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} 536 | dev: true 537 | 538 | /dir-glob@3.0.1: 539 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 540 | engines: {node: '>=8'} 541 | dependencies: 542 | path-type: 4.0.0 543 | dev: true 544 | 545 | /doctrine@3.0.0: 546 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 547 | engines: {node: '>=6.0.0'} 548 | dependencies: 549 | esutils: 2.0.3 550 | dev: true 551 | 552 | /dotignore@0.1.2: 553 | resolution: {integrity: sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==} 554 | hasBin: true 555 | dependencies: 556 | minimatch: 3.1.2 557 | dev: true 558 | 559 | /eastasianwidth@0.2.0: 560 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 561 | dev: true 562 | 563 | /emoji-regex@8.0.0: 564 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 565 | dev: true 566 | 567 | /emoji-regex@9.2.2: 568 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 569 | dev: true 570 | 571 | /env-paths@2.2.1: 572 | resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} 573 | engines: {node: '>=6'} 574 | dev: true 575 | 576 | /errno@0.1.8: 577 | resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} 578 | hasBin: true 579 | requiresBuild: true 580 | dependencies: 581 | prr: 1.0.1 582 | dev: true 583 | optional: true 584 | 585 | /error-ex@1.3.2: 586 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 587 | dependencies: 588 | is-arrayish: 0.2.1 589 | dev: true 590 | 591 | /es-abstract@1.22.3: 592 | resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} 593 | engines: {node: '>= 0.4'} 594 | dependencies: 595 | array-buffer-byte-length: 1.0.0 596 | arraybuffer.prototype.slice: 1.0.2 597 | available-typed-arrays: 1.0.5 598 | call-bind: 1.0.5 599 | es-set-tostringtag: 2.0.2 600 | es-to-primitive: 1.2.1 601 | function.prototype.name: 1.1.6 602 | get-intrinsic: 1.2.2 603 | get-symbol-description: 1.0.0 604 | globalthis: 1.0.3 605 | gopd: 1.0.1 606 | has-property-descriptors: 1.0.1 607 | has-proto: 1.0.1 608 | has-symbols: 1.0.3 609 | hasown: 2.0.0 610 | internal-slot: 1.0.6 611 | is-array-buffer: 3.0.2 612 | is-callable: 1.2.7 613 | is-negative-zero: 2.0.2 614 | is-regex: 1.1.4 615 | is-shared-array-buffer: 1.0.2 616 | is-string: 1.0.7 617 | is-typed-array: 1.1.12 618 | is-weakref: 1.0.2 619 | object-inspect: 1.13.1 620 | object-keys: 1.1.1 621 | object.assign: 4.1.5 622 | regexp.prototype.flags: 1.5.1 623 | safe-array-concat: 1.1.0 624 | safe-regex-test: 1.0.2 625 | string.prototype.trim: 1.2.8 626 | string.prototype.trimend: 1.0.7 627 | string.prototype.trimstart: 1.0.7 628 | typed-array-buffer: 1.0.0 629 | typed-array-byte-length: 1.0.0 630 | typed-array-byte-offset: 1.0.0 631 | typed-array-length: 1.0.4 632 | unbox-primitive: 1.0.2 633 | which-typed-array: 1.1.13 634 | dev: true 635 | 636 | /es-get-iterator@1.1.3: 637 | resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} 638 | dependencies: 639 | call-bind: 1.0.5 640 | get-intrinsic: 1.2.2 641 | has-symbols: 1.0.3 642 | is-arguments: 1.1.1 643 | is-map: 2.0.2 644 | is-set: 2.0.2 645 | is-string: 1.0.7 646 | isarray: 2.0.5 647 | stop-iteration-iterator: 1.0.0 648 | dev: true 649 | 650 | /es-set-tostringtag@2.0.2: 651 | resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} 652 | engines: {node: '>= 0.4'} 653 | dependencies: 654 | get-intrinsic: 1.2.2 655 | has-tostringtag: 1.0.0 656 | hasown: 2.0.0 657 | dev: true 658 | 659 | /es-to-primitive@1.2.1: 660 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 661 | engines: {node: '>= 0.4'} 662 | dependencies: 663 | is-callable: 1.2.7 664 | is-date-object: 1.0.5 665 | is-symbol: 1.0.4 666 | dev: true 667 | 668 | /escape-string-regexp@1.0.5: 669 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 670 | engines: {node: '>=0.8.0'} 671 | dev: true 672 | 673 | /escape-string-regexp@4.0.0: 674 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 675 | engines: {node: '>=10'} 676 | dev: true 677 | 678 | /eslint-scope@7.2.2: 679 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 680 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 681 | dependencies: 682 | esrecurse: 4.3.0 683 | estraverse: 5.3.0 684 | dev: true 685 | 686 | /eslint-visitor-keys@3.4.3: 687 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 688 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 689 | dev: true 690 | 691 | /eslint@8.56.0: 692 | resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} 693 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 694 | hasBin: true 695 | dependencies: 696 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) 697 | '@eslint-community/regexpp': 4.10.0 698 | '@eslint/eslintrc': 2.1.4 699 | '@eslint/js': 8.56.0 700 | '@humanwhocodes/config-array': 0.11.14 701 | '@humanwhocodes/module-importer': 1.0.1 702 | '@nodelib/fs.walk': 1.2.8 703 | '@ungap/structured-clone': 1.2.0 704 | ajv: 6.12.6 705 | chalk: 4.1.2 706 | cross-spawn: 7.0.3 707 | debug: 4.3.4 708 | doctrine: 3.0.0 709 | escape-string-regexp: 4.0.0 710 | eslint-scope: 7.2.2 711 | eslint-visitor-keys: 3.4.3 712 | espree: 9.6.1 713 | esquery: 1.5.0 714 | esutils: 2.0.3 715 | fast-deep-equal: 3.1.3 716 | file-entry-cache: 6.0.1 717 | find-up: 5.0.0 718 | glob-parent: 6.0.2 719 | globals: 13.24.0 720 | graphemer: 1.4.0 721 | ignore: 5.3.0 722 | imurmurhash: 0.1.4 723 | is-glob: 4.0.3 724 | is-path-inside: 3.0.3 725 | js-yaml: 4.1.0 726 | json-stable-stringify-without-jsonify: 1.0.1 727 | levn: 0.4.1 728 | lodash.merge: 4.6.2 729 | minimatch: 3.1.2 730 | natural-compare: 1.4.0 731 | optionator: 0.9.3 732 | strip-ansi: 6.0.1 733 | text-table: 0.2.0 734 | transitivePeerDependencies: 735 | - supports-color 736 | dev: true 737 | 738 | /espree@9.6.1: 739 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 740 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 741 | dependencies: 742 | acorn: 8.11.3 743 | acorn-jsx: 5.3.2(acorn@8.11.3) 744 | eslint-visitor-keys: 3.4.3 745 | dev: true 746 | 747 | /esquery@1.5.0: 748 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 749 | engines: {node: '>=0.10'} 750 | dependencies: 751 | estraverse: 5.3.0 752 | dev: true 753 | 754 | /esrecurse@4.3.0: 755 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 756 | engines: {node: '>=4.0'} 757 | dependencies: 758 | estraverse: 5.3.0 759 | dev: true 760 | 761 | /estraverse@5.3.0: 762 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 763 | engines: {node: '>=4.0'} 764 | dev: true 765 | 766 | /esutils@2.0.3: 767 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 768 | engines: {node: '>=0.10.0'} 769 | dev: true 770 | 771 | /fast-deep-equal@3.1.3: 772 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 773 | dev: true 774 | 775 | /fast-glob@3.3.2: 776 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 777 | engines: {node: '>=8.6.0'} 778 | dependencies: 779 | '@nodelib/fs.stat': 2.0.5 780 | '@nodelib/fs.walk': 1.2.8 781 | glob-parent: 5.1.2 782 | merge2: 1.4.1 783 | micromatch: 4.0.5 784 | dev: true 785 | 786 | /fast-json-stable-stringify@2.1.0: 787 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 788 | dev: true 789 | 790 | /fast-levenshtein@2.0.6: 791 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 792 | dev: true 793 | 794 | /fastest-levenshtein@1.0.16: 795 | resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} 796 | engines: {node: '>= 4.9.1'} 797 | dev: true 798 | 799 | /fastq@1.16.0: 800 | resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} 801 | dependencies: 802 | reusify: 1.0.4 803 | dev: true 804 | 805 | /file-entry-cache@6.0.1: 806 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 807 | engines: {node: ^10.12.0 || >=12.0.0} 808 | dependencies: 809 | flat-cache: 3.2.0 810 | dev: true 811 | 812 | /file-entry-cache@8.0.0: 813 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 814 | engines: {node: '>=16.0.0'} 815 | dependencies: 816 | flat-cache: 4.0.0 817 | dev: true 818 | 819 | /fill-range@7.1.1: 820 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 821 | engines: {node: '>=8'} 822 | dependencies: 823 | to-regex-range: 5.0.1 824 | dev: true 825 | 826 | /find-up@5.0.0: 827 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 828 | engines: {node: '>=10'} 829 | dependencies: 830 | locate-path: 6.0.0 831 | path-exists: 4.0.0 832 | dev: true 833 | 834 | /flat-cache@3.2.0: 835 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 836 | engines: {node: ^10.12.0 || >=12.0.0} 837 | dependencies: 838 | flatted: 3.2.9 839 | keyv: 4.5.4 840 | rimraf: 3.0.2 841 | dev: true 842 | 843 | /flat-cache@4.0.0: 844 | resolution: {integrity: sha512-EryKbCE/wxpxKniQlyas6PY1I9vwtF3uCBweX+N8KYTCn3Y12RTGtQAJ/bd5pl7kxUAc8v/R3Ake/N17OZiFqA==} 845 | engines: {node: '>=16'} 846 | dependencies: 847 | flatted: 3.2.9 848 | keyv: 4.5.4 849 | rimraf: 5.0.5 850 | dev: true 851 | 852 | /flatted@3.2.9: 853 | resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} 854 | dev: true 855 | 856 | /for-each@0.3.3: 857 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 858 | dependencies: 859 | is-callable: 1.2.7 860 | dev: true 861 | 862 | /foreground-child@3.1.1: 863 | resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} 864 | engines: {node: '>=14'} 865 | dependencies: 866 | cross-spawn: 7.0.3 867 | signal-exit: 4.1.0 868 | dev: true 869 | 870 | /fs.realpath@1.0.0: 871 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 872 | dev: true 873 | 874 | /function-bind@1.1.2: 875 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 876 | dev: true 877 | 878 | /function.prototype.name@1.1.6: 879 | resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} 880 | engines: {node: '>= 0.4'} 881 | dependencies: 882 | call-bind: 1.0.5 883 | define-properties: 1.2.1 884 | es-abstract: 1.22.3 885 | functions-have-names: 1.2.3 886 | dev: true 887 | 888 | /functions-have-names@1.2.3: 889 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 890 | dev: true 891 | 892 | /get-intrinsic@1.2.2: 893 | resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} 894 | dependencies: 895 | function-bind: 1.1.2 896 | has-proto: 1.0.1 897 | has-symbols: 1.0.3 898 | hasown: 2.0.0 899 | dev: true 900 | 901 | /get-package-type@0.1.0: 902 | resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} 903 | engines: {node: '>=8.0.0'} 904 | dev: true 905 | 906 | /get-symbol-description@1.0.0: 907 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} 908 | engines: {node: '>= 0.4'} 909 | dependencies: 910 | call-bind: 1.0.5 911 | get-intrinsic: 1.2.2 912 | dev: true 913 | 914 | /glob-parent@5.1.2: 915 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 916 | engines: {node: '>= 6'} 917 | dependencies: 918 | is-glob: 4.0.3 919 | dev: true 920 | 921 | /glob-parent@6.0.2: 922 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 923 | engines: {node: '>=10.13.0'} 924 | dependencies: 925 | is-glob: 4.0.3 926 | dev: true 927 | 928 | /glob@10.3.10: 929 | resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} 930 | engines: {node: '>=16 || 14 >=14.17'} 931 | hasBin: true 932 | dependencies: 933 | foreground-child: 3.1.1 934 | jackspeak: 2.3.6 935 | minimatch: 9.0.3 936 | minipass: 7.0.4 937 | path-scurry: 1.10.1 938 | dev: true 939 | 940 | /glob@7.2.3: 941 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 942 | dependencies: 943 | fs.realpath: 1.0.0 944 | inflight: 1.0.6 945 | inherits: 2.0.4 946 | minimatch: 3.1.2 947 | once: 1.4.0 948 | path-is-absolute: 1.0.1 949 | dev: true 950 | 951 | /global-modules@2.0.0: 952 | resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} 953 | engines: {node: '>=6'} 954 | dependencies: 955 | global-prefix: 3.0.0 956 | dev: true 957 | 958 | /global-prefix@3.0.0: 959 | resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} 960 | engines: {node: '>=6'} 961 | dependencies: 962 | ini: 1.3.8 963 | kind-of: 6.0.3 964 | which: 1.3.1 965 | dev: true 966 | 967 | /globals@13.24.0: 968 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 969 | engines: {node: '>=8'} 970 | dependencies: 971 | type-fest: 0.20.2 972 | dev: true 973 | 974 | /globalthis@1.0.3: 975 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} 976 | engines: {node: '>= 0.4'} 977 | dependencies: 978 | define-properties: 1.2.1 979 | dev: true 980 | 981 | /globby@11.1.0: 982 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 983 | engines: {node: '>=10'} 984 | dependencies: 985 | array-union: 2.1.0 986 | dir-glob: 3.0.1 987 | fast-glob: 3.3.2 988 | ignore: 5.3.0 989 | merge2: 1.4.1 990 | slash: 3.0.0 991 | dev: true 992 | 993 | /globjoin@0.1.4: 994 | resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} 995 | dev: true 996 | 997 | /gopd@1.0.1: 998 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 999 | dependencies: 1000 | get-intrinsic: 1.2.2 1001 | dev: true 1002 | 1003 | /graceful-fs@4.2.11: 1004 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1005 | requiresBuild: true 1006 | dev: true 1007 | optional: true 1008 | 1009 | /graphemer@1.4.0: 1010 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1011 | dev: true 1012 | 1013 | /has-bigints@1.0.2: 1014 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1015 | dev: true 1016 | 1017 | /has-dynamic-import@2.1.0: 1018 | resolution: {integrity: sha512-su0anMkNEnJKZ/rB99jn3y6lV/J8Ro96hBJ28YAeVzj5rWxH+YL/AdCyiYYA1HDLV9YhmvqpWSJJj2KLo1MX6g==} 1019 | engines: {node: '>= 0.4'} 1020 | dependencies: 1021 | call-bind: 1.0.5 1022 | get-intrinsic: 1.2.2 1023 | dev: true 1024 | 1025 | /has-flag@3.0.0: 1026 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1027 | engines: {node: '>=4'} 1028 | dev: true 1029 | 1030 | /has-flag@4.0.0: 1031 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1032 | engines: {node: '>=8'} 1033 | dev: true 1034 | 1035 | /has-property-descriptors@1.0.1: 1036 | resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} 1037 | dependencies: 1038 | get-intrinsic: 1.2.2 1039 | dev: true 1040 | 1041 | /has-proto@1.0.1: 1042 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 1043 | engines: {node: '>= 0.4'} 1044 | dev: true 1045 | 1046 | /has-symbols@1.0.3: 1047 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1048 | engines: {node: '>= 0.4'} 1049 | dev: true 1050 | 1051 | /has-tostringtag@1.0.0: 1052 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} 1053 | engines: {node: '>= 0.4'} 1054 | dependencies: 1055 | has-symbols: 1.0.3 1056 | dev: true 1057 | 1058 | /hasown@2.0.0: 1059 | resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} 1060 | engines: {node: '>= 0.4'} 1061 | dependencies: 1062 | function-bind: 1.1.2 1063 | dev: true 1064 | 1065 | /html-tags@3.3.1: 1066 | resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} 1067 | engines: {node: '>=8'} 1068 | dev: true 1069 | 1070 | /iconv-lite@0.6.3: 1071 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 1072 | engines: {node: '>=0.10.0'} 1073 | requiresBuild: true 1074 | dependencies: 1075 | safer-buffer: 2.1.2 1076 | dev: true 1077 | optional: true 1078 | 1079 | /ignore@5.3.0: 1080 | resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} 1081 | engines: {node: '>= 4'} 1082 | dev: true 1083 | 1084 | /image-size@0.5.5: 1085 | resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} 1086 | engines: {node: '>=0.10.0'} 1087 | hasBin: true 1088 | requiresBuild: true 1089 | dev: true 1090 | optional: true 1091 | 1092 | /import-fresh@3.3.0: 1093 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1094 | engines: {node: '>=6'} 1095 | dependencies: 1096 | parent-module: 1.0.1 1097 | resolve-from: 4.0.0 1098 | dev: true 1099 | 1100 | /imurmurhash@0.1.4: 1101 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1102 | engines: {node: '>=0.8.19'} 1103 | dev: true 1104 | 1105 | /inflight@1.0.6: 1106 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1107 | dependencies: 1108 | once: 1.4.0 1109 | wrappy: 1.0.2 1110 | dev: true 1111 | 1112 | /inherits@2.0.4: 1113 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1114 | dev: true 1115 | 1116 | /ini@1.3.8: 1117 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 1118 | dev: true 1119 | 1120 | /internal-slot@1.0.6: 1121 | resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} 1122 | engines: {node: '>= 0.4'} 1123 | dependencies: 1124 | get-intrinsic: 1.2.2 1125 | hasown: 2.0.0 1126 | side-channel: 1.0.4 1127 | dev: true 1128 | 1129 | /is-arguments@1.1.1: 1130 | resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} 1131 | engines: {node: '>= 0.4'} 1132 | dependencies: 1133 | call-bind: 1.0.5 1134 | has-tostringtag: 1.0.0 1135 | dev: true 1136 | 1137 | /is-array-buffer@3.0.2: 1138 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} 1139 | dependencies: 1140 | call-bind: 1.0.5 1141 | get-intrinsic: 1.2.2 1142 | is-typed-array: 1.1.12 1143 | dev: true 1144 | 1145 | /is-arrayish@0.2.1: 1146 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1147 | dev: true 1148 | 1149 | /is-bigint@1.0.4: 1150 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 1151 | dependencies: 1152 | has-bigints: 1.0.2 1153 | dev: true 1154 | 1155 | /is-boolean-object@1.1.2: 1156 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 1157 | engines: {node: '>= 0.4'} 1158 | dependencies: 1159 | call-bind: 1.0.5 1160 | has-tostringtag: 1.0.0 1161 | dev: true 1162 | 1163 | /is-callable@1.2.7: 1164 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1165 | engines: {node: '>= 0.4'} 1166 | dev: true 1167 | 1168 | /is-core-module@2.13.1: 1169 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 1170 | dependencies: 1171 | hasown: 2.0.0 1172 | dev: true 1173 | 1174 | /is-date-object@1.0.5: 1175 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 1176 | engines: {node: '>= 0.4'} 1177 | dependencies: 1178 | has-tostringtag: 1.0.0 1179 | dev: true 1180 | 1181 | /is-extglob@2.1.1: 1182 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1183 | engines: {node: '>=0.10.0'} 1184 | dev: true 1185 | 1186 | /is-fullwidth-code-point@3.0.0: 1187 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1188 | engines: {node: '>=8'} 1189 | dev: true 1190 | 1191 | /is-glob@4.0.3: 1192 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1193 | engines: {node: '>=0.10.0'} 1194 | dependencies: 1195 | is-extglob: 2.1.1 1196 | dev: true 1197 | 1198 | /is-map@2.0.2: 1199 | resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} 1200 | dev: true 1201 | 1202 | /is-negative-zero@2.0.2: 1203 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} 1204 | engines: {node: '>= 0.4'} 1205 | dev: true 1206 | 1207 | /is-number-object@1.0.7: 1208 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1209 | engines: {node: '>= 0.4'} 1210 | dependencies: 1211 | has-tostringtag: 1.0.0 1212 | dev: true 1213 | 1214 | /is-number@7.0.0: 1215 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1216 | engines: {node: '>=0.12.0'} 1217 | dev: true 1218 | 1219 | /is-path-inside@3.0.3: 1220 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1221 | engines: {node: '>=8'} 1222 | dev: true 1223 | 1224 | /is-plain-object@5.0.0: 1225 | resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} 1226 | engines: {node: '>=0.10.0'} 1227 | dev: true 1228 | 1229 | /is-regex@1.1.4: 1230 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1231 | engines: {node: '>= 0.4'} 1232 | dependencies: 1233 | call-bind: 1.0.5 1234 | has-tostringtag: 1.0.0 1235 | dev: true 1236 | 1237 | /is-set@2.0.2: 1238 | resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} 1239 | dev: true 1240 | 1241 | /is-shared-array-buffer@1.0.2: 1242 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} 1243 | dependencies: 1244 | call-bind: 1.0.5 1245 | dev: true 1246 | 1247 | /is-string@1.0.7: 1248 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1249 | engines: {node: '>= 0.4'} 1250 | dependencies: 1251 | has-tostringtag: 1.0.0 1252 | dev: true 1253 | 1254 | /is-symbol@1.0.4: 1255 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1256 | engines: {node: '>= 0.4'} 1257 | dependencies: 1258 | has-symbols: 1.0.3 1259 | dev: true 1260 | 1261 | /is-typed-array@1.1.12: 1262 | resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} 1263 | engines: {node: '>= 0.4'} 1264 | dependencies: 1265 | which-typed-array: 1.1.13 1266 | dev: true 1267 | 1268 | /is-weakmap@2.0.1: 1269 | resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} 1270 | dev: true 1271 | 1272 | /is-weakref@1.0.2: 1273 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1274 | dependencies: 1275 | call-bind: 1.0.5 1276 | dev: true 1277 | 1278 | /is-weakset@2.0.2: 1279 | resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} 1280 | dependencies: 1281 | call-bind: 1.0.5 1282 | get-intrinsic: 1.2.2 1283 | dev: true 1284 | 1285 | /is-what@3.14.1: 1286 | resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} 1287 | dev: true 1288 | 1289 | /isarray@2.0.5: 1290 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1291 | dev: true 1292 | 1293 | /isexe@2.0.0: 1294 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1295 | dev: true 1296 | 1297 | /jackspeak@2.3.6: 1298 | resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} 1299 | engines: {node: '>=14'} 1300 | dependencies: 1301 | '@isaacs/cliui': 8.0.2 1302 | optionalDependencies: 1303 | '@pkgjs/parseargs': 0.11.0 1304 | dev: true 1305 | 1306 | /js-tokens@4.0.0: 1307 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1308 | dev: true 1309 | 1310 | /js-yaml@4.1.0: 1311 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1312 | hasBin: true 1313 | dependencies: 1314 | argparse: 2.0.1 1315 | dev: true 1316 | 1317 | /json-buffer@3.0.1: 1318 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1319 | dev: true 1320 | 1321 | /json-parse-even-better-errors@2.3.1: 1322 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1323 | dev: true 1324 | 1325 | /json-schema-traverse@0.4.1: 1326 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1327 | dev: true 1328 | 1329 | /json-schema-traverse@1.0.0: 1330 | resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} 1331 | dev: true 1332 | 1333 | /json-stable-stringify-without-jsonify@1.0.1: 1334 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1335 | dev: true 1336 | 1337 | /keyv@4.5.4: 1338 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1339 | dependencies: 1340 | json-buffer: 3.0.1 1341 | dev: true 1342 | 1343 | /kind-of@6.0.3: 1344 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 1345 | engines: {node: '>=0.10.0'} 1346 | dev: true 1347 | 1348 | /known-css-properties@0.29.0: 1349 | resolution: {integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==} 1350 | dev: true 1351 | 1352 | /less@4.2.0: 1353 | resolution: {integrity: sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==} 1354 | engines: {node: '>=6'} 1355 | hasBin: true 1356 | dependencies: 1357 | copy-anything: 2.0.6 1358 | parse-node-version: 1.0.1 1359 | tslib: 2.6.2 1360 | optionalDependencies: 1361 | errno: 0.1.8 1362 | graceful-fs: 4.2.11 1363 | image-size: 0.5.5 1364 | make-dir: 2.1.0 1365 | mime: 1.6.0 1366 | needle: 3.3.1 1367 | source-map: 0.6.1 1368 | dev: true 1369 | 1370 | /levn@0.4.1: 1371 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1372 | engines: {node: '>= 0.8.0'} 1373 | dependencies: 1374 | prelude-ls: 1.2.1 1375 | type-check: 0.4.0 1376 | dev: true 1377 | 1378 | /lilconfig@2.1.0: 1379 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 1380 | engines: {node: '>=10'} 1381 | dev: true 1382 | 1383 | /lines-and-columns@1.2.4: 1384 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1385 | dev: true 1386 | 1387 | /locate-path@6.0.0: 1388 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1389 | engines: {node: '>=10'} 1390 | dependencies: 1391 | p-locate: 5.0.0 1392 | dev: true 1393 | 1394 | /lodash.merge@4.6.2: 1395 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1396 | dev: true 1397 | 1398 | /lodash.truncate@4.4.2: 1399 | resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} 1400 | dev: true 1401 | 1402 | /lru-cache@10.1.0: 1403 | resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} 1404 | engines: {node: 14 || >=16.14} 1405 | dev: true 1406 | 1407 | /make-dir@2.1.0: 1408 | resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} 1409 | engines: {node: '>=6'} 1410 | requiresBuild: true 1411 | dependencies: 1412 | pify: 4.0.1 1413 | semver: 5.7.2 1414 | dev: true 1415 | optional: true 1416 | 1417 | /mathml-tag-names@2.1.3: 1418 | resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} 1419 | dev: true 1420 | 1421 | /mdn-data@2.0.30: 1422 | resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} 1423 | dev: true 1424 | 1425 | /meow@13.1.0: 1426 | resolution: {integrity: sha512-o5R/R3Tzxq0PJ3v3qcQJtSvSE9nKOLSAaDuuoMzDVuGTwHdccMWcYomh9Xolng2tjT6O/Y83d+0coVGof6tqmA==} 1427 | engines: {node: '>=18'} 1428 | dev: true 1429 | 1430 | /merge2@1.4.1: 1431 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1432 | engines: {node: '>= 8'} 1433 | dev: true 1434 | 1435 | /micromatch@4.0.5: 1436 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1437 | engines: {node: '>=8.6'} 1438 | dependencies: 1439 | braces: 3.0.3 1440 | picomatch: 2.3.1 1441 | dev: true 1442 | 1443 | /mime@1.6.0: 1444 | resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} 1445 | engines: {node: '>=4'} 1446 | hasBin: true 1447 | requiresBuild: true 1448 | dev: true 1449 | optional: true 1450 | 1451 | /minimatch@3.1.2: 1452 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1453 | dependencies: 1454 | brace-expansion: 1.1.11 1455 | dev: true 1456 | 1457 | /minimatch@9.0.3: 1458 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} 1459 | engines: {node: '>=16 || 14 >=14.17'} 1460 | dependencies: 1461 | brace-expansion: 2.0.1 1462 | dev: true 1463 | 1464 | /minimist@1.2.8: 1465 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1466 | dev: true 1467 | 1468 | /minipass@7.0.4: 1469 | resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} 1470 | engines: {node: '>=16 || 14 >=14.17'} 1471 | dev: true 1472 | 1473 | /mock-property@1.0.3: 1474 | resolution: {integrity: sha512-2emPTb1reeLLYwHxyVx993iYyCHEiRRO+y8NFXFPL5kl5q14sgTK76cXyEKkeKCHeRw35SfdkUJ10Q1KfHuiIQ==} 1475 | engines: {node: '>= 0.4'} 1476 | dependencies: 1477 | define-data-property: 1.1.1 1478 | functions-have-names: 1.2.3 1479 | gopd: 1.0.1 1480 | has-property-descriptors: 1.0.1 1481 | hasown: 2.0.0 1482 | isarray: 2.0.5 1483 | dev: true 1484 | 1485 | /ms@2.1.2: 1486 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1487 | dev: true 1488 | 1489 | /nanoid@3.3.7: 1490 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1491 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1492 | hasBin: true 1493 | dev: true 1494 | 1495 | /natural-compare@1.4.0: 1496 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1497 | dev: true 1498 | 1499 | /needle@3.3.1: 1500 | resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} 1501 | engines: {node: '>= 4.4.x'} 1502 | hasBin: true 1503 | requiresBuild: true 1504 | dependencies: 1505 | iconv-lite: 0.6.3 1506 | sax: 1.3.0 1507 | dev: true 1508 | optional: true 1509 | 1510 | /normalize-path@3.0.0: 1511 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1512 | engines: {node: '>=0.10.0'} 1513 | dev: true 1514 | 1515 | /object-inspect@1.13.1: 1516 | resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} 1517 | dev: true 1518 | 1519 | /object-is@1.1.5: 1520 | resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} 1521 | engines: {node: '>= 0.4'} 1522 | dependencies: 1523 | call-bind: 1.0.5 1524 | define-properties: 1.2.1 1525 | dev: true 1526 | 1527 | /object-keys@1.1.1: 1528 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1529 | engines: {node: '>= 0.4'} 1530 | dev: true 1531 | 1532 | /object.assign@4.1.5: 1533 | resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} 1534 | engines: {node: '>= 0.4'} 1535 | dependencies: 1536 | call-bind: 1.0.5 1537 | define-properties: 1.2.1 1538 | has-symbols: 1.0.3 1539 | object-keys: 1.1.1 1540 | dev: true 1541 | 1542 | /once@1.4.0: 1543 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1544 | dependencies: 1545 | wrappy: 1.0.2 1546 | dev: true 1547 | 1548 | /optionator@0.9.3: 1549 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 1550 | engines: {node: '>= 0.8.0'} 1551 | dependencies: 1552 | '@aashutoshrathi/word-wrap': 1.2.6 1553 | deep-is: 0.1.4 1554 | fast-levenshtein: 2.0.6 1555 | levn: 0.4.1 1556 | prelude-ls: 1.2.1 1557 | type-check: 0.4.0 1558 | dev: true 1559 | 1560 | /p-limit@3.1.0: 1561 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1562 | engines: {node: '>=10'} 1563 | dependencies: 1564 | yocto-queue: 0.1.0 1565 | dev: true 1566 | 1567 | /p-locate@5.0.0: 1568 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1569 | engines: {node: '>=10'} 1570 | dependencies: 1571 | p-limit: 3.1.0 1572 | dev: true 1573 | 1574 | /parent-module@1.0.1: 1575 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1576 | engines: {node: '>=6'} 1577 | dependencies: 1578 | callsites: 3.1.0 1579 | dev: true 1580 | 1581 | /parse-json@5.2.0: 1582 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1583 | engines: {node: '>=8'} 1584 | dependencies: 1585 | '@babel/code-frame': 7.23.5 1586 | error-ex: 1.3.2 1587 | json-parse-even-better-errors: 2.3.1 1588 | lines-and-columns: 1.2.4 1589 | dev: true 1590 | 1591 | /parse-node-version@1.0.1: 1592 | resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} 1593 | engines: {node: '>= 0.10'} 1594 | dev: true 1595 | 1596 | /path-exists@4.0.0: 1597 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1598 | engines: {node: '>=8'} 1599 | dev: true 1600 | 1601 | /path-is-absolute@1.0.1: 1602 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1603 | engines: {node: '>=0.10.0'} 1604 | dev: true 1605 | 1606 | /path-key@3.1.1: 1607 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1608 | engines: {node: '>=8'} 1609 | dev: true 1610 | 1611 | /path-parse@1.0.7: 1612 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1613 | dev: true 1614 | 1615 | /path-scurry@1.10.1: 1616 | resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} 1617 | engines: {node: '>=16 || 14 >=14.17'} 1618 | dependencies: 1619 | lru-cache: 10.1.0 1620 | minipass: 7.0.4 1621 | dev: true 1622 | 1623 | /path-type@4.0.0: 1624 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1625 | engines: {node: '>=8'} 1626 | dev: true 1627 | 1628 | /picocolors@1.0.0: 1629 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1630 | 1631 | /picomatch@2.3.1: 1632 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1633 | engines: {node: '>=8.6'} 1634 | dev: true 1635 | 1636 | /pify@4.0.1: 1637 | resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} 1638 | engines: {node: '>=6'} 1639 | requiresBuild: true 1640 | dev: true 1641 | optional: true 1642 | 1643 | /postcss-resolve-nested-selector@0.1.1: 1644 | resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==} 1645 | dev: true 1646 | 1647 | /postcss-safe-parser@7.0.0(postcss@8.4.33): 1648 | resolution: {integrity: sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==} 1649 | engines: {node: '>=18.0'} 1650 | peerDependencies: 1651 | postcss: ^8.4.31 1652 | dependencies: 1653 | postcss: 8.4.33 1654 | dev: true 1655 | 1656 | /postcss-selector-parser@6.0.15: 1657 | resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} 1658 | engines: {node: '>=4'} 1659 | dependencies: 1660 | cssesc: 3.0.0 1661 | util-deprecate: 1.0.2 1662 | dev: true 1663 | 1664 | /postcss-value-parser@4.2.0: 1665 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 1666 | dev: true 1667 | 1668 | /postcss@8.4.33: 1669 | resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} 1670 | engines: {node: ^10 || ^12 || >=14} 1671 | dependencies: 1672 | nanoid: 3.3.7 1673 | picocolors: 1.0.0 1674 | source-map-js: 1.0.2 1675 | dev: true 1676 | 1677 | /prelude-ls@1.2.1: 1678 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1679 | engines: {node: '>= 0.8.0'} 1680 | dev: true 1681 | 1682 | /prr@1.0.1: 1683 | resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} 1684 | requiresBuild: true 1685 | dev: true 1686 | optional: true 1687 | 1688 | /punycode@2.3.1: 1689 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1690 | engines: {node: '>=6'} 1691 | dev: true 1692 | 1693 | /queue-microtask@1.2.3: 1694 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1695 | dev: true 1696 | 1697 | /regexp.prototype.flags@1.5.1: 1698 | resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} 1699 | engines: {node: '>= 0.4'} 1700 | dependencies: 1701 | call-bind: 1.0.5 1702 | define-properties: 1.2.1 1703 | set-function-name: 2.0.1 1704 | dev: true 1705 | 1706 | /require-from-string@2.0.2: 1707 | resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} 1708 | engines: {node: '>=0.10.0'} 1709 | dev: true 1710 | 1711 | /resolve-from@4.0.0: 1712 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1713 | engines: {node: '>=4'} 1714 | dev: true 1715 | 1716 | /resolve-from@5.0.0: 1717 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1718 | engines: {node: '>=8'} 1719 | dev: true 1720 | 1721 | /resolve@2.0.0-next.5: 1722 | resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} 1723 | hasBin: true 1724 | dependencies: 1725 | is-core-module: 2.13.1 1726 | path-parse: 1.0.7 1727 | supports-preserve-symlinks-flag: 1.0.0 1728 | dev: true 1729 | 1730 | /reusify@1.0.4: 1731 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1732 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1733 | dev: true 1734 | 1735 | /rimraf@3.0.2: 1736 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1737 | hasBin: true 1738 | dependencies: 1739 | glob: 7.2.3 1740 | dev: true 1741 | 1742 | /rimraf@5.0.5: 1743 | resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==} 1744 | engines: {node: '>=14'} 1745 | hasBin: true 1746 | dependencies: 1747 | glob: 10.3.10 1748 | dev: true 1749 | 1750 | /run-parallel@1.2.0: 1751 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1752 | dependencies: 1753 | queue-microtask: 1.2.3 1754 | dev: true 1755 | 1756 | /safe-array-concat@1.1.0: 1757 | resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} 1758 | engines: {node: '>=0.4'} 1759 | dependencies: 1760 | call-bind: 1.0.5 1761 | get-intrinsic: 1.2.2 1762 | has-symbols: 1.0.3 1763 | isarray: 2.0.5 1764 | dev: true 1765 | 1766 | /safe-regex-test@1.0.2: 1767 | resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} 1768 | engines: {node: '>= 0.4'} 1769 | dependencies: 1770 | call-bind: 1.0.5 1771 | get-intrinsic: 1.2.2 1772 | is-regex: 1.1.4 1773 | dev: true 1774 | 1775 | /safer-buffer@2.1.2: 1776 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1777 | requiresBuild: true 1778 | dev: true 1779 | optional: true 1780 | 1781 | /sax@1.3.0: 1782 | resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} 1783 | requiresBuild: true 1784 | dev: true 1785 | optional: true 1786 | 1787 | /semver@5.7.2: 1788 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 1789 | hasBin: true 1790 | requiresBuild: true 1791 | dev: true 1792 | optional: true 1793 | 1794 | /set-function-length@1.2.0: 1795 | resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} 1796 | engines: {node: '>= 0.4'} 1797 | dependencies: 1798 | define-data-property: 1.1.1 1799 | function-bind: 1.1.2 1800 | get-intrinsic: 1.2.2 1801 | gopd: 1.0.1 1802 | has-property-descriptors: 1.0.1 1803 | dev: true 1804 | 1805 | /set-function-name@2.0.1: 1806 | resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} 1807 | engines: {node: '>= 0.4'} 1808 | dependencies: 1809 | define-data-property: 1.1.1 1810 | functions-have-names: 1.2.3 1811 | has-property-descriptors: 1.0.1 1812 | dev: true 1813 | 1814 | /shebang-command@2.0.0: 1815 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1816 | engines: {node: '>=8'} 1817 | dependencies: 1818 | shebang-regex: 3.0.0 1819 | dev: true 1820 | 1821 | /shebang-regex@3.0.0: 1822 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1823 | engines: {node: '>=8'} 1824 | dev: true 1825 | 1826 | /side-channel@1.0.4: 1827 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 1828 | dependencies: 1829 | call-bind: 1.0.5 1830 | get-intrinsic: 1.2.2 1831 | object-inspect: 1.13.1 1832 | dev: true 1833 | 1834 | /signal-exit@4.1.0: 1835 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1836 | engines: {node: '>=14'} 1837 | dev: true 1838 | 1839 | /slash@3.0.0: 1840 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1841 | engines: {node: '>=8'} 1842 | dev: true 1843 | 1844 | /slice-ansi@4.0.0: 1845 | resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} 1846 | engines: {node: '>=10'} 1847 | dependencies: 1848 | ansi-styles: 4.3.0 1849 | astral-regex: 2.0.0 1850 | is-fullwidth-code-point: 3.0.0 1851 | dev: true 1852 | 1853 | /source-map-js@1.0.2: 1854 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1855 | engines: {node: '>=0.10.0'} 1856 | dev: true 1857 | 1858 | /source-map@0.6.1: 1859 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1860 | engines: {node: '>=0.10.0'} 1861 | requiresBuild: true 1862 | dev: true 1863 | optional: true 1864 | 1865 | /source-map@0.7.4: 1866 | resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} 1867 | engines: {node: '>= 8'} 1868 | dev: true 1869 | 1870 | /stop-iteration-iterator@1.0.0: 1871 | resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} 1872 | engines: {node: '>= 0.4'} 1873 | dependencies: 1874 | internal-slot: 1.0.6 1875 | dev: true 1876 | 1877 | /string-width@4.2.3: 1878 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1879 | engines: {node: '>=8'} 1880 | dependencies: 1881 | emoji-regex: 8.0.0 1882 | is-fullwidth-code-point: 3.0.0 1883 | strip-ansi: 6.0.1 1884 | dev: true 1885 | 1886 | /string-width@5.1.2: 1887 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1888 | engines: {node: '>=12'} 1889 | dependencies: 1890 | eastasianwidth: 0.2.0 1891 | emoji-regex: 9.2.2 1892 | strip-ansi: 7.1.0 1893 | dev: true 1894 | 1895 | /string.prototype.trim@1.2.8: 1896 | resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} 1897 | engines: {node: '>= 0.4'} 1898 | dependencies: 1899 | call-bind: 1.0.5 1900 | define-properties: 1.2.1 1901 | es-abstract: 1.22.3 1902 | dev: true 1903 | 1904 | /string.prototype.trimend@1.0.7: 1905 | resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} 1906 | dependencies: 1907 | call-bind: 1.0.5 1908 | define-properties: 1.2.1 1909 | es-abstract: 1.22.3 1910 | dev: true 1911 | 1912 | /string.prototype.trimstart@1.0.7: 1913 | resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} 1914 | dependencies: 1915 | call-bind: 1.0.5 1916 | define-properties: 1.2.1 1917 | es-abstract: 1.22.3 1918 | dev: true 1919 | 1920 | /strip-ansi@6.0.1: 1921 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1922 | engines: {node: '>=8'} 1923 | dependencies: 1924 | ansi-regex: 5.0.1 1925 | dev: true 1926 | 1927 | /strip-ansi@7.1.0: 1928 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1929 | engines: {node: '>=12'} 1930 | dependencies: 1931 | ansi-regex: 6.0.1 1932 | dev: true 1933 | 1934 | /strip-color@0.1.0: 1935 | resolution: {integrity: sha512-p9LsUieSjWNNAxVCXLeilaDlmuUOrDS5/dF9znM1nZc7EGX5+zEFC0bEevsNIaldjlks+2jns5Siz6F9iK6jwA==} 1936 | engines: {node: '>=0.10.0'} 1937 | dev: true 1938 | 1939 | /strip-json-comments@3.1.1: 1940 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1941 | engines: {node: '>=8'} 1942 | dev: true 1943 | 1944 | /stylelint@16.1.0: 1945 | resolution: {integrity: sha512-Sh1rRV0lN1qxz/QsuuooLWsIZ/ona7NKw/fRZd6y6PyXYdD2W0EAzJ8yJcwSx4Iw/muz0CF09VZ+z4EiTAcKmg==} 1946 | engines: {node: '>=18.12.0'} 1947 | hasBin: true 1948 | dependencies: 1949 | '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) 1950 | '@csstools/css-tokenizer': 2.2.3 1951 | '@csstools/media-query-list-parser': 2.1.7(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) 1952 | '@csstools/selector-specificity': 3.0.1(postcss-selector-parser@6.0.15) 1953 | balanced-match: 2.0.0 1954 | colord: 2.9.3 1955 | cosmiconfig: 9.0.0 1956 | css-functions-list: 3.2.1 1957 | css-tree: 2.3.1 1958 | debug: 4.3.4 1959 | fast-glob: 3.3.2 1960 | fastest-levenshtein: 1.0.16 1961 | file-entry-cache: 8.0.0 1962 | global-modules: 2.0.0 1963 | globby: 11.1.0 1964 | globjoin: 0.1.4 1965 | html-tags: 3.3.1 1966 | ignore: 5.3.0 1967 | imurmurhash: 0.1.4 1968 | is-plain-object: 5.0.0 1969 | known-css-properties: 0.29.0 1970 | mathml-tag-names: 2.1.3 1971 | meow: 13.1.0 1972 | micromatch: 4.0.5 1973 | normalize-path: 3.0.0 1974 | picocolors: 1.0.0 1975 | postcss: 8.4.33 1976 | postcss-resolve-nested-selector: 0.1.1 1977 | postcss-safe-parser: 7.0.0(postcss@8.4.33) 1978 | postcss-selector-parser: 6.0.15 1979 | postcss-value-parser: 4.2.0 1980 | resolve-from: 5.0.0 1981 | string-width: 4.2.3 1982 | strip-ansi: 7.1.0 1983 | supports-hyperlinks: 3.0.0 1984 | svg-tags: 1.0.0 1985 | table: 6.8.1 1986 | write-file-atomic: 5.0.1 1987 | transitivePeerDependencies: 1988 | - supports-color 1989 | - typescript 1990 | dev: true 1991 | 1992 | /supports-color@5.5.0: 1993 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1994 | engines: {node: '>=4'} 1995 | dependencies: 1996 | has-flag: 3.0.0 1997 | dev: true 1998 | 1999 | /supports-color@7.2.0: 2000 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2001 | engines: {node: '>=8'} 2002 | dependencies: 2003 | has-flag: 4.0.0 2004 | dev: true 2005 | 2006 | /supports-hyperlinks@3.0.0: 2007 | resolution: {integrity: sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==} 2008 | engines: {node: '>=14.18'} 2009 | dependencies: 2010 | has-flag: 4.0.0 2011 | supports-color: 7.2.0 2012 | dev: true 2013 | 2014 | /supports-preserve-symlinks-flag@1.0.0: 2015 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2016 | engines: {node: '>= 0.4'} 2017 | dev: true 2018 | 2019 | /svg-tags@1.0.0: 2020 | resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} 2021 | dev: true 2022 | 2023 | /table@6.8.1: 2024 | resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} 2025 | engines: {node: '>=10.0.0'} 2026 | dependencies: 2027 | ajv: 8.12.0 2028 | lodash.truncate: 4.4.2 2029 | slice-ansi: 4.0.0 2030 | string-width: 4.2.3 2031 | strip-ansi: 6.0.1 2032 | dev: true 2033 | 2034 | /tape@5.7.3: 2035 | resolution: {integrity: sha512-un2/TkloCBIxbrLac88Z9WElQ85WLE4t+jjfgrmxrlInWGYQf9r9Wbycc/nNP3zap6GBb7qln7h85QoNBNZdHg==} 2036 | hasBin: true 2037 | dependencies: 2038 | '@ljharb/resumer': 0.0.1 2039 | '@ljharb/through': 2.3.11 2040 | array.prototype.every: 1.1.5 2041 | call-bind: 1.0.5 2042 | deep-equal: 2.2.3 2043 | defined: 1.0.1 2044 | dotignore: 0.1.2 2045 | for-each: 0.3.3 2046 | get-package-type: 0.1.0 2047 | glob: 7.2.3 2048 | has-dynamic-import: 2.1.0 2049 | hasown: 2.0.0 2050 | inherits: 2.0.4 2051 | is-regex: 1.1.4 2052 | minimist: 1.2.8 2053 | mock-property: 1.0.3 2054 | object-inspect: 1.13.1 2055 | object-is: 1.1.5 2056 | object-keys: 1.1.1 2057 | object.assign: 4.1.5 2058 | resolve: 2.0.0-next.5 2059 | string.prototype.trim: 1.2.8 2060 | dev: true 2061 | 2062 | /text-table@0.2.0: 2063 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 2064 | dev: true 2065 | 2066 | /thenby@1.3.4: 2067 | resolution: {integrity: sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==} 2068 | dev: false 2069 | 2070 | /to-regex-range@5.0.1: 2071 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2072 | engines: {node: '>=8.0'} 2073 | dependencies: 2074 | is-number: 7.0.0 2075 | dev: true 2076 | 2077 | /tslib@2.6.2: 2078 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 2079 | dev: true 2080 | 2081 | /type-check@0.4.0: 2082 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2083 | engines: {node: '>= 0.8.0'} 2084 | dependencies: 2085 | prelude-ls: 1.2.1 2086 | dev: true 2087 | 2088 | /type-fest@0.20.2: 2089 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 2090 | engines: {node: '>=10'} 2091 | dev: true 2092 | 2093 | /typed-array-buffer@1.0.0: 2094 | resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} 2095 | engines: {node: '>= 0.4'} 2096 | dependencies: 2097 | call-bind: 1.0.5 2098 | get-intrinsic: 1.2.2 2099 | is-typed-array: 1.1.12 2100 | dev: true 2101 | 2102 | /typed-array-byte-length@1.0.0: 2103 | resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} 2104 | engines: {node: '>= 0.4'} 2105 | dependencies: 2106 | call-bind: 1.0.5 2107 | for-each: 0.3.3 2108 | has-proto: 1.0.1 2109 | is-typed-array: 1.1.12 2110 | dev: true 2111 | 2112 | /typed-array-byte-offset@1.0.0: 2113 | resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} 2114 | engines: {node: '>= 0.4'} 2115 | dependencies: 2116 | available-typed-arrays: 1.0.5 2117 | call-bind: 1.0.5 2118 | for-each: 0.3.3 2119 | has-proto: 1.0.1 2120 | is-typed-array: 1.1.12 2121 | dev: true 2122 | 2123 | /typed-array-length@1.0.4: 2124 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} 2125 | dependencies: 2126 | call-bind: 1.0.5 2127 | for-each: 0.3.3 2128 | is-typed-array: 1.1.12 2129 | dev: true 2130 | 2131 | /unbox-primitive@1.0.2: 2132 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 2133 | dependencies: 2134 | call-bind: 1.0.5 2135 | has-bigints: 1.0.2 2136 | has-symbols: 1.0.3 2137 | which-boxed-primitive: 1.0.2 2138 | dev: true 2139 | 2140 | /uri-js@4.4.1: 2141 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2142 | dependencies: 2143 | punycode: 2.3.1 2144 | dev: true 2145 | 2146 | /util-deprecate@1.0.2: 2147 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 2148 | dev: true 2149 | 2150 | /which-boxed-primitive@1.0.2: 2151 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 2152 | dependencies: 2153 | is-bigint: 1.0.4 2154 | is-boolean-object: 1.1.2 2155 | is-number-object: 1.0.7 2156 | is-string: 1.0.7 2157 | is-symbol: 1.0.4 2158 | dev: true 2159 | 2160 | /which-collection@1.0.1: 2161 | resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} 2162 | dependencies: 2163 | is-map: 2.0.2 2164 | is-set: 2.0.2 2165 | is-weakmap: 2.0.1 2166 | is-weakset: 2.0.2 2167 | dev: true 2168 | 2169 | /which-typed-array@1.1.13: 2170 | resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} 2171 | engines: {node: '>= 0.4'} 2172 | dependencies: 2173 | available-typed-arrays: 1.0.5 2174 | call-bind: 1.0.5 2175 | for-each: 0.3.3 2176 | gopd: 1.0.1 2177 | has-tostringtag: 1.0.0 2178 | dev: true 2179 | 2180 | /which@1.3.1: 2181 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} 2182 | hasBin: true 2183 | dependencies: 2184 | isexe: 2.0.0 2185 | dev: true 2186 | 2187 | /which@2.0.2: 2188 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2189 | engines: {node: '>= 8'} 2190 | hasBin: true 2191 | dependencies: 2192 | isexe: 2.0.0 2193 | dev: true 2194 | 2195 | /wrap-ansi@7.0.0: 2196 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 2197 | engines: {node: '>=10'} 2198 | dependencies: 2199 | ansi-styles: 4.3.0 2200 | string-width: 4.2.3 2201 | strip-ansi: 6.0.1 2202 | dev: true 2203 | 2204 | /wrap-ansi@8.1.0: 2205 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 2206 | engines: {node: '>=12'} 2207 | dependencies: 2208 | ansi-styles: 6.2.1 2209 | string-width: 5.1.2 2210 | strip-ansi: 7.1.0 2211 | dev: true 2212 | 2213 | /wrappy@1.0.2: 2214 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2215 | dev: true 2216 | 2217 | /write-file-atomic@5.0.1: 2218 | resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} 2219 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 2220 | dependencies: 2221 | imurmurhash: 0.1.4 2222 | signal-exit: 4.1.0 2223 | dev: true 2224 | 2225 | /yocto-queue@0.1.0: 2226 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2227 | engines: {node: '>=10'} 2228 | dev: true 2229 | -------------------------------------------------------------------------------- /test/fixtures/forVisual.css: -------------------------------------------------------------------------------- 1 | .baz { 2 | top:0px; 3 | } 4 | .foo { 5 | background: orange; 6 | } 7 | .bar { 8 | color:pink; 9 | } 10 | -------------------------------------------------------------------------------- /test/fixtures/less-bar.less: -------------------------------------------------------------------------------- 1 | @import './less-foo'; 2 | 3 | .baz { 4 | background: orange; 5 | } 6 | -------------------------------------------------------------------------------- /test/fixtures/less-foo.less: -------------------------------------------------------------------------------- 1 | a { 2 | color: pink; 3 | } 4 | 5 | #wahoo { 6 | font-size: 10rem; 7 | } 8 | -------------------------------------------------------------------------------- /test/formatter.js: -------------------------------------------------------------------------------- 1 | var test = require('tape'); 2 | var formatter = require('../lib/formatter'); 3 | var path = require('path'); 4 | var sourceMap = require('source-map'); 5 | var postcss = require('postcss'); 6 | var stripColor = require('strip-color'); 7 | 8 | var defaultFormatter = formatter(); 9 | 10 | var colorlessWarning = '⚠'; 11 | var colorlessError = '✖'; 12 | 13 | var basicMessages = [ 14 | { 15 | type: 'warning', 16 | plugin: 'foo', 17 | text: 'foo warning', 18 | }, 19 | { 20 | type: 'warning', 21 | plugin: 'bar', 22 | text: 'bar warning', 23 | }, 24 | { 25 | type: 'warning', 26 | plugin: 'baz', 27 | text: 'baz warning', 28 | }, 29 | { 30 | type: 'error', 31 | plugin: 'baz', 32 | text: 'baz error', 33 | }, 34 | ]; 35 | 36 | var basicOutput = '\n' + 37 | '\n' + colorlessWarning + ' foo warning [foo]' + 38 | '\n' + colorlessWarning + ' bar warning [bar]' + 39 | '\n' + colorlessWarning + ' baz warning [baz]' + 40 | '\n' + colorlessError + ' baz error [baz]' + 41 | '\n'; 42 | 43 | var basicOutputMinimal = '\n' + 44 | '\nfoo warning' + 45 | '\nbar warning' + 46 | '\nbaz warning' + 47 | '\nbaz error' + 48 | '\n'; 49 | 50 | test('defaultFormatter with simple mock messages', function(t) { 51 | t.equal( 52 | stripColor(defaultFormatter({ 53 | messages: basicMessages, 54 | source: '', 55 | })), 56 | basicOutput, 57 | 'basic' 58 | ); 59 | 60 | t.end(); 61 | }); 62 | 63 | test('defaultFormatter with noIcon and noPlugin and simple mock messages', function(t) { 64 | var minimalFormatter = formatter({ 65 | noIcon: true, 66 | noPlugin: true, 67 | }); 68 | 69 | t.equal( 70 | stripColor(minimalFormatter({ 71 | messages: basicMessages, 72 | source: '', 73 | })), 74 | basicOutputMinimal, 75 | 'basic' 76 | ); 77 | 78 | t.end(); 79 | }); 80 | 81 | var complexMessages = [ 82 | { 83 | type: 'warning', 84 | plugin: 'foo', 85 | text: 'foo warning', 86 | line: 3, 87 | column: 5, 88 | }, { 89 | type: 'error', 90 | plugin: 'baz', 91 | text: 'baz error', 92 | }, { 93 | type: 'warning', 94 | plugin: 'bar', 95 | text: 'bar warning', 96 | line: 1, 97 | column: 99, 98 | }, { 99 | type: 'warning', 100 | plugin: 'foo', 101 | text: 'ha warning', 102 | line: 8, 103 | column: 13, 104 | }, 105 | ]; 106 | 107 | var complexOutput = '\nstyle/rainbows/horses.css' + 108 | '\n' + colorlessError + ' baz error [baz]' + 109 | '\n1:99\t' + colorlessWarning + ' bar warning [bar]' + 110 | '\n3:5\t' + colorlessWarning + ' foo warning [foo]' + 111 | '\n8:13\t' + colorlessWarning + ' ha warning [foo]' + 112 | '\n'; 113 | 114 | var noPositionSortOutput = '\nstyle/rainbows/horses.css' + 115 | '\n' + colorlessError + ' baz error [baz]' + 116 | '\n3:5\t' + colorlessWarning + ' foo warning [foo]' + 117 | '\n1:99\t' + colorlessWarning + ' bar warning [bar]' + 118 | '\n8:13\t' + colorlessWarning + ' ha warning [foo]' + 119 | '\n'; 120 | 121 | var positionlessLastOutput = '\nstyle/rainbows/horses.css' + 122 | '\n1:99\t' + colorlessWarning + ' bar warning [bar]' + 123 | '\n3:5\t' + colorlessWarning + ' foo warning [foo]' + 124 | '\n8:13\t' + colorlessWarning + ' ha warning [foo]' + 125 | '\n' + colorlessError + ' baz error [baz]' + 126 | '\n'; 127 | 128 | var noSortOutput = '\nstyle/rainbows/horses.css' + 129 | '\n3:5\t' + colorlessWarning + ' foo warning [foo]' + 130 | '\n' + colorlessError + ' baz error [baz]' + 131 | '\n1:99\t' + colorlessWarning + ' bar warning [bar]' + 132 | '\n8:13\t' + colorlessWarning + ' ha warning [foo]' + 133 | '\n'; 134 | 135 | test('defaultFormatter with complex mock', function(t) { 136 | t.equal( 137 | stripColor(defaultFormatter({ 138 | messages: complexMessages, 139 | source: path.resolve(process.cwd(), 'style/rainbows/horses.css'), 140 | })), 141 | complexOutput, 142 | 'complex' 143 | ); 144 | 145 | var noPositionSortFormatter = formatter({ sortByPosition: false }); 146 | 147 | t.equal( 148 | stripColor(noPositionSortFormatter({ 149 | messages: complexMessages, 150 | source: path.resolve(process.cwd(), 'style/rainbows/horses.css'), 151 | })), 152 | noPositionSortOutput, 153 | '`sortByPosition: false` complex' 154 | ); 155 | 156 | var positionlessLastFormatter = formatter({ positionless: 'last' }); 157 | t.equal( 158 | stripColor(positionlessLastFormatter({ 159 | messages: complexMessages, 160 | source: path.resolve(process.cwd(), 'style/rainbows/horses.css'), 161 | })), 162 | positionlessLastOutput, 163 | '`positionless: last` complex' 164 | ); 165 | 166 | var noSortFormatter = formatter({ sortByPosition: false, positionless: 'any' }); 167 | t.equal( 168 | stripColor(noSortFormatter({ 169 | messages: complexMessages, 170 | source: path.resolve(process.cwd(), 'style/rainbows/horses.css'), 171 | })), 172 | noSortOutput, 173 | 'unsorted complex' 174 | ); 175 | 176 | t.end(); 177 | }); 178 | 179 | var onRootMessages = [ 180 | { 181 | type: 'warning', 182 | text: 'blergh', 183 | node: { 184 | type: 'root', 185 | // warnings on root do not have start position 186 | source: {}, 187 | }, 188 | plugin: 'reject-root', 189 | }, 190 | ]; 191 | 192 | var onRootResult = '\n' + 193 | '\n' + colorlessWarning + ' blergh [reject-root]\n'; 194 | 195 | test('defaultFormatter with mocked warning on root', function(t) { 196 | t.equal( 197 | stripColor(defaultFormatter({ 198 | messages: onRootMessages, 199 | source: '', 200 | })), 201 | onRootResult 202 | ); 203 | t.end(); 204 | }); 205 | 206 | var oneMessage = [ 207 | { 208 | type: 'warning', 209 | plugin: 'foo', 210 | text: 'foo warning', 211 | }, 212 | ]; 213 | 214 | var oneMessageResult = '\n' + colorlessWarning + ' foo warning [foo]\n'; 215 | 216 | test('defaultFormatter with undefined source', function(t) { 217 | t.equal( 218 | stripColor(defaultFormatter({ 219 | messages: oneMessage, 220 | source: undefined, 221 | })), 222 | oneMessageResult 223 | ); 224 | t.end(); 225 | }); 226 | 227 | test('defaultFormatter with no messages', function(t) { 228 | t.equal( 229 | stripColor(defaultFormatter({ messages: [] })), 230 | '' 231 | ); 232 | t.end(); 233 | }); 234 | 235 | test('defaultFormatter with real sourcemaps', function(t) { 236 | var map = new sourceMap.SourceMapGenerator({ file: 'file.css' }); 237 | map.addMapping({ 238 | generated: { line: 2, column: 7 }, 239 | source: 'file.original.css', 240 | original: { line: 102, column: 107 }, 241 | }); 242 | 243 | console.log(map instanceof sourceMap.SourceMapGenerator) 244 | 245 | var root = postcss.parse('.button { color: red; }', { 246 | from: 'file.css', 247 | map: { prev: map.toString() }, 248 | }); 249 | 250 | var message = { line: 2, column: 7, node: root.nodes[0], text: 'blargh', plugin: 'foo' }; 251 | 252 | t.equal( 253 | stripColor(defaultFormatter({ messages: [message] })), 254 | '\n102:107\tblargh [foo]\n' 255 | ); 256 | t.end(); 257 | }); 258 | 259 | var textlessMessages = [ 260 | { 261 | type: 'warning', 262 | plugin: 'foo', 263 | }, 264 | { 265 | type: 'dependency', 266 | plugin: 'bar', 267 | file: 'bar file', 268 | }, 269 | ]; 270 | 271 | var textlessMessagesOutput = ''; 272 | 273 | test('defaultFormatter with messages without text property', function(t) { 274 | t.equal( 275 | stripColor(defaultFormatter({ 276 | messages: textlessMessages, 277 | source: '', 278 | })), 279 | textlessMessagesOutput, 280 | 'basic' 281 | ); 282 | 283 | t.end(); 284 | }); 285 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | require('./formatter'); 2 | require('./reporter'); 3 | -------------------------------------------------------------------------------- /test/lessIntegration.js: -------------------------------------------------------------------------------- 1 | var less = require('less'); 2 | var postcss = require('postcss'); 3 | var stylelint = require('stylelint'); 4 | var reporter = require('..'); 5 | var fs = require('fs'); 6 | var path = require('path'); 7 | 8 | var lessSource = path.join(__dirname, 'fixtures/less-bar.less'); 9 | 10 | fs.readFile(lessSource, 'utf8', function(err, code) { 11 | if (err) throw err; 12 | 13 | var lessOptions = { 14 | sourceMap: { sourceMapFileInline: true }, 15 | paths: [path.join(__dirname, 'fixtures')], 16 | filename: lessSource, 17 | }; 18 | less.render(code, lessOptions).then(function(output) { 19 | return postcss() 20 | .use(stylelint({ rules: { 'selector-no-id': true } })) 21 | .use(reporter()) 22 | .process(output.css, { from: lessSource }) 23 | }).catch(function(err) { console.log(err.stack); }); 24 | }); 25 | -------------------------------------------------------------------------------- /test/reporter.js: -------------------------------------------------------------------------------- 1 | var test = require('tape'); 2 | var reporter = require('../lib/reporter'); 3 | 4 | var mockSimpleResult = { 5 | messages: [ 6 | { 7 | type: 'warning', 8 | plugin: 'foo', 9 | text: 'foo warning', 10 | }, 11 | { 12 | type: 'warning', 13 | plugin: 'bar', 14 | text: 'bar warning', 15 | }, 16 | { 17 | type: 'warning', 18 | plugin: 'baz', 19 | text: 'baz warning', 20 | }, 21 | { 22 | type: 'warning', 23 | plugin: 'baz', 24 | text: 'baz error', 25 | }, 26 | ], 27 | root: { 28 | source: { 29 | input: { 30 | id: '', 31 | }, 32 | }, 33 | }, 34 | }; 35 | 36 | function clone(toClone) { 37 | return JSON.parse(JSON.stringify(toClone)); 38 | } 39 | 40 | test('reporter with simple mock result', function(t) { 41 | var tracker = {}; 42 | var testReporter = reporter({ 43 | formatter: mockFormatter(tracker), 44 | }); 45 | t.doesNotThrow(function() { 46 | testReporter.OnceExit(null, { result: mockSimpleResult }); 47 | }); 48 | t.deepEqual(tracker.messages, mockSimpleResult.messages); 49 | t.equal(tracker.source, ''); 50 | t.end(); 51 | }); 52 | 53 | var mockResultContainingNonWarningMessage = { 54 | messages: [ 55 | { 56 | type: 'dependency', 57 | plugin: 'foo', 58 | }, 59 | { 60 | type: 'warning', 61 | plugin: 'foo', 62 | text: 'foo warning', 63 | }, 64 | { 65 | type: 'error', 66 | plugin: 'foo', 67 | text: 'foo error', 68 | }, 69 | ], 70 | root: { 71 | source: { 72 | input: { 73 | id: '', 74 | }, 75 | }, 76 | }, 77 | }; 78 | 79 | test('reporter with simple mock result containing non warning typed message', function(t) { 80 | var tracker = {}; 81 | var expectedMessages = [ 82 | { 83 | type: 'warning', 84 | plugin: 'foo', 85 | text: 'foo warning', 86 | }, 87 | { 88 | type: 'error', 89 | plugin: 'foo', 90 | text: 'foo error', 91 | }, 92 | ]; 93 | var testReporter = reporter({ 94 | formatter: mockFormatter(tracker), 95 | }); 96 | t.throws(function() { 97 | testReporter.OnceExit(null, { 98 | result: mockResultContainingNonWarningMessage, 99 | }); 100 | }); 101 | t.deepEqual(tracker.messages, expectedMessages); 102 | t.equal(tracker.source, ''); 103 | t.end(); 104 | }); 105 | 106 | test('reporter with simple mock result and whitelisted plugins', function(t) { 107 | var tracker = {}; 108 | var testReporter = reporter({ 109 | formatter: mockFormatter(tracker), 110 | plugins: ['foo', 'bar'], 111 | }); 112 | testReporter.OnceExit(null, { result: mockSimpleResult }); 113 | t.deepEqual( 114 | tracker.messages, 115 | [ 116 | { 117 | type: 'warning', 118 | plugin: 'foo', 119 | text: 'foo warning', 120 | }, 121 | { 122 | type: 'warning', 123 | plugin: 'bar', 124 | text: 'bar warning', 125 | }, 126 | ] 127 | ); 128 | t.equal(tracker.source, ''); 129 | t.end(); 130 | }); 131 | 132 | test('reporter with simple mock result and blacklisted plugins', function(t) { 133 | var tracker = {}; 134 | var testReporter = reporter({ 135 | formatter: mockFormatter(tracker), 136 | plugins: ['!foo', '!baz'], 137 | }); 138 | testReporter.OnceExit(null, { result: mockSimpleResult }); 139 | t.deepEqual( 140 | tracker.messages, 141 | [ 142 | { 143 | type: 'warning', 144 | plugin: 'bar', 145 | text: 'bar warning', 146 | }, 147 | ] 148 | ); 149 | t.end(); 150 | }); 151 | 152 | test('reporter with simple mock result and function-filtered plugins', function(t) { 153 | var cloneResult = clone(mockSimpleResult); 154 | cloneResult.messages.push( 155 | { 156 | type: 'error', 157 | plugin: 'baz', 158 | text: 'baz error', 159 | } 160 | ); 161 | var tracker = {}; 162 | var testReporter = reporter({ 163 | formatter: mockFormatter(tracker), 164 | filter: function(message) { return message.type === 'error'; }, 165 | }); 166 | t.throws(function() { 167 | testReporter.OnceExit(null, { 168 | result: cloneResult, 169 | }); 170 | }); 171 | t.deepEqual( 172 | tracker.messages, 173 | [ 174 | { 175 | type: 'error', 176 | plugin: 'baz', 177 | text: 'baz error', 178 | }, 179 | ] 180 | ); 181 | t.end(); 182 | }); 183 | 184 | test('reporter with simple mock result and empty plugins', function(t) { 185 | var tracker = {}; 186 | var testReporter = reporter({ 187 | formatter: mockFormatter(tracker), 188 | plugins: [], 189 | }); 190 | testReporter.OnceExit(null, { result: mockSimpleResult }); 191 | t.deepEqual( 192 | tracker.messages, 193 | mockSimpleResult.messages 194 | ); 195 | t.end(); 196 | }); 197 | 198 | test('reporter with simple mock result and clearReportedMessages', function(t) { 199 | var cloneResult = clone(mockSimpleResult); 200 | var tracker = {}; 201 | var testReporter = reporter({ 202 | formatter: mockFormatter(tracker), 203 | clearReportedMessages: true, 204 | }); 205 | testReporter.OnceExit(null, { result: cloneResult }); 206 | t.deepEqual(cloneResult.messages, []); 207 | t.end(); 208 | }); 209 | 210 | test('reporter with simple mock result, whitelisted plugins and clearReportedMessages', function(t) { 211 | var cloneResult = clone(mockSimpleResult); 212 | var tracker = {}; 213 | var testReporter = reporter({ 214 | formatter: mockFormatter(tracker), 215 | plugins: ['baz', 'foo'], 216 | clearReportedMessages: true, 217 | }); 218 | testReporter.OnceExit(null, { result: cloneResult }); 219 | t.deepEqual( 220 | cloneResult.messages, 221 | [ 222 | { 223 | type: 'warning', 224 | plugin: 'bar', 225 | text: 'bar warning', 226 | }, 227 | ] 228 | ); 229 | t.end(); 230 | }); 231 | 232 | test('reporter with simple mock result and clearAllMessages', function(t) { 233 | var cloneResult = clone(mockSimpleResult); 234 | var tracker = {}; 235 | var testReporter = reporter({ 236 | formatter: mockFormatter(tracker), 237 | clearAllMessages: true, 238 | }); 239 | testReporter.OnceExit(null, { result: cloneResult }); 240 | t.deepEqual(cloneResult.messages, []); 241 | t.end(); 242 | }); 243 | 244 | test('reporter with simple mock result, clearAllMessages and whitelisted plugins', function(t) { 245 | var cloneResult = clone(mockSimpleResult); 246 | var tracker = {}; 247 | var testReporter = reporter({ 248 | formatter: mockFormatter(tracker), 249 | plugins: ['foo'], 250 | clearAllMessages: true, 251 | }); 252 | testReporter.OnceExit(null, { result: cloneResult }); 253 | t.deepEqual( 254 | cloneResult.messages, 255 | [ 256 | { 257 | type: 'warning', 258 | plugin: 'bar', 259 | text: 'bar warning', 260 | }, 261 | { 262 | type: 'warning', 263 | plugin: 'baz', 264 | text: 'baz warning', 265 | }, 266 | { 267 | type: 'warning', 268 | plugin: 'baz', 269 | text: 'baz error', 270 | }, 271 | ] 272 | ); 273 | t.end(); 274 | }); 275 | 276 | test('reporter with simple mock result and throwError', function(t) { 277 | var cloneResult = clone(mockSimpleResult); 278 | var tracker = {}; 279 | var testReporter = reporter({ 280 | formatter: mockFormatter(tracker), 281 | throwError: true, 282 | }); 283 | t.throws(function() { 284 | testReporter.OnceExit(null, { result: cloneResult }); 285 | }); 286 | t.end(); 287 | }); 288 | 289 | function mockFormatter(tracker) { 290 | return function(obj) { 291 | tracker.messages = obj.messages; 292 | tracker.source = obj.source; 293 | return 'bogus report'; 294 | }; 295 | } 296 | 297 | var mockResultFromFile = { 298 | messages: [ 299 | { 300 | type: 'warning', 301 | plugin: 'baz', 302 | text: 'baz warning', 303 | }, 304 | ], 305 | root: { 306 | source: { 307 | input: { 308 | file: '/path/to/file.css', 309 | }, 310 | }, 311 | }, 312 | }; 313 | 314 | test('reporter with mock containing file source', function(t) { 315 | var tracker = {}; 316 | var testReporter = reporter({ 317 | formatter: mockFormatter(tracker), 318 | }); 319 | testReporter.OnceExit(null, { result: mockResultFromFile }); 320 | t.equal(tracker.source, '/path/to/file.css'); 321 | t.end(); 322 | }) 323 | 324 | var mockResultNoSource = { 325 | messages: [ 326 | { 327 | type: 'warning', 328 | plugin: 'baz', 329 | text: 'baz warning', 330 | }, 331 | ], 332 | root: {}, 333 | }; 334 | 335 | test('reporter with mock containing no source', function(t) { 336 | var tracker = {}; 337 | var testReporter = reporter({ 338 | formatter: mockFormatter(tracker), 339 | }); 340 | testReporter.OnceExit(null, { result: mockResultNoSource }); 341 | t.equal(tracker.source, ''); 342 | t.end(); 343 | }) 344 | 345 | var mockWarningNodeResult = { 346 | messages: [ 347 | { 348 | type: 'warning', 349 | plugin: 'foo', 350 | text: 'foo warning', 351 | node: { 352 | source: { 353 | input: { 354 | file: 'foo.css', 355 | }, 356 | }, 357 | }, 358 | }, 359 | { 360 | type: 'warning', 361 | plugin: 'baz', 362 | text: 'baz warning', 363 | node: { 364 | source: { 365 | input: { 366 | file: 'bar.css', 367 | }, 368 | }, 369 | }, 370 | }, 371 | { 372 | type: 'error', 373 | plugin: 'pat', 374 | text: 'pat error', 375 | node: { 376 | source: { 377 | input: { 378 | id: '', 379 | }, 380 | }, 381 | }, 382 | }, 383 | { 384 | type: 'warning', 385 | plugin: 'bar', 386 | text: 'bar warning', 387 | node: { 388 | source: { 389 | input: { 390 | file: 'foo.css', 391 | }, 392 | }, 393 | }, 394 | }, 395 | { 396 | type: 'error', 397 | plugin: 'hoo', 398 | text: 'hoo error', 399 | node: { 400 | source: { 401 | input: { 402 | id: '', 403 | }, 404 | }, 405 | }, 406 | }, 407 | { 408 | type: 'error', 409 | plugin: 'hah', 410 | text: 'hah error', 411 | }, 412 | ], 413 | root: { 414 | source: { 415 | input: { 416 | id: '', 417 | }, 418 | }, 419 | }, 420 | }; 421 | 422 | function mockMultiSourceFormatter(tracker) { 423 | return function(obj) { 424 | tracker.push(obj); 425 | return 'bogus report'; 426 | }; 427 | } 428 | 429 | test('reporter with warnings that messages that each have nodes', function(t) { 430 | var tracker = []; 431 | var testReporter = reporter({ 432 | formatter: mockMultiSourceFormatter(tracker), 433 | }); 434 | t.throws(function() { 435 | testReporter.OnceExit(null, { 436 | result: mockWarningNodeResult, 437 | }); 438 | }); 439 | t.deepEqual(tracker, [ 440 | { 441 | source: 'foo.css', 442 | messages: [ 443 | { 444 | type: 'warning', 445 | plugin: 'foo', 446 | text: 'foo warning', 447 | node: { 448 | source: { 449 | input: { 450 | file: 'foo.css', 451 | }, 452 | }, 453 | }, 454 | }, 455 | { 456 | type: 'warning', 457 | plugin: 'bar', 458 | text: 'bar warning', 459 | node: { 460 | source: { 461 | input: { 462 | file: 'foo.css', 463 | }, 464 | }, 465 | }, 466 | }, 467 | ], 468 | }, 469 | { 470 | source: 'bar.css', 471 | messages: [ 472 | { 473 | type: 'warning', 474 | plugin: 'baz', 475 | text: 'baz warning', 476 | node: { 477 | source: { 478 | input: { 479 | file: 'bar.css', 480 | }, 481 | }, 482 | }, 483 | }, 484 | ], 485 | }, 486 | { 487 | source: '', 488 | messages: [ 489 | { 490 | type: 'error', 491 | plugin: 'pat', 492 | text: 'pat error', 493 | node: { 494 | source: { 495 | input: { 496 | id: '', 497 | }, 498 | }, 499 | }, 500 | }, 501 | { 502 | type: 'error', 503 | plugin: 'hoo', 504 | text: 'hoo error', 505 | node: { 506 | source: { 507 | input: { 508 | id: '', 509 | }, 510 | }, 511 | }, 512 | }, 513 | ], 514 | }, 515 | { 516 | source: '', 517 | messages: [ 518 | { 519 | type: 'error', 520 | plugin: 'hah', 521 | text: 'hah error', 522 | }, 523 | ], 524 | }, 525 | ]); 526 | t.end(); 527 | }); 528 | -------------------------------------------------------------------------------- /test/visual.js: -------------------------------------------------------------------------------- 1 | var postcss = require('postcss'); 2 | var stylelint = require('stylelint'); 3 | var reporter = require('..'); 4 | var fs = require('fs'); 5 | var sourceMap = require('source-map'); 6 | 7 | var reporterOptions = { 8 | // positionless: 'last', 9 | // sortByPosition: true, 10 | // noIcon: true, 11 | // noPlugin: true, 12 | // plugins: ['stylelint'], 13 | }; 14 | 15 | fs.readFile('test/fixtures/forVisual.css', { encoding: 'utf8' }, function(err, data) { 16 | if (err) throw err; 17 | 18 | var processOptions = { 19 | from: 'test/fixtures/forVisual.css', 20 | map: { prev: createSourceMap() }, 21 | }; 22 | 23 | postcss() 24 | .use(stylelint({ 25 | rules: { 26 | 'block-opening-brace-newline-after': 'always', 27 | 'declaration-colon-space-after': 'always', 28 | 'length-zero-no-unit': true, 29 | 'indentation': 'tab', 30 | }, 31 | })) 32 | .use(reporter(reporterOptions)) 33 | .process(data, processOptions) 34 | .then(function() { 35 | console.log('There\'s your visual confirmation that it works.'); 36 | }) 37 | .catch(function(error) { 38 | console.log(error.stack); 39 | }); 40 | }); 41 | 42 | function createSourceMap() { 43 | var map = new sourceMap.SourceMapGenerator({ file: 'forVisual.css' }); 44 | map.addMapping({ 45 | generated: { line: 2, column: 7 }, 46 | source: 'forVisual.original.css', 47 | original: { line: 102, column: 107 }, 48 | }); 49 | return map.toString(); 50 | } 51 | --------------------------------------------------------------------------------