├── .eslintignore ├── .eslintrc ├── .github └── workflows │ └── node.js.yml ├── .gitignore ├── .npmignore ├── .nycrc ├── LICENSE.txt ├── README.md ├── examples ├── .eslintrc ├── package.json └── samples │ ├── duplicate-keys.json │ ├── good-json.json │ ├── json-with-comments.json │ ├── whole-mess.json │ └── wrong-syntax.json ├── package-lock.json ├── package.json ├── src └── index.js ├── test ├── .eslintrc.with-recommended-comments-config.mjs ├── .eslintrc.with-recommended-comments-legacy-config.json ├── .eslintrc.with-recommended-config.mjs ├── .eslintrc.with-recommended-legacy-config.json ├── custom.eslintrc-legacy.json ├── custom.eslintrc.config.mjs ├── integration-across-eslint-majors.sh ├── integration-legacy.test.js ├── integration.test.js ├── packages │ ├── eslint-v7-legacy │ │ ├── package-lock.json │ │ ├── package.json │ │ └── test │ ├── eslint-v8-legacy │ │ ├── package-lock.json │ │ ├── package.json │ │ └── test │ ├── eslint-v8 │ │ ├── package-lock.json │ │ ├── package.json │ │ └── test │ └── eslint-v9 │ │ ├── package-lock.json │ │ ├── package.json │ │ └── test ├── samples └── unit.test.js └── vendor └── eslint-plugin-self ├── CHANGELOG.md ├── LICENSE.md ├── README.md ├── index.js └── package.json /.eslintignore: -------------------------------------------------------------------------------- 1 | test/packages 2 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "node": true, 4 | "mocha": true, 5 | "es6": true 6 | }, 7 | "parserOptions": { 8 | "ecmaVersion": 2017 9 | }, 10 | "plugins": ["prettier"], 11 | "extends": ["eslint:recommended"], 12 | "rules": { 13 | "prettier/prettier": ["warn", { 14 | "singleQuote": true, 15 | "tabWidth": 4, 16 | "printWidth": 100, 17 | "bracketSpacing": false 18 | }], 19 | "no-console": "error" 20 | }, 21 | "overrides": [ 22 | { 23 | "files": "*.mjs", 24 | "parserOptions": { 25 | "sourceType": "module" 26 | } 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /.github/workflows/node.js.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 | 4 | name: Build 5 | 6 | on: 7 | push: 8 | branches: [ master ] 9 | pull_request: 10 | branches: [ master ] 11 | 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | 17 | strategy: 18 | matrix: 19 | node-version: [18.x, 20.x] 20 | # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ 21 | 22 | steps: 23 | - uses: actions/checkout@v3 24 | - name: Use Node.js ${{ matrix.node-version }} 25 | uses: actions/setup-node@v3 26 | with: 27 | node-version: ${{ matrix.node-version }} 28 | cache: 'npm' 29 | - run: npm ci 30 | - run: npm run lint 31 | - run: npm run test 32 | - run: npm run integration ci 7-legacy 8-legacy 8 9 # eslint versions 33 | - run: npm run integration test 7-legacy 8-legacy 8 9 # eslint versions 34 | - name: Upload coverage to Codecov 35 | uses: codecov/codecov-action@v2 36 | with: 37 | verbose: true 38 | directory: coverage 39 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | private 3 | tmp 4 | coverage 5 | .nyc_output 6 | example/package-lock.json 7 | .vscode/ 8 | .idea/ 9 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | test 2 | examples 3 | private 4 | tmp 5 | coverage 6 | .npmignore 7 | .eslintrc 8 | .github 9 | .vscode 10 | .nycrc 11 | .eslintignore 12 | vendor 13 | -------------------------------------------------------------------------------- /.nycrc: -------------------------------------------------------------------------------- 1 | { 2 | "all": true, 3 | "include": ["src"], 4 | "reporter": ["text", "text-summary", "lcov"] 5 | } 6 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) 2015-2021 Azeem Bande-Ali 3 | 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, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 19 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 20 | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE 21 | OR OTHER DEALINGS IN THE SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # eslint-plugin-json 2 | 3 | [![npm](https://img.shields.io/npm/v/eslint-plugin-json.svg)](https://www.npmjs.com/package/eslint-plugin-json) 4 | [![Build](https://github.com/azeemba/eslint-plugin-json/workflows/Build/badge.svg)](https://github.com/azeemba/eslint-plugin-json/actions/workflows/node.js.yml) 5 | [![codecov](https://codecov.io/gh/azeemba/eslint-plugin-json/branch/master/graph/badge.svg)](https://codecov.io/gh/azeemba/eslint-plugin-json) 6 | [![Code Climate](https://codeclimate.com/github/azeemba/eslint-plugin-json/badges/gpa.svg)](https://codeclimate.com/github/azeemba/eslint-plugin-json) 7 | 8 | > Eslint plugin for JSON files 9 | 10 | :warning: If you are using eslint v9 or newer, use eslint-plugin-json v4 or newer. 11 | 12 | ## Installation 13 | 14 | Install `eslint-plugin-json` along [`eslint`](http://eslint.org): 15 | 16 | ```shell 17 | $ npm install --save-dev eslint eslint-plugin-json 18 | # or 19 | $ yarn add --dev eslint eslint-plugin-json 20 | ``` 21 | 22 | **Note:** If you installed ESLint globally (using the `-g` flag) then you must also install `eslint-plugin-json` globally. 23 | 24 | ## Usage 25 | 26 | ### Basic configuration (Flat Config ESLint Format) 27 | 28 | The `json` plugin ship with two recommended config you can use to easily activate it via the `extends` key. 29 | It comes in two flavor: one strict (`recommended`) and one allowing comments `recommended-with-comments`. 30 | 31 | 32 | ```js 33 | import json from 'eslint-plugin-json'; 34 | 35 | export default [ 36 | { 37 | files: ["**/*.json"], 38 | ...json.configs["recommended"] 39 | } 40 | ]; 41 | ``` 42 | 43 | ### Basic configuration (Legacy ESLint Format) 44 | 45 | The `json` plugin ship with two recommended config you can use to easily activate it via the `extends` key. 46 | It comes in two flavor: one strict (`recommended-legacy`) and one allowing comments `recommended-with-comments-legacy`. 47 | 48 | 49 | ```json 50 | { 51 | "extends": ["plugin:json/recommended-legacy"] 52 | } 53 | ``` 54 | 55 | You can run ESLint on individual JSON files or you can use the `--ext` flag to add JSON files to the list. 56 | 57 | ``` 58 | eslint . --ext .json,.js 59 | eslint example.json 60 | ``` 61 | 62 | ### Custom Configuration (Flat Config ESLint Format) 63 | 64 | If you want more granular control over which rules, and which severity you want. 65 | 66 | If you want them all, add the `json/json` rule (or its alias `json/*`). (this is what the `recommended` config does) 67 | 68 | #### Global rules 69 | The global rules (`json/json` or its alias `json/*`) activate all the rules. 70 | Note it can be configured to ignore errors cause by comments. 71 | To do so, add option `'allowComments'` or `{allowComments: true}` 72 | 73 | For instance: 74 | ```js 75 | import json from "eslint-plugin-json"; 76 | 77 | export default [ 78 | { 79 | files: ["**/*.json"], 80 | plugins: { json }, 81 | processor: "json/json" 82 | "rules": { 83 | "json/*": ["error", "allowComments"], 84 | // or the equivalent: 85 | "json/*": ["error", {"allowComments": true}] 86 | } 87 | }, 88 | ]; 89 | ``` 90 | 91 | ### Custom Configuration (Legacy ESLint Format) 92 | 93 | If you want more granular control over which rules, and which severity you want. 94 | 95 | Add `json` to the list of plugins (You can omit the `eslint-plugin-` prefix) 96 | Then pick your rules. 97 | 98 | If you want them all, add the `json/json` rule (or its alias `json/*`). (this is what the `recommended-legacy` config does) 99 | 100 | #### Global rules 101 | The global rules (`json/json` or its alias `json/*`) activate all the rules. 102 | Note it can be configured to ignore errors cause by comments. 103 | To do so, add option `'allowComments'` or `{allowComments: true}` 104 | 105 | For instance: 106 | ```json 107 | { 108 | "plugins": [ 109 | "json" 110 | ], 111 | "rules": { 112 | "json/*": ["error", "allowComments"], 113 | // or the equivalent: 114 | "json/*": ["error", {"allowComments": true}] 115 | } 116 | } 117 | ``` 118 | 119 | #### Individual Rules 120 | Here is the list of individual rules (with name in `kebab-case`)in case you want granular error/warning level: 121 | - `json/undefined` 122 | - `json/enum-value-mismatch` 123 | - `json/unexpected-end-of-comment` 124 | - `json/unexpected-end-of-string` 125 | - `json/unexpected-end-of-number` 126 | - `json/invalid-unicode` 127 | - `json/invalid-escape-character` 128 | - `json/invalid-character` 129 | - `json/property-expected` 130 | - `json/comma-expected` 131 | - `json/colon-expected` 132 | - `json/value-expected` 133 | - `json/comma-or-close-backet-expected` 134 | - `json/comma-or-close-brace-expected` 135 | - `json/trailing-comma` 136 | - `json/duplicate-key` 137 | - `json/comment-not-permitted` 138 | - `json/schema-resolve-error` 139 | - `json/unknown` (error that does not match previous ones) 140 | 141 | ## FAQs 142 | 143 | 144 | #### How does eslint-plugin-json work? 145 | 146 | Starting from version 1.3, this plugin relies on what [VSCode](https://github.com/Microsoft/vscode-json-languageservice) 147 | uses for its implementation of JSON validation. 148 | 149 | Originaly this plugin used to use JSHint, however due to heavy dependencies, it was replaced. 150 | 151 | #### Why doesn't this plugin use `eslint` itself or just `JSON.parse`? 152 | 153 | `eslint`'s parser is a JavaScript parser. JSON is a stricter subset and things 154 | that are valid JavaScript are not valid JSON. This is why something more specific 155 | is more appropriate. 156 | 157 | While `JSON.parse` seems ideal, it is not designed to continue after the first error. 158 | So if you have a missing trailing comma in the start of the file, the rest of the file 159 | will go unlinted. A smarter parser that can self-correct after seeing errors is needed 160 | which the VSCode implementation provides by leveraging the 161 | [jsonc-parser](https://www.npmjs.com/package/jsonc-parser) module. 162 | 163 | 164 | #### Will this plugin provide more configuration? 165 | 166 | It is now possible as you can see in the [Configuration section](#custom-configuration). 167 | 168 | Additionally, support for autofixing common errors could be added in the feature. 169 | 170 | #### Is `eslint` really the best tool to lint my JSON? 171 | 172 | Not really. `eslint` plugin interface wasn't designed to lint a completely different language but 173 | its interface is flexible enough to allow it. So this plugin is certainly unusual. 174 | 175 | Ideally, your editor would natively supports linting JSON. If it doesn't though, then might as well 176 | use this plugin. Hacky linting is better than no linting :). 177 | -------------------------------------------------------------------------------- /examples/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": ["json"], 3 | "rules": { 4 | "json/*": ["warn"], 5 | "json/duplicate-key": "error", 6 | "json/trailing-comma": "error" 7 | }, 8 | "overrides": [ 9 | { 10 | "files": ["samples/json-with-comments.json"], 11 | "rules": { 12 | "json/*": ["warn", {"allowComments": true}] 13 | } 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /examples/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eslint-plugin-json-example", 3 | "version": "1.0.0", 4 | "description": "Some example of usage of plugin", 5 | "main": "index.js", 6 | "scripts": { 7 | "lint": "eslint", 8 | "test": "node integration-test.js" 9 | }, 10 | "keywords": [], 11 | "license": "ISC", 12 | "devDependencies": { 13 | "eslint": "^6.3.0", 14 | "eslint-plugin-json": ".." 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /examples/samples/duplicate-keys.json: -------------------------------------------------------------------------------- 1 | { 2 | "iam": "here", 3 | "iam": "and here" 4 | } 5 | -------------------------------------------------------------------------------- /examples/samples/good-json.json: -------------------------------------------------------------------------------- 1 | { 2 | "hello": "world" 3 | } 4 | -------------------------------------------------------------------------------- /examples/samples/json-with-comments.json: -------------------------------------------------------------------------------- 1 | { 2 | "hello": "world" // with a comment 3 | } 4 | -------------------------------------------------------------------------------- /examples/samples/whole-mess.json: -------------------------------------------------------------------------------- 1 | { 2 | "iam": "here", 3 | "iam": "and here", // COMMENT 4 | } 5 | -------------------------------------------------------------------------------- /examples/samples/wrong-syntax.json: -------------------------------------------------------------------------------- 1 | { 2 | "oops": 3 | } 4 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eslint-plugin-json", 3 | "version": "4.0.1", 4 | "description": "eslint plugin for JSON files", 5 | "keywords": [ 6 | "eslint", 7 | "eslintplugin", 8 | "eslint-plugin", 9 | "json", 10 | "eslint-plugin-json" 11 | ], 12 | "author": "Azeem Bande-Ali ", 13 | "contributors": [ 14 | "Adriean Khisbe (https://github.com/AdrieanKhisbe/)" 15 | ], 16 | "main": "src/index.js", 17 | "scripts": { 18 | "integration": "test/integration-across-eslint-majors.sh", 19 | "test": "nyc mocha test/unit.test.js", 20 | "lint": "eslint src test", 21 | "eslint": "eslint" 22 | }, 23 | "repository": { 24 | "type": "git", 25 | "url": "git+https://github.com/azeemba/eslint-plugin-json.git" 26 | }, 27 | "bugs": { 28 | "url": "https://github.com/azeemba/eslint-plugin-json/issues" 29 | }, 30 | "dependencies": { 31 | "lodash": "^4.17.21", 32 | "vscode-json-languageservice": "^4.1.6" 33 | }, 34 | "devDependencies": { 35 | "chai": "^4.3.4", 36 | "codecov": "^3.8.3", 37 | "eslint": "^8.0.0", 38 | "eslint-config-prettier": "^8.3.0", 39 | "eslint-plugin-prettier": "^3.4.1", 40 | "eslint-plugin-self": "file:vendor/eslint-plugin-self", 41 | "mocha": "^10.4.0", 42 | "nyc": "^15.1.0", 43 | "prettier": "^2.3.2" 44 | }, 45 | "engines": { 46 | "node": ">=18.0" 47 | }, 48 | "url": "https://github.com/azeemba/eslint-plugin-json", 49 | "license": "MIT" 50 | } 51 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | const _ = require('lodash/fp'); 2 | const jsonService = require('vscode-json-languageservice'); 3 | 4 | const jsonServiceHandle = jsonService.getLanguageService({}); 5 | 6 | const ErrorCodes = { 7 | Undefined: 0, 8 | EnumValueMismatch: 1, 9 | UnexpectedEndOfComment: 0x101, 10 | UnexpectedEndOfString: 0x102, 11 | UnexpectedEndOfNumber: 0x103, 12 | InvalidUnicode: 0x104, 13 | InvalidEscapeCharacter: 0x105, 14 | InvalidCharacter: 0x106, 15 | PropertyExpected: 0x201, 16 | CommaExpected: 0x202, 17 | ColonExpected: 0x203, 18 | ValueExpected: 0x204, 19 | CommaOrCloseBacketExpected: 0x205, 20 | CommaOrCloseBraceExpected: 0x206, 21 | TrailingComma: 0x207, 22 | DuplicateKey: 0x208, 23 | CommentNotPermitted: 0x209, 24 | SchemaResolveError: 0x300, 25 | }; 26 | 27 | const AllErrorCodes = _.values(ErrorCodes); 28 | const AllowComments = 'allowComments'; 29 | 30 | const fileLintResults = {}; 31 | const fileComments = {}; 32 | const fileDocuments = {}; 33 | 34 | const getSignature = (problem) => 35 | `${problem.range.start.line} ${problem.range.start.character} ${problem.message}`; 36 | 37 | function getDiagnostics(jsonDocument) { 38 | return _.pipe( 39 | _.map((problem) => [getSignature(problem), problem]), 40 | _.reverse, // reverse ensure fromPairs keep first signature occurence of problem 41 | _.fromPairs 42 | )(jsonDocument.syntaxErrors); 43 | } 44 | const reportError = (filter) => (errorName, context) => { 45 | _.filter(filter, fileLintResults[context.getFilename()]).forEach((error) => { 46 | context.report({ 47 | ruleId: `json/${errorName}`, 48 | message: error.message, 49 | loc: { 50 | start: {line: error.range.start.line + 1, column: error.range.start.character}, 51 | end: {line: error.range.end.line + 1, column: error.range.end.character}, 52 | }, 53 | // later: see how to add fix 54 | }); 55 | }); 56 | }; 57 | const reportComment = (errorName, context) => { 58 | const ruleOption = _.head(context.options); 59 | if (ruleOption === AllowComments || _.get(AllowComments, ruleOption)) return; 60 | 61 | _.forEach((comment) => { 62 | context.report({ 63 | ruleId: errorName, 64 | message: 'Comment not allowed', 65 | loc: { 66 | start: {line: comment.start.line + 1, column: comment.start.character}, 67 | end: {line: comment.end.line + 1, column: comment.end.character}, 68 | }, 69 | }); 70 | }, fileComments[context.getFilename()]); 71 | }; 72 | 73 | const ruleSchema = [ 74 | { 75 | anyOf: [ 76 | { 77 | enum: ['allowComments'], 78 | }, 79 | { 80 | type: 'object', 81 | properties: { 82 | allowComments: {type: 'boolean'}, 83 | }, 84 | additionalProperties: false, 85 | }, 86 | ], 87 | }, 88 | ]; 89 | 90 | const makeRule = (errorName, reporters) => ({ 91 | meta: {schema: ruleSchema}, 92 | create(context) { 93 | return { 94 | Program() { 95 | _.flatten([reporters]).map((reporter) => reporter(errorName, context)); 96 | }, 97 | }; 98 | }, 99 | }); 100 | 101 | const rules = _.pipe( 102 | _.mapKeys(_.kebabCase), 103 | _.toPairs, 104 | _.map(([errorName, errorCode]) => [ 105 | errorName, 106 | makeRule( 107 | errorName, 108 | reportError((err) => err.code === errorCode) 109 | ), 110 | ]), 111 | _.fromPairs, 112 | _.assign({ 113 | '*': makeRule('*', [reportError(_.constant(true)), reportComment]), 114 | json: makeRule('json', [reportError(_.constant(true)), reportComment]), 115 | unknown: makeRule('unknown', reportError(_.negate(AllErrorCodes.includes))), 116 | 'comment-not-permitted': makeRule('comment-not-permitted', reportComment), 117 | }) 118 | )(ErrorCodes); 119 | 120 | const errorSignature = (err) => 121 | ['message', 'line', 'column', 'endLine', 'endColumn'].map((field) => err[field]).join('::'); 122 | 123 | const getErrorCode = _.pipe(_.get('ruleId'), _.split('/'), _.last); 124 | 125 | const meta = { 126 | name: 'eslint-plugin-json', 127 | version: '3.1.0', 128 | }; 129 | 130 | const jsonProcessor = { 131 | preprocess: function (text, fileName) { 132 | const textDocument = jsonService.TextDocument.create(fileName, 'json', 1, text); 133 | fileDocuments[fileName] = textDocument; 134 | const parsed = jsonServiceHandle.parseJSONDocument(textDocument); 135 | fileLintResults[fileName] = getDiagnostics(parsed); 136 | fileComments[fileName] = parsed.comments; 137 | return ['']; // sorry nothing ;) 138 | }, 139 | postprocess: function (messages, fileName) { 140 | const textDocument = fileDocuments[fileName]; 141 | delete fileLintResults[fileName]; 142 | delete fileComments[fileName]; 143 | return _.pipe( 144 | _.first, 145 | _.groupBy(errorSignature), 146 | _.mapValues((errors) => { 147 | if (errors.length === 1) return _.first(errors); 148 | // Otherwise there is two errors: the generic and specific one 149 | // json/* or json/json and json/some-code 150 | const firstErrorCode = getErrorCode(errors[0]); 151 | const isFirstGeneric = ['*', 'json'].includes(firstErrorCode); 152 | const genericError = errors[isFirstGeneric ? 0 : 1]; 153 | const specificError = errors[isFirstGeneric ? 1 : 0]; 154 | return genericError.severity > specificError.severity 155 | ? genericError 156 | : specificError; 157 | }), 158 | _.mapValues((error) => { 159 | const source = textDocument.getText({ 160 | start: {line: error.line - 1, character: error.column}, 161 | end: {line: error.endLine - 1, character: error.endColumn}, 162 | }); 163 | return _.assign(error, { 164 | source, 165 | column: error.column + 1, 166 | endColumn: error.endColumn + 1, 167 | }); 168 | }), 169 | _.values 170 | )(messages); 171 | }, 172 | }; 173 | 174 | const processors = { 175 | // Supports old config. 176 | '.json': jsonProcessor, 177 | // Supports new config. 178 | json: jsonProcessor, 179 | }; 180 | 181 | const configs = { 182 | 'recommended-legacy': { 183 | plugins: ['json'], 184 | rules: { 185 | 'json/*': 'error', 186 | }, 187 | }, 188 | 'recommended-with-comments-legacy': { 189 | plugins: ['json'], 190 | rules: { 191 | 'json/*': ['error', {allowComments: true}], 192 | }, 193 | }, 194 | }; 195 | 196 | const json = {meta, rules, configs, processors}; 197 | 198 | json.configs['recommended'] = { 199 | files: ['**/*.json'], 200 | plugins: { 201 | json, 202 | }, 203 | rules: { 204 | 'json/*': 'error', 205 | }, 206 | processor: 'json/json', 207 | }; 208 | json.configs['recommended-with-comments'] = { 209 | files: ['**/*.json'], 210 | plugins: { 211 | json, 212 | }, 213 | rules: { 214 | 'json/*': ['error', {allowComments: true}], 215 | }, 216 | processor: 'json/json', 217 | }; 218 | 219 | module.exports = json; 220 | -------------------------------------------------------------------------------- /test/.eslintrc.with-recommended-comments-config.mjs: -------------------------------------------------------------------------------- 1 | import json from '../src/index.js'; 2 | 3 | export default [json.configs['recommended-with-comments']]; 4 | -------------------------------------------------------------------------------- /test/.eslintrc.with-recommended-comments-legacy-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["plugin:self/recommended-with-comments-legacy"] 3 | } 4 | -------------------------------------------------------------------------------- /test/.eslintrc.with-recommended-config.mjs: -------------------------------------------------------------------------------- 1 | import json from '../src/index.js'; 2 | 3 | export default [json.configs['recommended']]; 4 | -------------------------------------------------------------------------------- /test/.eslintrc.with-recommended-legacy-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["plugin:self/recommended-legacy"] 3 | } 4 | -------------------------------------------------------------------------------- /test/custom.eslintrc-legacy.json: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": ["self"], 3 | "rules": { 4 | "self/*": "warn", 5 | "self/duplicate-key": "error", 6 | "self/trailing-comma": "error" 7 | }, 8 | "overrides": [ 9 | { 10 | "files": ["samples/json-with-comments.json"], 11 | "rules": { 12 | "self/*": ["warn", {"allowComments": true}] 13 | } 14 | }, 15 | { 16 | "files": ["samples/wrong-syntax.json"], 17 | "rules": { 18 | "self/*": "error" 19 | } 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /test/custom.eslintrc.config.mjs: -------------------------------------------------------------------------------- 1 | import json from '../src/index.js'; 2 | 3 | export default [ 4 | { 5 | files: ['**/*.json'], 6 | plugins: {json}, 7 | processor: 'json/json', 8 | rules: { 9 | 'json/*': 'warn', 10 | 'json/duplicate-key': 'error', 11 | 'json/trailing-comma': 'error', 12 | }, 13 | }, 14 | { 15 | files: ['samples/json-with-comments.json'], 16 | plugins: {json}, 17 | rules: { 18 | 'json/*': ['warn', {allowComments: true}], 19 | }, 20 | }, 21 | { 22 | files: ['samples/wrong-syntax.json'], 23 | plugins: {json}, 24 | rules: { 25 | 'json/*': 'error', 26 | }, 27 | }, 28 | ]; 29 | -------------------------------------------------------------------------------- /test/integration-across-eslint-majors.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | cmd="$1" 4 | shift 5 | 6 | case "$cmd" in 7 | test|install|ci);; 8 | *) 9 | echo "Unknown integration subcommand $cmd" 10 | exit 2 11 | ;; 12 | esac 13 | 14 | if [[ -z "$@" ]]; then 15 | echo "No eslint major versions were provided" 16 | exit 2 17 | fi 18 | 19 | echo "Will perform $cmd for following eslint majors lines: $@" 20 | 21 | for version in $@; do 22 | (cd test/packages/eslint-v$version && npm $cmd) 23 | done 24 | -------------------------------------------------------------------------------- /test/integration-legacy.test.js: -------------------------------------------------------------------------------- 1 | const {execFileSync} = require('child_process'); 2 | const {expect} = require('chai'); 3 | const _ = require('lodash/fp'); 4 | 5 | const SCOPE = 'self'; // (for test purpose only, relying the the eslint-plugin-self for tests) 6 | const scoped = (rule) => `${SCOPE}/${rule}`; 7 | 8 | function getLintResults(filename, eslintConfig) { 9 | try { 10 | const results = execFileSync( 11 | 'eslint', 12 | [ 13 | '--config', 14 | eslintConfig || 'custom.eslintrc-legacy.json', 15 | '--format', 16 | 'json', 17 | filename, 18 | ], 19 | { 20 | encoding: 'utf8', 21 | stdio: 'pipe', 22 | cwd: __dirname, 23 | } 24 | ); 25 | return JSON.parse(results)[0]; 26 | } catch (err) { 27 | if (err.status !== 1 && err.status !== 0) 28 | throw new Error(`The lint command itself failed: ${err.status}, ${err.message}`); 29 | return JSON.parse(err.stdout)[0]; 30 | } 31 | } 32 | 33 | function groupInfringementsByRules(fileResults) { 34 | const errors = {}; 35 | const warnings = {}; 36 | for (const infringement of fileResults.messages) { 37 | const counter = infringement.severity === 1 ? warnings : errors; 38 | counter[infringement.ruleId] = (counter[infringement.ruleId] || 0) + 1; 39 | } 40 | return {errors, warnings}; 41 | } 42 | function validateInfringementExpectation(expected, actualSituation) { 43 | if (_.isEmpty(expected)) return; 44 | for (const someExpected of expected || []) { 45 | const [rule, expectedCount] = someExpected.split(':'); 46 | if (expectedCount) 47 | expect(actualSituation[scoped(rule)]).to.equal( 48 | Number(expectedCount), 49 | `unexpected count of rule ${rule}` 50 | ); 51 | else expect(actualSituation).to.have.property(scoped(rule)); 52 | } 53 | const allExpectedErrors = expected.map(_.pipe(_.split(':'), _.head, scoped)); 54 | expect(_.xor(_.keys(actualSituation), allExpectedErrors)).to.have.length( 55 | 0, 56 | 'Extra errors found' 57 | ); 58 | } 59 | 60 | function validateFile(filename, expectations = {}) { 61 | const results = getLintResults(`samples/${filename}.json`, expectations.eslintrc); 62 | const resultIndex = groupInfringementsByRules(results); 63 | validateInfringementExpectation(expectations.errors, resultIndex.errors, 'errors'); 64 | validateInfringementExpectation(expectations.warnings, resultIndex.warnings, 'warnings'); 65 | 66 | if (expectations.errorCount !== undefined) 67 | expect(results.errorCount).to.equal(expectations.errorCount, 'invalid count of errors'); 68 | if (expectations.warningCount !== undefined) 69 | expect(results.warningCount).to.equal( 70 | expectations.warningCount, 71 | 'invalid count of warnings' 72 | ); 73 | } 74 | 75 | describe('Integrations tests', function () { 76 | it('validate correct json', function () { 77 | validateFile('good-json', {errorCount: 0, warningCount: 0}); 78 | }); 79 | it('detect duplicate keys', function () { 80 | validateFile('duplicate-keys', { 81 | errors: ['duplicate-key:2'], 82 | }); // FIXME: give error count! 83 | }); 84 | it('handle comments in json', function () { 85 | validateFile('json-with-comments', {errorCount: 0, warningCount: 0}); 86 | }); 87 | it('detect wrong syntax', function () { 88 | validateFile('wrong-syntax', {errorCount: 1, warningCount: 0}); 89 | }); 90 | it('detect many infringements in messy json', function () { 91 | validateFile('whole-mess', { 92 | errors: ['duplicate-key:2', 'trailing-comma'], 93 | warnings: ['*'], 94 | }); 95 | }); 96 | }); 97 | 98 | describe('Integrations tests with config', function () { 99 | describe('recommended', function () { 100 | it('detect many infringements in messy json', function () { 101 | validateFile('whole-mess', { 102 | eslintrc: '.eslintrc.with-recommended-legacy-config.json', 103 | errors: ['*:4'], 104 | }); 105 | }); 106 | 107 | it('handle comments in json', function () { 108 | validateFile('json-with-comments', { 109 | eslintrc: '.eslintrc.with-recommended-legacy-config.json', 110 | errorCount: 1, // comment-not-permitted under the '*' glob 111 | }); 112 | }); 113 | }); 114 | describe('recommended-with-comments', function () { 115 | it('detect many infringements in messy json', function () { 116 | validateFile('whole-mess', { 117 | eslintrc: '.eslintrc.with-recommended-comments-legacy-config.json', 118 | errors: ['*:3'], 119 | }); 120 | }); 121 | 122 | it('handle comments in json', function () { 123 | validateFile('json-with-comments', { 124 | eslintrc: '.eslintrc.with-recommended-comments-legacy-config.json', 125 | errorCount: 0, 126 | warningCount: 0, 127 | }); 128 | }); 129 | }); 130 | }); 131 | -------------------------------------------------------------------------------- /test/integration.test.js: -------------------------------------------------------------------------------- 1 | const {execFileSync} = require('child_process'); 2 | const {expect} = require('chai'); 3 | const _ = require('lodash/fp'); 4 | 5 | const SCOPE = 'json'; // (for test purpose only) 6 | const scoped = (rule) => `${SCOPE}/${rule}`; 7 | 8 | function getLintResults(filename, eslintConfig) { 9 | try { 10 | const results = execFileSync( 11 | 'eslint', 12 | [ 13 | '--config', 14 | eslintConfig || 'custom.eslintrc.config.mjs', 15 | '--format', 16 | 'json', 17 | filename, 18 | ], 19 | { 20 | encoding: 'utf8', 21 | stdio: 'pipe', 22 | cwd: __dirname, 23 | } 24 | ); 25 | return JSON.parse(results)[0]; 26 | } catch (err) { 27 | if (err.status !== 1 && err.status !== 0) 28 | throw new Error(`The lint command itself failed: ${err.status}, ${err.message}`); 29 | return JSON.parse(err.stdout)[0]; 30 | } 31 | } 32 | 33 | function groupInfringementsByRules(fileResults) { 34 | const errors = {}; 35 | const warnings = {}; 36 | for (const infringement of fileResults.messages) { 37 | const counter = infringement.severity === 1 ? warnings : errors; 38 | counter[infringement.ruleId] = (counter[infringement.ruleId] || 0) + 1; 39 | } 40 | return {errors, warnings}; 41 | } 42 | function validateInfringementExpectation(expected, actualSituation) { 43 | if (_.isEmpty(expected)) return; 44 | for (const someExpected of expected || []) { 45 | const [rule, expectedCount] = someExpected.split(':'); 46 | if (expectedCount) 47 | expect(actualSituation[scoped(rule)]).to.equal( 48 | Number(expectedCount), 49 | `unexpected count of rule ${rule}` 50 | ); 51 | else expect(actualSituation).to.have.property(scoped(rule)); 52 | } 53 | const allExpectedErrors = expected.map(_.pipe(_.split(':'), _.head, scoped)); 54 | expect(_.xor(_.keys(actualSituation), allExpectedErrors)).to.have.length( 55 | 0, 56 | 'Extra errors found' 57 | ); 58 | } 59 | 60 | function validateFile(filename, expectations = {}) { 61 | const results = getLintResults(`samples/${filename}.json`, expectations.eslintrc); 62 | const resultIndex = groupInfringementsByRules(results); 63 | validateInfringementExpectation(expectations.errors, resultIndex.errors, 'errors'); 64 | validateInfringementExpectation(expectations.warnings, resultIndex.warnings, 'warnings'); 65 | 66 | if (expectations.errorCount !== undefined) 67 | expect(results.errorCount).to.equal(expectations.errorCount, 'invalid count of errors'); 68 | if (expectations.warningCount !== undefined) 69 | expect(results.warningCount).to.equal( 70 | expectations.warningCount, 71 | 'invalid count of warnings' 72 | ); 73 | } 74 | 75 | describe('Integrations tests', function () { 76 | it('validate correct json', function () { 77 | validateFile('good-json', {errorCount: 0, warningCount: 0}); 78 | }); 79 | it('detect duplicate keys', function () { 80 | validateFile('duplicate-keys', { 81 | errors: ['duplicate-key:2'], 82 | }); // FIXME: give error count! 83 | }); 84 | it('handle comments in json', function () { 85 | validateFile('json-with-comments', {errorCount: 0, warningCount: 0}); 86 | }); 87 | it('detect wrong syntax', function () { 88 | validateFile('wrong-syntax', {errorCount: 1, warningCount: 0}); 89 | }); 90 | it('detect many infringements in messy json', function () { 91 | validateFile('whole-mess', { 92 | errors: ['duplicate-key:2', 'trailing-comma'], 93 | warnings: ['*'], 94 | }); 95 | }); 96 | }); 97 | 98 | describe('Integrations tests with config', function () { 99 | describe('recommended', function () { 100 | it('detect many infringements in messy json', function () { 101 | validateFile('whole-mess', { 102 | eslintrc: '.eslintrc.with-recommended-config.mjs', 103 | errors: ['*:4'], 104 | }); 105 | }); 106 | 107 | it('handle comments in json', function () { 108 | validateFile('json-with-comments', { 109 | eslintrc: '.eslintrc.with-recommended-config.mjs', 110 | errorCount: 1, // comment-not-permitted under the '*' glob 111 | }); 112 | }); 113 | }); 114 | describe('recommended-with-comments', function () { 115 | it('detect many infringements in messy json', function () { 116 | validateFile('whole-mess', { 117 | eslintrc: '.eslintrc.with-recommended-comments-config.mjs', 118 | errors: ['*:3'], 119 | }); 120 | }); 121 | 122 | it('handle comments in json', function () { 123 | validateFile('json-with-comments', { 124 | eslintrc: '.eslintrc.with-recommended-comments-config.mjs', 125 | errorCount: 0, 126 | warningCount: 0, 127 | }); 128 | }); 129 | }); 130 | }); 131 | -------------------------------------------------------------------------------- /test/packages/eslint-v7-legacy/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eslint-plugin-json-v7", 3 | "version": "0.1.0", 4 | "description": "Integration for eslint-plugin-json against ESLint v7", 5 | "private": true, 6 | "main": "index.js", 7 | "scripts": { 8 | "pretest": "eslint --version", 9 | "test": "../../../node_modules/.bin/mocha test/integration-legacy.test.js" 10 | }, 11 | "keywords": [ 12 | "eslint", 13 | "eslint-plugin", 14 | "eslint-plugin-json", 15 | "integration-tests" 16 | ], 17 | "license": "MIT", 18 | "devDependencies": { 19 | "eslint": "^7.32.0", 20 | "mocha": "^10.4.0" 21 | }, 22 | "dependencies": {} 23 | } 24 | -------------------------------------------------------------------------------- /test/packages/eslint-v7-legacy/test: -------------------------------------------------------------------------------- 1 | ../.. -------------------------------------------------------------------------------- /test/packages/eslint-v8-legacy/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eslint-plugin-json-v8", 3 | "version": "0.1.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "eslint-plugin-json-v8", 9 | "version": "0.1.0", 10 | "license": "MIT", 11 | "devDependencies": { 12 | "eslint": "^8.0.0", 13 | "mocha": "^9.0.3" 14 | } 15 | }, 16 | "node_modules/@eslint/eslintrc": { 17 | "version": "1.0.2", 18 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.2.tgz", 19 | "integrity": "sha512-x1ZXdEFsvTcnbTZgqcWUL9w2ybgZCw/qbKTPQnab+XnYA2bMQpJCh+/bBzCRfDJaJdlrrQlOk49jNtru9gL/6Q==", 20 | "dev": true, 21 | "dependencies": { 22 | "ajv": "^6.12.4", 23 | "debug": "^4.3.2", 24 | "espree": "^9.0.0", 25 | "globals": "^13.9.0", 26 | "ignore": "^4.0.6", 27 | "import-fresh": "^3.2.1", 28 | "js-yaml": "^3.13.1", 29 | "minimatch": "^3.0.4", 30 | "strip-json-comments": "^3.1.1" 31 | }, 32 | "engines": { 33 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 34 | } 35 | }, 36 | "node_modules/@eslint/eslintrc/node_modules/js-yaml": { 37 | "version": "3.14.1", 38 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 39 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 40 | "dev": true, 41 | "dependencies": { 42 | "argparse": "^1.0.7", 43 | "esprima": "^4.0.0" 44 | }, 45 | "bin": { 46 | "js-yaml": "bin/js-yaml.js" 47 | } 48 | }, 49 | "node_modules/@humanwhocodes/config-array": { 50 | "version": "0.6.0", 51 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", 52 | "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", 53 | "dev": true, 54 | "dependencies": { 55 | "@humanwhocodes/object-schema": "^1.2.0", 56 | "debug": "^4.1.1", 57 | "minimatch": "^3.0.4" 58 | }, 59 | "engines": { 60 | "node": ">=10.10.0" 61 | } 62 | }, 63 | "node_modules/@humanwhocodes/object-schema": { 64 | "version": "1.2.0", 65 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", 66 | "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", 67 | "dev": true 68 | }, 69 | "node_modules/@ungap/promise-all-settled": { 70 | "version": "1.1.2", 71 | "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", 72 | "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", 73 | "dev": true 74 | }, 75 | "node_modules/acorn": { 76 | "version": "8.5.0", 77 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", 78 | "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", 79 | "dev": true, 80 | "bin": { 81 | "acorn": "bin/acorn" 82 | }, 83 | "engines": { 84 | "node": ">=0.4.0" 85 | } 86 | }, 87 | "node_modules/acorn-jsx": { 88 | "version": "5.3.2", 89 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 90 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 91 | "dev": true, 92 | "peerDependencies": { 93 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 94 | } 95 | }, 96 | "node_modules/ajv": { 97 | "version": "6.12.6", 98 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 99 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 100 | "dev": true, 101 | "dependencies": { 102 | "fast-deep-equal": "^3.1.1", 103 | "fast-json-stable-stringify": "^2.0.0", 104 | "json-schema-traverse": "^0.4.1", 105 | "uri-js": "^4.2.2" 106 | }, 107 | "funding": { 108 | "type": "github", 109 | "url": "https://github.com/sponsors/epoberezkin" 110 | } 111 | }, 112 | "node_modules/ansi-colors": { 113 | "version": "4.1.1", 114 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 115 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 116 | "dev": true, 117 | "engines": { 118 | "node": ">=6" 119 | } 120 | }, 121 | "node_modules/ansi-regex": { 122 | "version": "5.0.1", 123 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 124 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 125 | "dev": true, 126 | "engines": { 127 | "node": ">=8" 128 | } 129 | }, 130 | "node_modules/ansi-styles": { 131 | "version": "4.3.0", 132 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 133 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 134 | "dev": true, 135 | "dependencies": { 136 | "color-convert": "^2.0.1" 137 | }, 138 | "engines": { 139 | "node": ">=8" 140 | }, 141 | "funding": { 142 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 143 | } 144 | }, 145 | "node_modules/anymatch": { 146 | "version": "3.1.3", 147 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 148 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 149 | "dev": true, 150 | "dependencies": { 151 | "normalize-path": "^3.0.0", 152 | "picomatch": "^2.0.4" 153 | }, 154 | "engines": { 155 | "node": ">= 8" 156 | } 157 | }, 158 | "node_modules/argparse": { 159 | "version": "1.0.10", 160 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 161 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 162 | "dev": true, 163 | "dependencies": { 164 | "sprintf-js": "~1.0.2" 165 | } 166 | }, 167 | "node_modules/balanced-match": { 168 | "version": "1.0.2", 169 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 170 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 171 | "dev": true 172 | }, 173 | "node_modules/binary-extensions": { 174 | "version": "2.2.0", 175 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 176 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 177 | "dev": true, 178 | "engines": { 179 | "node": ">=8" 180 | } 181 | }, 182 | "node_modules/brace-expansion": { 183 | "version": "1.1.11", 184 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 185 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 186 | "dev": true, 187 | "dependencies": { 188 | "balanced-match": "^1.0.0", 189 | "concat-map": "0.0.1" 190 | } 191 | }, 192 | "node_modules/braces": { 193 | "version": "3.0.2", 194 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 195 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 196 | "dev": true, 197 | "dependencies": { 198 | "fill-range": "^7.0.1" 199 | }, 200 | "engines": { 201 | "node": ">=8" 202 | } 203 | }, 204 | "node_modules/browser-stdout": { 205 | "version": "1.3.1", 206 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 207 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 208 | "dev": true 209 | }, 210 | "node_modules/callsites": { 211 | "version": "3.1.0", 212 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 213 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 214 | "dev": true, 215 | "engines": { 216 | "node": ">=6" 217 | } 218 | }, 219 | "node_modules/camelcase": { 220 | "version": "6.3.0", 221 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", 222 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", 223 | "dev": true, 224 | "engines": { 225 | "node": ">=10" 226 | }, 227 | "funding": { 228 | "url": "https://github.com/sponsors/sindresorhus" 229 | } 230 | }, 231 | "node_modules/chalk": { 232 | "version": "4.1.2", 233 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 234 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 235 | "dev": true, 236 | "dependencies": { 237 | "ansi-styles": "^4.1.0", 238 | "supports-color": "^7.1.0" 239 | }, 240 | "engines": { 241 | "node": ">=10" 242 | }, 243 | "funding": { 244 | "url": "https://github.com/chalk/chalk?sponsor=1" 245 | } 246 | }, 247 | "node_modules/chokidar": { 248 | "version": "3.5.3", 249 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 250 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 251 | "dev": true, 252 | "funding": [ 253 | { 254 | "type": "individual", 255 | "url": "https://paulmillr.com/funding/" 256 | } 257 | ], 258 | "dependencies": { 259 | "anymatch": "~3.1.2", 260 | "braces": "~3.0.2", 261 | "glob-parent": "~5.1.2", 262 | "is-binary-path": "~2.1.0", 263 | "is-glob": "~4.0.1", 264 | "normalize-path": "~3.0.0", 265 | "readdirp": "~3.6.0" 266 | }, 267 | "engines": { 268 | "node": ">= 8.10.0" 269 | }, 270 | "optionalDependencies": { 271 | "fsevents": "~2.3.2" 272 | } 273 | }, 274 | "node_modules/chokidar/node_modules/glob-parent": { 275 | "version": "5.1.2", 276 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 277 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 278 | "dev": true, 279 | "dependencies": { 280 | "is-glob": "^4.0.1" 281 | }, 282 | "engines": { 283 | "node": ">= 6" 284 | } 285 | }, 286 | "node_modules/cliui": { 287 | "version": "7.0.4", 288 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 289 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 290 | "dev": true, 291 | "dependencies": { 292 | "string-width": "^4.2.0", 293 | "strip-ansi": "^6.0.0", 294 | "wrap-ansi": "^7.0.0" 295 | } 296 | }, 297 | "node_modules/color-convert": { 298 | "version": "2.0.1", 299 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 300 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 301 | "dev": true, 302 | "dependencies": { 303 | "color-name": "~1.1.4" 304 | }, 305 | "engines": { 306 | "node": ">=7.0.0" 307 | } 308 | }, 309 | "node_modules/color-name": { 310 | "version": "1.1.4", 311 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 312 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 313 | "dev": true 314 | }, 315 | "node_modules/concat-map": { 316 | "version": "0.0.1", 317 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 318 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 319 | "dev": true 320 | }, 321 | "node_modules/cross-spawn": { 322 | "version": "7.0.3", 323 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 324 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 325 | "dev": true, 326 | "dependencies": { 327 | "path-key": "^3.1.0", 328 | "shebang-command": "^2.0.0", 329 | "which": "^2.0.1" 330 | }, 331 | "engines": { 332 | "node": ">= 8" 333 | } 334 | }, 335 | "node_modules/debug": { 336 | "version": "4.3.3", 337 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 338 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 339 | "dev": true, 340 | "dependencies": { 341 | "ms": "2.1.2" 342 | }, 343 | "engines": { 344 | "node": ">=6.0" 345 | }, 346 | "peerDependenciesMeta": { 347 | "supports-color": { 348 | "optional": true 349 | } 350 | } 351 | }, 352 | "node_modules/decamelize": { 353 | "version": "4.0.0", 354 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 355 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 356 | "dev": true, 357 | "engines": { 358 | "node": ">=10" 359 | }, 360 | "funding": { 361 | "url": "https://github.com/sponsors/sindresorhus" 362 | } 363 | }, 364 | "node_modules/deep-is": { 365 | "version": "0.1.4", 366 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 367 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 368 | "dev": true 369 | }, 370 | "node_modules/diff": { 371 | "version": "5.0.0", 372 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", 373 | "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", 374 | "dev": true, 375 | "engines": { 376 | "node": ">=0.3.1" 377 | } 378 | }, 379 | "node_modules/doctrine": { 380 | "version": "3.0.0", 381 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 382 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 383 | "dev": true, 384 | "dependencies": { 385 | "esutils": "^2.0.2" 386 | }, 387 | "engines": { 388 | "node": ">=6.0.0" 389 | } 390 | }, 391 | "node_modules/emoji-regex": { 392 | "version": "8.0.0", 393 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 394 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 395 | "dev": true 396 | }, 397 | "node_modules/enquirer": { 398 | "version": "2.3.6", 399 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", 400 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", 401 | "dev": true, 402 | "dependencies": { 403 | "ansi-colors": "^4.1.1" 404 | }, 405 | "engines": { 406 | "node": ">=8.6" 407 | } 408 | }, 409 | "node_modules/escalade": { 410 | "version": "3.1.1", 411 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 412 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 413 | "dev": true, 414 | "engines": { 415 | "node": ">=6" 416 | } 417 | }, 418 | "node_modules/escape-string-regexp": { 419 | "version": "4.0.0", 420 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 421 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 422 | "dev": true, 423 | "engines": { 424 | "node": ">=10" 425 | }, 426 | "funding": { 427 | "url": "https://github.com/sponsors/sindresorhus" 428 | } 429 | }, 430 | "node_modules/eslint": { 431 | "version": "8.0.0", 432 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.0.0.tgz", 433 | "integrity": "sha512-03spzPzMAO4pElm44m60Nj08nYonPGQXmw6Ceai/S4QK82IgwWO1EXx1s9namKzVlbVu3Jf81hb+N+8+v21/HQ==", 434 | "dev": true, 435 | "dependencies": { 436 | "@eslint/eslintrc": "^1.0.2", 437 | "@humanwhocodes/config-array": "^0.6.0", 438 | "ajv": "^6.10.0", 439 | "chalk": "^4.0.0", 440 | "cross-spawn": "^7.0.2", 441 | "debug": "^4.3.2", 442 | "doctrine": "^3.0.0", 443 | "enquirer": "^2.3.5", 444 | "escape-string-regexp": "^4.0.0", 445 | "eslint-scope": "^6.0.0", 446 | "eslint-utils": "^3.0.0", 447 | "eslint-visitor-keys": "^3.0.0", 448 | "espree": "^9.0.0", 449 | "esquery": "^1.4.0", 450 | "esutils": "^2.0.2", 451 | "fast-deep-equal": "^3.1.3", 452 | "file-entry-cache": "^6.0.1", 453 | "functional-red-black-tree": "^1.0.1", 454 | "glob-parent": "^6.0.1", 455 | "globals": "^13.6.0", 456 | "ignore": "^4.0.6", 457 | "import-fresh": "^3.0.0", 458 | "imurmurhash": "^0.1.4", 459 | "is-glob": "^4.0.0", 460 | "js-yaml": "^4.1.0", 461 | "json-stable-stringify-without-jsonify": "^1.0.1", 462 | "levn": "^0.4.1", 463 | "lodash.merge": "^4.6.2", 464 | "minimatch": "^3.0.4", 465 | "natural-compare": "^1.4.0", 466 | "optionator": "^0.9.1", 467 | "progress": "^2.0.0", 468 | "regexpp": "^3.2.0", 469 | "semver": "^7.2.1", 470 | "strip-ansi": "^6.0.0", 471 | "strip-json-comments": "^3.1.0", 472 | "text-table": "^0.2.0", 473 | "v8-compile-cache": "^2.0.3" 474 | }, 475 | "bin": { 476 | "eslint": "bin/eslint.js" 477 | }, 478 | "engines": { 479 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 480 | }, 481 | "funding": { 482 | "url": "https://opencollective.com/eslint" 483 | } 484 | }, 485 | "node_modules/eslint-scope": { 486 | "version": "6.0.0", 487 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", 488 | "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", 489 | "dev": true, 490 | "dependencies": { 491 | "esrecurse": "^4.3.0", 492 | "estraverse": "^5.2.0" 493 | }, 494 | "engines": { 495 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 496 | } 497 | }, 498 | "node_modules/eslint-utils": { 499 | "version": "3.0.0", 500 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", 501 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", 502 | "dev": true, 503 | "dependencies": { 504 | "eslint-visitor-keys": "^2.0.0" 505 | }, 506 | "engines": { 507 | "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" 508 | }, 509 | "funding": { 510 | "url": "https://github.com/sponsors/mysticatea" 511 | }, 512 | "peerDependencies": { 513 | "eslint": ">=5" 514 | } 515 | }, 516 | "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { 517 | "version": "2.1.0", 518 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 519 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 520 | "dev": true, 521 | "engines": { 522 | "node": ">=10" 523 | } 524 | }, 525 | "node_modules/eslint-visitor-keys": { 526 | "version": "3.0.0", 527 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", 528 | "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", 529 | "dev": true, 530 | "engines": { 531 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 532 | } 533 | }, 534 | "node_modules/espree": { 535 | "version": "9.0.0", 536 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", 537 | "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", 538 | "dev": true, 539 | "dependencies": { 540 | "acorn": "^8.5.0", 541 | "acorn-jsx": "^5.3.1", 542 | "eslint-visitor-keys": "^3.0.0" 543 | }, 544 | "engines": { 545 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 546 | } 547 | }, 548 | "node_modules/esprima": { 549 | "version": "4.0.1", 550 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 551 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 552 | "dev": true, 553 | "bin": { 554 | "esparse": "bin/esparse.js", 555 | "esvalidate": "bin/esvalidate.js" 556 | }, 557 | "engines": { 558 | "node": ">=4" 559 | } 560 | }, 561 | "node_modules/esquery": { 562 | "version": "1.4.0", 563 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", 564 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", 565 | "dev": true, 566 | "dependencies": { 567 | "estraverse": "^5.1.0" 568 | }, 569 | "engines": { 570 | "node": ">=0.10" 571 | } 572 | }, 573 | "node_modules/esrecurse": { 574 | "version": "4.3.0", 575 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 576 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 577 | "dev": true, 578 | "dependencies": { 579 | "estraverse": "^5.2.0" 580 | }, 581 | "engines": { 582 | "node": ">=4.0" 583 | } 584 | }, 585 | "node_modules/estraverse": { 586 | "version": "5.2.0", 587 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 588 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 589 | "dev": true, 590 | "engines": { 591 | "node": ">=4.0" 592 | } 593 | }, 594 | "node_modules/esutils": { 595 | "version": "2.0.3", 596 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 597 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 598 | "dev": true, 599 | "engines": { 600 | "node": ">=0.10.0" 601 | } 602 | }, 603 | "node_modules/fast-deep-equal": { 604 | "version": "3.1.3", 605 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 606 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 607 | "dev": true 608 | }, 609 | "node_modules/fast-json-stable-stringify": { 610 | "version": "2.1.0", 611 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 612 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 613 | "dev": true 614 | }, 615 | "node_modules/fast-levenshtein": { 616 | "version": "2.0.6", 617 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 618 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 619 | "dev": true 620 | }, 621 | "node_modules/file-entry-cache": { 622 | "version": "6.0.1", 623 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 624 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 625 | "dev": true, 626 | "dependencies": { 627 | "flat-cache": "^3.0.4" 628 | }, 629 | "engines": { 630 | "node": "^10.12.0 || >=12.0.0" 631 | } 632 | }, 633 | "node_modules/fill-range": { 634 | "version": "7.0.1", 635 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 636 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 637 | "dev": true, 638 | "dependencies": { 639 | "to-regex-range": "^5.0.1" 640 | }, 641 | "engines": { 642 | "node": ">=8" 643 | } 644 | }, 645 | "node_modules/find-up": { 646 | "version": "5.0.0", 647 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 648 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 649 | "dev": true, 650 | "dependencies": { 651 | "locate-path": "^6.0.0", 652 | "path-exists": "^4.0.0" 653 | }, 654 | "engines": { 655 | "node": ">=10" 656 | }, 657 | "funding": { 658 | "url": "https://github.com/sponsors/sindresorhus" 659 | } 660 | }, 661 | "node_modules/flat": { 662 | "version": "5.0.2", 663 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 664 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 665 | "dev": true, 666 | "bin": { 667 | "flat": "cli.js" 668 | } 669 | }, 670 | "node_modules/flat-cache": { 671 | "version": "3.0.4", 672 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 673 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 674 | "dev": true, 675 | "dependencies": { 676 | "flatted": "^3.1.0", 677 | "rimraf": "^3.0.2" 678 | }, 679 | "engines": { 680 | "node": "^10.12.0 || >=12.0.0" 681 | } 682 | }, 683 | "node_modules/flatted": { 684 | "version": "3.2.2", 685 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", 686 | "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", 687 | "dev": true 688 | }, 689 | "node_modules/fs.realpath": { 690 | "version": "1.0.0", 691 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 692 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 693 | "dev": true 694 | }, 695 | "node_modules/fsevents": { 696 | "version": "2.3.3", 697 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 698 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 699 | "dev": true, 700 | "hasInstallScript": true, 701 | "optional": true, 702 | "os": [ 703 | "darwin" 704 | ], 705 | "engines": { 706 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 707 | } 708 | }, 709 | "node_modules/functional-red-black-tree": { 710 | "version": "1.0.1", 711 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 712 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 713 | "dev": true 714 | }, 715 | "node_modules/get-caller-file": { 716 | "version": "2.0.5", 717 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 718 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 719 | "dev": true, 720 | "engines": { 721 | "node": "6.* || 8.* || >= 10.*" 722 | } 723 | }, 724 | "node_modules/glob": { 725 | "version": "7.2.0", 726 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 727 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 728 | "dev": true, 729 | "dependencies": { 730 | "fs.realpath": "^1.0.0", 731 | "inflight": "^1.0.4", 732 | "inherits": "2", 733 | "minimatch": "^3.0.4", 734 | "once": "^1.3.0", 735 | "path-is-absolute": "^1.0.0" 736 | }, 737 | "engines": { 738 | "node": "*" 739 | }, 740 | "funding": { 741 | "url": "https://github.com/sponsors/isaacs" 742 | } 743 | }, 744 | "node_modules/glob-parent": { 745 | "version": "6.0.2", 746 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 747 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 748 | "dev": true, 749 | "dependencies": { 750 | "is-glob": "^4.0.3" 751 | }, 752 | "engines": { 753 | "node": ">=10.13.0" 754 | } 755 | }, 756 | "node_modules/globals": { 757 | "version": "13.11.0", 758 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", 759 | "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", 760 | "dev": true, 761 | "dependencies": { 762 | "type-fest": "^0.20.2" 763 | }, 764 | "engines": { 765 | "node": ">=8" 766 | }, 767 | "funding": { 768 | "url": "https://github.com/sponsors/sindresorhus" 769 | } 770 | }, 771 | "node_modules/growl": { 772 | "version": "1.10.5", 773 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 774 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 775 | "dev": true, 776 | "engines": { 777 | "node": ">=4.x" 778 | } 779 | }, 780 | "node_modules/has-flag": { 781 | "version": "4.0.0", 782 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 783 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 784 | "dev": true, 785 | "engines": { 786 | "node": ">=8" 787 | } 788 | }, 789 | "node_modules/he": { 790 | "version": "1.2.0", 791 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 792 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 793 | "dev": true, 794 | "bin": { 795 | "he": "bin/he" 796 | } 797 | }, 798 | "node_modules/ignore": { 799 | "version": "4.0.6", 800 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 801 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 802 | "dev": true, 803 | "engines": { 804 | "node": ">= 4" 805 | } 806 | }, 807 | "node_modules/import-fresh": { 808 | "version": "3.3.0", 809 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 810 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 811 | "dev": true, 812 | "dependencies": { 813 | "parent-module": "^1.0.0", 814 | "resolve-from": "^4.0.0" 815 | }, 816 | "engines": { 817 | "node": ">=6" 818 | }, 819 | "funding": { 820 | "url": "https://github.com/sponsors/sindresorhus" 821 | } 822 | }, 823 | "node_modules/imurmurhash": { 824 | "version": "0.1.4", 825 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 826 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 827 | "dev": true, 828 | "engines": { 829 | "node": ">=0.8.19" 830 | } 831 | }, 832 | "node_modules/inflight": { 833 | "version": "1.0.6", 834 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 835 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 836 | "dev": true, 837 | "dependencies": { 838 | "once": "^1.3.0", 839 | "wrappy": "1" 840 | } 841 | }, 842 | "node_modules/inherits": { 843 | "version": "2.0.4", 844 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 845 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 846 | "dev": true 847 | }, 848 | "node_modules/is-binary-path": { 849 | "version": "2.1.0", 850 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 851 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 852 | "dev": true, 853 | "dependencies": { 854 | "binary-extensions": "^2.0.0" 855 | }, 856 | "engines": { 857 | "node": ">=8" 858 | } 859 | }, 860 | "node_modules/is-extglob": { 861 | "version": "2.1.1", 862 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 863 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 864 | "dev": true, 865 | "engines": { 866 | "node": ">=0.10.0" 867 | } 868 | }, 869 | "node_modules/is-fullwidth-code-point": { 870 | "version": "3.0.0", 871 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 872 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 873 | "dev": true, 874 | "engines": { 875 | "node": ">=8" 876 | } 877 | }, 878 | "node_modules/is-glob": { 879 | "version": "4.0.3", 880 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 881 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 882 | "dev": true, 883 | "dependencies": { 884 | "is-extglob": "^2.1.1" 885 | }, 886 | "engines": { 887 | "node": ">=0.10.0" 888 | } 889 | }, 890 | "node_modules/is-number": { 891 | "version": "7.0.0", 892 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 893 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 894 | "dev": true, 895 | "engines": { 896 | "node": ">=0.12.0" 897 | } 898 | }, 899 | "node_modules/is-plain-obj": { 900 | "version": "2.1.0", 901 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 902 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 903 | "dev": true, 904 | "engines": { 905 | "node": ">=8" 906 | } 907 | }, 908 | "node_modules/is-unicode-supported": { 909 | "version": "0.1.0", 910 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 911 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 912 | "dev": true, 913 | "engines": { 914 | "node": ">=10" 915 | }, 916 | "funding": { 917 | "url": "https://github.com/sponsors/sindresorhus" 918 | } 919 | }, 920 | "node_modules/isexe": { 921 | "version": "2.0.0", 922 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 923 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 924 | "dev": true 925 | }, 926 | "node_modules/js-yaml": { 927 | "version": "4.1.0", 928 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 929 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 930 | "dev": true, 931 | "dependencies": { 932 | "argparse": "^2.0.1" 933 | }, 934 | "bin": { 935 | "js-yaml": "bin/js-yaml.js" 936 | } 937 | }, 938 | "node_modules/js-yaml/node_modules/argparse": { 939 | "version": "2.0.1", 940 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 941 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 942 | "dev": true 943 | }, 944 | "node_modules/json-schema-traverse": { 945 | "version": "0.4.1", 946 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 947 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 948 | "dev": true 949 | }, 950 | "node_modules/json-stable-stringify-without-jsonify": { 951 | "version": "1.0.1", 952 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 953 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 954 | "dev": true 955 | }, 956 | "node_modules/levn": { 957 | "version": "0.4.1", 958 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 959 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 960 | "dev": true, 961 | "dependencies": { 962 | "prelude-ls": "^1.2.1", 963 | "type-check": "~0.4.0" 964 | }, 965 | "engines": { 966 | "node": ">= 0.8.0" 967 | } 968 | }, 969 | "node_modules/locate-path": { 970 | "version": "6.0.0", 971 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 972 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 973 | "dev": true, 974 | "dependencies": { 975 | "p-locate": "^5.0.0" 976 | }, 977 | "engines": { 978 | "node": ">=10" 979 | }, 980 | "funding": { 981 | "url": "https://github.com/sponsors/sindresorhus" 982 | } 983 | }, 984 | "node_modules/lodash.merge": { 985 | "version": "4.6.2", 986 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 987 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 988 | "dev": true 989 | }, 990 | "node_modules/log-symbols": { 991 | "version": "4.1.0", 992 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 993 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 994 | "dev": true, 995 | "dependencies": { 996 | "chalk": "^4.1.0", 997 | "is-unicode-supported": "^0.1.0" 998 | }, 999 | "engines": { 1000 | "node": ">=10" 1001 | }, 1002 | "funding": { 1003 | "url": "https://github.com/sponsors/sindresorhus" 1004 | } 1005 | }, 1006 | "node_modules/lru-cache": { 1007 | "version": "6.0.0", 1008 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1009 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1010 | "dev": true, 1011 | "dependencies": { 1012 | "yallist": "^4.0.0" 1013 | }, 1014 | "engines": { 1015 | "node": ">=10" 1016 | } 1017 | }, 1018 | "node_modules/minimatch": { 1019 | "version": "3.0.4", 1020 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1021 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1022 | "dev": true, 1023 | "dependencies": { 1024 | "brace-expansion": "^1.1.7" 1025 | }, 1026 | "engines": { 1027 | "node": "*" 1028 | } 1029 | }, 1030 | "node_modules/mocha": { 1031 | "version": "9.2.2", 1032 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", 1033 | "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", 1034 | "dev": true, 1035 | "dependencies": { 1036 | "@ungap/promise-all-settled": "1.1.2", 1037 | "ansi-colors": "4.1.1", 1038 | "browser-stdout": "1.3.1", 1039 | "chokidar": "3.5.3", 1040 | "debug": "4.3.3", 1041 | "diff": "5.0.0", 1042 | "escape-string-regexp": "4.0.0", 1043 | "find-up": "5.0.0", 1044 | "glob": "7.2.0", 1045 | "growl": "1.10.5", 1046 | "he": "1.2.0", 1047 | "js-yaml": "4.1.0", 1048 | "log-symbols": "4.1.0", 1049 | "minimatch": "4.2.1", 1050 | "ms": "2.1.3", 1051 | "nanoid": "3.3.1", 1052 | "serialize-javascript": "6.0.0", 1053 | "strip-json-comments": "3.1.1", 1054 | "supports-color": "8.1.1", 1055 | "which": "2.0.2", 1056 | "workerpool": "6.2.0", 1057 | "yargs": "16.2.0", 1058 | "yargs-parser": "20.2.4", 1059 | "yargs-unparser": "2.0.0" 1060 | }, 1061 | "bin": { 1062 | "_mocha": "bin/_mocha", 1063 | "mocha": "bin/mocha" 1064 | }, 1065 | "engines": { 1066 | "node": ">= 12.0.0" 1067 | }, 1068 | "funding": { 1069 | "type": "opencollective", 1070 | "url": "https://opencollective.com/mochajs" 1071 | } 1072 | }, 1073 | "node_modules/mocha/node_modules/minimatch": { 1074 | "version": "4.2.1", 1075 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", 1076 | "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", 1077 | "dev": true, 1078 | "dependencies": { 1079 | "brace-expansion": "^1.1.7" 1080 | }, 1081 | "engines": { 1082 | "node": ">=10" 1083 | } 1084 | }, 1085 | "node_modules/mocha/node_modules/ms": { 1086 | "version": "2.1.3", 1087 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1088 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1089 | "dev": true 1090 | }, 1091 | "node_modules/mocha/node_modules/supports-color": { 1092 | "version": "8.1.1", 1093 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 1094 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 1095 | "dev": true, 1096 | "dependencies": { 1097 | "has-flag": "^4.0.0" 1098 | }, 1099 | "engines": { 1100 | "node": ">=10" 1101 | }, 1102 | "funding": { 1103 | "url": "https://github.com/chalk/supports-color?sponsor=1" 1104 | } 1105 | }, 1106 | "node_modules/ms": { 1107 | "version": "2.1.2", 1108 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1109 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1110 | "dev": true 1111 | }, 1112 | "node_modules/nanoid": { 1113 | "version": "3.3.1", 1114 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", 1115 | "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", 1116 | "dev": true, 1117 | "bin": { 1118 | "nanoid": "bin/nanoid.cjs" 1119 | }, 1120 | "engines": { 1121 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1122 | } 1123 | }, 1124 | "node_modules/natural-compare": { 1125 | "version": "1.4.0", 1126 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1127 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1128 | "dev": true 1129 | }, 1130 | "node_modules/normalize-path": { 1131 | "version": "3.0.0", 1132 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1133 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1134 | "dev": true, 1135 | "engines": { 1136 | "node": ">=0.10.0" 1137 | } 1138 | }, 1139 | "node_modules/once": { 1140 | "version": "1.4.0", 1141 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1142 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1143 | "dev": true, 1144 | "dependencies": { 1145 | "wrappy": "1" 1146 | } 1147 | }, 1148 | "node_modules/optionator": { 1149 | "version": "0.9.1", 1150 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 1151 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 1152 | "dev": true, 1153 | "dependencies": { 1154 | "deep-is": "^0.1.3", 1155 | "fast-levenshtein": "^2.0.6", 1156 | "levn": "^0.4.1", 1157 | "prelude-ls": "^1.2.1", 1158 | "type-check": "^0.4.0", 1159 | "word-wrap": "^1.2.3" 1160 | }, 1161 | "engines": { 1162 | "node": ">= 0.8.0" 1163 | } 1164 | }, 1165 | "node_modules/p-limit": { 1166 | "version": "3.1.0", 1167 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 1168 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1169 | "dev": true, 1170 | "dependencies": { 1171 | "yocto-queue": "^0.1.0" 1172 | }, 1173 | "engines": { 1174 | "node": ">=10" 1175 | }, 1176 | "funding": { 1177 | "url": "https://github.com/sponsors/sindresorhus" 1178 | } 1179 | }, 1180 | "node_modules/p-locate": { 1181 | "version": "5.0.0", 1182 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 1183 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1184 | "dev": true, 1185 | "dependencies": { 1186 | "p-limit": "^3.0.2" 1187 | }, 1188 | "engines": { 1189 | "node": ">=10" 1190 | }, 1191 | "funding": { 1192 | "url": "https://github.com/sponsors/sindresorhus" 1193 | } 1194 | }, 1195 | "node_modules/parent-module": { 1196 | "version": "1.0.1", 1197 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1198 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1199 | "dev": true, 1200 | "dependencies": { 1201 | "callsites": "^3.0.0" 1202 | }, 1203 | "engines": { 1204 | "node": ">=6" 1205 | } 1206 | }, 1207 | "node_modules/path-exists": { 1208 | "version": "4.0.0", 1209 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1210 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1211 | "dev": true, 1212 | "engines": { 1213 | "node": ">=8" 1214 | } 1215 | }, 1216 | "node_modules/path-is-absolute": { 1217 | "version": "1.0.1", 1218 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1219 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1220 | "dev": true, 1221 | "engines": { 1222 | "node": ">=0.10.0" 1223 | } 1224 | }, 1225 | "node_modules/path-key": { 1226 | "version": "3.1.1", 1227 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1228 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1229 | "dev": true, 1230 | "engines": { 1231 | "node": ">=8" 1232 | } 1233 | }, 1234 | "node_modules/picomatch": { 1235 | "version": "2.3.1", 1236 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1237 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1238 | "dev": true, 1239 | "engines": { 1240 | "node": ">=8.6" 1241 | }, 1242 | "funding": { 1243 | "url": "https://github.com/sponsors/jonschlinkert" 1244 | } 1245 | }, 1246 | "node_modules/prelude-ls": { 1247 | "version": "1.2.1", 1248 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 1249 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 1250 | "dev": true, 1251 | "engines": { 1252 | "node": ">= 0.8.0" 1253 | } 1254 | }, 1255 | "node_modules/progress": { 1256 | "version": "2.0.3", 1257 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1258 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 1259 | "dev": true, 1260 | "engines": { 1261 | "node": ">=0.4.0" 1262 | } 1263 | }, 1264 | "node_modules/punycode": { 1265 | "version": "2.1.1", 1266 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1267 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1268 | "dev": true, 1269 | "engines": { 1270 | "node": ">=6" 1271 | } 1272 | }, 1273 | "node_modules/randombytes": { 1274 | "version": "2.1.0", 1275 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1276 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1277 | "dev": true, 1278 | "dependencies": { 1279 | "safe-buffer": "^5.1.0" 1280 | } 1281 | }, 1282 | "node_modules/readdirp": { 1283 | "version": "3.6.0", 1284 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1285 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1286 | "dev": true, 1287 | "dependencies": { 1288 | "picomatch": "^2.2.1" 1289 | }, 1290 | "engines": { 1291 | "node": ">=8.10.0" 1292 | } 1293 | }, 1294 | "node_modules/regexpp": { 1295 | "version": "3.2.0", 1296 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 1297 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 1298 | "dev": true, 1299 | "engines": { 1300 | "node": ">=8" 1301 | }, 1302 | "funding": { 1303 | "url": "https://github.com/sponsors/mysticatea" 1304 | } 1305 | }, 1306 | "node_modules/require-directory": { 1307 | "version": "2.1.1", 1308 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1309 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 1310 | "dev": true, 1311 | "engines": { 1312 | "node": ">=0.10.0" 1313 | } 1314 | }, 1315 | "node_modules/resolve-from": { 1316 | "version": "4.0.0", 1317 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1318 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1319 | "dev": true, 1320 | "engines": { 1321 | "node": ">=4" 1322 | } 1323 | }, 1324 | "node_modules/rimraf": { 1325 | "version": "3.0.2", 1326 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1327 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1328 | "dev": true, 1329 | "dependencies": { 1330 | "glob": "^7.1.3" 1331 | }, 1332 | "bin": { 1333 | "rimraf": "bin.js" 1334 | }, 1335 | "funding": { 1336 | "url": "https://github.com/sponsors/isaacs" 1337 | } 1338 | }, 1339 | "node_modules/safe-buffer": { 1340 | "version": "5.2.1", 1341 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1342 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1343 | "dev": true, 1344 | "funding": [ 1345 | { 1346 | "type": "github", 1347 | "url": "https://github.com/sponsors/feross" 1348 | }, 1349 | { 1350 | "type": "patreon", 1351 | "url": "https://www.patreon.com/feross" 1352 | }, 1353 | { 1354 | "type": "consulting", 1355 | "url": "https://feross.org/support" 1356 | } 1357 | ] 1358 | }, 1359 | "node_modules/semver": { 1360 | "version": "7.3.5", 1361 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 1362 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 1363 | "dev": true, 1364 | "dependencies": { 1365 | "lru-cache": "^6.0.0" 1366 | }, 1367 | "bin": { 1368 | "semver": "bin/semver.js" 1369 | }, 1370 | "engines": { 1371 | "node": ">=10" 1372 | } 1373 | }, 1374 | "node_modules/serialize-javascript": { 1375 | "version": "6.0.0", 1376 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", 1377 | "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", 1378 | "dev": true, 1379 | "dependencies": { 1380 | "randombytes": "^2.1.0" 1381 | } 1382 | }, 1383 | "node_modules/shebang-command": { 1384 | "version": "2.0.0", 1385 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1386 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1387 | "dev": true, 1388 | "dependencies": { 1389 | "shebang-regex": "^3.0.0" 1390 | }, 1391 | "engines": { 1392 | "node": ">=8" 1393 | } 1394 | }, 1395 | "node_modules/shebang-regex": { 1396 | "version": "3.0.0", 1397 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1398 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1399 | "dev": true, 1400 | "engines": { 1401 | "node": ">=8" 1402 | } 1403 | }, 1404 | "node_modules/sprintf-js": { 1405 | "version": "1.0.3", 1406 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1407 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1408 | "dev": true 1409 | }, 1410 | "node_modules/string-width": { 1411 | "version": "4.2.3", 1412 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1413 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1414 | "dev": true, 1415 | "dependencies": { 1416 | "emoji-regex": "^8.0.0", 1417 | "is-fullwidth-code-point": "^3.0.0", 1418 | "strip-ansi": "^6.0.1" 1419 | }, 1420 | "engines": { 1421 | "node": ">=8" 1422 | } 1423 | }, 1424 | "node_modules/strip-ansi": { 1425 | "version": "6.0.1", 1426 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1427 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1428 | "dev": true, 1429 | "dependencies": { 1430 | "ansi-regex": "^5.0.1" 1431 | }, 1432 | "engines": { 1433 | "node": ">=8" 1434 | } 1435 | }, 1436 | "node_modules/strip-json-comments": { 1437 | "version": "3.1.1", 1438 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1439 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1440 | "dev": true, 1441 | "engines": { 1442 | "node": ">=8" 1443 | }, 1444 | "funding": { 1445 | "url": "https://github.com/sponsors/sindresorhus" 1446 | } 1447 | }, 1448 | "node_modules/supports-color": { 1449 | "version": "7.2.0", 1450 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1451 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1452 | "dev": true, 1453 | "dependencies": { 1454 | "has-flag": "^4.0.0" 1455 | }, 1456 | "engines": { 1457 | "node": ">=8" 1458 | } 1459 | }, 1460 | "node_modules/text-table": { 1461 | "version": "0.2.0", 1462 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1463 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 1464 | "dev": true 1465 | }, 1466 | "node_modules/to-regex-range": { 1467 | "version": "5.0.1", 1468 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1469 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1470 | "dev": true, 1471 | "dependencies": { 1472 | "is-number": "^7.0.0" 1473 | }, 1474 | "engines": { 1475 | "node": ">=8.0" 1476 | } 1477 | }, 1478 | "node_modules/type-check": { 1479 | "version": "0.4.0", 1480 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 1481 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 1482 | "dev": true, 1483 | "dependencies": { 1484 | "prelude-ls": "^1.2.1" 1485 | }, 1486 | "engines": { 1487 | "node": ">= 0.8.0" 1488 | } 1489 | }, 1490 | "node_modules/type-fest": { 1491 | "version": "0.20.2", 1492 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 1493 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 1494 | "dev": true, 1495 | "engines": { 1496 | "node": ">=10" 1497 | }, 1498 | "funding": { 1499 | "url": "https://github.com/sponsors/sindresorhus" 1500 | } 1501 | }, 1502 | "node_modules/uri-js": { 1503 | "version": "4.4.1", 1504 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1505 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1506 | "dev": true, 1507 | "dependencies": { 1508 | "punycode": "^2.1.0" 1509 | } 1510 | }, 1511 | "node_modules/v8-compile-cache": { 1512 | "version": "2.3.0", 1513 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", 1514 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", 1515 | "dev": true 1516 | }, 1517 | "node_modules/which": { 1518 | "version": "2.0.2", 1519 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1520 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1521 | "dev": true, 1522 | "dependencies": { 1523 | "isexe": "^2.0.0" 1524 | }, 1525 | "bin": { 1526 | "node-which": "bin/node-which" 1527 | }, 1528 | "engines": { 1529 | "node": ">= 8" 1530 | } 1531 | }, 1532 | "node_modules/word-wrap": { 1533 | "version": "1.2.3", 1534 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 1535 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 1536 | "dev": true, 1537 | "engines": { 1538 | "node": ">=0.10.0" 1539 | } 1540 | }, 1541 | "node_modules/workerpool": { 1542 | "version": "6.2.0", 1543 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", 1544 | "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", 1545 | "dev": true 1546 | }, 1547 | "node_modules/wrap-ansi": { 1548 | "version": "7.0.0", 1549 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1550 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1551 | "dev": true, 1552 | "dependencies": { 1553 | "ansi-styles": "^4.0.0", 1554 | "string-width": "^4.1.0", 1555 | "strip-ansi": "^6.0.0" 1556 | }, 1557 | "engines": { 1558 | "node": ">=10" 1559 | }, 1560 | "funding": { 1561 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1562 | } 1563 | }, 1564 | "node_modules/wrappy": { 1565 | "version": "1.0.2", 1566 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1567 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1568 | "dev": true 1569 | }, 1570 | "node_modules/y18n": { 1571 | "version": "5.0.8", 1572 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1573 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 1574 | "dev": true, 1575 | "engines": { 1576 | "node": ">=10" 1577 | } 1578 | }, 1579 | "node_modules/yallist": { 1580 | "version": "4.0.0", 1581 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1582 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 1583 | "dev": true 1584 | }, 1585 | "node_modules/yargs": { 1586 | "version": "16.2.0", 1587 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 1588 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 1589 | "dev": true, 1590 | "dependencies": { 1591 | "cliui": "^7.0.2", 1592 | "escalade": "^3.1.1", 1593 | "get-caller-file": "^2.0.5", 1594 | "require-directory": "^2.1.1", 1595 | "string-width": "^4.2.0", 1596 | "y18n": "^5.0.5", 1597 | "yargs-parser": "^20.2.2" 1598 | }, 1599 | "engines": { 1600 | "node": ">=10" 1601 | } 1602 | }, 1603 | "node_modules/yargs-parser": { 1604 | "version": "20.2.4", 1605 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", 1606 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", 1607 | "dev": true, 1608 | "engines": { 1609 | "node": ">=10" 1610 | } 1611 | }, 1612 | "node_modules/yargs-unparser": { 1613 | "version": "2.0.0", 1614 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 1615 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 1616 | "dev": true, 1617 | "dependencies": { 1618 | "camelcase": "^6.0.0", 1619 | "decamelize": "^4.0.0", 1620 | "flat": "^5.0.2", 1621 | "is-plain-obj": "^2.1.0" 1622 | }, 1623 | "engines": { 1624 | "node": ">=10" 1625 | } 1626 | }, 1627 | "node_modules/yocto-queue": { 1628 | "version": "0.1.0", 1629 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 1630 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 1631 | "dev": true, 1632 | "engines": { 1633 | "node": ">=10" 1634 | }, 1635 | "funding": { 1636 | "url": "https://github.com/sponsors/sindresorhus" 1637 | } 1638 | } 1639 | } 1640 | } 1641 | -------------------------------------------------------------------------------- /test/packages/eslint-v8-legacy/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eslint-plugin-json-v8", 3 | "version": "0.1.0", 4 | "description": "Integration for eslint-plugin-json against ESLint v8", 5 | "private": true, 6 | "main": "index.js", 7 | "scripts": { 8 | "pretest": "eslint --version", 9 | "test": "../../../node_modules/.bin/mocha test/integration-legacy.test.js" 10 | }, 11 | "keywords": [ 12 | "eslint", 13 | "eslint-plugin", 14 | "eslint-plugin-json", 15 | "integration-tests" 16 | ], 17 | "license": "MIT", 18 | "devDependencies": { 19 | "eslint": "^8.0.0", 20 | "mocha": "^9.0.3" 21 | }, 22 | "dependencies": {} 23 | } 24 | -------------------------------------------------------------------------------- /test/packages/eslint-v8-legacy/test: -------------------------------------------------------------------------------- 1 | ../.. -------------------------------------------------------------------------------- /test/packages/eslint-v8/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eslint-plugin-json-v8", 3 | "version": "0.1.0", 4 | "description": "Integration for eslint-plugin-json against ESLint v8", 5 | "private": true, 6 | "main": "index.js", 7 | "scripts": { 8 | "pretest": "eslint --version", 9 | "test": "ESLINT_USE_FLAT_CONFIG=true ../../../node_modules/.bin/mocha test/integration.test.js" 10 | }, 11 | "keywords": [ 12 | "eslint", 13 | "eslint-plugin", 14 | "eslint-plugin-json", 15 | "integration-tests" 16 | ], 17 | "license": "MIT", 18 | "devDependencies": { 19 | "eslint": "^8.57.0", 20 | "mocha": "^10.4.0" 21 | }, 22 | "dependencies": {} 23 | } 24 | -------------------------------------------------------------------------------- /test/packages/eslint-v8/test: -------------------------------------------------------------------------------- 1 | ../.. -------------------------------------------------------------------------------- /test/packages/eslint-v9/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eslint-plugin-json-v9", 3 | "version": "0.1.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "eslint-plugin-json-v9", 9 | "version": "0.1.0", 10 | "license": "MIT", 11 | "devDependencies": { 12 | "eslint": "9.1.0", 13 | "mocha": "^10.4.0" 14 | } 15 | }, 16 | "node_modules/@aashutoshrathi/word-wrap": { 17 | "version": "1.2.6", 18 | "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", 19 | "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", 20 | "dev": true, 21 | "engines": { 22 | "node": ">=0.10.0" 23 | } 24 | }, 25 | "node_modules/@eslint-community/eslint-utils": { 26 | "version": "4.4.0", 27 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", 28 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 29 | "dev": true, 30 | "dependencies": { 31 | "eslint-visitor-keys": "^3.3.0" 32 | }, 33 | "engines": { 34 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 35 | }, 36 | "peerDependencies": { 37 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 38 | } 39 | }, 40 | "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { 41 | "version": "3.4.3", 42 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 43 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 44 | "dev": true, 45 | "engines": { 46 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 47 | }, 48 | "funding": { 49 | "url": "https://opencollective.com/eslint" 50 | } 51 | }, 52 | "node_modules/@eslint-community/regexpp": { 53 | "version": "4.10.0", 54 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", 55 | "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", 56 | "dev": true, 57 | "engines": { 58 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 59 | } 60 | }, 61 | "node_modules/@eslint/eslintrc": { 62 | "version": "3.0.2", 63 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.0.2.tgz", 64 | "integrity": "sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==", 65 | "dev": true, 66 | "dependencies": { 67 | "ajv": "^6.12.4", 68 | "debug": "^4.3.2", 69 | "espree": "^10.0.1", 70 | "globals": "^14.0.0", 71 | "ignore": "^5.2.0", 72 | "import-fresh": "^3.2.1", 73 | "js-yaml": "^4.1.0", 74 | "minimatch": "^3.1.2", 75 | "strip-json-comments": "^3.1.1" 76 | }, 77 | "engines": { 78 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 79 | }, 80 | "funding": { 81 | "url": "https://opencollective.com/eslint" 82 | } 83 | }, 84 | "node_modules/@eslint/js": { 85 | "version": "9.1.1", 86 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.1.1.tgz", 87 | "integrity": "sha512-5WoDz3Y19Bg2BnErkZTp0en+c/i9PvgFS7MBe1+m60HjFr0hrphlAGp4yzI7pxpt4xShln4ZyYp4neJm8hmOkQ==", 88 | "dev": true, 89 | "engines": { 90 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 91 | } 92 | }, 93 | "node_modules/@humanwhocodes/config-array": { 94 | "version": "0.13.0", 95 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", 96 | "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", 97 | "dev": true, 98 | "dependencies": { 99 | "@humanwhocodes/object-schema": "^2.0.3", 100 | "debug": "^4.3.1", 101 | "minimatch": "^3.0.5" 102 | }, 103 | "engines": { 104 | "node": ">=10.10.0" 105 | } 106 | }, 107 | "node_modules/@humanwhocodes/module-importer": { 108 | "version": "1.0.1", 109 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 110 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 111 | "dev": true, 112 | "engines": { 113 | "node": ">=12.22" 114 | }, 115 | "funding": { 116 | "type": "github", 117 | "url": "https://github.com/sponsors/nzakas" 118 | } 119 | }, 120 | "node_modules/@humanwhocodes/object-schema": { 121 | "version": "2.0.3", 122 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", 123 | "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", 124 | "dev": true 125 | }, 126 | "node_modules/@humanwhocodes/retry": { 127 | "version": "0.2.3", 128 | "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.2.3.tgz", 129 | "integrity": "sha512-X38nUbachlb01YMlvPFojKoiXq+LzZvuSce70KPMPdeM1Rj03k4dR7lDslhbqXn3Ang4EU3+EAmwEAsbrjHW3g==", 130 | "dev": true, 131 | "engines": { 132 | "node": ">=18.18" 133 | }, 134 | "funding": { 135 | "type": "github", 136 | "url": "https://github.com/sponsors/nzakas" 137 | } 138 | }, 139 | "node_modules/@nodelib/fs.scandir": { 140 | "version": "2.1.5", 141 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 142 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 143 | "dev": true, 144 | "dependencies": { 145 | "@nodelib/fs.stat": "2.0.5", 146 | "run-parallel": "^1.1.9" 147 | }, 148 | "engines": { 149 | "node": ">= 8" 150 | } 151 | }, 152 | "node_modules/@nodelib/fs.stat": { 153 | "version": "2.0.5", 154 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 155 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 156 | "dev": true, 157 | "engines": { 158 | "node": ">= 8" 159 | } 160 | }, 161 | "node_modules/@nodelib/fs.walk": { 162 | "version": "1.2.8", 163 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 164 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 165 | "dev": true, 166 | "dependencies": { 167 | "@nodelib/fs.scandir": "2.1.5", 168 | "fastq": "^1.6.0" 169 | }, 170 | "engines": { 171 | "node": ">= 8" 172 | } 173 | }, 174 | "node_modules/acorn": { 175 | "version": "8.11.3", 176 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", 177 | "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", 178 | "dev": true, 179 | "bin": { 180 | "acorn": "bin/acorn" 181 | }, 182 | "engines": { 183 | "node": ">=0.4.0" 184 | } 185 | }, 186 | "node_modules/acorn-jsx": { 187 | "version": "5.3.2", 188 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 189 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 190 | "dev": true, 191 | "peerDependencies": { 192 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 193 | } 194 | }, 195 | "node_modules/ajv": { 196 | "version": "6.12.6", 197 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 198 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 199 | "dev": true, 200 | "dependencies": { 201 | "fast-deep-equal": "^3.1.1", 202 | "fast-json-stable-stringify": "^2.0.0", 203 | "json-schema-traverse": "^0.4.1", 204 | "uri-js": "^4.2.2" 205 | }, 206 | "funding": { 207 | "type": "github", 208 | "url": "https://github.com/sponsors/epoberezkin" 209 | } 210 | }, 211 | "node_modules/ansi-colors": { 212 | "version": "4.1.1", 213 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 214 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 215 | "dev": true, 216 | "engines": { 217 | "node": ">=6" 218 | } 219 | }, 220 | "node_modules/ansi-regex": { 221 | "version": "5.0.1", 222 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 223 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 224 | "dev": true, 225 | "engines": { 226 | "node": ">=8" 227 | } 228 | }, 229 | "node_modules/ansi-styles": { 230 | "version": "4.3.0", 231 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 232 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 233 | "dev": true, 234 | "dependencies": { 235 | "color-convert": "^2.0.1" 236 | }, 237 | "engines": { 238 | "node": ">=8" 239 | }, 240 | "funding": { 241 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 242 | } 243 | }, 244 | "node_modules/anymatch": { 245 | "version": "3.1.3", 246 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 247 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 248 | "dev": true, 249 | "dependencies": { 250 | "normalize-path": "^3.0.0", 251 | "picomatch": "^2.0.4" 252 | }, 253 | "engines": { 254 | "node": ">= 8" 255 | } 256 | }, 257 | "node_modules/argparse": { 258 | "version": "2.0.1", 259 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 260 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 261 | "dev": true 262 | }, 263 | "node_modules/balanced-match": { 264 | "version": "1.0.2", 265 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 266 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 267 | "dev": true 268 | }, 269 | "node_modules/binary-extensions": { 270 | "version": "2.3.0", 271 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", 272 | "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", 273 | "dev": true, 274 | "engines": { 275 | "node": ">=8" 276 | }, 277 | "funding": { 278 | "url": "https://github.com/sponsors/sindresorhus" 279 | } 280 | }, 281 | "node_modules/brace-expansion": { 282 | "version": "1.1.11", 283 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 284 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 285 | "dev": true, 286 | "dependencies": { 287 | "balanced-match": "^1.0.0", 288 | "concat-map": "0.0.1" 289 | } 290 | }, 291 | "node_modules/braces": { 292 | "version": "3.0.2", 293 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 294 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 295 | "dev": true, 296 | "dependencies": { 297 | "fill-range": "^7.0.1" 298 | }, 299 | "engines": { 300 | "node": ">=8" 301 | } 302 | }, 303 | "node_modules/browser-stdout": { 304 | "version": "1.3.1", 305 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 306 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 307 | "dev": true 308 | }, 309 | "node_modules/callsites": { 310 | "version": "3.1.0", 311 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 312 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 313 | "dev": true, 314 | "engines": { 315 | "node": ">=6" 316 | } 317 | }, 318 | "node_modules/camelcase": { 319 | "version": "6.3.0", 320 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", 321 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", 322 | "dev": true, 323 | "engines": { 324 | "node": ">=10" 325 | }, 326 | "funding": { 327 | "url": "https://github.com/sponsors/sindresorhus" 328 | } 329 | }, 330 | "node_modules/chalk": { 331 | "version": "4.1.2", 332 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 333 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 334 | "dev": true, 335 | "dependencies": { 336 | "ansi-styles": "^4.1.0", 337 | "supports-color": "^7.1.0" 338 | }, 339 | "engines": { 340 | "node": ">=10" 341 | }, 342 | "funding": { 343 | "url": "https://github.com/chalk/chalk?sponsor=1" 344 | } 345 | }, 346 | "node_modules/chokidar": { 347 | "version": "3.5.3", 348 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 349 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 350 | "dev": true, 351 | "funding": [ 352 | { 353 | "type": "individual", 354 | "url": "https://paulmillr.com/funding/" 355 | } 356 | ], 357 | "dependencies": { 358 | "anymatch": "~3.1.2", 359 | "braces": "~3.0.2", 360 | "glob-parent": "~5.1.2", 361 | "is-binary-path": "~2.1.0", 362 | "is-glob": "~4.0.1", 363 | "normalize-path": "~3.0.0", 364 | "readdirp": "~3.6.0" 365 | }, 366 | "engines": { 367 | "node": ">= 8.10.0" 368 | }, 369 | "optionalDependencies": { 370 | "fsevents": "~2.3.2" 371 | } 372 | }, 373 | "node_modules/chokidar/node_modules/glob-parent": { 374 | "version": "5.1.2", 375 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 376 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 377 | "dev": true, 378 | "dependencies": { 379 | "is-glob": "^4.0.1" 380 | }, 381 | "engines": { 382 | "node": ">= 6" 383 | } 384 | }, 385 | "node_modules/cliui": { 386 | "version": "7.0.4", 387 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 388 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 389 | "dev": true, 390 | "dependencies": { 391 | "string-width": "^4.2.0", 392 | "strip-ansi": "^6.0.0", 393 | "wrap-ansi": "^7.0.0" 394 | } 395 | }, 396 | "node_modules/color-convert": { 397 | "version": "2.0.1", 398 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 399 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 400 | "dev": true, 401 | "dependencies": { 402 | "color-name": "~1.1.4" 403 | }, 404 | "engines": { 405 | "node": ">=7.0.0" 406 | } 407 | }, 408 | "node_modules/color-name": { 409 | "version": "1.1.4", 410 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 411 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 412 | "dev": true 413 | }, 414 | "node_modules/concat-map": { 415 | "version": "0.0.1", 416 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 417 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 418 | "dev": true 419 | }, 420 | "node_modules/cross-spawn": { 421 | "version": "7.0.3", 422 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 423 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 424 | "dev": true, 425 | "dependencies": { 426 | "path-key": "^3.1.0", 427 | "shebang-command": "^2.0.0", 428 | "which": "^2.0.1" 429 | }, 430 | "engines": { 431 | "node": ">= 8" 432 | } 433 | }, 434 | "node_modules/debug": { 435 | "version": "4.3.4", 436 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 437 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 438 | "dev": true, 439 | "dependencies": { 440 | "ms": "2.1.2" 441 | }, 442 | "engines": { 443 | "node": ">=6.0" 444 | }, 445 | "peerDependenciesMeta": { 446 | "supports-color": { 447 | "optional": true 448 | } 449 | } 450 | }, 451 | "node_modules/decamelize": { 452 | "version": "4.0.0", 453 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 454 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 455 | "dev": true, 456 | "engines": { 457 | "node": ">=10" 458 | }, 459 | "funding": { 460 | "url": "https://github.com/sponsors/sindresorhus" 461 | } 462 | }, 463 | "node_modules/deep-is": { 464 | "version": "0.1.4", 465 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 466 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 467 | "dev": true 468 | }, 469 | "node_modules/diff": { 470 | "version": "5.0.0", 471 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", 472 | "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", 473 | "dev": true, 474 | "engines": { 475 | "node": ">=0.3.1" 476 | } 477 | }, 478 | "node_modules/emoji-regex": { 479 | "version": "8.0.0", 480 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 481 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 482 | "dev": true 483 | }, 484 | "node_modules/escalade": { 485 | "version": "3.1.2", 486 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", 487 | "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", 488 | "dev": true, 489 | "engines": { 490 | "node": ">=6" 491 | } 492 | }, 493 | "node_modules/escape-string-regexp": { 494 | "version": "4.0.0", 495 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 496 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 497 | "dev": true, 498 | "engines": { 499 | "node": ">=10" 500 | }, 501 | "funding": { 502 | "url": "https://github.com/sponsors/sindresorhus" 503 | } 504 | }, 505 | "node_modules/eslint": { 506 | "version": "9.1.0", 507 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.1.0.tgz", 508 | "integrity": "sha512-1TCBecGFQtItia2o39P7Z4BK1X7ByNPxAiWJvwiyTGcOwYnTiiASgMpNA6a+beu8cFPhEDWvPf6mIlYUJv6sgA==", 509 | "dev": true, 510 | "dependencies": { 511 | "@eslint-community/eslint-utils": "^4.2.0", 512 | "@eslint-community/regexpp": "^4.6.1", 513 | "@eslint/eslintrc": "^3.0.2", 514 | "@eslint/js": "9.1.1", 515 | "@humanwhocodes/config-array": "^0.13.0", 516 | "@humanwhocodes/module-importer": "^1.0.1", 517 | "@humanwhocodes/retry": "^0.2.3", 518 | "@nodelib/fs.walk": "^1.2.8", 519 | "ajv": "^6.12.4", 520 | "chalk": "^4.0.0", 521 | "cross-spawn": "^7.0.2", 522 | "debug": "^4.3.2", 523 | "escape-string-regexp": "^4.0.0", 524 | "eslint-scope": "^8.0.1", 525 | "eslint-visitor-keys": "^4.0.0", 526 | "espree": "^10.0.1", 527 | "esquery": "^1.4.2", 528 | "esutils": "^2.0.2", 529 | "fast-deep-equal": "^3.1.3", 530 | "file-entry-cache": "^8.0.0", 531 | "find-up": "^5.0.0", 532 | "glob-parent": "^6.0.2", 533 | "ignore": "^5.2.0", 534 | "imurmurhash": "^0.1.4", 535 | "is-glob": "^4.0.0", 536 | "is-path-inside": "^3.0.3", 537 | "json-stable-stringify-without-jsonify": "^1.0.1", 538 | "levn": "^0.4.1", 539 | "lodash.merge": "^4.6.2", 540 | "minimatch": "^3.1.2", 541 | "natural-compare": "^1.4.0", 542 | "optionator": "^0.9.3", 543 | "strip-ansi": "^6.0.1", 544 | "text-table": "^0.2.0" 545 | }, 546 | "bin": { 547 | "eslint": "bin/eslint.js" 548 | }, 549 | "engines": { 550 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 551 | }, 552 | "funding": { 553 | "url": "https://opencollective.com/eslint" 554 | } 555 | }, 556 | "node_modules/eslint-scope": { 557 | "version": "8.0.1", 558 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz", 559 | "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", 560 | "dev": true, 561 | "dependencies": { 562 | "esrecurse": "^4.3.0", 563 | "estraverse": "^5.2.0" 564 | }, 565 | "engines": { 566 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 567 | }, 568 | "funding": { 569 | "url": "https://opencollective.com/eslint" 570 | } 571 | }, 572 | "node_modules/eslint-visitor-keys": { 573 | "version": "4.0.0", 574 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", 575 | "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", 576 | "dev": true, 577 | "engines": { 578 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 579 | }, 580 | "funding": { 581 | "url": "https://opencollective.com/eslint" 582 | } 583 | }, 584 | "node_modules/espree": { 585 | "version": "10.0.1", 586 | "resolved": "https://registry.npmjs.org/espree/-/espree-10.0.1.tgz", 587 | "integrity": "sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==", 588 | "dev": true, 589 | "dependencies": { 590 | "acorn": "^8.11.3", 591 | "acorn-jsx": "^5.3.2", 592 | "eslint-visitor-keys": "^4.0.0" 593 | }, 594 | "engines": { 595 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 596 | }, 597 | "funding": { 598 | "url": "https://opencollective.com/eslint" 599 | } 600 | }, 601 | "node_modules/esquery": { 602 | "version": "1.5.0", 603 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", 604 | "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", 605 | "dev": true, 606 | "dependencies": { 607 | "estraverse": "^5.1.0" 608 | }, 609 | "engines": { 610 | "node": ">=0.10" 611 | } 612 | }, 613 | "node_modules/esrecurse": { 614 | "version": "4.3.0", 615 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 616 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 617 | "dev": true, 618 | "dependencies": { 619 | "estraverse": "^5.2.0" 620 | }, 621 | "engines": { 622 | "node": ">=4.0" 623 | } 624 | }, 625 | "node_modules/estraverse": { 626 | "version": "5.3.0", 627 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 628 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 629 | "dev": true, 630 | "engines": { 631 | "node": ">=4.0" 632 | } 633 | }, 634 | "node_modules/esutils": { 635 | "version": "2.0.3", 636 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 637 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 638 | "dev": true, 639 | "engines": { 640 | "node": ">=0.10.0" 641 | } 642 | }, 643 | "node_modules/fast-deep-equal": { 644 | "version": "3.1.3", 645 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 646 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 647 | "dev": true 648 | }, 649 | "node_modules/fast-json-stable-stringify": { 650 | "version": "2.1.0", 651 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 652 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 653 | "dev": true 654 | }, 655 | "node_modules/fast-levenshtein": { 656 | "version": "2.0.6", 657 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 658 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 659 | "dev": true 660 | }, 661 | "node_modules/fastq": { 662 | "version": "1.17.1", 663 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", 664 | "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", 665 | "dev": true, 666 | "dependencies": { 667 | "reusify": "^1.0.4" 668 | } 669 | }, 670 | "node_modules/file-entry-cache": { 671 | "version": "8.0.0", 672 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", 673 | "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", 674 | "dev": true, 675 | "dependencies": { 676 | "flat-cache": "^4.0.0" 677 | }, 678 | "engines": { 679 | "node": ">=16.0.0" 680 | } 681 | }, 682 | "node_modules/fill-range": { 683 | "version": "7.0.1", 684 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 685 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 686 | "dev": true, 687 | "dependencies": { 688 | "to-regex-range": "^5.0.1" 689 | }, 690 | "engines": { 691 | "node": ">=8" 692 | } 693 | }, 694 | "node_modules/find-up": { 695 | "version": "5.0.0", 696 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 697 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 698 | "dev": true, 699 | "dependencies": { 700 | "locate-path": "^6.0.0", 701 | "path-exists": "^4.0.0" 702 | }, 703 | "engines": { 704 | "node": ">=10" 705 | }, 706 | "funding": { 707 | "url": "https://github.com/sponsors/sindresorhus" 708 | } 709 | }, 710 | "node_modules/flat": { 711 | "version": "5.0.2", 712 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 713 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 714 | "dev": true, 715 | "bin": { 716 | "flat": "cli.js" 717 | } 718 | }, 719 | "node_modules/flat-cache": { 720 | "version": "4.0.1", 721 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", 722 | "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", 723 | "dev": true, 724 | "dependencies": { 725 | "flatted": "^3.2.9", 726 | "keyv": "^4.5.4" 727 | }, 728 | "engines": { 729 | "node": ">=16" 730 | } 731 | }, 732 | "node_modules/flatted": { 733 | "version": "3.3.1", 734 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", 735 | "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", 736 | "dev": true 737 | }, 738 | "node_modules/fs.realpath": { 739 | "version": "1.0.0", 740 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 741 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 742 | "dev": true 743 | }, 744 | "node_modules/fsevents": { 745 | "version": "2.3.3", 746 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 747 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 748 | "dev": true, 749 | "hasInstallScript": true, 750 | "optional": true, 751 | "os": [ 752 | "darwin" 753 | ], 754 | "engines": { 755 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 756 | } 757 | }, 758 | "node_modules/get-caller-file": { 759 | "version": "2.0.5", 760 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 761 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 762 | "dev": true, 763 | "engines": { 764 | "node": "6.* || 8.* || >= 10.*" 765 | } 766 | }, 767 | "node_modules/glob": { 768 | "version": "8.1.0", 769 | "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", 770 | "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", 771 | "dev": true, 772 | "dependencies": { 773 | "fs.realpath": "^1.0.0", 774 | "inflight": "^1.0.4", 775 | "inherits": "2", 776 | "minimatch": "^5.0.1", 777 | "once": "^1.3.0" 778 | }, 779 | "engines": { 780 | "node": ">=12" 781 | }, 782 | "funding": { 783 | "url": "https://github.com/sponsors/isaacs" 784 | } 785 | }, 786 | "node_modules/glob-parent": { 787 | "version": "6.0.2", 788 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 789 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 790 | "dev": true, 791 | "dependencies": { 792 | "is-glob": "^4.0.3" 793 | }, 794 | "engines": { 795 | "node": ">=10.13.0" 796 | } 797 | }, 798 | "node_modules/glob/node_modules/brace-expansion": { 799 | "version": "2.0.1", 800 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 801 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 802 | "dev": true, 803 | "dependencies": { 804 | "balanced-match": "^1.0.0" 805 | } 806 | }, 807 | "node_modules/glob/node_modules/minimatch": { 808 | "version": "5.1.6", 809 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", 810 | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", 811 | "dev": true, 812 | "dependencies": { 813 | "brace-expansion": "^2.0.1" 814 | }, 815 | "engines": { 816 | "node": ">=10" 817 | } 818 | }, 819 | "node_modules/globals": { 820 | "version": "14.0.0", 821 | "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", 822 | "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", 823 | "dev": true, 824 | "engines": { 825 | "node": ">=18" 826 | }, 827 | "funding": { 828 | "url": "https://github.com/sponsors/sindresorhus" 829 | } 830 | }, 831 | "node_modules/has-flag": { 832 | "version": "4.0.0", 833 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 834 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 835 | "dev": true, 836 | "engines": { 837 | "node": ">=8" 838 | } 839 | }, 840 | "node_modules/he": { 841 | "version": "1.2.0", 842 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 843 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 844 | "dev": true, 845 | "bin": { 846 | "he": "bin/he" 847 | } 848 | }, 849 | "node_modules/ignore": { 850 | "version": "5.3.1", 851 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", 852 | "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", 853 | "dev": true, 854 | "engines": { 855 | "node": ">= 4" 856 | } 857 | }, 858 | "node_modules/import-fresh": { 859 | "version": "3.3.0", 860 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 861 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 862 | "dev": true, 863 | "dependencies": { 864 | "parent-module": "^1.0.0", 865 | "resolve-from": "^4.0.0" 866 | }, 867 | "engines": { 868 | "node": ">=6" 869 | }, 870 | "funding": { 871 | "url": "https://github.com/sponsors/sindresorhus" 872 | } 873 | }, 874 | "node_modules/imurmurhash": { 875 | "version": "0.1.4", 876 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 877 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 878 | "dev": true, 879 | "engines": { 880 | "node": ">=0.8.19" 881 | } 882 | }, 883 | "node_modules/inflight": { 884 | "version": "1.0.6", 885 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 886 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 887 | "dev": true, 888 | "dependencies": { 889 | "once": "^1.3.0", 890 | "wrappy": "1" 891 | } 892 | }, 893 | "node_modules/inherits": { 894 | "version": "2.0.4", 895 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 896 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 897 | "dev": true 898 | }, 899 | "node_modules/is-binary-path": { 900 | "version": "2.1.0", 901 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 902 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 903 | "dev": true, 904 | "dependencies": { 905 | "binary-extensions": "^2.0.0" 906 | }, 907 | "engines": { 908 | "node": ">=8" 909 | } 910 | }, 911 | "node_modules/is-extglob": { 912 | "version": "2.1.1", 913 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 914 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 915 | "dev": true, 916 | "engines": { 917 | "node": ">=0.10.0" 918 | } 919 | }, 920 | "node_modules/is-fullwidth-code-point": { 921 | "version": "3.0.0", 922 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 923 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 924 | "dev": true, 925 | "engines": { 926 | "node": ">=8" 927 | } 928 | }, 929 | "node_modules/is-glob": { 930 | "version": "4.0.3", 931 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 932 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 933 | "dev": true, 934 | "dependencies": { 935 | "is-extglob": "^2.1.1" 936 | }, 937 | "engines": { 938 | "node": ">=0.10.0" 939 | } 940 | }, 941 | "node_modules/is-number": { 942 | "version": "7.0.0", 943 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 944 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 945 | "dev": true, 946 | "engines": { 947 | "node": ">=0.12.0" 948 | } 949 | }, 950 | "node_modules/is-path-inside": { 951 | "version": "3.0.3", 952 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 953 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 954 | "dev": true, 955 | "engines": { 956 | "node": ">=8" 957 | } 958 | }, 959 | "node_modules/is-plain-obj": { 960 | "version": "2.1.0", 961 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 962 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 963 | "dev": true, 964 | "engines": { 965 | "node": ">=8" 966 | } 967 | }, 968 | "node_modules/is-unicode-supported": { 969 | "version": "0.1.0", 970 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 971 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 972 | "dev": true, 973 | "engines": { 974 | "node": ">=10" 975 | }, 976 | "funding": { 977 | "url": "https://github.com/sponsors/sindresorhus" 978 | } 979 | }, 980 | "node_modules/isexe": { 981 | "version": "2.0.0", 982 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 983 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 984 | "dev": true 985 | }, 986 | "node_modules/js-yaml": { 987 | "version": "4.1.0", 988 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 989 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 990 | "dev": true, 991 | "dependencies": { 992 | "argparse": "^2.0.1" 993 | }, 994 | "bin": { 995 | "js-yaml": "bin/js-yaml.js" 996 | } 997 | }, 998 | "node_modules/json-buffer": { 999 | "version": "3.0.1", 1000 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 1001 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 1002 | "dev": true 1003 | }, 1004 | "node_modules/json-schema-traverse": { 1005 | "version": "0.4.1", 1006 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1007 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1008 | "dev": true 1009 | }, 1010 | "node_modules/json-stable-stringify-without-jsonify": { 1011 | "version": "1.0.1", 1012 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1013 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 1014 | "dev": true 1015 | }, 1016 | "node_modules/keyv": { 1017 | "version": "4.5.4", 1018 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 1019 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 1020 | "dev": true, 1021 | "dependencies": { 1022 | "json-buffer": "3.0.1" 1023 | } 1024 | }, 1025 | "node_modules/levn": { 1026 | "version": "0.4.1", 1027 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1028 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1029 | "dev": true, 1030 | "dependencies": { 1031 | "prelude-ls": "^1.2.1", 1032 | "type-check": "~0.4.0" 1033 | }, 1034 | "engines": { 1035 | "node": ">= 0.8.0" 1036 | } 1037 | }, 1038 | "node_modules/locate-path": { 1039 | "version": "6.0.0", 1040 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 1041 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 1042 | "dev": true, 1043 | "dependencies": { 1044 | "p-locate": "^5.0.0" 1045 | }, 1046 | "engines": { 1047 | "node": ">=10" 1048 | }, 1049 | "funding": { 1050 | "url": "https://github.com/sponsors/sindresorhus" 1051 | } 1052 | }, 1053 | "node_modules/lodash.merge": { 1054 | "version": "4.6.2", 1055 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 1056 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 1057 | "dev": true 1058 | }, 1059 | "node_modules/log-symbols": { 1060 | "version": "4.1.0", 1061 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 1062 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 1063 | "dev": true, 1064 | "dependencies": { 1065 | "chalk": "^4.1.0", 1066 | "is-unicode-supported": "^0.1.0" 1067 | }, 1068 | "engines": { 1069 | "node": ">=10" 1070 | }, 1071 | "funding": { 1072 | "url": "https://github.com/sponsors/sindresorhus" 1073 | } 1074 | }, 1075 | "node_modules/minimatch": { 1076 | "version": "3.1.2", 1077 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1078 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1079 | "dev": true, 1080 | "dependencies": { 1081 | "brace-expansion": "^1.1.7" 1082 | }, 1083 | "engines": { 1084 | "node": "*" 1085 | } 1086 | }, 1087 | "node_modules/mocha": { 1088 | "version": "10.4.0", 1089 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", 1090 | "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", 1091 | "dev": true, 1092 | "dependencies": { 1093 | "ansi-colors": "4.1.1", 1094 | "browser-stdout": "1.3.1", 1095 | "chokidar": "3.5.3", 1096 | "debug": "4.3.4", 1097 | "diff": "5.0.0", 1098 | "escape-string-regexp": "4.0.0", 1099 | "find-up": "5.0.0", 1100 | "glob": "8.1.0", 1101 | "he": "1.2.0", 1102 | "js-yaml": "4.1.0", 1103 | "log-symbols": "4.1.0", 1104 | "minimatch": "5.0.1", 1105 | "ms": "2.1.3", 1106 | "serialize-javascript": "6.0.0", 1107 | "strip-json-comments": "3.1.1", 1108 | "supports-color": "8.1.1", 1109 | "workerpool": "6.2.1", 1110 | "yargs": "16.2.0", 1111 | "yargs-parser": "20.2.4", 1112 | "yargs-unparser": "2.0.0" 1113 | }, 1114 | "bin": { 1115 | "_mocha": "bin/_mocha", 1116 | "mocha": "bin/mocha.js" 1117 | }, 1118 | "engines": { 1119 | "node": ">= 14.0.0" 1120 | } 1121 | }, 1122 | "node_modules/mocha/node_modules/brace-expansion": { 1123 | "version": "2.0.1", 1124 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 1125 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 1126 | "dev": true, 1127 | "dependencies": { 1128 | "balanced-match": "^1.0.0" 1129 | } 1130 | }, 1131 | "node_modules/mocha/node_modules/minimatch": { 1132 | "version": "5.0.1", 1133 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", 1134 | "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", 1135 | "dev": true, 1136 | "dependencies": { 1137 | "brace-expansion": "^2.0.1" 1138 | }, 1139 | "engines": { 1140 | "node": ">=10" 1141 | } 1142 | }, 1143 | "node_modules/mocha/node_modules/ms": { 1144 | "version": "2.1.3", 1145 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1146 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1147 | "dev": true 1148 | }, 1149 | "node_modules/mocha/node_modules/supports-color": { 1150 | "version": "8.1.1", 1151 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 1152 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 1153 | "dev": true, 1154 | "dependencies": { 1155 | "has-flag": "^4.0.0" 1156 | }, 1157 | "engines": { 1158 | "node": ">=10" 1159 | }, 1160 | "funding": { 1161 | "url": "https://github.com/chalk/supports-color?sponsor=1" 1162 | } 1163 | }, 1164 | "node_modules/ms": { 1165 | "version": "2.1.2", 1166 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1167 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1168 | "dev": true 1169 | }, 1170 | "node_modules/natural-compare": { 1171 | "version": "1.4.0", 1172 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1173 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 1174 | "dev": true 1175 | }, 1176 | "node_modules/normalize-path": { 1177 | "version": "3.0.0", 1178 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1179 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1180 | "dev": true, 1181 | "engines": { 1182 | "node": ">=0.10.0" 1183 | } 1184 | }, 1185 | "node_modules/once": { 1186 | "version": "1.4.0", 1187 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1188 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1189 | "dev": true, 1190 | "dependencies": { 1191 | "wrappy": "1" 1192 | } 1193 | }, 1194 | "node_modules/optionator": { 1195 | "version": "0.9.3", 1196 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", 1197 | "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", 1198 | "dev": true, 1199 | "dependencies": { 1200 | "@aashutoshrathi/word-wrap": "^1.2.3", 1201 | "deep-is": "^0.1.3", 1202 | "fast-levenshtein": "^2.0.6", 1203 | "levn": "^0.4.1", 1204 | "prelude-ls": "^1.2.1", 1205 | "type-check": "^0.4.0" 1206 | }, 1207 | "engines": { 1208 | "node": ">= 0.8.0" 1209 | } 1210 | }, 1211 | "node_modules/p-limit": { 1212 | "version": "3.1.0", 1213 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 1214 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1215 | "dev": true, 1216 | "dependencies": { 1217 | "yocto-queue": "^0.1.0" 1218 | }, 1219 | "engines": { 1220 | "node": ">=10" 1221 | }, 1222 | "funding": { 1223 | "url": "https://github.com/sponsors/sindresorhus" 1224 | } 1225 | }, 1226 | "node_modules/p-locate": { 1227 | "version": "5.0.0", 1228 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 1229 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1230 | "dev": true, 1231 | "dependencies": { 1232 | "p-limit": "^3.0.2" 1233 | }, 1234 | "engines": { 1235 | "node": ">=10" 1236 | }, 1237 | "funding": { 1238 | "url": "https://github.com/sponsors/sindresorhus" 1239 | } 1240 | }, 1241 | "node_modules/parent-module": { 1242 | "version": "1.0.1", 1243 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1244 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1245 | "dev": true, 1246 | "dependencies": { 1247 | "callsites": "^3.0.0" 1248 | }, 1249 | "engines": { 1250 | "node": ">=6" 1251 | } 1252 | }, 1253 | "node_modules/path-exists": { 1254 | "version": "4.0.0", 1255 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1256 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1257 | "dev": true, 1258 | "engines": { 1259 | "node": ">=8" 1260 | } 1261 | }, 1262 | "node_modules/path-key": { 1263 | "version": "3.1.1", 1264 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1265 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1266 | "dev": true, 1267 | "engines": { 1268 | "node": ">=8" 1269 | } 1270 | }, 1271 | "node_modules/picomatch": { 1272 | "version": "2.3.1", 1273 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1274 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1275 | "dev": true, 1276 | "engines": { 1277 | "node": ">=8.6" 1278 | }, 1279 | "funding": { 1280 | "url": "https://github.com/sponsors/jonschlinkert" 1281 | } 1282 | }, 1283 | "node_modules/prelude-ls": { 1284 | "version": "1.2.1", 1285 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 1286 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 1287 | "dev": true, 1288 | "engines": { 1289 | "node": ">= 0.8.0" 1290 | } 1291 | }, 1292 | "node_modules/punycode": { 1293 | "version": "2.3.1", 1294 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 1295 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 1296 | "dev": true, 1297 | "engines": { 1298 | "node": ">=6" 1299 | } 1300 | }, 1301 | "node_modules/queue-microtask": { 1302 | "version": "1.2.3", 1303 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1304 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1305 | "dev": true, 1306 | "funding": [ 1307 | { 1308 | "type": "github", 1309 | "url": "https://github.com/sponsors/feross" 1310 | }, 1311 | { 1312 | "type": "patreon", 1313 | "url": "https://www.patreon.com/feross" 1314 | }, 1315 | { 1316 | "type": "consulting", 1317 | "url": "https://feross.org/support" 1318 | } 1319 | ] 1320 | }, 1321 | "node_modules/randombytes": { 1322 | "version": "2.1.0", 1323 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1324 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1325 | "dev": true, 1326 | "dependencies": { 1327 | "safe-buffer": "^5.1.0" 1328 | } 1329 | }, 1330 | "node_modules/readdirp": { 1331 | "version": "3.6.0", 1332 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1333 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1334 | "dev": true, 1335 | "dependencies": { 1336 | "picomatch": "^2.2.1" 1337 | }, 1338 | "engines": { 1339 | "node": ">=8.10.0" 1340 | } 1341 | }, 1342 | "node_modules/require-directory": { 1343 | "version": "2.1.1", 1344 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1345 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 1346 | "dev": true, 1347 | "engines": { 1348 | "node": ">=0.10.0" 1349 | } 1350 | }, 1351 | "node_modules/resolve-from": { 1352 | "version": "4.0.0", 1353 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1354 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1355 | "dev": true, 1356 | "engines": { 1357 | "node": ">=4" 1358 | } 1359 | }, 1360 | "node_modules/reusify": { 1361 | "version": "1.0.4", 1362 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1363 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1364 | "dev": true, 1365 | "engines": { 1366 | "iojs": ">=1.0.0", 1367 | "node": ">=0.10.0" 1368 | } 1369 | }, 1370 | "node_modules/run-parallel": { 1371 | "version": "1.2.0", 1372 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1373 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1374 | "dev": true, 1375 | "funding": [ 1376 | { 1377 | "type": "github", 1378 | "url": "https://github.com/sponsors/feross" 1379 | }, 1380 | { 1381 | "type": "patreon", 1382 | "url": "https://www.patreon.com/feross" 1383 | }, 1384 | { 1385 | "type": "consulting", 1386 | "url": "https://feross.org/support" 1387 | } 1388 | ], 1389 | "dependencies": { 1390 | "queue-microtask": "^1.2.2" 1391 | } 1392 | }, 1393 | "node_modules/safe-buffer": { 1394 | "version": "5.2.1", 1395 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1396 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1397 | "dev": true, 1398 | "funding": [ 1399 | { 1400 | "type": "github", 1401 | "url": "https://github.com/sponsors/feross" 1402 | }, 1403 | { 1404 | "type": "patreon", 1405 | "url": "https://www.patreon.com/feross" 1406 | }, 1407 | { 1408 | "type": "consulting", 1409 | "url": "https://feross.org/support" 1410 | } 1411 | ] 1412 | }, 1413 | "node_modules/serialize-javascript": { 1414 | "version": "6.0.0", 1415 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", 1416 | "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", 1417 | "dev": true, 1418 | "dependencies": { 1419 | "randombytes": "^2.1.0" 1420 | } 1421 | }, 1422 | "node_modules/shebang-command": { 1423 | "version": "2.0.0", 1424 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1425 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1426 | "dev": true, 1427 | "dependencies": { 1428 | "shebang-regex": "^3.0.0" 1429 | }, 1430 | "engines": { 1431 | "node": ">=8" 1432 | } 1433 | }, 1434 | "node_modules/shebang-regex": { 1435 | "version": "3.0.0", 1436 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1437 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1438 | "dev": true, 1439 | "engines": { 1440 | "node": ">=8" 1441 | } 1442 | }, 1443 | "node_modules/string-width": { 1444 | "version": "4.2.3", 1445 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1446 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1447 | "dev": true, 1448 | "dependencies": { 1449 | "emoji-regex": "^8.0.0", 1450 | "is-fullwidth-code-point": "^3.0.0", 1451 | "strip-ansi": "^6.0.1" 1452 | }, 1453 | "engines": { 1454 | "node": ">=8" 1455 | } 1456 | }, 1457 | "node_modules/strip-ansi": { 1458 | "version": "6.0.1", 1459 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1460 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1461 | "dev": true, 1462 | "dependencies": { 1463 | "ansi-regex": "^5.0.1" 1464 | }, 1465 | "engines": { 1466 | "node": ">=8" 1467 | } 1468 | }, 1469 | "node_modules/strip-json-comments": { 1470 | "version": "3.1.1", 1471 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1472 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1473 | "dev": true, 1474 | "engines": { 1475 | "node": ">=8" 1476 | }, 1477 | "funding": { 1478 | "url": "https://github.com/sponsors/sindresorhus" 1479 | } 1480 | }, 1481 | "node_modules/supports-color": { 1482 | "version": "7.2.0", 1483 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1484 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1485 | "dev": true, 1486 | "dependencies": { 1487 | "has-flag": "^4.0.0" 1488 | }, 1489 | "engines": { 1490 | "node": ">=8" 1491 | } 1492 | }, 1493 | "node_modules/text-table": { 1494 | "version": "0.2.0", 1495 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1496 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 1497 | "dev": true 1498 | }, 1499 | "node_modules/to-regex-range": { 1500 | "version": "5.0.1", 1501 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1502 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1503 | "dev": true, 1504 | "dependencies": { 1505 | "is-number": "^7.0.0" 1506 | }, 1507 | "engines": { 1508 | "node": ">=8.0" 1509 | } 1510 | }, 1511 | "node_modules/type-check": { 1512 | "version": "0.4.0", 1513 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 1514 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 1515 | "dev": true, 1516 | "dependencies": { 1517 | "prelude-ls": "^1.2.1" 1518 | }, 1519 | "engines": { 1520 | "node": ">= 0.8.0" 1521 | } 1522 | }, 1523 | "node_modules/uri-js": { 1524 | "version": "4.4.1", 1525 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1526 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1527 | "dev": true, 1528 | "dependencies": { 1529 | "punycode": "^2.1.0" 1530 | } 1531 | }, 1532 | "node_modules/which": { 1533 | "version": "2.0.2", 1534 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1535 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1536 | "dev": true, 1537 | "dependencies": { 1538 | "isexe": "^2.0.0" 1539 | }, 1540 | "bin": { 1541 | "node-which": "bin/node-which" 1542 | }, 1543 | "engines": { 1544 | "node": ">= 8" 1545 | } 1546 | }, 1547 | "node_modules/workerpool": { 1548 | "version": "6.2.1", 1549 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", 1550 | "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", 1551 | "dev": true 1552 | }, 1553 | "node_modules/wrap-ansi": { 1554 | "version": "7.0.0", 1555 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1556 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1557 | "dev": true, 1558 | "dependencies": { 1559 | "ansi-styles": "^4.0.0", 1560 | "string-width": "^4.1.0", 1561 | "strip-ansi": "^6.0.0" 1562 | }, 1563 | "engines": { 1564 | "node": ">=10" 1565 | }, 1566 | "funding": { 1567 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1568 | } 1569 | }, 1570 | "node_modules/wrappy": { 1571 | "version": "1.0.2", 1572 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1573 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1574 | "dev": true 1575 | }, 1576 | "node_modules/y18n": { 1577 | "version": "5.0.8", 1578 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1579 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 1580 | "dev": true, 1581 | "engines": { 1582 | "node": ">=10" 1583 | } 1584 | }, 1585 | "node_modules/yargs": { 1586 | "version": "16.2.0", 1587 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 1588 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 1589 | "dev": true, 1590 | "dependencies": { 1591 | "cliui": "^7.0.2", 1592 | "escalade": "^3.1.1", 1593 | "get-caller-file": "^2.0.5", 1594 | "require-directory": "^2.1.1", 1595 | "string-width": "^4.2.0", 1596 | "y18n": "^5.0.5", 1597 | "yargs-parser": "^20.2.2" 1598 | }, 1599 | "engines": { 1600 | "node": ">=10" 1601 | } 1602 | }, 1603 | "node_modules/yargs-parser": { 1604 | "version": "20.2.4", 1605 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", 1606 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", 1607 | "dev": true, 1608 | "engines": { 1609 | "node": ">=10" 1610 | } 1611 | }, 1612 | "node_modules/yargs-unparser": { 1613 | "version": "2.0.0", 1614 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 1615 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 1616 | "dev": true, 1617 | "dependencies": { 1618 | "camelcase": "^6.0.0", 1619 | "decamelize": "^4.0.0", 1620 | "flat": "^5.0.2", 1621 | "is-plain-obj": "^2.1.0" 1622 | }, 1623 | "engines": { 1624 | "node": ">=10" 1625 | } 1626 | }, 1627 | "node_modules/yocto-queue": { 1628 | "version": "0.1.0", 1629 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 1630 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 1631 | "dev": true, 1632 | "engines": { 1633 | "node": ">=10" 1634 | }, 1635 | "funding": { 1636 | "url": "https://github.com/sponsors/sindresorhus" 1637 | } 1638 | } 1639 | } 1640 | } 1641 | -------------------------------------------------------------------------------- /test/packages/eslint-v9/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eslint-plugin-json-v9", 3 | "version": "0.1.0", 4 | "description": "Integration for eslint-plugin-json against ESLint v9", 5 | "private": true, 6 | "main": "index.js", 7 | "scripts": { 8 | "pretest": "eslint --version", 9 | "test": "node_modules/.bin/mocha test/integration.test.js" 10 | }, 11 | "keywords": [ 12 | "eslint", 13 | "eslint-plugin", 14 | "eslint-plugin-json", 15 | "integration-tests" 16 | ], 17 | "license": "MIT", 18 | "devDependencies": { 19 | "eslint": "9.1.0", 20 | "mocha": "^10.4.0" 21 | }, 22 | "dependencies": {} 23 | } 24 | -------------------------------------------------------------------------------- /test/packages/eslint-v9/test: -------------------------------------------------------------------------------- 1 | ../.. -------------------------------------------------------------------------------- /test/samples: -------------------------------------------------------------------------------- 1 | ../examples/samples -------------------------------------------------------------------------------- /test/unit.test.js: -------------------------------------------------------------------------------- 1 | const plugin = require('../src'); 2 | const {assert} = require('chai'); 3 | const _ = require('lodash/fp'); 4 | 5 | describe('plugin', function () { 6 | describe('structure', function () { 7 | it('should contain processors object', function () { 8 | assert.property(plugin, 'processors', '.processors property is not defined'); 9 | }); 10 | it('should contain .json property', function () { 11 | assert.property(plugin.processors, '.json', '.json property is not defined'); 12 | }); 13 | it('should contain .json.preprocess property', function () { 14 | assert.property( 15 | plugin.processors['.json'], 16 | 'preprocess', 17 | '.json.preprocess is not defined' 18 | ); 19 | }); 20 | it('should contain .json.postprocess property', function () { 21 | assert.property( 22 | plugin.processors['.json'], 23 | 'postprocess', 24 | '.json.postprocess is not defined' 25 | ); 26 | }); 27 | }); 28 | describe('preprocess', function () { 29 | const preprocess = plugin.processors['.json'].preprocess; 30 | it('should return the same text', function () { 31 | const fileName = 'whatever-the-name.js'; 32 | 33 | const newText = preprocess('whatever', fileName); 34 | assert.isArray(newText, 'preprocess should return array'); 35 | assert.strictEqual(newText[0], ''); 36 | }); 37 | }); 38 | describe('postprocess', function () { 39 | const preprocess = plugin.processors['.json'].preprocess; 40 | const postprocess = plugin.processors['.json'].postprocess; 41 | 42 | const messageErrorFieldFromContextError = { 43 | ruleId: _.get('ruleId'), 44 | severity: _.getOr(1, 'severity'), 45 | message: _.get('message'), 46 | line: _.get('loc.start.line'), 47 | column: _.get('loc.start.column'), 48 | nodeType: _.getOr(null, 'nodeType'), 49 | endLine: _.get('loc.end.line'), 50 | endColumn: _.get('loc.end.column'), 51 | }; 52 | const convertContextErrorToMessageError = (err) => 53 | _.mapValues((extractor) => extractor(err), messageErrorFieldFromContextError); 54 | const fakeApplyRule = (rules) => (file) => { 55 | const errors = []; 56 | rules.forEach((rule) => { 57 | const xxx = rule.create({ 58 | getFilename() { 59 | return file; 60 | }, 61 | report(err) { 62 | errors.push(err); 63 | }, 64 | }); 65 | xxx.Program(); 66 | }); 67 | return [errors.map(convertContextErrorToMessageError)]; 68 | }; 69 | 70 | const singleQuotes = { 71 | fileName: 'singleQuotes.json', 72 | text: "{'x': 0}", 73 | }; 74 | const trailingCommas = { 75 | fileName: 'trailing.json', 76 | text: '{ "x": 0, }', 77 | }; 78 | const multipleErrors = { 79 | fileName: 'multipleErrors.json', 80 | text: "{ x: 200, 'what': 0 }", 81 | }; 82 | const trailingText = { 83 | fileName: 'trailingtext.json', 84 | text: '{ "my_string": "hello world" }' + ' \n' + 'bad_text', 85 | }; 86 | 87 | const good = { 88 | fileName: 'good.json', 89 | text: JSON.stringify({a: [1, 2, 3], b: 'cat', c: {x: 1}}), 90 | }; 91 | 92 | const rules = ['undefined', 'trailing-comma']; 93 | const lintFile = fakeApplyRule(rules.map((rule) => plugin.rules[rule])); 94 | const samples = [singleQuotes, trailingCommas, multipleErrors, trailingText, good]; 95 | samples.forEach((sample) => preprocess(sample.text, sample.fileName)); 96 | 97 | const errorsByFile = _.fromPairs( 98 | samples.map((sample) => [sample.fileName, lintFile(sample.fileName)]) 99 | ); 100 | 101 | it('should return an error for the single quotes', function () { 102 | const errors = postprocess(errorsByFile[singleQuotes.fileName], singleQuotes.fileName); 103 | assert.isArray(errors, 'should return an array'); 104 | assert.lengthOf(errors, 1, 'should return one error'); 105 | 106 | const error = errors[0]; 107 | assert.strictEqual(error.ruleId, 'json/undefined', 'should have a string ID'); 108 | assert.strictEqual(error.severity, 1, 'should have a numeric severity'); 109 | assert.strictEqual( 110 | error.message, 111 | 'Property keys must be doublequoted', 112 | 'should have a message' 113 | ); 114 | assert.strictEqual(error.line, 1, 'should point to first line'); 115 | assert.strictEqual(error.column, 2, 'should point to second character'); 116 | }); 117 | 118 | it('should return an error for trailing commas', function () { 119 | const errors = postprocess( 120 | errorsByFile[trailingCommas.fileName], 121 | trailingCommas.fileName 122 | ); 123 | assert.isArray(errors, 'should return an array'); 124 | assert.lengthOf(errors, 1, 'should return one error'); 125 | 126 | const error = errors[0]; 127 | assert.strictEqual(error.ruleId, 'json/trailing-comma', 'should have a string ID'); 128 | assert.strictEqual(error.line, 1, 'should point to the first line'); 129 | assert.strictEqual(error.column, 9, 'should point to the 9th character'); 130 | }); 131 | 132 | it('should report unrecoverable syntax error', function () { 133 | const errors = postprocess(errorsByFile[trailingText.fileName], trailingText.fileName); 134 | assert.isArray(errors, 'should return an array'); 135 | assert.lengthOf(errors, 1, 'should return one error'); 136 | assert.isString(errors[0].message, 'should have a valid message'); 137 | 138 | // we don't validate the line/column numbers since they don't actually 139 | // mean anything for this error. JSHint just bails on the file. 140 | }); 141 | 142 | it('should return multiple errors for multiple errors', function () { 143 | const errors = postprocess( 144 | errorsByFile[multipleErrors.fileName], 145 | multipleErrors.fileName 146 | ); 147 | assert.isArray(errors, 'should return an array'); 148 | assert.lengthOf(errors, 2, 'should return one error'); 149 | }); 150 | 151 | it('should return no errors for good json', function () { 152 | const errors = postprocess(errorsByFile[good.fileName], good.fileName); 153 | assert.isArray(errors, 'should return an array'); 154 | assert.lengthOf(errors, 0, "good json shouldn't have any errors"); 155 | }); 156 | }); 157 | }); 158 | -------------------------------------------------------------------------------- /vendor/eslint-plugin-self/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## v1.2.1 (2020-05-27) 4 | 5 | * Support overrides having no rules :see_no_evil: ([#5](https://github.com/not-an-aardvark/eslint-plugin-self/issues/5)) ([e266543](https://github.com/not-an-aardvark/eslint-plugin-self/commit/e266543e50d062251755dd488abae31be7644bb1)) 6 | 7 | ## v1.2.0 (2019-03-04) 8 | 9 | * Support redefining plugins, overrides and rules with a "/" in them ([#2](https://github.com/not-an-aardvark/eslint-plugin-self/issues/2)) ([428664e](https://github.com/not-an-aardvark/eslint-plugin-self/commit/428664e1cf8f3726e0bb3b10bb3e137d271749c2)) 10 | 11 | ## v1.1.0 (2018-07-06) 12 | 13 | * Chore: add release script ([983a7d0](https://github.com/not-an-aardvark/eslint-plugin-self/commit/983a7d05c48bccc125f8d89fae1109a0c5a1d670)) 14 | * Update: Add support for @scoped packages ([#1](https://github.com/not-an-aardvark/eslint-plugin-self/issues/1)) ([c57a01b](https://github.com/not-an-aardvark/eslint-plugin-self/commit/c57a01bbf922b82d09a0cceba6b5e845fab7d23a)) 15 | 16 | ## v1.0.1 (2017-07-02) 17 | 18 | * Fix: transform references to own rules in configs to use `self` prefix ([2dce85e](https://github.com/not-an-aardvark/eslint-plugin-self/commit/2dce85e445a7604f5fd963d1366509fa7a66d420)) 19 | 20 | 21 | -------------------------------------------------------------------------------- /vendor/eslint-plugin-self/LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | ===================== 3 | 4 | Copyright © 2017 Teddy Katz 5 | 6 | Permission is hereby granted, free of charge, to any person 7 | obtaining a copy of this software and associated documentation 8 | files (the “Software”), to deal in the Software without 9 | restriction, including without limitation the rights to use, 10 | copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the 12 | Software is furnished to do so, subject to the following 13 | conditions: 14 | 15 | The above copyright notice and this permission notice shall be 16 | included in all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, 19 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 20 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 21 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 22 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 23 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 24 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 25 | OTHER DEALINGS IN THE SOFTWARE. 26 | -------------------------------------------------------------------------------- /vendor/eslint-plugin-self/README.md: -------------------------------------------------------------------------------- 1 | # eslint-plugin-self 2 | 3 | When writing an ESLint plugin, it's often useful to use the plugin's rules to lint the plugin's own codebase. You can use `eslint-plugin-self` to do that. 4 | 5 | ## Usage 6 | 7 | ``` 8 | npm install eslint-plugin-self --save-dev 9 | ``` 10 | 11 | Note: `eslint-plugin-self` must be installed locally (it will not work if installed globally), and the project that installs it must be a functioning ESLint plugin. 12 | 13 | Add the following to your config file: 14 | 15 | ```json 16 | { 17 | "plugins": [ 18 | "self" 19 | ] 20 | } 21 | ``` 22 | 23 | Then you can use your plugin's rules, with the `self/` prefix: 24 | 25 | ```json 26 | { 27 | "rules": { 28 | "self/my-custom-rule": "error" 29 | } 30 | } 31 | ``` 32 | 33 | You can also use your plugin's configs, or anything else exported by your plugin: 34 | 35 | ```json 36 | { 37 | "extends": [ 38 | "plugin:self/some-config" 39 | ] 40 | } 41 | ``` 42 | -------------------------------------------------------------------------------- /vendor/eslint-plugin-self/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const plugin = require('../..'); 4 | const selfPlugin = Object.assign({}, plugin); 5 | 6 | const pkgName = require('../../package.json').name; 7 | let pluginName; 8 | if (pkgName[0] === "@") { 9 | const matches = pkgName.match(/^(@[^/]+)\/eslint-plugin(?:-(.*))?$/); 10 | pluginName = matches.slice(1, 3).filter(Boolean).join('/'); 11 | } else { 12 | pluginName = pkgName.replace(/^eslint-plugin-/, ''); 13 | } 14 | 15 | function createRuleset(rules) { 16 | return Object.keys(rules).reduce((newRules, oldRuleName) => { 17 | const newRuleName = oldRuleName.startsWith(`${pluginName}/`) 18 | ? `self${oldRuleName.slice(oldRuleName.indexOf('/'))}` 19 | : oldRuleName; 20 | 21 | newRules[newRuleName] = rules[oldRuleName]; 22 | return newRules; 23 | }, {}); 24 | } 25 | 26 | if (plugin.configs) { 27 | selfPlugin.configs = Object.assign({}, plugin.configs); 28 | 29 | Object.keys(plugin.configs).forEach(configName => { 30 | const config = plugin.configs[configName]; 31 | selfPlugin.configs[configName] = Object.assign({}, config); 32 | if (config.extends) { 33 | selfPlugin.configs[configName].extends = [].concat(config.extends) 34 | .map(extendsName => extendsName.replace(`plugin:${pluginName}/`, 'plugin:self/')); 35 | } 36 | // The Array.isArray avoids attempting to change the plugins property for 37 | // eslint v9 based configurations. 38 | if (config.plugins && Array.isArray(config.plugins)) { 39 | selfPlugin.configs[configName].plugins = [].concat(config.plugins) 40 | .map(enabledPluginName => enabledPluginName.replace(pluginName, 'self')); 41 | } 42 | if (config.rules) { 43 | selfPlugin.configs[configName].rules = createRuleset(config.rules); 44 | } 45 | if (config.overrides) { 46 | selfPlugin.configs[configName].overrides = [].concat(config.overrides) 47 | .map((override) => { 48 | if (!override.rules) return override; 49 | return Object.assign( 50 | {}, 51 | override, 52 | {rules: createRuleset(override.rules)} 53 | ); 54 | }) 55 | } 56 | }); 57 | } 58 | 59 | module.exports = selfPlugin; 60 | -------------------------------------------------------------------------------- /vendor/eslint-plugin-self/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eslint-plugin-self", 3 | "version": "1.2.1", 4 | "description": "Allows ESLint plugins to be run on themselves", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "generate-release": "node-release-script" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "git+https://github.com/not-an-aardvark/eslint-plugin-self.git" 13 | }, 14 | "keywords": [ 15 | "eslint-plugin", 16 | "eslintplugin" 17 | ], 18 | "author": "Teddy Katz", 19 | "license": "MIT", 20 | "bugs": { 21 | "url": "https://github.com/not-an-aardvark/eslint-plugin-self/issues" 22 | }, 23 | "homepage": "https://github.com/not-an-aardvark/eslint-plugin-self#readme", 24 | "devDependencies": { 25 | "@not-an-aardvark/node-release-script": "^0.1.0" 26 | } 27 | } 28 | --------------------------------------------------------------------------------