├── .dockerignore ├── .github ├── FUNDING.yml └── workflows │ └── test.yml ├── .gitignore ├── Dockerfile ├── LICENSE.txt ├── README.md ├── docker-compose.yml ├── index.d.ts ├── index.js ├── index.test.js ├── output └── .gitignore ├── package-lock.json ├── package.json ├── samples ├── lenna-diff.png ├── lenna-edit.png └── lenna.png ├── tsconfig.d.json └── tsconfig.json /.dockerignore: -------------------------------------------------------------------------------- 1 | * 2 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [blueimp] 2 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | test: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@v2 10 | - uses: actions/setup-node@v2 11 | with: 12 | node-version: 16 13 | - run: chmod -R 777 output 14 | - run: docker-compose build 15 | - run: npm install 16 | - run: npm test 17 | - if: always() 18 | uses: actions/upload-artifact@v2 19 | with: 20 | name: output 21 | path: output 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:3.14 2 | 3 | RUN apk --no-cache add \ 4 | tini \ 5 | nodejs \ 6 | npm \ 7 | ffmpeg \ 8 | && npm install -g \ 9 | npm@latest \ 10 | mocha@9 \ 11 | # Clean up obsolete files: 12 | && rm -rf \ 13 | /tmp/* \ 14 | /root/.npm 15 | 16 | # Avoid permission issues with host mounts by assigning a user/group with 17 | # uid/gid 1000 (usually the ID of the first user account on GNU/Linux): 18 | RUN adduser -D -u 1000 mocha 19 | 20 | USER mocha 21 | 22 | WORKDIR /app 23 | 24 | ENTRYPOINT ["tini", "-g", "--", "mocha"] 25 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright © 2016 Sebastian Tschan, https://blueimp.net 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FFmpeg Image Diff 2 | 3 | A [NodeJS](https://nodejs.org/) image diffing library using 4 | [FFmpeg](https://www.ffmpeg.org/). 5 | Creates an image showing perceptual differences and returns 6 | [SSIM](https://en.wikipedia.org/wiki/Structural_similarity) data. 7 | 8 | ## Contents 9 | 10 | - [Requirements](#requirements) 11 | - [Install](#install) 12 | - [Usage](#usage) 13 | - [Options](#options) 14 | - [ssim](#ssim) 15 | - [similarity](#similarity) 16 | - [blend](#blend) 17 | - [opacity](#opacity) 18 | - [color](#color) 19 | - [Samples](#samples) 20 | - [Reference image](#reference-image) 21 | - [Comparison image](#comparison-image) 22 | - [Output image](#output-image) 23 | - [Testing](#testing) 24 | - [License](#license) 25 | - [Author](#author) 26 | 27 | ## Requirements 28 | 29 | This is a thin wrapper around [FFmpeg](https://www.ffmpeg.org/) and has no other 30 | dependencies. 31 | 32 | ## Install 33 | 34 | ```sh 35 | npm install ffmpeg-image-diff 36 | ``` 37 | 38 | ## Usage 39 | 40 | Displaying [SSIM](https://en.wikipedia.org/wiki/Structural_similarity) data 41 | only: 42 | 43 | ```js 44 | const imgDiff = require('ffmpeg-image-diff') 45 | 46 | imgDiff( 47 | referenceImage, // e.g. 'test/lenna.png' 48 | comparisonImage // e.g. 'test/lenna-edit.png' 49 | ) 50 | .then(ssim => { 51 | // Sample output: { R: 0.990149, G: 0.991289, B: 0.990579, All: 0.990672 } 52 | console.log(ssim) 53 | }) 54 | .catch(error => { 55 | console.error(error) 56 | }) 57 | ``` 58 | 59 | Creating a differential image with default options: 60 | 61 | ```js 62 | const imgDiff = require('ffmpeg-image-diff') 63 | 64 | imgDiff( 65 | referenceImage, // e.g. 'test/lenna.png' 66 | comparisonImage, // e.g. 'test/lenna-edit.png' 67 | outputImage, // e.g. 'test/out.png', overwrites an existing file 68 | { 69 | ssim: true, // true or false 70 | similarity: 0.01, // 1.0 - 0.01 71 | blend: 1.0, // 1.0 - 0.0 72 | opacity: 0.1, // 1.0 - 0.0 73 | color: 'magenta' // magenta, yellow, cyan, red green, blue or '' 74 | } 75 | ) 76 | .then(ssim => { 77 | // Sample output: { R: 0.990149, G: 0.991289, B: 0.990579, All: 0.990672 } 78 | console.log(ssim) 79 | }) 80 | .catch(error => { 81 | console.error(error) 82 | }) 83 | ``` 84 | 85 | ## Options 86 | 87 | ### ssim 88 | 89 | If set to `false`, disables 90 | [SSIM](https://en.wikipedia.org/wiki/Structural_similarity) calculation. 91 | _Default:_ `true` 92 | 93 | ### similarity 94 | 95 | Defines the threshold to identify image differences. 96 | `0.01` matches slight differences, while `1.0` only matches stark contrast. 97 | _Range:_ `1.0 - 0.01` 98 | _Default:_ `0.01` 99 | 100 | ### blend 101 | 102 | Blend percentage for the differential pixels. 103 | Higher values result in semi-transparent pixels, with a higher transparency the 104 | more similar the pixels color is to the original color. 105 | _Range:_ `1.0 - 0.0` 106 | _Default:_ `1.0` 107 | 108 | ### opacity 109 | 110 | Opacity of the reference image as backdrop for the differential image. 111 | Higher values result in a more opaque background image. 112 | _Range:_ `1.0 - 0.0` 113 | _Default:_ `0.1` 114 | 115 | ### color 116 | 117 | The color balance of the differential pixels. 118 | An empty string displays the default differential pixels. 119 | _Set:_ `['magenta', 'yellow', 'cyan', 'red', 'green', 'blue', '']` 120 | _Default:_ `'magenta'` 121 | 122 | ## Samples 123 | 124 | ### Reference image 125 | 126 | ![Lenna](samples/lenna.png) 127 | 128 | ### Comparison image 129 | 130 | ![Lenna Edit](samples/lenna-edit.png) 131 | 132 | ### Output image 133 | 134 | ![Lenna Diff](samples/lenna-diff.png) 135 | 136 | ## Testing 137 | 138 | 1. Start [Docker](https://docs.docker.com/). 139 | 2. Install development dependencies: 140 | ```sh 141 | npm install 142 | ``` 143 | 3. Run the tests: 144 | ```sh 145 | npm test 146 | ``` 147 | 148 | ## License 149 | 150 | Released under the [MIT license](https://opensource.org/licenses/MIT). 151 | 152 | ## Author 153 | 154 | [Sebastian Tschan](https://blueimp.net/) 155 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.7' 2 | services: 3 | test: 4 | build: . 5 | command: index.test.js 6 | read_only: true 7 | volumes: 8 | - .:/app:ro 9 | - ./output:/app/output 10 | -------------------------------------------------------------------------------- /index.d.ts: -------------------------------------------------------------------------------- 1 | export = imageDiff; 2 | /** 3 | * Compares two images, creates diff img and returns differences as SSIM stats. 4 | * 5 | * @param {string} refImg File path to reference image 6 | * @param {string} cmpImg File path to comparison image 7 | * @param {string} [outImg] File path to output image 8 | * @param {Options} [options] Image diffing options 9 | * @returns {Promise} Resolves with the image comparison result 10 | */ 11 | declare function imageDiff(refImg: string, cmpImg: string, outImg?: string, options?: Options): Promise; 12 | declare namespace imageDiff { 13 | export { Options, Result }; 14 | } 15 | /** 16 | * Image diffing options 17 | */ 18 | type Options = { 19 | /** 20 | * Set to `false` to disable SSIM calculation 21 | */ 22 | ssim?: boolean; 23 | /** 24 | * Threshold to identify image differences 25 | */ 26 | similarity?: number; 27 | /** 28 | * Blend percentage for the differential pixels 29 | */ 30 | blend?: number; 31 | /** 32 | * Opacity of the reference image as backdrop 33 | */ 34 | opacity?: number; 35 | /** 36 | * Color balance of the differential pixels 37 | */ 38 | color?: string; 39 | }; 40 | type Result = { 41 | /** 42 | * Red color differences 43 | */ 44 | R?: number; 45 | /** 46 | * Green color differences 47 | */ 48 | G?: number; 49 | /** 50 | * blue color differences 51 | */ 52 | B?: number; 53 | /** 54 | * All color differences 55 | */ 56 | All?: number; 57 | }; 58 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * An image diffing library using FFmpeg. 3 | * Creates an image showing perceptual differences and returns SSIM data. 4 | * 5 | * For documentation on the image filters used, please see 6 | * https://ffmpeg.org/ffmpeg-filters.html 7 | * 8 | * On the definition of SSIM, please see 9 | * https://en.wikipedia.org/wiki/Structural_similarity 10 | * 11 | * Copyright 2016, Sebastian Tschan 12 | * https://blueimp.net 13 | * 14 | * Licensed under the MIT license: 15 | * https://opensource.org/licenses/MIT 16 | */ 17 | 18 | 'use strict' 19 | 20 | /** 21 | * @typedef {object} Options Image diffing options 22 | * @property {boolean} [ssim=true] Set to `false` to disable SSIM calculation 23 | * @property {number} [similarity=0.01] Threshold to identify image differences 24 | * @property {number} [blend=1.0] Blend percentage for the differential pixels 25 | * @property {number} [opacity=0.1] Opacity of the reference image as backdrop 26 | * @property {string} [color=magenta] Color balance of the differential pixels 27 | */ 28 | 29 | /** 30 | * @typedef {object} Result 31 | * @property {number} [R] Red color differences 32 | * @property {number} [G] Green color differences 33 | * @property {number} [B] blue color differences 34 | * @property {number} [All] All color differences 35 | */ 36 | 37 | const execFile = require('util').promisify(require('child_process').execFile) 38 | 39 | /** 40 | * Compares two images, creates diff and returns differences as SSIM stats. 41 | * 42 | * @param {string} refImg File path to reference image 43 | * @param {string} cmpImg File path to comparison image 44 | * @param {Array} args ffmpeg arguments 45 | * @returns {Promise} Resolves with the image comparison result 46 | */ 47 | function ffmpeg(refImg, cmpImg, args) { 48 | return execFile( 49 | 'ffmpeg', 50 | ['-loglevel', 'error', '-i', refImg, '-i', cmpImg].concat(args) 51 | ).then(function (result) { 52 | // SSIM log output has the following format: 53 | // n:1 R:x.xxxxxx G:x.xxxxxx B:x.xxxxxx All:x.xxxxxx (xx.xxxxxx) 54 | // We only keep the R, G, B and All values and turn them into an object: 55 | return result.stdout 56 | .split(' ') 57 | .slice(1, -1) 58 | .reduce(function (obj, val) { 59 | const tupel = val.split(':') 60 | obj[tupel[0]] = parseFloat(tupel[1]) 61 | return obj 62 | }, {}) 63 | }) 64 | } 65 | 66 | /** 67 | * Compares two images, creates diff img and returns differences as SSIM stats. 68 | * 69 | * @param {string} refImg File path to reference image 70 | * @param {string} cmpImg File path to comparison image 71 | * @param {string} [outImg] File path to output image 72 | * @param {Options} [options] Image diffing options 73 | * @returns {Promise} Resolves with the image comparison result 74 | */ 75 | function imageDiff(refImg, cmpImg, outImg, options) { 76 | if (!outImg) { 77 | // Resolve with the SSIM stats without creating a differential image: 78 | return ffmpeg(refImg, cmpImg, [ 79 | '-filter_complex', 80 | 'ssim=stats_file=-', 81 | '-f', 82 | 'null', 83 | '-' 84 | ]) 85 | } 86 | const opts = Object.assign( 87 | { 88 | ssim: true, // true or false 89 | similarity: 0.01, // 1.0 - 0.01 90 | blend: 1.0, // 1.0 - 0.0 91 | opacity: 0.1, // 1.0 - 0.0 92 | color: 'magenta' // magenta, yellow, cyan, red green, blue or '' 93 | }, 94 | options 95 | ) 96 | const ssim = opts.ssim ? 'ssim=stats_file=-[ssim];[ssim][1]' : '' 97 | const colorkey = 98 | 'format=rgba,colorkey=white' + 99 | `:similarity=${opts.similarity}:blend=${opts.blend}` 100 | let colorbalance = 'colorbalance=' 101 | switch (opts.color) { 102 | case 'magenta': 103 | colorbalance += `rs=1:gs=-1:bs=1:rm=1:gm=-1:bm=1:rh=1:gh=-1:bh=1` 104 | break 105 | case 'yellow': 106 | colorbalance += `rs=1:gs=1:bs=-1:rm=1:gm=1:bm=-1:rh=1:gh=1:bh=-1` 107 | break 108 | case 'cyan': 109 | colorbalance += `rs=-1:gs=1:bs=1:rm=-1:gm=1:bm=1:rh=-1:gh=1:bh=1` 110 | break 111 | case 'red': 112 | colorbalance += `rs=1:gs=-1:bs=-1:rm=1:gm=-1:bm=-1:rh=1:gh=-1:bh=-1` 113 | break 114 | case 'green': 115 | colorbalance += `rs=-1:gs=1:bs=-1:rm=-1:gm=1:bm=-1:rh=-1:gh=1:bh=-1` 116 | break 117 | case 'blue': 118 | colorbalance += `rs=-1:gs=-1:bs=1:rm=-1:gm=-1:bm=1:rh=-1:gh=-1:bh=1` 119 | break 120 | default: 121 | colorbalance += opts.color 122 | } 123 | // Create a differential image with transparent background. 124 | // The differences are highlighted with the given colorbalance: 125 | const diff = `blend=all_mode=phoenix,${colorkey},${colorbalance}[diff];` 126 | // Use the reference file as background with the given opacity: 127 | const bg = 128 | opts.opacity < 1 129 | ? `format=rgba,colorchannelmixer=aa=${opts.opacity}[bg];[bg]` 130 | : '' 131 | // Overlay the background with the diff: 132 | const overlay = `[0]${bg}[diff]overlay=format=rgb` 133 | // Create a differential image with the given arguments: 134 | return ffmpeg(refImg, cmpImg, [ 135 | '-filter_complex', 136 | `${ssim}${diff}${overlay}`, 137 | '-y', 138 | outImg 139 | ]) 140 | } 141 | 142 | module.exports = imageDiff 143 | -------------------------------------------------------------------------------- /index.test.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | /* global describe, it */ 4 | 5 | /** @type {object} */ 6 | const assert = require('assert') 7 | const imgDiff = require('.') 8 | 9 | const referenceImage = 'samples/lenna.png' 10 | const comparisonImage = 'samples/lenna-edit.png' 11 | 12 | describe('image diff', function () { 13 | this.slow(300) 14 | 15 | it('no output image', async function () { 16 | this.slow(150) 17 | const result = await imgDiff(referenceImage, comparisonImage) 18 | assert.strictEqual(typeof result.R, 'number') 19 | assert.strictEqual(typeof result.G, 'number') 20 | assert.strictEqual(typeof result.B, 'number') 21 | assert.strictEqual(typeof result.All, 'number') 22 | }) 23 | 24 | it('default', async function () { 25 | const result = await imgDiff( 26 | referenceImage, 27 | comparisonImage, 28 | 'output/default.png' 29 | ) 30 | assert.strictEqual(typeof result.R, 'number') 31 | assert.strictEqual(typeof result.G, 'number') 32 | assert.strictEqual(typeof result.B, 'number') 33 | assert.strictEqual(typeof result.All, 'number') 34 | }) 35 | 36 | it('color yellow', async function () { 37 | const result = await imgDiff( 38 | referenceImage, 39 | comparisonImage, 40 | 'output/color-yellow.png', 41 | { color: 'yellow' } 42 | ) 43 | assert.strictEqual(typeof result.R, 'number') 44 | assert.strictEqual(typeof result.G, 'number') 45 | assert.strictEqual(typeof result.B, 'number') 46 | assert.strictEqual(typeof result.All, 'number') 47 | }) 48 | 49 | it('color cyan', async function () { 50 | const result = await imgDiff( 51 | referenceImage, 52 | comparisonImage, 53 | 'output/color-cyan.png', 54 | { color: 'cyan' } 55 | ) 56 | assert.strictEqual(typeof result.R, 'number') 57 | assert.strictEqual(typeof result.G, 'number') 58 | assert.strictEqual(typeof result.B, 'number') 59 | assert.strictEqual(typeof result.All, 'number') 60 | }) 61 | 62 | it('color red', async function () { 63 | const result = await imgDiff( 64 | referenceImage, 65 | comparisonImage, 66 | 'output/color-red.png', 67 | { color: 'red' } 68 | ) 69 | assert.strictEqual(typeof result.R, 'number') 70 | assert.strictEqual(typeof result.G, 'number') 71 | assert.strictEqual(typeof result.B, 'number') 72 | assert.strictEqual(typeof result.All, 'number') 73 | }) 74 | 75 | it('color green', async function () { 76 | const result = await imgDiff( 77 | referenceImage, 78 | comparisonImage, 79 | 'output/color-green.png', 80 | { color: 'green' } 81 | ) 82 | assert.strictEqual(typeof result.R, 'number') 83 | assert.strictEqual(typeof result.G, 'number') 84 | assert.strictEqual(typeof result.B, 'number') 85 | assert.strictEqual(typeof result.All, 'number') 86 | }) 87 | 88 | it('color blue', async function () { 89 | const result = await imgDiff( 90 | referenceImage, 91 | comparisonImage, 92 | 'output/color-blue.png', 93 | { color: 'blue' } 94 | ) 95 | assert.strictEqual(typeof result.R, 'number') 96 | assert.strictEqual(typeof result.G, 'number') 97 | assert.strictEqual(typeof result.B, 'number') 98 | assert.strictEqual(typeof result.All, 'number') 99 | }) 100 | 101 | it('color empty', async function () { 102 | const result = await imgDiff( 103 | referenceImage, 104 | comparisonImage, 105 | 'output/color-empty.png', 106 | { color: '' } 107 | ) 108 | assert.strictEqual(typeof result.R, 'number') 109 | assert.strictEqual(typeof result.G, 'number') 110 | assert.strictEqual(typeof result.B, 'number') 111 | assert.strictEqual(typeof result.All, 'number') 112 | }) 113 | 114 | it('similarity 1', async function () { 115 | const result = await imgDiff( 116 | referenceImage, 117 | comparisonImage, 118 | 'output/similarity-1.png', 119 | { similarity: 1 } 120 | ) 121 | assert.strictEqual(typeof result.R, 'number') 122 | assert.strictEqual(typeof result.G, 'number') 123 | assert.strictEqual(typeof result.B, 'number') 124 | assert.strictEqual(typeof result.All, 'number') 125 | }) 126 | 127 | it('blend 0', async function () { 128 | const result = await imgDiff( 129 | referenceImage, 130 | comparisonImage, 131 | 'output/blend-0.png', 132 | { blend: 0 } 133 | ) 134 | assert.strictEqual(typeof result.R, 'number') 135 | assert.strictEqual(typeof result.G, 'number') 136 | assert.strictEqual(typeof result.B, 'number') 137 | assert.strictEqual(typeof result.All, 'number') 138 | }) 139 | 140 | it('opacity 0', async function () { 141 | const result = await imgDiff( 142 | referenceImage, 143 | comparisonImage, 144 | 'output/opacity-0.png', 145 | { opacity: 0 } 146 | ) 147 | assert.strictEqual(typeof result.R, 'number') 148 | assert.strictEqual(typeof result.G, 'number') 149 | assert.strictEqual(typeof result.B, 'number') 150 | assert.strictEqual(typeof result.All, 'number') 151 | }) 152 | 153 | it('opacity 1', async function () { 154 | const result = await imgDiff( 155 | referenceImage, 156 | comparisonImage, 157 | 'output/opacity-1.png', 158 | { opacity: 1 } 159 | ) 160 | assert.strictEqual(typeof result.R, 'number') 161 | assert.strictEqual(typeof result.G, 'number') 162 | assert.strictEqual(typeof result.B, 'number') 163 | assert.strictEqual(typeof result.All, 'number') 164 | }) 165 | 166 | it('ssim false', async function () { 167 | const result = await imgDiff( 168 | referenceImage, 169 | comparisonImage, 170 | 'output/ssim-false.png', 171 | { ssim: false } 172 | ) 173 | assert.strictEqual(result.constructor, Object) 174 | assert.strictEqual(Object.entries(result).length, 0) 175 | }) 176 | }) 177 | -------------------------------------------------------------------------------- /output/.gitignore: -------------------------------------------------------------------------------- 1 | *.png 2 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ffmpeg-image-diff", 3 | "version": "1.16.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "ffmpeg-image-diff", 9 | "version": "1.16.0", 10 | "license": "MIT", 11 | "devDependencies": { 12 | "@types/mocha": "9", 13 | "@types/node": "16", 14 | "eslint": "7", 15 | "eslint-config-blueimp": "2", 16 | "eslint-config-prettier": "8", 17 | "eslint-plugin-jsdoc": "36", 18 | "eslint-plugin-node": "11", 19 | "eslint-plugin-prettier": "4", 20 | "prettier": "2", 21 | "typescript": "4" 22 | }, 23 | "engines": { 24 | "node": ">=10.0.0" 25 | } 26 | }, 27 | "node_modules/@babel/code-frame": { 28 | "version": "7.12.11", 29 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", 30 | "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", 31 | "dev": true, 32 | "dependencies": { 33 | "@babel/highlight": "^7.10.4" 34 | } 35 | }, 36 | "node_modules/@babel/helper-validator-identifier": { 37 | "version": "7.15.7", 38 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", 39 | "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", 40 | "dev": true, 41 | "engines": { 42 | "node": ">=6.9.0" 43 | } 44 | }, 45 | "node_modules/@babel/highlight": { 46 | "version": "7.14.5", 47 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", 48 | "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", 49 | "dev": true, 50 | "dependencies": { 51 | "@babel/helper-validator-identifier": "^7.14.5", 52 | "chalk": "^2.0.0", 53 | "js-tokens": "^4.0.0" 54 | }, 55 | "engines": { 56 | "node": ">=6.9.0" 57 | } 58 | }, 59 | "node_modules/@babel/highlight/node_modules/ansi-styles": { 60 | "version": "3.2.1", 61 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 62 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 63 | "dev": true, 64 | "dependencies": { 65 | "color-convert": "^1.9.0" 66 | }, 67 | "engines": { 68 | "node": ">=4" 69 | } 70 | }, 71 | "node_modules/@babel/highlight/node_modules/chalk": { 72 | "version": "2.4.2", 73 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 74 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 75 | "dev": true, 76 | "dependencies": { 77 | "ansi-styles": "^3.2.1", 78 | "escape-string-regexp": "^1.0.5", 79 | "supports-color": "^5.3.0" 80 | }, 81 | "engines": { 82 | "node": ">=4" 83 | } 84 | }, 85 | "node_modules/@babel/highlight/node_modules/color-convert": { 86 | "version": "1.9.3", 87 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 88 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 89 | "dev": true, 90 | "dependencies": { 91 | "color-name": "1.1.3" 92 | } 93 | }, 94 | "node_modules/@babel/highlight/node_modules/color-name": { 95 | "version": "1.1.3", 96 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 97 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 98 | "dev": true 99 | }, 100 | "node_modules/@babel/highlight/node_modules/escape-string-regexp": { 101 | "version": "1.0.5", 102 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 103 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 104 | "dev": true, 105 | "engines": { 106 | "node": ">=0.8.0" 107 | } 108 | }, 109 | "node_modules/@babel/highlight/node_modules/has-flag": { 110 | "version": "3.0.0", 111 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 112 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 113 | "dev": true, 114 | "engines": { 115 | "node": ">=4" 116 | } 117 | }, 118 | "node_modules/@babel/highlight/node_modules/supports-color": { 119 | "version": "5.5.0", 120 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 121 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 122 | "dev": true, 123 | "dependencies": { 124 | "has-flag": "^3.0.0" 125 | }, 126 | "engines": { 127 | "node": ">=4" 128 | } 129 | }, 130 | "node_modules/@es-joy/jsdoccomment": { 131 | "version": "0.10.8", 132 | "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.10.8.tgz", 133 | "integrity": "sha512-3P1JiGL4xaR9PoTKUHa2N/LKwa2/eUdRqGwijMWWgBqbFEqJUVpmaOi2TcjcemrsRMgFLBzQCK4ToPhrSVDiFQ==", 134 | "dev": true, 135 | "dependencies": { 136 | "comment-parser": "1.2.4", 137 | "esquery": "^1.4.0", 138 | "jsdoc-type-pratt-parser": "1.1.1" 139 | }, 140 | "engines": { 141 | "node": "^12 || ^14 || ^16" 142 | } 143 | }, 144 | "node_modules/@eslint/eslintrc": { 145 | "version": "0.4.3", 146 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", 147 | "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", 148 | "dev": true, 149 | "dependencies": { 150 | "ajv": "^6.12.4", 151 | "debug": "^4.1.1", 152 | "espree": "^7.3.0", 153 | "globals": "^13.9.0", 154 | "ignore": "^4.0.6", 155 | "import-fresh": "^3.2.1", 156 | "js-yaml": "^3.13.1", 157 | "minimatch": "^3.0.4", 158 | "strip-json-comments": "^3.1.1" 159 | }, 160 | "engines": { 161 | "node": "^10.12.0 || >=12.0.0" 162 | } 163 | }, 164 | "node_modules/@humanwhocodes/config-array": { 165 | "version": "0.5.0", 166 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", 167 | "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", 168 | "dev": true, 169 | "dependencies": { 170 | "@humanwhocodes/object-schema": "^1.2.0", 171 | "debug": "^4.1.1", 172 | "minimatch": "^3.0.4" 173 | }, 174 | "engines": { 175 | "node": ">=10.10.0" 176 | } 177 | }, 178 | "node_modules/@humanwhocodes/object-schema": { 179 | "version": "1.2.0", 180 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", 181 | "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", 182 | "dev": true 183 | }, 184 | "node_modules/@types/mocha": { 185 | "version": "9.0.0", 186 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", 187 | "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", 188 | "dev": true 189 | }, 190 | "node_modules/@types/node": { 191 | "version": "16.10.1", 192 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.1.tgz", 193 | "integrity": "sha512-4/Z9DMPKFexZj/Gn3LylFgamNKHm4K3QDi0gz9B26Uk0c8izYf97B5fxfpspMNkWlFupblKM/nV8+NA9Ffvr+w==", 194 | "dev": true 195 | }, 196 | "node_modules/acorn": { 197 | "version": "7.4.1", 198 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 199 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 200 | "dev": true, 201 | "bin": { 202 | "acorn": "bin/acorn" 203 | }, 204 | "engines": { 205 | "node": ">=0.4.0" 206 | } 207 | }, 208 | "node_modules/acorn-jsx": { 209 | "version": "5.3.2", 210 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 211 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 212 | "dev": true, 213 | "peerDependencies": { 214 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 215 | } 216 | }, 217 | "node_modules/ajv": { 218 | "version": "6.12.6", 219 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 220 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 221 | "dev": true, 222 | "dependencies": { 223 | "fast-deep-equal": "^3.1.1", 224 | "fast-json-stable-stringify": "^2.0.0", 225 | "json-schema-traverse": "^0.4.1", 226 | "uri-js": "^4.2.2" 227 | }, 228 | "funding": { 229 | "type": "github", 230 | "url": "https://github.com/sponsors/epoberezkin" 231 | } 232 | }, 233 | "node_modules/ansi-colors": { 234 | "version": "4.1.1", 235 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 236 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 237 | "dev": true, 238 | "engines": { 239 | "node": ">=6" 240 | } 241 | }, 242 | "node_modules/ansi-regex": { 243 | "version": "5.0.1", 244 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 245 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 246 | "dev": true, 247 | "engines": { 248 | "node": ">=8" 249 | } 250 | }, 251 | "node_modules/ansi-styles": { 252 | "version": "4.3.0", 253 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 254 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 255 | "dev": true, 256 | "dependencies": { 257 | "color-convert": "^2.0.1" 258 | }, 259 | "engines": { 260 | "node": ">=8" 261 | }, 262 | "funding": { 263 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 264 | } 265 | }, 266 | "node_modules/argparse": { 267 | "version": "1.0.10", 268 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 269 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 270 | "dev": true, 271 | "dependencies": { 272 | "sprintf-js": "~1.0.2" 273 | } 274 | }, 275 | "node_modules/astral-regex": { 276 | "version": "2.0.0", 277 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", 278 | "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", 279 | "dev": true, 280 | "engines": { 281 | "node": ">=8" 282 | } 283 | }, 284 | "node_modules/balanced-match": { 285 | "version": "1.0.2", 286 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 287 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 288 | "dev": true 289 | }, 290 | "node_modules/brace-expansion": { 291 | "version": "1.1.11", 292 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 293 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 294 | "dev": true, 295 | "dependencies": { 296 | "balanced-match": "^1.0.0", 297 | "concat-map": "0.0.1" 298 | } 299 | }, 300 | "node_modules/callsites": { 301 | "version": "3.1.0", 302 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 303 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 304 | "dev": true, 305 | "engines": { 306 | "node": ">=6" 307 | } 308 | }, 309 | "node_modules/chalk": { 310 | "version": "4.1.2", 311 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 312 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 313 | "dev": true, 314 | "dependencies": { 315 | "ansi-styles": "^4.1.0", 316 | "supports-color": "^7.1.0" 317 | }, 318 | "engines": { 319 | "node": ">=10" 320 | }, 321 | "funding": { 322 | "url": "https://github.com/chalk/chalk?sponsor=1" 323 | } 324 | }, 325 | "node_modules/color-convert": { 326 | "version": "2.0.1", 327 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 328 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 329 | "dev": true, 330 | "dependencies": { 331 | "color-name": "~1.1.4" 332 | }, 333 | "engines": { 334 | "node": ">=7.0.0" 335 | } 336 | }, 337 | "node_modules/color-name": { 338 | "version": "1.1.4", 339 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 340 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 341 | "dev": true 342 | }, 343 | "node_modules/comment-parser": { 344 | "version": "1.2.4", 345 | "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.4.tgz", 346 | "integrity": "sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw==", 347 | "dev": true, 348 | "engines": { 349 | "node": ">= 12.0.0" 350 | } 351 | }, 352 | "node_modules/concat-map": { 353 | "version": "0.0.1", 354 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 355 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 356 | "dev": true 357 | }, 358 | "node_modules/cross-spawn": { 359 | "version": "7.0.3", 360 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 361 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 362 | "dev": true, 363 | "dependencies": { 364 | "path-key": "^3.1.0", 365 | "shebang-command": "^2.0.0", 366 | "which": "^2.0.1" 367 | }, 368 | "engines": { 369 | "node": ">= 8" 370 | } 371 | }, 372 | "node_modules/debug": { 373 | "version": "4.3.2", 374 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 375 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 376 | "dev": true, 377 | "dependencies": { 378 | "ms": "2.1.2" 379 | }, 380 | "engines": { 381 | "node": ">=6.0" 382 | }, 383 | "peerDependenciesMeta": { 384 | "supports-color": { 385 | "optional": true 386 | } 387 | } 388 | }, 389 | "node_modules/deep-is": { 390 | "version": "0.1.4", 391 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 392 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 393 | "dev": true 394 | }, 395 | "node_modules/doctrine": { 396 | "version": "3.0.0", 397 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 398 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 399 | "dev": true, 400 | "dependencies": { 401 | "esutils": "^2.0.2" 402 | }, 403 | "engines": { 404 | "node": ">=6.0.0" 405 | } 406 | }, 407 | "node_modules/emoji-regex": { 408 | "version": "8.0.0", 409 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 410 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 411 | "dev": true 412 | }, 413 | "node_modules/enquirer": { 414 | "version": "2.3.6", 415 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", 416 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", 417 | "dev": true, 418 | "dependencies": { 419 | "ansi-colors": "^4.1.1" 420 | }, 421 | "engines": { 422 | "node": ">=8.6" 423 | } 424 | }, 425 | "node_modules/escape-string-regexp": { 426 | "version": "4.0.0", 427 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 428 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 429 | "dev": true, 430 | "engines": { 431 | "node": ">=10" 432 | }, 433 | "funding": { 434 | "url": "https://github.com/sponsors/sindresorhus" 435 | } 436 | }, 437 | "node_modules/eslint": { 438 | "version": "7.32.0", 439 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", 440 | "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", 441 | "dev": true, 442 | "dependencies": { 443 | "@babel/code-frame": "7.12.11", 444 | "@eslint/eslintrc": "^0.4.3", 445 | "@humanwhocodes/config-array": "^0.5.0", 446 | "ajv": "^6.10.0", 447 | "chalk": "^4.0.0", 448 | "cross-spawn": "^7.0.2", 449 | "debug": "^4.0.1", 450 | "doctrine": "^3.0.0", 451 | "enquirer": "^2.3.5", 452 | "escape-string-regexp": "^4.0.0", 453 | "eslint-scope": "^5.1.1", 454 | "eslint-utils": "^2.1.0", 455 | "eslint-visitor-keys": "^2.0.0", 456 | "espree": "^7.3.1", 457 | "esquery": "^1.4.0", 458 | "esutils": "^2.0.2", 459 | "fast-deep-equal": "^3.1.3", 460 | "file-entry-cache": "^6.0.1", 461 | "functional-red-black-tree": "^1.0.1", 462 | "glob-parent": "^5.1.2", 463 | "globals": "^13.6.0", 464 | "ignore": "^4.0.6", 465 | "import-fresh": "^3.0.0", 466 | "imurmurhash": "^0.1.4", 467 | "is-glob": "^4.0.0", 468 | "js-yaml": "^3.13.1", 469 | "json-stable-stringify-without-jsonify": "^1.0.1", 470 | "levn": "^0.4.1", 471 | "lodash.merge": "^4.6.2", 472 | "minimatch": "^3.0.4", 473 | "natural-compare": "^1.4.0", 474 | "optionator": "^0.9.1", 475 | "progress": "^2.0.0", 476 | "regexpp": "^3.1.0", 477 | "semver": "^7.2.1", 478 | "strip-ansi": "^6.0.0", 479 | "strip-json-comments": "^3.1.0", 480 | "table": "^6.0.9", 481 | "text-table": "^0.2.0", 482 | "v8-compile-cache": "^2.0.3" 483 | }, 484 | "bin": { 485 | "eslint": "bin/eslint.js" 486 | }, 487 | "engines": { 488 | "node": "^10.12.0 || >=12.0.0" 489 | }, 490 | "funding": { 491 | "url": "https://opencollective.com/eslint" 492 | } 493 | }, 494 | "node_modules/eslint-config-blueimp": { 495 | "version": "2.3.0", 496 | "resolved": "https://registry.npmjs.org/eslint-config-blueimp/-/eslint-config-blueimp-2.3.0.tgz", 497 | "integrity": "sha512-OC1+7YHBpXYdl/Jt2PZMpIPAUogHf4iDnqf8vVMlmkKls1Xemu7DAZqdFgdYhZxgaJ/d+qXH8b66L/D/pU4btA==", 498 | "dev": true, 499 | "engines": { 500 | "node": ">=10.0.0" 501 | }, 502 | "peerDependencies": { 503 | "eslint": ">=7" 504 | } 505 | }, 506 | "node_modules/eslint-config-prettier": { 507 | "version": "8.3.0", 508 | "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", 509 | "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", 510 | "dev": true, 511 | "bin": { 512 | "eslint-config-prettier": "bin/cli.js" 513 | }, 514 | "peerDependencies": { 515 | "eslint": ">=7.0.0" 516 | } 517 | }, 518 | "node_modules/eslint-plugin-es": { 519 | "version": "3.0.1", 520 | "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", 521 | "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", 522 | "dev": true, 523 | "dependencies": { 524 | "eslint-utils": "^2.0.0", 525 | "regexpp": "^3.0.0" 526 | }, 527 | "engines": { 528 | "node": ">=8.10.0" 529 | }, 530 | "funding": { 531 | "url": "https://github.com/sponsors/mysticatea" 532 | }, 533 | "peerDependencies": { 534 | "eslint": ">=4.19.1" 535 | } 536 | }, 537 | "node_modules/eslint-plugin-jsdoc": { 538 | "version": "36.1.0", 539 | "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.1.0.tgz", 540 | "integrity": "sha512-Qpied2AJCQcScxfzTObLKRiP5QgLXjMU/ITjBagEV5p2Q/HpumD1EQtazdRYdjDSwPmXhwOl2yquwOGQ4HOJNw==", 541 | "dev": true, 542 | "dependencies": { 543 | "@es-joy/jsdoccomment": "0.10.8", 544 | "comment-parser": "1.2.4", 545 | "debug": "^4.3.2", 546 | "esquery": "^1.4.0", 547 | "jsdoc-type-pratt-parser": "^1.1.1", 548 | "lodash": "^4.17.21", 549 | "regextras": "^0.8.0", 550 | "semver": "^7.3.5", 551 | "spdx-expression-parse": "^3.0.1" 552 | }, 553 | "engines": { 554 | "node": "^12 || ^14 || ^16" 555 | }, 556 | "peerDependencies": { 557 | "eslint": "^6.0.0 || ^7.0.0" 558 | } 559 | }, 560 | "node_modules/eslint-plugin-node": { 561 | "version": "11.1.0", 562 | "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", 563 | "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", 564 | "dev": true, 565 | "dependencies": { 566 | "eslint-plugin-es": "^3.0.0", 567 | "eslint-utils": "^2.0.0", 568 | "ignore": "^5.1.1", 569 | "minimatch": "^3.0.4", 570 | "resolve": "^1.10.1", 571 | "semver": "^6.1.0" 572 | }, 573 | "engines": { 574 | "node": ">=8.10.0" 575 | }, 576 | "peerDependencies": { 577 | "eslint": ">=5.16.0" 578 | } 579 | }, 580 | "node_modules/eslint-plugin-node/node_modules/ignore": { 581 | "version": "5.1.8", 582 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", 583 | "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", 584 | "dev": true, 585 | "engines": { 586 | "node": ">= 4" 587 | } 588 | }, 589 | "node_modules/eslint-plugin-node/node_modules/semver": { 590 | "version": "6.3.0", 591 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 592 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 593 | "dev": true, 594 | "bin": { 595 | "semver": "bin/semver.js" 596 | } 597 | }, 598 | "node_modules/eslint-plugin-prettier": { 599 | "version": "4.0.0", 600 | "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", 601 | "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", 602 | "dev": true, 603 | "dependencies": { 604 | "prettier-linter-helpers": "^1.0.0" 605 | }, 606 | "engines": { 607 | "node": ">=6.0.0" 608 | }, 609 | "peerDependencies": { 610 | "eslint": ">=7.28.0", 611 | "prettier": ">=2.0.0" 612 | }, 613 | "peerDependenciesMeta": { 614 | "eslint-config-prettier": { 615 | "optional": true 616 | } 617 | } 618 | }, 619 | "node_modules/eslint-scope": { 620 | "version": "5.1.1", 621 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 622 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 623 | "dev": true, 624 | "dependencies": { 625 | "esrecurse": "^4.3.0", 626 | "estraverse": "^4.1.1" 627 | }, 628 | "engines": { 629 | "node": ">=8.0.0" 630 | } 631 | }, 632 | "node_modules/eslint-utils": { 633 | "version": "2.1.0", 634 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", 635 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", 636 | "dev": true, 637 | "dependencies": { 638 | "eslint-visitor-keys": "^1.1.0" 639 | }, 640 | "engines": { 641 | "node": ">=6" 642 | }, 643 | "funding": { 644 | "url": "https://github.com/sponsors/mysticatea" 645 | } 646 | }, 647 | "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { 648 | "version": "1.3.0", 649 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 650 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 651 | "dev": true, 652 | "engines": { 653 | "node": ">=4" 654 | } 655 | }, 656 | "node_modules/eslint-visitor-keys": { 657 | "version": "2.1.0", 658 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 659 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 660 | "dev": true, 661 | "engines": { 662 | "node": ">=10" 663 | } 664 | }, 665 | "node_modules/espree": { 666 | "version": "7.3.1", 667 | "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", 668 | "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", 669 | "dev": true, 670 | "dependencies": { 671 | "acorn": "^7.4.0", 672 | "acorn-jsx": "^5.3.1", 673 | "eslint-visitor-keys": "^1.3.0" 674 | }, 675 | "engines": { 676 | "node": "^10.12.0 || >=12.0.0" 677 | } 678 | }, 679 | "node_modules/espree/node_modules/eslint-visitor-keys": { 680 | "version": "1.3.0", 681 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 682 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 683 | "dev": true, 684 | "engines": { 685 | "node": ">=4" 686 | } 687 | }, 688 | "node_modules/esprima": { 689 | "version": "4.0.1", 690 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 691 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 692 | "dev": true, 693 | "bin": { 694 | "esparse": "bin/esparse.js", 695 | "esvalidate": "bin/esvalidate.js" 696 | }, 697 | "engines": { 698 | "node": ">=4" 699 | } 700 | }, 701 | "node_modules/esquery": { 702 | "version": "1.4.0", 703 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", 704 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", 705 | "dev": true, 706 | "dependencies": { 707 | "estraverse": "^5.1.0" 708 | }, 709 | "engines": { 710 | "node": ">=0.10" 711 | } 712 | }, 713 | "node_modules/esquery/node_modules/estraverse": { 714 | "version": "5.2.0", 715 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 716 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 717 | "dev": true, 718 | "engines": { 719 | "node": ">=4.0" 720 | } 721 | }, 722 | "node_modules/esrecurse": { 723 | "version": "4.3.0", 724 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 725 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 726 | "dev": true, 727 | "dependencies": { 728 | "estraverse": "^5.2.0" 729 | }, 730 | "engines": { 731 | "node": ">=4.0" 732 | } 733 | }, 734 | "node_modules/esrecurse/node_modules/estraverse": { 735 | "version": "5.2.0", 736 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 737 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 738 | "dev": true, 739 | "engines": { 740 | "node": ">=4.0" 741 | } 742 | }, 743 | "node_modules/estraverse": { 744 | "version": "4.3.0", 745 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 746 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 747 | "dev": true, 748 | "engines": { 749 | "node": ">=4.0" 750 | } 751 | }, 752 | "node_modules/esutils": { 753 | "version": "2.0.3", 754 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 755 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 756 | "dev": true, 757 | "engines": { 758 | "node": ">=0.10.0" 759 | } 760 | }, 761 | "node_modules/fast-deep-equal": { 762 | "version": "3.1.3", 763 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 764 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 765 | "dev": true 766 | }, 767 | "node_modules/fast-diff": { 768 | "version": "1.2.0", 769 | "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", 770 | "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", 771 | "dev": true 772 | }, 773 | "node_modules/fast-json-stable-stringify": { 774 | "version": "2.1.0", 775 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 776 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 777 | "dev": true 778 | }, 779 | "node_modules/fast-levenshtein": { 780 | "version": "2.0.6", 781 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 782 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 783 | "dev": true 784 | }, 785 | "node_modules/file-entry-cache": { 786 | "version": "6.0.1", 787 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 788 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 789 | "dev": true, 790 | "dependencies": { 791 | "flat-cache": "^3.0.4" 792 | }, 793 | "engines": { 794 | "node": "^10.12.0 || >=12.0.0" 795 | } 796 | }, 797 | "node_modules/flat-cache": { 798 | "version": "3.0.4", 799 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 800 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 801 | "dev": true, 802 | "dependencies": { 803 | "flatted": "^3.1.0", 804 | "rimraf": "^3.0.2" 805 | }, 806 | "engines": { 807 | "node": "^10.12.0 || >=12.0.0" 808 | } 809 | }, 810 | "node_modules/flatted": { 811 | "version": "3.2.2", 812 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", 813 | "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", 814 | "dev": true 815 | }, 816 | "node_modules/fs.realpath": { 817 | "version": "1.0.0", 818 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 819 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 820 | "dev": true 821 | }, 822 | "node_modules/function-bind": { 823 | "version": "1.1.1", 824 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 825 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 826 | "dev": true 827 | }, 828 | "node_modules/functional-red-black-tree": { 829 | "version": "1.0.1", 830 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 831 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 832 | "dev": true 833 | }, 834 | "node_modules/glob": { 835 | "version": "7.2.0", 836 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 837 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 838 | "dev": true, 839 | "dependencies": { 840 | "fs.realpath": "^1.0.0", 841 | "inflight": "^1.0.4", 842 | "inherits": "2", 843 | "minimatch": "^3.0.4", 844 | "once": "^1.3.0", 845 | "path-is-absolute": "^1.0.0" 846 | }, 847 | "engines": { 848 | "node": "*" 849 | }, 850 | "funding": { 851 | "url": "https://github.com/sponsors/isaacs" 852 | } 853 | }, 854 | "node_modules/glob-parent": { 855 | "version": "5.1.2", 856 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 857 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 858 | "dev": true, 859 | "dependencies": { 860 | "is-glob": "^4.0.1" 861 | }, 862 | "engines": { 863 | "node": ">= 6" 864 | } 865 | }, 866 | "node_modules/globals": { 867 | "version": "13.11.0", 868 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", 869 | "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", 870 | "dev": true, 871 | "dependencies": { 872 | "type-fest": "^0.20.2" 873 | }, 874 | "engines": { 875 | "node": ">=8" 876 | }, 877 | "funding": { 878 | "url": "https://github.com/sponsors/sindresorhus" 879 | } 880 | }, 881 | "node_modules/has": { 882 | "version": "1.0.3", 883 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 884 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 885 | "dev": true, 886 | "dependencies": { 887 | "function-bind": "^1.1.1" 888 | }, 889 | "engines": { 890 | "node": ">= 0.4.0" 891 | } 892 | }, 893 | "node_modules/has-flag": { 894 | "version": "4.0.0", 895 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 896 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 897 | "dev": true, 898 | "engines": { 899 | "node": ">=8" 900 | } 901 | }, 902 | "node_modules/ignore": { 903 | "version": "4.0.6", 904 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 905 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 906 | "dev": true, 907 | "engines": { 908 | "node": ">= 4" 909 | } 910 | }, 911 | "node_modules/import-fresh": { 912 | "version": "3.3.0", 913 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 914 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 915 | "dev": true, 916 | "dependencies": { 917 | "parent-module": "^1.0.0", 918 | "resolve-from": "^4.0.0" 919 | }, 920 | "engines": { 921 | "node": ">=6" 922 | }, 923 | "funding": { 924 | "url": "https://github.com/sponsors/sindresorhus" 925 | } 926 | }, 927 | "node_modules/imurmurhash": { 928 | "version": "0.1.4", 929 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 930 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 931 | "dev": true, 932 | "engines": { 933 | "node": ">=0.8.19" 934 | } 935 | }, 936 | "node_modules/inflight": { 937 | "version": "1.0.6", 938 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 939 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 940 | "dev": true, 941 | "dependencies": { 942 | "once": "^1.3.0", 943 | "wrappy": "1" 944 | } 945 | }, 946 | "node_modules/inherits": { 947 | "version": "2.0.4", 948 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 949 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 950 | "dev": true 951 | }, 952 | "node_modules/is-core-module": { 953 | "version": "2.6.0", 954 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", 955 | "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", 956 | "dev": true, 957 | "dependencies": { 958 | "has": "^1.0.3" 959 | }, 960 | "funding": { 961 | "url": "https://github.com/sponsors/ljharb" 962 | } 963 | }, 964 | "node_modules/is-extglob": { 965 | "version": "2.1.1", 966 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 967 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 968 | "dev": true, 969 | "engines": { 970 | "node": ">=0.10.0" 971 | } 972 | }, 973 | "node_modules/is-fullwidth-code-point": { 974 | "version": "3.0.0", 975 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 976 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 977 | "dev": true, 978 | "engines": { 979 | "node": ">=8" 980 | } 981 | }, 982 | "node_modules/is-glob": { 983 | "version": "4.0.1", 984 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 985 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 986 | "dev": true, 987 | "dependencies": { 988 | "is-extglob": "^2.1.1" 989 | }, 990 | "engines": { 991 | "node": ">=0.10.0" 992 | } 993 | }, 994 | "node_modules/isexe": { 995 | "version": "2.0.0", 996 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 997 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 998 | "dev": true 999 | }, 1000 | "node_modules/js-tokens": { 1001 | "version": "4.0.0", 1002 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1003 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1004 | "dev": true 1005 | }, 1006 | "node_modules/js-yaml": { 1007 | "version": "3.14.1", 1008 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 1009 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 1010 | "dev": true, 1011 | "dependencies": { 1012 | "argparse": "^1.0.7", 1013 | "esprima": "^4.0.0" 1014 | }, 1015 | "bin": { 1016 | "js-yaml": "bin/js-yaml.js" 1017 | } 1018 | }, 1019 | "node_modules/jsdoc-type-pratt-parser": { 1020 | "version": "1.1.1", 1021 | "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.1.1.tgz", 1022 | "integrity": "sha512-uelRmpghNwPBuZScwgBG/OzodaFk5RbO5xaivBdsAY70icWfShwZ7PCMO0x1zSkOa8T1FzHThmrdoyg/0AwV5g==", 1023 | "dev": true, 1024 | "engines": { 1025 | "node": ">=12.0.0" 1026 | } 1027 | }, 1028 | "node_modules/json-schema-traverse": { 1029 | "version": "0.4.1", 1030 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1031 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1032 | "dev": true 1033 | }, 1034 | "node_modules/json-stable-stringify-without-jsonify": { 1035 | "version": "1.0.1", 1036 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1037 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 1038 | "dev": true 1039 | }, 1040 | "node_modules/levn": { 1041 | "version": "0.4.1", 1042 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1043 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1044 | "dev": true, 1045 | "dependencies": { 1046 | "prelude-ls": "^1.2.1", 1047 | "type-check": "~0.4.0" 1048 | }, 1049 | "engines": { 1050 | "node": ">= 0.8.0" 1051 | } 1052 | }, 1053 | "node_modules/lodash": { 1054 | "version": "4.17.21", 1055 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1056 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1057 | "dev": true 1058 | }, 1059 | "node_modules/lodash.clonedeep": { 1060 | "version": "4.5.0", 1061 | "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", 1062 | "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", 1063 | "dev": true 1064 | }, 1065 | "node_modules/lodash.merge": { 1066 | "version": "4.6.2", 1067 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 1068 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 1069 | "dev": true 1070 | }, 1071 | "node_modules/lodash.truncate": { 1072 | "version": "4.4.2", 1073 | "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", 1074 | "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", 1075 | "dev": true 1076 | }, 1077 | "node_modules/lru-cache": { 1078 | "version": "6.0.0", 1079 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1080 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1081 | "dev": true, 1082 | "dependencies": { 1083 | "yallist": "^4.0.0" 1084 | }, 1085 | "engines": { 1086 | "node": ">=10" 1087 | } 1088 | }, 1089 | "node_modules/minimatch": { 1090 | "version": "3.0.4", 1091 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1092 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1093 | "dev": true, 1094 | "dependencies": { 1095 | "brace-expansion": "^1.1.7" 1096 | }, 1097 | "engines": { 1098 | "node": "*" 1099 | } 1100 | }, 1101 | "node_modules/ms": { 1102 | "version": "2.1.2", 1103 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1104 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1105 | "dev": true 1106 | }, 1107 | "node_modules/natural-compare": { 1108 | "version": "1.4.0", 1109 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1110 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1111 | "dev": true 1112 | }, 1113 | "node_modules/once": { 1114 | "version": "1.4.0", 1115 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1116 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1117 | "dev": true, 1118 | "dependencies": { 1119 | "wrappy": "1" 1120 | } 1121 | }, 1122 | "node_modules/optionator": { 1123 | "version": "0.9.1", 1124 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 1125 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 1126 | "dev": true, 1127 | "dependencies": { 1128 | "deep-is": "^0.1.3", 1129 | "fast-levenshtein": "^2.0.6", 1130 | "levn": "^0.4.1", 1131 | "prelude-ls": "^1.2.1", 1132 | "type-check": "^0.4.0", 1133 | "word-wrap": "^1.2.3" 1134 | }, 1135 | "engines": { 1136 | "node": ">= 0.8.0" 1137 | } 1138 | }, 1139 | "node_modules/parent-module": { 1140 | "version": "1.0.1", 1141 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1142 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1143 | "dev": true, 1144 | "dependencies": { 1145 | "callsites": "^3.0.0" 1146 | }, 1147 | "engines": { 1148 | "node": ">=6" 1149 | } 1150 | }, 1151 | "node_modules/path-is-absolute": { 1152 | "version": "1.0.1", 1153 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1154 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1155 | "dev": true, 1156 | "engines": { 1157 | "node": ">=0.10.0" 1158 | } 1159 | }, 1160 | "node_modules/path-key": { 1161 | "version": "3.1.1", 1162 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1163 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1164 | "dev": true, 1165 | "engines": { 1166 | "node": ">=8" 1167 | } 1168 | }, 1169 | "node_modules/path-parse": { 1170 | "version": "1.0.7", 1171 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1172 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1173 | "dev": true 1174 | }, 1175 | "node_modules/prelude-ls": { 1176 | "version": "1.2.1", 1177 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 1178 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 1179 | "dev": true, 1180 | "engines": { 1181 | "node": ">= 0.8.0" 1182 | } 1183 | }, 1184 | "node_modules/prettier": { 1185 | "version": "2.4.1", 1186 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", 1187 | "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", 1188 | "dev": true, 1189 | "bin": { 1190 | "prettier": "bin-prettier.js" 1191 | }, 1192 | "engines": { 1193 | "node": ">=10.13.0" 1194 | } 1195 | }, 1196 | "node_modules/prettier-linter-helpers": { 1197 | "version": "1.0.0", 1198 | "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", 1199 | "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", 1200 | "dev": true, 1201 | "dependencies": { 1202 | "fast-diff": "^1.1.2" 1203 | }, 1204 | "engines": { 1205 | "node": ">=6.0.0" 1206 | } 1207 | }, 1208 | "node_modules/progress": { 1209 | "version": "2.0.3", 1210 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1211 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 1212 | "dev": true, 1213 | "engines": { 1214 | "node": ">=0.4.0" 1215 | } 1216 | }, 1217 | "node_modules/punycode": { 1218 | "version": "2.1.1", 1219 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1220 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1221 | "dev": true, 1222 | "engines": { 1223 | "node": ">=6" 1224 | } 1225 | }, 1226 | "node_modules/regexpp": { 1227 | "version": "3.2.0", 1228 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 1229 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 1230 | "dev": true, 1231 | "engines": { 1232 | "node": ">=8" 1233 | }, 1234 | "funding": { 1235 | "url": "https://github.com/sponsors/mysticatea" 1236 | } 1237 | }, 1238 | "node_modules/regextras": { 1239 | "version": "0.8.0", 1240 | "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", 1241 | "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", 1242 | "dev": true, 1243 | "engines": { 1244 | "node": ">=0.1.14" 1245 | } 1246 | }, 1247 | "node_modules/require-from-string": { 1248 | "version": "2.0.2", 1249 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 1250 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 1251 | "dev": true, 1252 | "engines": { 1253 | "node": ">=0.10.0" 1254 | } 1255 | }, 1256 | "node_modules/resolve": { 1257 | "version": "1.20.0", 1258 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 1259 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 1260 | "dev": true, 1261 | "dependencies": { 1262 | "is-core-module": "^2.2.0", 1263 | "path-parse": "^1.0.6" 1264 | }, 1265 | "funding": { 1266 | "url": "https://github.com/sponsors/ljharb" 1267 | } 1268 | }, 1269 | "node_modules/resolve-from": { 1270 | "version": "4.0.0", 1271 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1272 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1273 | "dev": true, 1274 | "engines": { 1275 | "node": ">=4" 1276 | } 1277 | }, 1278 | "node_modules/rimraf": { 1279 | "version": "3.0.2", 1280 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1281 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1282 | "dev": true, 1283 | "dependencies": { 1284 | "glob": "^7.1.3" 1285 | }, 1286 | "bin": { 1287 | "rimraf": "bin.js" 1288 | }, 1289 | "funding": { 1290 | "url": "https://github.com/sponsors/isaacs" 1291 | } 1292 | }, 1293 | "node_modules/semver": { 1294 | "version": "7.3.5", 1295 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 1296 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 1297 | "dev": true, 1298 | "dependencies": { 1299 | "lru-cache": "^6.0.0" 1300 | }, 1301 | "bin": { 1302 | "semver": "bin/semver.js" 1303 | }, 1304 | "engines": { 1305 | "node": ">=10" 1306 | } 1307 | }, 1308 | "node_modules/shebang-command": { 1309 | "version": "2.0.0", 1310 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1311 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1312 | "dev": true, 1313 | "dependencies": { 1314 | "shebang-regex": "^3.0.0" 1315 | }, 1316 | "engines": { 1317 | "node": ">=8" 1318 | } 1319 | }, 1320 | "node_modules/shebang-regex": { 1321 | "version": "3.0.0", 1322 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1323 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1324 | "dev": true, 1325 | "engines": { 1326 | "node": ">=8" 1327 | } 1328 | }, 1329 | "node_modules/slice-ansi": { 1330 | "version": "4.0.0", 1331 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", 1332 | "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", 1333 | "dev": true, 1334 | "dependencies": { 1335 | "ansi-styles": "^4.0.0", 1336 | "astral-regex": "^2.0.0", 1337 | "is-fullwidth-code-point": "^3.0.0" 1338 | }, 1339 | "engines": { 1340 | "node": ">=10" 1341 | }, 1342 | "funding": { 1343 | "url": "https://github.com/chalk/slice-ansi?sponsor=1" 1344 | } 1345 | }, 1346 | "node_modules/spdx-exceptions": { 1347 | "version": "2.3.0", 1348 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", 1349 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", 1350 | "dev": true 1351 | }, 1352 | "node_modules/spdx-expression-parse": { 1353 | "version": "3.0.1", 1354 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", 1355 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", 1356 | "dev": true, 1357 | "dependencies": { 1358 | "spdx-exceptions": "^2.1.0", 1359 | "spdx-license-ids": "^3.0.0" 1360 | } 1361 | }, 1362 | "node_modules/spdx-license-ids": { 1363 | "version": "3.0.10", 1364 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", 1365 | "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", 1366 | "dev": true 1367 | }, 1368 | "node_modules/sprintf-js": { 1369 | "version": "1.0.3", 1370 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1371 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1372 | "dev": true 1373 | }, 1374 | "node_modules/string-width": { 1375 | "version": "4.2.3", 1376 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1377 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1378 | "dev": true, 1379 | "dependencies": { 1380 | "emoji-regex": "^8.0.0", 1381 | "is-fullwidth-code-point": "^3.0.0", 1382 | "strip-ansi": "^6.0.1" 1383 | }, 1384 | "engines": { 1385 | "node": ">=8" 1386 | } 1387 | }, 1388 | "node_modules/strip-ansi": { 1389 | "version": "6.0.1", 1390 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1391 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1392 | "dev": true, 1393 | "dependencies": { 1394 | "ansi-regex": "^5.0.1" 1395 | }, 1396 | "engines": { 1397 | "node": ">=8" 1398 | } 1399 | }, 1400 | "node_modules/strip-json-comments": { 1401 | "version": "3.1.1", 1402 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1403 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1404 | "dev": true, 1405 | "engines": { 1406 | "node": ">=8" 1407 | }, 1408 | "funding": { 1409 | "url": "https://github.com/sponsors/sindresorhus" 1410 | } 1411 | }, 1412 | "node_modules/supports-color": { 1413 | "version": "7.2.0", 1414 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1415 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1416 | "dev": true, 1417 | "dependencies": { 1418 | "has-flag": "^4.0.0" 1419 | }, 1420 | "engines": { 1421 | "node": ">=8" 1422 | } 1423 | }, 1424 | "node_modules/table": { 1425 | "version": "6.7.1", 1426 | "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", 1427 | "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", 1428 | "dev": true, 1429 | "dependencies": { 1430 | "ajv": "^8.0.1", 1431 | "lodash.clonedeep": "^4.5.0", 1432 | "lodash.truncate": "^4.4.2", 1433 | "slice-ansi": "^4.0.0", 1434 | "string-width": "^4.2.0", 1435 | "strip-ansi": "^6.0.0" 1436 | }, 1437 | "engines": { 1438 | "node": ">=10.0.0" 1439 | } 1440 | }, 1441 | "node_modules/table/node_modules/ajv": { 1442 | "version": "8.6.3", 1443 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", 1444 | "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", 1445 | "dev": true, 1446 | "dependencies": { 1447 | "fast-deep-equal": "^3.1.1", 1448 | "json-schema-traverse": "^1.0.0", 1449 | "require-from-string": "^2.0.2", 1450 | "uri-js": "^4.2.2" 1451 | }, 1452 | "funding": { 1453 | "type": "github", 1454 | "url": "https://github.com/sponsors/epoberezkin" 1455 | } 1456 | }, 1457 | "node_modules/table/node_modules/json-schema-traverse": { 1458 | "version": "1.0.0", 1459 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 1460 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 1461 | "dev": true 1462 | }, 1463 | "node_modules/text-table": { 1464 | "version": "0.2.0", 1465 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1466 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 1467 | "dev": true 1468 | }, 1469 | "node_modules/type-check": { 1470 | "version": "0.4.0", 1471 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 1472 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 1473 | "dev": true, 1474 | "dependencies": { 1475 | "prelude-ls": "^1.2.1" 1476 | }, 1477 | "engines": { 1478 | "node": ">= 0.8.0" 1479 | } 1480 | }, 1481 | "node_modules/type-fest": { 1482 | "version": "0.20.2", 1483 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 1484 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 1485 | "dev": true, 1486 | "engines": { 1487 | "node": ">=10" 1488 | }, 1489 | "funding": { 1490 | "url": "https://github.com/sponsors/sindresorhus" 1491 | } 1492 | }, 1493 | "node_modules/typescript": { 1494 | "version": "4.4.3", 1495 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", 1496 | "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", 1497 | "dev": true, 1498 | "bin": { 1499 | "tsc": "bin/tsc", 1500 | "tsserver": "bin/tsserver" 1501 | }, 1502 | "engines": { 1503 | "node": ">=4.2.0" 1504 | } 1505 | }, 1506 | "node_modules/uri-js": { 1507 | "version": "4.4.1", 1508 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1509 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1510 | "dev": true, 1511 | "dependencies": { 1512 | "punycode": "^2.1.0" 1513 | } 1514 | }, 1515 | "node_modules/v8-compile-cache": { 1516 | "version": "2.3.0", 1517 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", 1518 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", 1519 | "dev": true 1520 | }, 1521 | "node_modules/which": { 1522 | "version": "2.0.2", 1523 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1524 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1525 | "dev": true, 1526 | "dependencies": { 1527 | "isexe": "^2.0.0" 1528 | }, 1529 | "bin": { 1530 | "node-which": "bin/node-which" 1531 | }, 1532 | "engines": { 1533 | "node": ">= 8" 1534 | } 1535 | }, 1536 | "node_modules/word-wrap": { 1537 | "version": "1.2.3", 1538 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 1539 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 1540 | "dev": true, 1541 | "engines": { 1542 | "node": ">=0.10.0" 1543 | } 1544 | }, 1545 | "node_modules/wrappy": { 1546 | "version": "1.0.2", 1547 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1548 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1549 | "dev": true 1550 | }, 1551 | "node_modules/yallist": { 1552 | "version": "4.0.0", 1553 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1554 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 1555 | "dev": true 1556 | } 1557 | }, 1558 | "dependencies": { 1559 | "@babel/code-frame": { 1560 | "version": "7.12.11", 1561 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", 1562 | "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", 1563 | "dev": true, 1564 | "requires": { 1565 | "@babel/highlight": "^7.10.4" 1566 | } 1567 | }, 1568 | "@babel/helper-validator-identifier": { 1569 | "version": "7.15.7", 1570 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", 1571 | "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", 1572 | "dev": true 1573 | }, 1574 | "@babel/highlight": { 1575 | "version": "7.14.5", 1576 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", 1577 | "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", 1578 | "dev": true, 1579 | "requires": { 1580 | "@babel/helper-validator-identifier": "^7.14.5", 1581 | "chalk": "^2.0.0", 1582 | "js-tokens": "^4.0.0" 1583 | }, 1584 | "dependencies": { 1585 | "ansi-styles": { 1586 | "version": "3.2.1", 1587 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1588 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1589 | "dev": true, 1590 | "requires": { 1591 | "color-convert": "^1.9.0" 1592 | } 1593 | }, 1594 | "chalk": { 1595 | "version": "2.4.2", 1596 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1597 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1598 | "dev": true, 1599 | "requires": { 1600 | "ansi-styles": "^3.2.1", 1601 | "escape-string-regexp": "^1.0.5", 1602 | "supports-color": "^5.3.0" 1603 | } 1604 | }, 1605 | "color-convert": { 1606 | "version": "1.9.3", 1607 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1608 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1609 | "dev": true, 1610 | "requires": { 1611 | "color-name": "1.1.3" 1612 | } 1613 | }, 1614 | "color-name": { 1615 | "version": "1.1.3", 1616 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1617 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1618 | "dev": true 1619 | }, 1620 | "escape-string-regexp": { 1621 | "version": "1.0.5", 1622 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1623 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1624 | "dev": true 1625 | }, 1626 | "has-flag": { 1627 | "version": "3.0.0", 1628 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1629 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1630 | "dev": true 1631 | }, 1632 | "supports-color": { 1633 | "version": "5.5.0", 1634 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1635 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1636 | "dev": true, 1637 | "requires": { 1638 | "has-flag": "^3.0.0" 1639 | } 1640 | } 1641 | } 1642 | }, 1643 | "@es-joy/jsdoccomment": { 1644 | "version": "0.10.8", 1645 | "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.10.8.tgz", 1646 | "integrity": "sha512-3P1JiGL4xaR9PoTKUHa2N/LKwa2/eUdRqGwijMWWgBqbFEqJUVpmaOi2TcjcemrsRMgFLBzQCK4ToPhrSVDiFQ==", 1647 | "dev": true, 1648 | "requires": { 1649 | "comment-parser": "1.2.4", 1650 | "esquery": "^1.4.0", 1651 | "jsdoc-type-pratt-parser": "1.1.1" 1652 | } 1653 | }, 1654 | "@eslint/eslintrc": { 1655 | "version": "0.4.3", 1656 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", 1657 | "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", 1658 | "dev": true, 1659 | "requires": { 1660 | "ajv": "^6.12.4", 1661 | "debug": "^4.1.1", 1662 | "espree": "^7.3.0", 1663 | "globals": "^13.9.0", 1664 | "ignore": "^4.0.6", 1665 | "import-fresh": "^3.2.1", 1666 | "js-yaml": "^3.13.1", 1667 | "minimatch": "^3.0.4", 1668 | "strip-json-comments": "^3.1.1" 1669 | } 1670 | }, 1671 | "@humanwhocodes/config-array": { 1672 | "version": "0.5.0", 1673 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", 1674 | "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", 1675 | "dev": true, 1676 | "requires": { 1677 | "@humanwhocodes/object-schema": "^1.2.0", 1678 | "debug": "^4.1.1", 1679 | "minimatch": "^3.0.4" 1680 | } 1681 | }, 1682 | "@humanwhocodes/object-schema": { 1683 | "version": "1.2.0", 1684 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", 1685 | "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", 1686 | "dev": true 1687 | }, 1688 | "@types/mocha": { 1689 | "version": "9.0.0", 1690 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", 1691 | "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", 1692 | "dev": true 1693 | }, 1694 | "@types/node": { 1695 | "version": "16.10.1", 1696 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.1.tgz", 1697 | "integrity": "sha512-4/Z9DMPKFexZj/Gn3LylFgamNKHm4K3QDi0gz9B26Uk0c8izYf97B5fxfpspMNkWlFupblKM/nV8+NA9Ffvr+w==", 1698 | "dev": true 1699 | }, 1700 | "acorn": { 1701 | "version": "7.4.1", 1702 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 1703 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 1704 | "dev": true 1705 | }, 1706 | "acorn-jsx": { 1707 | "version": "5.3.2", 1708 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 1709 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 1710 | "dev": true, 1711 | "requires": {} 1712 | }, 1713 | "ajv": { 1714 | "version": "6.12.6", 1715 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1716 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1717 | "dev": true, 1718 | "requires": { 1719 | "fast-deep-equal": "^3.1.1", 1720 | "fast-json-stable-stringify": "^2.0.0", 1721 | "json-schema-traverse": "^0.4.1", 1722 | "uri-js": "^4.2.2" 1723 | } 1724 | }, 1725 | "ansi-colors": { 1726 | "version": "4.1.1", 1727 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 1728 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 1729 | "dev": true 1730 | }, 1731 | "ansi-regex": { 1732 | "version": "5.0.1", 1733 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1734 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1735 | "dev": true 1736 | }, 1737 | "ansi-styles": { 1738 | "version": "4.3.0", 1739 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1740 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1741 | "dev": true, 1742 | "requires": { 1743 | "color-convert": "^2.0.1" 1744 | } 1745 | }, 1746 | "argparse": { 1747 | "version": "1.0.10", 1748 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 1749 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 1750 | "dev": true, 1751 | "requires": { 1752 | "sprintf-js": "~1.0.2" 1753 | } 1754 | }, 1755 | "astral-regex": { 1756 | "version": "2.0.0", 1757 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", 1758 | "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", 1759 | "dev": true 1760 | }, 1761 | "balanced-match": { 1762 | "version": "1.0.2", 1763 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1764 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1765 | "dev": true 1766 | }, 1767 | "brace-expansion": { 1768 | "version": "1.1.11", 1769 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1770 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1771 | "dev": true, 1772 | "requires": { 1773 | "balanced-match": "^1.0.0", 1774 | "concat-map": "0.0.1" 1775 | } 1776 | }, 1777 | "callsites": { 1778 | "version": "3.1.0", 1779 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1780 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1781 | "dev": true 1782 | }, 1783 | "chalk": { 1784 | "version": "4.1.2", 1785 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1786 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1787 | "dev": true, 1788 | "requires": { 1789 | "ansi-styles": "^4.1.0", 1790 | "supports-color": "^7.1.0" 1791 | } 1792 | }, 1793 | "color-convert": { 1794 | "version": "2.0.1", 1795 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1796 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1797 | "dev": true, 1798 | "requires": { 1799 | "color-name": "~1.1.4" 1800 | } 1801 | }, 1802 | "color-name": { 1803 | "version": "1.1.4", 1804 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1805 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1806 | "dev": true 1807 | }, 1808 | "comment-parser": { 1809 | "version": "1.2.4", 1810 | "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.4.tgz", 1811 | "integrity": "sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw==", 1812 | "dev": true 1813 | }, 1814 | "concat-map": { 1815 | "version": "0.0.1", 1816 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1817 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 1818 | "dev": true 1819 | }, 1820 | "cross-spawn": { 1821 | "version": "7.0.3", 1822 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1823 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1824 | "dev": true, 1825 | "requires": { 1826 | "path-key": "^3.1.0", 1827 | "shebang-command": "^2.0.0", 1828 | "which": "^2.0.1" 1829 | } 1830 | }, 1831 | "debug": { 1832 | "version": "4.3.2", 1833 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 1834 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 1835 | "dev": true, 1836 | "requires": { 1837 | "ms": "2.1.2" 1838 | } 1839 | }, 1840 | "deep-is": { 1841 | "version": "0.1.4", 1842 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1843 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1844 | "dev": true 1845 | }, 1846 | "doctrine": { 1847 | "version": "3.0.0", 1848 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 1849 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 1850 | "dev": true, 1851 | "requires": { 1852 | "esutils": "^2.0.2" 1853 | } 1854 | }, 1855 | "emoji-regex": { 1856 | "version": "8.0.0", 1857 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1858 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1859 | "dev": true 1860 | }, 1861 | "enquirer": { 1862 | "version": "2.3.6", 1863 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", 1864 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", 1865 | "dev": true, 1866 | "requires": { 1867 | "ansi-colors": "^4.1.1" 1868 | } 1869 | }, 1870 | "escape-string-regexp": { 1871 | "version": "4.0.0", 1872 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1873 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1874 | "dev": true 1875 | }, 1876 | "eslint": { 1877 | "version": "7.32.0", 1878 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", 1879 | "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", 1880 | "dev": true, 1881 | "requires": { 1882 | "@babel/code-frame": "7.12.11", 1883 | "@eslint/eslintrc": "^0.4.3", 1884 | "@humanwhocodes/config-array": "^0.5.0", 1885 | "ajv": "^6.10.0", 1886 | "chalk": "^4.0.0", 1887 | "cross-spawn": "^7.0.2", 1888 | "debug": "^4.0.1", 1889 | "doctrine": "^3.0.0", 1890 | "enquirer": "^2.3.5", 1891 | "escape-string-regexp": "^4.0.0", 1892 | "eslint-scope": "^5.1.1", 1893 | "eslint-utils": "^2.1.0", 1894 | "eslint-visitor-keys": "^2.0.0", 1895 | "espree": "^7.3.1", 1896 | "esquery": "^1.4.0", 1897 | "esutils": "^2.0.2", 1898 | "fast-deep-equal": "^3.1.3", 1899 | "file-entry-cache": "^6.0.1", 1900 | "functional-red-black-tree": "^1.0.1", 1901 | "glob-parent": "^5.1.2", 1902 | "globals": "^13.6.0", 1903 | "ignore": "^4.0.6", 1904 | "import-fresh": "^3.0.0", 1905 | "imurmurhash": "^0.1.4", 1906 | "is-glob": "^4.0.0", 1907 | "js-yaml": "^3.13.1", 1908 | "json-stable-stringify-without-jsonify": "^1.0.1", 1909 | "levn": "^0.4.1", 1910 | "lodash.merge": "^4.6.2", 1911 | "minimatch": "^3.0.4", 1912 | "natural-compare": "^1.4.0", 1913 | "optionator": "^0.9.1", 1914 | "progress": "^2.0.0", 1915 | "regexpp": "^3.1.0", 1916 | "semver": "^7.2.1", 1917 | "strip-ansi": "^6.0.0", 1918 | "strip-json-comments": "^3.1.0", 1919 | "table": "^6.0.9", 1920 | "text-table": "^0.2.0", 1921 | "v8-compile-cache": "^2.0.3" 1922 | } 1923 | }, 1924 | "eslint-config-blueimp": { 1925 | "version": "2.3.0", 1926 | "resolved": "https://registry.npmjs.org/eslint-config-blueimp/-/eslint-config-blueimp-2.3.0.tgz", 1927 | "integrity": "sha512-OC1+7YHBpXYdl/Jt2PZMpIPAUogHf4iDnqf8vVMlmkKls1Xemu7DAZqdFgdYhZxgaJ/d+qXH8b66L/D/pU4btA==", 1928 | "dev": true, 1929 | "requires": {} 1930 | }, 1931 | "eslint-config-prettier": { 1932 | "version": "8.3.0", 1933 | "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", 1934 | "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", 1935 | "dev": true, 1936 | "requires": {} 1937 | }, 1938 | "eslint-plugin-es": { 1939 | "version": "3.0.1", 1940 | "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", 1941 | "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", 1942 | "dev": true, 1943 | "requires": { 1944 | "eslint-utils": "^2.0.0", 1945 | "regexpp": "^3.0.0" 1946 | } 1947 | }, 1948 | "eslint-plugin-jsdoc": { 1949 | "version": "36.1.0", 1950 | "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.1.0.tgz", 1951 | "integrity": "sha512-Qpied2AJCQcScxfzTObLKRiP5QgLXjMU/ITjBagEV5p2Q/HpumD1EQtazdRYdjDSwPmXhwOl2yquwOGQ4HOJNw==", 1952 | "dev": true, 1953 | "requires": { 1954 | "@es-joy/jsdoccomment": "0.10.8", 1955 | "comment-parser": "1.2.4", 1956 | "debug": "^4.3.2", 1957 | "esquery": "^1.4.0", 1958 | "jsdoc-type-pratt-parser": "^1.1.1", 1959 | "lodash": "^4.17.21", 1960 | "regextras": "^0.8.0", 1961 | "semver": "^7.3.5", 1962 | "spdx-expression-parse": "^3.0.1" 1963 | } 1964 | }, 1965 | "eslint-plugin-node": { 1966 | "version": "11.1.0", 1967 | "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", 1968 | "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", 1969 | "dev": true, 1970 | "requires": { 1971 | "eslint-plugin-es": "^3.0.0", 1972 | "eslint-utils": "^2.0.0", 1973 | "ignore": "^5.1.1", 1974 | "minimatch": "^3.0.4", 1975 | "resolve": "^1.10.1", 1976 | "semver": "^6.1.0" 1977 | }, 1978 | "dependencies": { 1979 | "ignore": { 1980 | "version": "5.1.8", 1981 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", 1982 | "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", 1983 | "dev": true 1984 | }, 1985 | "semver": { 1986 | "version": "6.3.0", 1987 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1988 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1989 | "dev": true 1990 | } 1991 | } 1992 | }, 1993 | "eslint-plugin-prettier": { 1994 | "version": "4.0.0", 1995 | "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", 1996 | "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", 1997 | "dev": true, 1998 | "requires": { 1999 | "prettier-linter-helpers": "^1.0.0" 2000 | } 2001 | }, 2002 | "eslint-scope": { 2003 | "version": "5.1.1", 2004 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 2005 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 2006 | "dev": true, 2007 | "requires": { 2008 | "esrecurse": "^4.3.0", 2009 | "estraverse": "^4.1.1" 2010 | } 2011 | }, 2012 | "eslint-utils": { 2013 | "version": "2.1.0", 2014 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", 2015 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", 2016 | "dev": true, 2017 | "requires": { 2018 | "eslint-visitor-keys": "^1.1.0" 2019 | }, 2020 | "dependencies": { 2021 | "eslint-visitor-keys": { 2022 | "version": "1.3.0", 2023 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 2024 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 2025 | "dev": true 2026 | } 2027 | } 2028 | }, 2029 | "eslint-visitor-keys": { 2030 | "version": "2.1.0", 2031 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 2032 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 2033 | "dev": true 2034 | }, 2035 | "espree": { 2036 | "version": "7.3.1", 2037 | "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", 2038 | "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", 2039 | "dev": true, 2040 | "requires": { 2041 | "acorn": "^7.4.0", 2042 | "acorn-jsx": "^5.3.1", 2043 | "eslint-visitor-keys": "^1.3.0" 2044 | }, 2045 | "dependencies": { 2046 | "eslint-visitor-keys": { 2047 | "version": "1.3.0", 2048 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 2049 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 2050 | "dev": true 2051 | } 2052 | } 2053 | }, 2054 | "esprima": { 2055 | "version": "4.0.1", 2056 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 2057 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 2058 | "dev": true 2059 | }, 2060 | "esquery": { 2061 | "version": "1.4.0", 2062 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", 2063 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", 2064 | "dev": true, 2065 | "requires": { 2066 | "estraverse": "^5.1.0" 2067 | }, 2068 | "dependencies": { 2069 | "estraverse": { 2070 | "version": "5.2.0", 2071 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 2072 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 2073 | "dev": true 2074 | } 2075 | } 2076 | }, 2077 | "esrecurse": { 2078 | "version": "4.3.0", 2079 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 2080 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 2081 | "dev": true, 2082 | "requires": { 2083 | "estraverse": "^5.2.0" 2084 | }, 2085 | "dependencies": { 2086 | "estraverse": { 2087 | "version": "5.2.0", 2088 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 2089 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 2090 | "dev": true 2091 | } 2092 | } 2093 | }, 2094 | "estraverse": { 2095 | "version": "4.3.0", 2096 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 2097 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 2098 | "dev": true 2099 | }, 2100 | "esutils": { 2101 | "version": "2.0.3", 2102 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 2103 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 2104 | "dev": true 2105 | }, 2106 | "fast-deep-equal": { 2107 | "version": "3.1.3", 2108 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 2109 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 2110 | "dev": true 2111 | }, 2112 | "fast-diff": { 2113 | "version": "1.2.0", 2114 | "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", 2115 | "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", 2116 | "dev": true 2117 | }, 2118 | "fast-json-stable-stringify": { 2119 | "version": "2.1.0", 2120 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 2121 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 2122 | "dev": true 2123 | }, 2124 | "fast-levenshtein": { 2125 | "version": "2.0.6", 2126 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 2127 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 2128 | "dev": true 2129 | }, 2130 | "file-entry-cache": { 2131 | "version": "6.0.1", 2132 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 2133 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 2134 | "dev": true, 2135 | "requires": { 2136 | "flat-cache": "^3.0.4" 2137 | } 2138 | }, 2139 | "flat-cache": { 2140 | "version": "3.0.4", 2141 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 2142 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 2143 | "dev": true, 2144 | "requires": { 2145 | "flatted": "^3.1.0", 2146 | "rimraf": "^3.0.2" 2147 | } 2148 | }, 2149 | "flatted": { 2150 | "version": "3.2.2", 2151 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", 2152 | "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", 2153 | "dev": true 2154 | }, 2155 | "fs.realpath": { 2156 | "version": "1.0.0", 2157 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2158 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 2159 | "dev": true 2160 | }, 2161 | "function-bind": { 2162 | "version": "1.1.1", 2163 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 2164 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 2165 | "dev": true 2166 | }, 2167 | "functional-red-black-tree": { 2168 | "version": "1.0.1", 2169 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 2170 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 2171 | "dev": true 2172 | }, 2173 | "glob": { 2174 | "version": "7.2.0", 2175 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 2176 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 2177 | "dev": true, 2178 | "requires": { 2179 | "fs.realpath": "^1.0.0", 2180 | "inflight": "^1.0.4", 2181 | "inherits": "2", 2182 | "minimatch": "^3.0.4", 2183 | "once": "^1.3.0", 2184 | "path-is-absolute": "^1.0.0" 2185 | } 2186 | }, 2187 | "glob-parent": { 2188 | "version": "5.1.2", 2189 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2190 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2191 | "dev": true, 2192 | "requires": { 2193 | "is-glob": "^4.0.1" 2194 | } 2195 | }, 2196 | "globals": { 2197 | "version": "13.11.0", 2198 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", 2199 | "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", 2200 | "dev": true, 2201 | "requires": { 2202 | "type-fest": "^0.20.2" 2203 | } 2204 | }, 2205 | "has": { 2206 | "version": "1.0.3", 2207 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 2208 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 2209 | "dev": true, 2210 | "requires": { 2211 | "function-bind": "^1.1.1" 2212 | } 2213 | }, 2214 | "has-flag": { 2215 | "version": "4.0.0", 2216 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2217 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2218 | "dev": true 2219 | }, 2220 | "ignore": { 2221 | "version": "4.0.6", 2222 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 2223 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 2224 | "dev": true 2225 | }, 2226 | "import-fresh": { 2227 | "version": "3.3.0", 2228 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 2229 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 2230 | "dev": true, 2231 | "requires": { 2232 | "parent-module": "^1.0.0", 2233 | "resolve-from": "^4.0.0" 2234 | } 2235 | }, 2236 | "imurmurhash": { 2237 | "version": "0.1.4", 2238 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 2239 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 2240 | "dev": true 2241 | }, 2242 | "inflight": { 2243 | "version": "1.0.6", 2244 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2245 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 2246 | "dev": true, 2247 | "requires": { 2248 | "once": "^1.3.0", 2249 | "wrappy": "1" 2250 | } 2251 | }, 2252 | "inherits": { 2253 | "version": "2.0.4", 2254 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2255 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 2256 | "dev": true 2257 | }, 2258 | "is-core-module": { 2259 | "version": "2.6.0", 2260 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", 2261 | "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", 2262 | "dev": true, 2263 | "requires": { 2264 | "has": "^1.0.3" 2265 | } 2266 | }, 2267 | "is-extglob": { 2268 | "version": "2.1.1", 2269 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2270 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 2271 | "dev": true 2272 | }, 2273 | "is-fullwidth-code-point": { 2274 | "version": "3.0.0", 2275 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2276 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 2277 | "dev": true 2278 | }, 2279 | "is-glob": { 2280 | "version": "4.0.1", 2281 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 2282 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 2283 | "dev": true, 2284 | "requires": { 2285 | "is-extglob": "^2.1.1" 2286 | } 2287 | }, 2288 | "isexe": { 2289 | "version": "2.0.0", 2290 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2291 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 2292 | "dev": true 2293 | }, 2294 | "js-tokens": { 2295 | "version": "4.0.0", 2296 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2297 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 2298 | "dev": true 2299 | }, 2300 | "js-yaml": { 2301 | "version": "3.14.1", 2302 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 2303 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 2304 | "dev": true, 2305 | "requires": { 2306 | "argparse": "^1.0.7", 2307 | "esprima": "^4.0.0" 2308 | } 2309 | }, 2310 | "jsdoc-type-pratt-parser": { 2311 | "version": "1.1.1", 2312 | "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.1.1.tgz", 2313 | "integrity": "sha512-uelRmpghNwPBuZScwgBG/OzodaFk5RbO5xaivBdsAY70icWfShwZ7PCMO0x1zSkOa8T1FzHThmrdoyg/0AwV5g==", 2314 | "dev": true 2315 | }, 2316 | "json-schema-traverse": { 2317 | "version": "0.4.1", 2318 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2319 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2320 | "dev": true 2321 | }, 2322 | "json-stable-stringify-without-jsonify": { 2323 | "version": "1.0.1", 2324 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 2325 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 2326 | "dev": true 2327 | }, 2328 | "levn": { 2329 | "version": "0.4.1", 2330 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 2331 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 2332 | "dev": true, 2333 | "requires": { 2334 | "prelude-ls": "^1.2.1", 2335 | "type-check": "~0.4.0" 2336 | } 2337 | }, 2338 | "lodash": { 2339 | "version": "4.17.21", 2340 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 2341 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 2342 | "dev": true 2343 | }, 2344 | "lodash.clonedeep": { 2345 | "version": "4.5.0", 2346 | "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", 2347 | "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", 2348 | "dev": true 2349 | }, 2350 | "lodash.merge": { 2351 | "version": "4.6.2", 2352 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 2353 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 2354 | "dev": true 2355 | }, 2356 | "lodash.truncate": { 2357 | "version": "4.4.2", 2358 | "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", 2359 | "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", 2360 | "dev": true 2361 | }, 2362 | "lru-cache": { 2363 | "version": "6.0.0", 2364 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 2365 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 2366 | "dev": true, 2367 | "requires": { 2368 | "yallist": "^4.0.0" 2369 | } 2370 | }, 2371 | "minimatch": { 2372 | "version": "3.0.4", 2373 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2374 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2375 | "dev": true, 2376 | "requires": { 2377 | "brace-expansion": "^1.1.7" 2378 | } 2379 | }, 2380 | "ms": { 2381 | "version": "2.1.2", 2382 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2383 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2384 | "dev": true 2385 | }, 2386 | "natural-compare": { 2387 | "version": "1.4.0", 2388 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2389 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 2390 | "dev": true 2391 | }, 2392 | "once": { 2393 | "version": "1.4.0", 2394 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2395 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2396 | "dev": true, 2397 | "requires": { 2398 | "wrappy": "1" 2399 | } 2400 | }, 2401 | "optionator": { 2402 | "version": "0.9.1", 2403 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 2404 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 2405 | "dev": true, 2406 | "requires": { 2407 | "deep-is": "^0.1.3", 2408 | "fast-levenshtein": "^2.0.6", 2409 | "levn": "^0.4.1", 2410 | "prelude-ls": "^1.2.1", 2411 | "type-check": "^0.4.0", 2412 | "word-wrap": "^1.2.3" 2413 | } 2414 | }, 2415 | "parent-module": { 2416 | "version": "1.0.1", 2417 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2418 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2419 | "dev": true, 2420 | "requires": { 2421 | "callsites": "^3.0.0" 2422 | } 2423 | }, 2424 | "path-is-absolute": { 2425 | "version": "1.0.1", 2426 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2427 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2428 | "dev": true 2429 | }, 2430 | "path-key": { 2431 | "version": "3.1.1", 2432 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2433 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2434 | "dev": true 2435 | }, 2436 | "path-parse": { 2437 | "version": "1.0.7", 2438 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 2439 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 2440 | "dev": true 2441 | }, 2442 | "prelude-ls": { 2443 | "version": "1.2.1", 2444 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 2445 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 2446 | "dev": true 2447 | }, 2448 | "prettier": { 2449 | "version": "2.4.1", 2450 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", 2451 | "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", 2452 | "dev": true 2453 | }, 2454 | "prettier-linter-helpers": { 2455 | "version": "1.0.0", 2456 | "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", 2457 | "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", 2458 | "dev": true, 2459 | "requires": { 2460 | "fast-diff": "^1.1.2" 2461 | } 2462 | }, 2463 | "progress": { 2464 | "version": "2.0.3", 2465 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 2466 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 2467 | "dev": true 2468 | }, 2469 | "punycode": { 2470 | "version": "2.1.1", 2471 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 2472 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 2473 | "dev": true 2474 | }, 2475 | "regexpp": { 2476 | "version": "3.2.0", 2477 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 2478 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 2479 | "dev": true 2480 | }, 2481 | "regextras": { 2482 | "version": "0.8.0", 2483 | "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", 2484 | "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", 2485 | "dev": true 2486 | }, 2487 | "require-from-string": { 2488 | "version": "2.0.2", 2489 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 2490 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 2491 | "dev": true 2492 | }, 2493 | "resolve": { 2494 | "version": "1.20.0", 2495 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 2496 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 2497 | "dev": true, 2498 | "requires": { 2499 | "is-core-module": "^2.2.0", 2500 | "path-parse": "^1.0.6" 2501 | } 2502 | }, 2503 | "resolve-from": { 2504 | "version": "4.0.0", 2505 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2506 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2507 | "dev": true 2508 | }, 2509 | "rimraf": { 2510 | "version": "3.0.2", 2511 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 2512 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 2513 | "dev": true, 2514 | "requires": { 2515 | "glob": "^7.1.3" 2516 | } 2517 | }, 2518 | "semver": { 2519 | "version": "7.3.5", 2520 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 2521 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 2522 | "dev": true, 2523 | "requires": { 2524 | "lru-cache": "^6.0.0" 2525 | } 2526 | }, 2527 | "shebang-command": { 2528 | "version": "2.0.0", 2529 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2530 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2531 | "dev": true, 2532 | "requires": { 2533 | "shebang-regex": "^3.0.0" 2534 | } 2535 | }, 2536 | "shebang-regex": { 2537 | "version": "3.0.0", 2538 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2539 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2540 | "dev": true 2541 | }, 2542 | "slice-ansi": { 2543 | "version": "4.0.0", 2544 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", 2545 | "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", 2546 | "dev": true, 2547 | "requires": { 2548 | "ansi-styles": "^4.0.0", 2549 | "astral-regex": "^2.0.0", 2550 | "is-fullwidth-code-point": "^3.0.0" 2551 | } 2552 | }, 2553 | "spdx-exceptions": { 2554 | "version": "2.3.0", 2555 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", 2556 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", 2557 | "dev": true 2558 | }, 2559 | "spdx-expression-parse": { 2560 | "version": "3.0.1", 2561 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", 2562 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", 2563 | "dev": true, 2564 | "requires": { 2565 | "spdx-exceptions": "^2.1.0", 2566 | "spdx-license-ids": "^3.0.0" 2567 | } 2568 | }, 2569 | "spdx-license-ids": { 2570 | "version": "3.0.10", 2571 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", 2572 | "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", 2573 | "dev": true 2574 | }, 2575 | "sprintf-js": { 2576 | "version": "1.0.3", 2577 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 2578 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 2579 | "dev": true 2580 | }, 2581 | "string-width": { 2582 | "version": "4.2.3", 2583 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2584 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2585 | "dev": true, 2586 | "requires": { 2587 | "emoji-regex": "^8.0.0", 2588 | "is-fullwidth-code-point": "^3.0.0", 2589 | "strip-ansi": "^6.0.1" 2590 | } 2591 | }, 2592 | "strip-ansi": { 2593 | "version": "6.0.1", 2594 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2595 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2596 | "dev": true, 2597 | "requires": { 2598 | "ansi-regex": "^5.0.1" 2599 | } 2600 | }, 2601 | "strip-json-comments": { 2602 | "version": "3.1.1", 2603 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 2604 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 2605 | "dev": true 2606 | }, 2607 | "supports-color": { 2608 | "version": "7.2.0", 2609 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2610 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2611 | "dev": true, 2612 | "requires": { 2613 | "has-flag": "^4.0.0" 2614 | } 2615 | }, 2616 | "table": { 2617 | "version": "6.7.1", 2618 | "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", 2619 | "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", 2620 | "dev": true, 2621 | "requires": { 2622 | "ajv": "^8.0.1", 2623 | "lodash.clonedeep": "^4.5.0", 2624 | "lodash.truncate": "^4.4.2", 2625 | "slice-ansi": "^4.0.0", 2626 | "string-width": "^4.2.0", 2627 | "strip-ansi": "^6.0.0" 2628 | }, 2629 | "dependencies": { 2630 | "ajv": { 2631 | "version": "8.6.3", 2632 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", 2633 | "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", 2634 | "dev": true, 2635 | "requires": { 2636 | "fast-deep-equal": "^3.1.1", 2637 | "json-schema-traverse": "^1.0.0", 2638 | "require-from-string": "^2.0.2", 2639 | "uri-js": "^4.2.2" 2640 | } 2641 | }, 2642 | "json-schema-traverse": { 2643 | "version": "1.0.0", 2644 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 2645 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 2646 | "dev": true 2647 | } 2648 | } 2649 | }, 2650 | "text-table": { 2651 | "version": "0.2.0", 2652 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 2653 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 2654 | "dev": true 2655 | }, 2656 | "type-check": { 2657 | "version": "0.4.0", 2658 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 2659 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 2660 | "dev": true, 2661 | "requires": { 2662 | "prelude-ls": "^1.2.1" 2663 | } 2664 | }, 2665 | "type-fest": { 2666 | "version": "0.20.2", 2667 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 2668 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 2669 | "dev": true 2670 | }, 2671 | "typescript": { 2672 | "version": "4.4.3", 2673 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", 2674 | "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", 2675 | "dev": true 2676 | }, 2677 | "uri-js": { 2678 | "version": "4.4.1", 2679 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 2680 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 2681 | "dev": true, 2682 | "requires": { 2683 | "punycode": "^2.1.0" 2684 | } 2685 | }, 2686 | "v8-compile-cache": { 2687 | "version": "2.3.0", 2688 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", 2689 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", 2690 | "dev": true 2691 | }, 2692 | "which": { 2693 | "version": "2.0.2", 2694 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2695 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2696 | "dev": true, 2697 | "requires": { 2698 | "isexe": "^2.0.0" 2699 | } 2700 | }, 2701 | "word-wrap": { 2702 | "version": "1.2.3", 2703 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 2704 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 2705 | "dev": true 2706 | }, 2707 | "wrappy": { 2708 | "version": "1.0.2", 2709 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2710 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2711 | "dev": true 2712 | }, 2713 | "yallist": { 2714 | "version": "4.0.0", 2715 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2716 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2717 | "dev": true 2718 | } 2719 | } 2720 | } 2721 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ffmpeg-image-diff", 3 | "version": "1.16.0", 4 | "title": "FFmpeg Image Diff", 5 | "description": "An image diffing library using FFmpeg. Creates an image showing perceptual differences and returns SSIM data.", 6 | "keywords": [ 7 | "ffmpeg", 8 | "image", 9 | "diff", 10 | "ssim" 11 | ], 12 | "homepage": "https://github.com/blueimp/ffmpeg-image-diff", 13 | "author": { 14 | "name": "Sebastian Tschan", 15 | "url": "https://blueimp.net" 16 | }, 17 | "repository": { 18 | "type": "git", 19 | "url": "git://github.com/blueimp/ffmpeg-image-diff.git" 20 | }, 21 | "license": "MIT", 22 | "engines": { 23 | "node": ">=10.0.0" 24 | }, 25 | "devDependencies": { 26 | "@types/mocha": "9", 27 | "@types/node": "16", 28 | "eslint": "7", 29 | "eslint-config-blueimp": "2", 30 | "eslint-config-prettier": "8", 31 | "eslint-plugin-jsdoc": "36", 32 | "eslint-plugin-node": "11", 33 | "eslint-plugin-prettier": "4", 34 | "prettier": "2", 35 | "typescript": "4" 36 | }, 37 | "eslintConfig": { 38 | "extends": [ 39 | "blueimp", 40 | "plugin:jsdoc/recommended", 41 | "plugin:node/recommended", 42 | "plugin:prettier/recommended" 43 | ] 44 | }, 45 | "prettier": { 46 | "arrowParens": "avoid", 47 | "proseWrap": "always", 48 | "semi": false, 49 | "singleQuote": true, 50 | "trailingComma": "none" 51 | }, 52 | "scripts": { 53 | "pretest": "eslint . && tsc", 54 | "test": "docker-compose run --rm test", 55 | "posttest": "docker-compose down", 56 | "build": "tsc -p tsconfig.d.json", 57 | "preversion": "npm test", 58 | "version": "npm run build && git add -A index.d.ts", 59 | "postversion": "git push --tags origin HEAD && npm publish" 60 | }, 61 | "files": [ 62 | "index.d.ts", 63 | "index.js" 64 | ], 65 | "main": "index.js" 66 | } 67 | -------------------------------------------------------------------------------- /samples/lenna-diff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blueimp/ffmpeg-image-diff/28495a2e452612825bbe95049c64caf1abe9ac25/samples/lenna-diff.png -------------------------------------------------------------------------------- /samples/lenna-edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blueimp/ffmpeg-image-diff/28495a2e452612825bbe95049c64caf1abe9ac25/samples/lenna-edit.png -------------------------------------------------------------------------------- /samples/lenna.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blueimp/ffmpeg-image-diff/28495a2e452612825bbe95049c64caf1abe9ac25/samples/lenna.png -------------------------------------------------------------------------------- /tsconfig.d.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig", 3 | "compilerOptions": { 4 | "noEmit": false, 5 | "declaration": true, 6 | "emitDeclarationOnly": true 7 | }, 8 | "include": ["index.js"] 9 | } 10 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowJs": true, 4 | "checkJs": true, 5 | "noEmit": true 6 | } 7 | } 8 | --------------------------------------------------------------------------------