├── .codeclimate.yml ├── .eslintignore ├── .eslintrc ├── .github └── workflows │ ├── codeql-analysis.yml │ └── node.js.yml ├── .gitignore ├── .mailmap ├── .npmignore ├── .nvmrc ├── README.md ├── UNLICENSE ├── lib ├── constants.js ├── readable_streambuffer.js ├── streambuffer.js └── writable_streambuffer.js ├── package-lock.json ├── package.json └── test ├── fixtures.js ├── readable_streambuffer.test.js └── writable_streambuffer.test.js /.codeclimate.yml: -------------------------------------------------------------------------------- 1 | --- 2 | engines: 3 | eslint: 4 | enabled: true 5 | fixme: 6 | enabled: true 7 | ratings: 8 | paths: 9 | - "**.js" 10 | exclude_paths: 11 | - node_modules/**/* 12 | - test/**/* 13 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | coverage/ -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "indent": [ 4 | 2, 5 | 2 6 | ], 7 | "quotes": [ 8 | 2, 9 | "single" 10 | ], 11 | "linebreak-style": [ 12 | 2, 13 | "unix" 14 | ], 15 | "semi": [ 16 | 2, 17 | "always" 18 | ] 19 | }, 20 | "env": { 21 | "node": true, 22 | "mocha": true 23 | }, 24 | "extends": "eslint:recommended" 25 | } 26 | -------------------------------------------------------------------------------- /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | # For most projects, this workflow file will not need changing; you simply need 2 | # to commit it to your repository. 3 | # 4 | # You may wish to alter this file to override the set of languages analyzed, 5 | # or to provide custom queries or build logic. 6 | # 7 | # ******** NOTE ******** 8 | # We have attempted to detect the languages in your repository. Please check 9 | # the `language` matrix defined below to confirm you have the correct set of 10 | # supported CodeQL languages. 11 | # 12 | name: "CodeQL" 13 | 14 | on: 15 | push: 16 | branches: [ main ] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [ main ] 20 | schedule: 21 | - cron: '41 19 * * 5' 22 | 23 | jobs: 24 | analyze: 25 | name: Analyze 26 | runs-on: ubuntu-latest 27 | permissions: 28 | actions: read 29 | contents: read 30 | security-events: write 31 | 32 | strategy: 33 | fail-fast: false 34 | matrix: 35 | language: [ 'javascript' ] 36 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] 37 | # Learn more: 38 | # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed 39 | 40 | steps: 41 | - name: Checkout repository 42 | uses: actions/checkout@v2 43 | 44 | # Initializes the CodeQL tools for scanning. 45 | - name: Initialize CodeQL 46 | uses: github/codeql-action/init@v2 47 | with: 48 | languages: ${{ matrix.language }} 49 | # If you wish to specify custom queries, you can do so here or in a config file. 50 | # By default, queries listed here will override any specified in a config file. 51 | # Prefix the list here with "+" to use these queries and those in the config file. 52 | # queries: ./path/to/local/query, your-org/your-repo/queries@main 53 | 54 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). 55 | # If this step fails, then you should remove it and run the build manually (see below) 56 | - name: Autobuild 57 | uses: github/codeql-action/autobuild@v2 58 | 59 | # ℹ️ Command-line programs to run using the OS shell. 60 | # 📚 https://git.io/JvXDl 61 | 62 | # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines 63 | # and modify them (or add more) to build your code if your project 64 | # uses a compiled language 65 | 66 | #- run: | 67 | # make bootstrap 68 | # make release 69 | 70 | - name: Perform CodeQL Analysis 71 | uses: github/codeql-action/analyze@v2 72 | -------------------------------------------------------------------------------- /.github/workflows/node.js.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 | 4 | name: Node.js CI 5 | 6 | on: 7 | push: 8 | branches: [ main ] 9 | pull_request: 10 | branches: [ main ] 11 | 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | 17 | strategy: 18 | matrix: 19 | node-version: [22.x, 20.x, 18.x] 20 | # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ 21 | 22 | steps: 23 | - uses: actions/checkout@v2 24 | - name: Use Node.js ${{ matrix.node-version }} 25 | uses: actions/setup-node@v2 26 | with: 27 | node-version: ${{ matrix.node-version }} 28 | cache: 'npm' 29 | - run: npm ci 30 | - run: npm run build --if-present 31 | - run: npm test 32 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.un~ 2 | /node_modules/* 3 | /test/tmp 4 | /.idea 5 | *.iml 6 | coverage/ 7 | -------------------------------------------------------------------------------- /.mailmap: -------------------------------------------------------------------------------- 1 | Sam Day 2 | Sam Day 3 | Sam Day 4 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | test/ 2 | .gitignore 3 | .npmignore 4 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | v8.4 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Node Stream Buffers 2 | 3 | [![Build Status][badge-actions-img]][badge-actions-url] 4 | [![npm][badge-npm-img]][badge-npm-url] 5 | 6 | **!! Consider using [Node 16+ Utility Consumers](https://nodejs.org/dist/latest-v16.x/docs/api/webstreams.html#utility-consumers) rather than this library. !!** 7 | 8 | Simple Readable and Writable Streams that use a [Buffer][node-buffer-docs] to store received data, or for data to send out. Useful for test code, debugging, and a wide range of other utilities. 9 | 10 | ``` 11 | npm install stream-buffers --save 12 | ``` 13 | 14 | ## Usage 15 | 16 | To use the stream buffers in your module, simply import it and away you go. 17 | 18 | ```js 19 | var streamBuffers = require('stream-buffers'); 20 | ``` 21 | 22 | ### WritableStreamBuffer 23 | 24 | `WritableStreamBuffer` implements the standard [`stream.Writable`](https://nodejs.org/api/stream.html#stream_class_stream_writable) interface. All writes to this stream will accumulate in an internal [`Buffer`](https://nodejs.org/api/buffer.html). If the internal buffer overflows it will be resized automatically. The initial size of the Buffer and the amount in which it grows can be configured in the constructor. 25 | 26 | ```js 27 | var myWritableStreamBuffer = new streamBuffers.WritableStreamBuffer({ 28 | initialSize: (100 * 1024), // start at 100 kilobytes. 29 | incrementAmount: (10 * 1024) // grow by 10 kilobytes each time buffer overflows. 30 | }); 31 | ``` 32 | 33 | The default initial size and increment amount are stored in the following constants: 34 | 35 | ```js 36 | streamBuffers.DEFAULT_INITIAL_SIZE // (8 * 1024) 37 | streamBuffers.DEFAULT_INCREMENT_AMOUNT // (8 * 1024) 38 | ``` 39 | 40 | Writing is standard Stream stuff: 41 | 42 | ```js 43 | myWritableStreamBuffer.write(myBuffer); 44 | // - or - 45 | myWritableStreamBuffer.write('\u00bd + \u00bc = \u00be', 'utf8'); 46 | ``` 47 | 48 | You can query the size of the data being held in the Buffer, and also how big the Buffer's max capacity currently is: 49 | 50 | ```js 51 | myWritableStreamBuffer.write('ASDF'); 52 | streamBuffers.size(); // 4. 53 | streamBuffers.maxSize(); // Whatever was configured as initial size. In our example: (100 * 1024). 54 | ``` 55 | 56 | Retrieving the contents of the Buffer is simple. 57 | 58 | ```js 59 | // Gets all held data as a Buffer. 60 | myWritableStreamBuffer.getContents(); 61 | 62 | // Gets all held data as a utf8 string. 63 | myWritableStreamBuffer.getContentsAsString('utf8'); 64 | 65 | // Gets first 5 bytes as a Buffer. 66 | myWritableStreamBuffer.getContents(5); 67 | 68 | // Gets first 5 bytes as a utf8 string. 69 | myWritableStreamBuffer.getContentsAsString('utf8', 5); 70 | ``` 71 | 72 | **Care should be taken when getting encoded strings from WritableStream, as it doesn't really care about the contents (multi-byte characters will not be respected).** 73 | 74 | Destroying or ending the WritableStream will not delete the contents of Buffer, but will disallow any further writes. 75 | 76 | ```js 77 | myWritableStreamBuffer.write('ASDF'); 78 | myWritableStreamBuffer.end(); 79 | myWritableStreamBuffer.getContentsAsString(); // -> 'ASDF' 80 | ``` 81 | 82 | ### ReadableStreamBuffer 83 | 84 | `ReadableStreamBuffer` implements the standard [`stream.Readable`](https://nodejs.org/api/stream.html#stream_class_stream_readable), but can have data inserted into it. This data will then be pumped out in chunks as readable events. The data to be sent out is held in a Buffer, which can grow in much the same way as a `WritableStreamBuffer` does, if data is being put in Buffer faster than it is being pumped out. 85 | 86 | The frequency in which chunks are pumped out, and the size of the chunks themselves can be configured in the constructor. The initial size and increment amount of internal Buffer can be configured too. In the following example 2kb chunks will be output every 10 milliseconds: 87 | 88 | ```js 89 | var myReadableStreamBuffer = new streamBuffers.ReadableStreamBuffer({ 90 | frequency: 10, // in milliseconds. 91 | chunkSize: 2048 // in bytes. 92 | }); 93 | ``` 94 | 95 | Default frequency and chunk size: 96 | 97 | ```js 98 | streamBuffers.DEFAULT_CHUNK_SIZE // (1024) 99 | streamBuffers.DEFAULT_FREQUENCY // (1) 100 | ``` 101 | 102 | Putting data in Buffer to be pumped out is easy: 103 | 104 | ```js 105 | myReadableStreamBuffer.put(aBuffer); 106 | myReadableStreamBuffer.put('A String', 'utf8'); 107 | ``` 108 | 109 | Chunks are pumped out via standard `stream.Readable` semantics. This means you can use the old streams1 way: 110 | 111 | ```js 112 | myReadableStreamBuffer.on('data', function(data) { 113 | // streams1.x style data 114 | assert.isTrue(data instanceof Buffer); 115 | }); 116 | ``` 117 | 118 | Or the streams2+ way: 119 | 120 | ```js 121 | myReadableStreamBuffer.on('readable', function(data) { 122 | var chunk; 123 | while((chunk = myReadableStreamBuffer.read()) !== null) { 124 | assert.isTrue(chunk instanceof Buffer); 125 | } 126 | }); 127 | ``` 128 | 129 | Because `ReadableStreamBuffer` is simply an implementation of [`stream.Readable`](https://nodejs.org/api/stream.html#stream_class_stream_readable), it implements pause / resume / setEncoding / etc. 130 | 131 | Once you're done putting data into a `ReadableStreamBuffer`, you can call `stop()` on it. 132 | 133 | ```js 134 | myReadableStreamBuffer.put('the last data this stream will ever see'); 135 | myReadableStreamBuffer.stop(); 136 | ``` 137 | 138 | Once the `ReadableStreamBuffer` is done pumping out the data in its internal buffer, it will emit the usual [`end`](https://nodejs.org/api/stream.html#stream_event_end) event. You cannot write any more data to the stream once you've called `stop()` on it. 139 | 140 | ## Disclaimer 141 | 142 | Not supposed to be a speed demon, it's more for tests/debugging or weird edge cases. It works with an internal buffer that it copies contents to/from/around. 143 | 144 | ## Contributors 145 | 146 | Thank you to all the [wonderful contributors](https://github.com/samcday/node-stream-buffer/graphs/contributors) who have kept this package alive throughout the years. 147 | 148 | ## License 149 | 150 | node-stream-buffer is free and unencumbered public domain software. For more information, see the accompanying UNLICENSE file. 151 | 152 | [badge-actions-img]: https://github.com/samcday/node-stream-buffer/actions/workflows/node.js.yml/badge.svg 153 | [badge-actions-url]: https://github.com/samcday/node-stream-buffer/actions/workflows/node.js.yml 154 | [badge-npm-img]: https://img.shields.io/npm/dm/stream-buffers.svg 155 | [badge-npm-url]: https://www.npmjs.org/package/stream-buffers 156 | 157 | [node-buffer-docs]: http://nodejs.org/api/buffer.html 158 | -------------------------------------------------------------------------------- /UNLICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to -------------------------------------------------------------------------------- /lib/constants.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | DEFAULT_INITIAL_SIZE: (8 * 1024), 5 | DEFAULT_INCREMENT_AMOUNT: (8 * 1024), 6 | DEFAULT_FREQUENCY: 1, 7 | DEFAULT_CHUNK_SIZE: 1024 8 | }; 9 | -------------------------------------------------------------------------------- /lib/readable_streambuffer.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var stream = require('stream'); 4 | var constants = require('./constants'); 5 | var util = require('util'); 6 | 7 | var ReadableStreamBuffer = module.exports = function(opts) { 8 | var that = this; 9 | opts = opts || {}; 10 | 11 | stream.Readable.call(this, opts); 12 | 13 | this.stopped = false; 14 | 15 | var frequency = opts.hasOwnProperty('frequency') ? opts.frequency : constants.DEFAULT_FREQUENCY; 16 | var chunkSize = opts.chunkSize || constants.DEFAULT_CHUNK_SIZE; 17 | var initialSize = opts.initialSize || constants.DEFAULT_INITIAL_SIZE; 18 | var incrementAmount = opts.incrementAmount || constants.DEFAULT_INCREMENT_AMOUNT; 19 | 20 | var size = 0; 21 | var buffer = new Buffer(initialSize); 22 | var allowPush = false; 23 | 24 | var sendData = function() { 25 | var amount = Math.min(chunkSize, size); 26 | var sendMore = false; 27 | 28 | if (amount > 0) { 29 | var chunk = null; 30 | chunk = new Buffer(amount); 31 | buffer.copy(chunk, 0, 0, amount); 32 | 33 | sendMore = that.push(chunk) !== false; 34 | allowPush = sendMore; 35 | 36 | buffer.copy(buffer, 0, amount, size); 37 | size -= amount; 38 | } 39 | 40 | if(size === 0 && that.stopped) { 41 | that.push(null); 42 | } 43 | 44 | if (sendMore) { 45 | sendData.timeout = setTimeout(sendData, frequency); 46 | } 47 | else { 48 | sendData.timeout = null; 49 | } 50 | }; 51 | 52 | this.stop = function() { 53 | if (this.stopped) { 54 | throw new Error('stop() called on already stopped ReadableStreamBuffer'); 55 | } 56 | this.stopped = true; 57 | 58 | if (size === 0) { 59 | this.push(null); 60 | } 61 | }; 62 | 63 | this.size = function() { 64 | return size; 65 | }; 66 | 67 | this.maxSize = function() { 68 | return buffer.length; 69 | }; 70 | 71 | var increaseBufferIfNecessary = function(incomingDataSize) { 72 | if((buffer.length - size) < incomingDataSize) { 73 | var factor = Math.ceil((incomingDataSize - (buffer.length - size)) / incrementAmount); 74 | 75 | var newBuffer = new Buffer(buffer.length + (incrementAmount * factor)); 76 | buffer.copy(newBuffer, 0, 0, size); 77 | buffer = newBuffer; 78 | } 79 | }; 80 | 81 | var kickSendDataTask = function () { 82 | if (!sendData.timeout && allowPush) { 83 | sendData.timeout = setTimeout(sendData, frequency); 84 | } 85 | } 86 | 87 | this.put = function(data, encoding) { 88 | if (that.stopped) { 89 | throw new Error('Tried to write data to a stopped ReadableStreamBuffer'); 90 | } 91 | 92 | if(Buffer.isBuffer(data)) { 93 | increaseBufferIfNecessary(data.length); 94 | data.copy(buffer, size, 0); 95 | size += data.length; 96 | } 97 | else { 98 | data = data + ''; 99 | var dataSizeInBytes = Buffer.byteLength(data); 100 | increaseBufferIfNecessary(dataSizeInBytes); 101 | buffer.write(data, size, encoding || 'utf8'); 102 | size += dataSizeInBytes; 103 | } 104 | 105 | kickSendDataTask(); 106 | }; 107 | 108 | this._read = function() { 109 | allowPush = true; 110 | kickSendDataTask(); 111 | }; 112 | }; 113 | 114 | util.inherits(ReadableStreamBuffer, stream.Readable); 115 | -------------------------------------------------------------------------------- /lib/streambuffer.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = require('./constants'); 4 | module.exports.ReadableStreamBuffer = require('./readable_streambuffer'); 5 | module.exports.WritableStreamBuffer = require('./writable_streambuffer'); 6 | -------------------------------------------------------------------------------- /lib/writable_streambuffer.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var util = require('util'); 4 | var stream = require('stream'); 5 | var constants = require('./constants'); 6 | 7 | var WritableStreamBuffer = module.exports = function(opts) { 8 | opts = opts || {}; 9 | opts.decodeStrings = true; 10 | 11 | stream.Writable.call(this, opts); 12 | 13 | var initialSize = opts.initialSize || constants.DEFAULT_INITIAL_SIZE; 14 | var incrementAmount = opts.incrementAmount || constants.DEFAULT_INCREMENT_AMOUNT; 15 | 16 | var buffer = new Buffer(initialSize); 17 | var size = 0; 18 | 19 | this.size = function() { 20 | return size; 21 | }; 22 | 23 | this.maxSize = function() { 24 | return buffer.length; 25 | }; 26 | 27 | this.getContents = function(length) { 28 | if(!size) return false; 29 | 30 | var data = new Buffer(Math.min(length || size, size)); 31 | buffer.copy(data, 0, 0, data.length); 32 | 33 | if(data.length < size) 34 | buffer.copy(buffer, 0, data.length); 35 | 36 | size -= data.length; 37 | 38 | return data; 39 | }; 40 | 41 | this.getContentsAsString = function(encoding, length) { 42 | if(!size) return false; 43 | 44 | var data = buffer.toString(encoding || 'utf8', 0, Math.min(length || size, size)); 45 | var dataLength = Buffer.byteLength(data); 46 | 47 | if(dataLength < size) 48 | buffer.copy(buffer, 0, dataLength); 49 | 50 | size -= dataLength; 51 | return data; 52 | }; 53 | 54 | var increaseBufferIfNecessary = function(incomingDataSize) { 55 | if((buffer.length - size) < incomingDataSize) { 56 | var factor = Math.ceil((incomingDataSize - (buffer.length - size)) / incrementAmount); 57 | 58 | var newBuffer = new Buffer(buffer.length + (incrementAmount * factor)); 59 | buffer.copy(newBuffer, 0, 0, size); 60 | buffer = newBuffer; 61 | } 62 | }; 63 | 64 | this._write = function(chunk, encoding, callback) { 65 | increaseBufferIfNecessary(chunk.length); 66 | chunk.copy(buffer, size, 0); 67 | size += chunk.length; 68 | callback(); 69 | }; 70 | }; 71 | 72 | util.inherits(WritableStreamBuffer, stream.Writable); 73 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "stream-buffers", 3 | "version": "3.0.3", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "stream-buffers", 9 | "version": "3.0.3", 10 | "license": "Unlicense", 11 | "devDependencies": { 12 | "chai": "^3.4.1", 13 | "eslint": "^8.38.0", 14 | "istanbul": "^0.4.0", 15 | "mocha": "^9.1.2" 16 | }, 17 | "engines": { 18 | "node": ">= 0.10.0" 19 | } 20 | }, 21 | "node_modules/@eslint-community/eslint-utils": { 22 | "version": "4.4.0", 23 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", 24 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 25 | "dev": true, 26 | "dependencies": { 27 | "eslint-visitor-keys": "^3.3.0" 28 | }, 29 | "engines": { 30 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 31 | }, 32 | "peerDependencies": { 33 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 34 | } 35 | }, 36 | "node_modules/@eslint-community/regexpp": { 37 | "version": "4.5.0", 38 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz", 39 | "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==", 40 | "dev": true, 41 | "engines": { 42 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 43 | } 44 | }, 45 | "node_modules/@eslint/eslintrc": { 46 | "version": "2.0.2", 47 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", 48 | "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", 49 | "dev": true, 50 | "dependencies": { 51 | "ajv": "^6.12.4", 52 | "debug": "^4.3.2", 53 | "espree": "^9.5.1", 54 | "globals": "^13.19.0", 55 | "ignore": "^5.2.0", 56 | "import-fresh": "^3.2.1", 57 | "js-yaml": "^4.1.0", 58 | "minimatch": "^3.1.2", 59 | "strip-json-comments": "^3.1.1" 60 | }, 61 | "engines": { 62 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 63 | }, 64 | "funding": { 65 | "url": "https://opencollective.com/eslint" 66 | } 67 | }, 68 | "node_modules/@eslint/eslintrc/node_modules/argparse": { 69 | "version": "2.0.1", 70 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 71 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 72 | "dev": true 73 | }, 74 | "node_modules/@eslint/eslintrc/node_modules/js-yaml": { 75 | "version": "4.1.0", 76 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 77 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 78 | "dev": true, 79 | "dependencies": { 80 | "argparse": "^2.0.1" 81 | }, 82 | "bin": { 83 | "js-yaml": "bin/js-yaml.js" 84 | } 85 | }, 86 | "node_modules/@eslint/js": { 87 | "version": "8.38.0", 88 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.38.0.tgz", 89 | "integrity": "sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==", 90 | "dev": true, 91 | "engines": { 92 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 93 | } 94 | }, 95 | "node_modules/@humanwhocodes/config-array": { 96 | "version": "0.11.8", 97 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", 98 | "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", 99 | "dev": true, 100 | "dependencies": { 101 | "@humanwhocodes/object-schema": "^1.2.1", 102 | "debug": "^4.1.1", 103 | "minimatch": "^3.0.5" 104 | }, 105 | "engines": { 106 | "node": ">=10.10.0" 107 | } 108 | }, 109 | "node_modules/@humanwhocodes/module-importer": { 110 | "version": "1.0.1", 111 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 112 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 113 | "dev": true, 114 | "engines": { 115 | "node": ">=12.22" 116 | }, 117 | "funding": { 118 | "type": "github", 119 | "url": "https://github.com/sponsors/nzakas" 120 | } 121 | }, 122 | "node_modules/@humanwhocodes/object-schema": { 123 | "version": "1.2.1", 124 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 125 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 126 | "dev": true 127 | }, 128 | "node_modules/@nodelib/fs.scandir": { 129 | "version": "2.1.5", 130 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 131 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 132 | "dev": true, 133 | "dependencies": { 134 | "@nodelib/fs.stat": "2.0.5", 135 | "run-parallel": "^1.1.9" 136 | }, 137 | "engines": { 138 | "node": ">= 8" 139 | } 140 | }, 141 | "node_modules/@nodelib/fs.stat": { 142 | "version": "2.0.5", 143 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 144 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 145 | "dev": true, 146 | "engines": { 147 | "node": ">= 8" 148 | } 149 | }, 150 | "node_modules/@nodelib/fs.walk": { 151 | "version": "1.2.8", 152 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 153 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 154 | "dev": true, 155 | "dependencies": { 156 | "@nodelib/fs.scandir": "2.1.5", 157 | "fastq": "^1.6.0" 158 | }, 159 | "engines": { 160 | "node": ">= 8" 161 | } 162 | }, 163 | "node_modules/@ungap/promise-all-settled": { 164 | "version": "1.1.2", 165 | "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", 166 | "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", 167 | "dev": true 168 | }, 169 | "node_modules/abbrev": { 170 | "version": "1.0.9", 171 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", 172 | "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", 173 | "dev": true 174 | }, 175 | "node_modules/acorn": { 176 | "version": "8.8.2", 177 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", 178 | "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", 179 | "dev": true, 180 | "bin": { 181 | "acorn": "bin/acorn" 182 | }, 183 | "engines": { 184 | "node": ">=0.4.0" 185 | } 186 | }, 187 | "node_modules/acorn-jsx": { 188 | "version": "5.3.2", 189 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 190 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 191 | "dev": true, 192 | "peerDependencies": { 193 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 194 | } 195 | }, 196 | "node_modules/ajv": { 197 | "version": "6.12.6", 198 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 199 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 200 | "dev": true, 201 | "dependencies": { 202 | "fast-deep-equal": "^3.1.1", 203 | "fast-json-stable-stringify": "^2.0.0", 204 | "json-schema-traverse": "^0.4.1", 205 | "uri-js": "^4.2.2" 206 | }, 207 | "funding": { 208 | "type": "github", 209 | "url": "https://github.com/sponsors/epoberezkin" 210 | } 211 | }, 212 | "node_modules/amdefine": { 213 | "version": "1.0.1", 214 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", 215 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", 216 | "dev": true, 217 | "optional": true, 218 | "engines": { 219 | "node": ">=0.4.2" 220 | } 221 | }, 222 | "node_modules/ansi-colors": { 223 | "version": "4.1.1", 224 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 225 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 226 | "dev": true, 227 | "engines": { 228 | "node": ">=6" 229 | } 230 | }, 231 | "node_modules/ansi-regex": { 232 | "version": "5.0.1", 233 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 234 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 235 | "dev": true, 236 | "engines": { 237 | "node": ">=8" 238 | } 239 | }, 240 | "node_modules/ansi-styles": { 241 | "version": "4.3.0", 242 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 243 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 244 | "dev": true, 245 | "dependencies": { 246 | "color-convert": "^2.0.1" 247 | }, 248 | "engines": { 249 | "node": ">=8" 250 | }, 251 | "funding": { 252 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 253 | } 254 | }, 255 | "node_modules/anymatch": { 256 | "version": "3.1.3", 257 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 258 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 259 | "dev": true, 260 | "dependencies": { 261 | "normalize-path": "^3.0.0", 262 | "picomatch": "^2.0.4" 263 | }, 264 | "engines": { 265 | "node": ">= 8" 266 | } 267 | }, 268 | "node_modules/argparse": { 269 | "version": "1.0.10", 270 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 271 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 272 | "dev": true, 273 | "dependencies": { 274 | "sprintf-js": "~1.0.2" 275 | } 276 | }, 277 | "node_modules/assertion-error": { 278 | "version": "1.1.0", 279 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", 280 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", 281 | "dev": true, 282 | "engines": { 283 | "node": "*" 284 | } 285 | }, 286 | "node_modules/async": { 287 | "version": "1.5.2", 288 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", 289 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", 290 | "dev": true 291 | }, 292 | "node_modules/balanced-match": { 293 | "version": "1.0.2", 294 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 295 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 296 | "dev": true 297 | }, 298 | "node_modules/binary-extensions": { 299 | "version": "2.2.0", 300 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 301 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 302 | "dev": true, 303 | "engines": { 304 | "node": ">=8" 305 | } 306 | }, 307 | "node_modules/brace-expansion": { 308 | "version": "1.1.11", 309 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 310 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 311 | "dev": true, 312 | "dependencies": { 313 | "balanced-match": "^1.0.0", 314 | "concat-map": "0.0.1" 315 | } 316 | }, 317 | "node_modules/braces": { 318 | "version": "3.0.3", 319 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 320 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 321 | "dev": true, 322 | "dependencies": { 323 | "fill-range": "^7.1.1" 324 | }, 325 | "engines": { 326 | "node": ">=8" 327 | } 328 | }, 329 | "node_modules/browser-stdout": { 330 | "version": "1.3.1", 331 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 332 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 333 | "dev": true 334 | }, 335 | "node_modules/callsites": { 336 | "version": "3.1.0", 337 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 338 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 339 | "dev": true, 340 | "engines": { 341 | "node": ">=6" 342 | } 343 | }, 344 | "node_modules/camelcase": { 345 | "version": "6.2.0", 346 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", 347 | "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", 348 | "dev": true, 349 | "engines": { 350 | "node": ">=10" 351 | }, 352 | "funding": { 353 | "url": "https://github.com/sponsors/sindresorhus" 354 | } 355 | }, 356 | "node_modules/chai": { 357 | "version": "3.5.0", 358 | "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", 359 | "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", 360 | "dev": true, 361 | "dependencies": { 362 | "assertion-error": "^1.0.1", 363 | "deep-eql": "^0.1.3", 364 | "type-detect": "^1.0.0" 365 | }, 366 | "engines": { 367 | "node": ">= 0.4.0" 368 | } 369 | }, 370 | "node_modules/chalk": { 371 | "version": "4.1.2", 372 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 373 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 374 | "dev": true, 375 | "dependencies": { 376 | "ansi-styles": "^4.1.0", 377 | "supports-color": "^7.1.0" 378 | }, 379 | "engines": { 380 | "node": ">=10" 381 | }, 382 | "funding": { 383 | "url": "https://github.com/chalk/chalk?sponsor=1" 384 | } 385 | }, 386 | "node_modules/chokidar": { 387 | "version": "3.5.3", 388 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 389 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 390 | "dev": true, 391 | "funding": [ 392 | { 393 | "type": "individual", 394 | "url": "https://paulmillr.com/funding/" 395 | } 396 | ], 397 | "dependencies": { 398 | "anymatch": "~3.1.2", 399 | "braces": "~3.0.2", 400 | "glob-parent": "~5.1.2", 401 | "is-binary-path": "~2.1.0", 402 | "is-glob": "~4.0.1", 403 | "normalize-path": "~3.0.0", 404 | "readdirp": "~3.6.0" 405 | }, 406 | "engines": { 407 | "node": ">= 8.10.0" 408 | }, 409 | "optionalDependencies": { 410 | "fsevents": "~2.3.2" 411 | } 412 | }, 413 | "node_modules/cliui": { 414 | "version": "7.0.4", 415 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 416 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 417 | "dev": true, 418 | "dependencies": { 419 | "string-width": "^4.2.0", 420 | "strip-ansi": "^6.0.0", 421 | "wrap-ansi": "^7.0.0" 422 | } 423 | }, 424 | "node_modules/cliui/node_modules/is-fullwidth-code-point": { 425 | "version": "3.0.0", 426 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 427 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 428 | "dev": true, 429 | "engines": { 430 | "node": ">=8" 431 | } 432 | }, 433 | "node_modules/cliui/node_modules/string-width": { 434 | "version": "4.2.3", 435 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 436 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 437 | "dev": true, 438 | "dependencies": { 439 | "emoji-regex": "^8.0.0", 440 | "is-fullwidth-code-point": "^3.0.0", 441 | "strip-ansi": "^6.0.1" 442 | }, 443 | "engines": { 444 | "node": ">=8" 445 | } 446 | }, 447 | "node_modules/color-convert": { 448 | "version": "2.0.1", 449 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 450 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 451 | "dev": true, 452 | "dependencies": { 453 | "color-name": "~1.1.4" 454 | }, 455 | "engines": { 456 | "node": ">=7.0.0" 457 | } 458 | }, 459 | "node_modules/color-name": { 460 | "version": "1.1.4", 461 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 462 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 463 | "dev": true 464 | }, 465 | "node_modules/concat-map": { 466 | "version": "0.0.1", 467 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 468 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 469 | "dev": true 470 | }, 471 | "node_modules/cross-spawn": { 472 | "version": "7.0.3", 473 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 474 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 475 | "dev": true, 476 | "dependencies": { 477 | "path-key": "^3.1.0", 478 | "shebang-command": "^2.0.0", 479 | "which": "^2.0.1" 480 | }, 481 | "engines": { 482 | "node": ">= 8" 483 | } 484 | }, 485 | "node_modules/cross-spawn/node_modules/which": { 486 | "version": "2.0.2", 487 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 488 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 489 | "dev": true, 490 | "dependencies": { 491 | "isexe": "^2.0.0" 492 | }, 493 | "bin": { 494 | "node-which": "bin/node-which" 495 | }, 496 | "engines": { 497 | "node": ">= 8" 498 | } 499 | }, 500 | "node_modules/debug": { 501 | "version": "4.3.4", 502 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 503 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 504 | "dev": true, 505 | "dependencies": { 506 | "ms": "2.1.2" 507 | }, 508 | "engines": { 509 | "node": ">=6.0" 510 | }, 511 | "peerDependenciesMeta": { 512 | "supports-color": { 513 | "optional": true 514 | } 515 | } 516 | }, 517 | "node_modules/debug/node_modules/ms": { 518 | "version": "2.1.2", 519 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 520 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 521 | "dev": true 522 | }, 523 | "node_modules/decamelize": { 524 | "version": "4.0.0", 525 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 526 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 527 | "dev": true, 528 | "engines": { 529 | "node": ">=10" 530 | }, 531 | "funding": { 532 | "url": "https://github.com/sponsors/sindresorhus" 533 | } 534 | }, 535 | "node_modules/deep-eql": { 536 | "version": "0.1.3", 537 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", 538 | "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", 539 | "dev": true, 540 | "dependencies": { 541 | "type-detect": "0.1.1" 542 | }, 543 | "engines": { 544 | "node": "*" 545 | } 546 | }, 547 | "node_modules/deep-eql/node_modules/type-detect": { 548 | "version": "0.1.1", 549 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", 550 | "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", 551 | "dev": true, 552 | "engines": { 553 | "node": "*" 554 | } 555 | }, 556 | "node_modules/deep-is": { 557 | "version": "0.1.4", 558 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 559 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 560 | "dev": true 561 | }, 562 | "node_modules/diff": { 563 | "version": "5.0.0", 564 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", 565 | "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", 566 | "dev": true, 567 | "engines": { 568 | "node": ">=0.3.1" 569 | } 570 | }, 571 | "node_modules/doctrine": { 572 | "version": "3.0.0", 573 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 574 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 575 | "dev": true, 576 | "dependencies": { 577 | "esutils": "^2.0.2" 578 | }, 579 | "engines": { 580 | "node": ">=6.0.0" 581 | } 582 | }, 583 | "node_modules/emoji-regex": { 584 | "version": "8.0.0", 585 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 586 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 587 | "dev": true 588 | }, 589 | "node_modules/escalade": { 590 | "version": "3.1.1", 591 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 592 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 593 | "dev": true, 594 | "engines": { 595 | "node": ">=6" 596 | } 597 | }, 598 | "node_modules/escape-string-regexp": { 599 | "version": "4.0.0", 600 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 601 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 602 | "dev": true, 603 | "engines": { 604 | "node": ">=10" 605 | }, 606 | "funding": { 607 | "url": "https://github.com/sponsors/sindresorhus" 608 | } 609 | }, 610 | "node_modules/escodegen": { 611 | "version": "1.8.1", 612 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", 613 | "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", 614 | "dev": true, 615 | "dependencies": { 616 | "esprima": "^2.7.1", 617 | "estraverse": "^1.9.1", 618 | "esutils": "^2.0.2", 619 | "optionator": "^0.8.1" 620 | }, 621 | "bin": { 622 | "escodegen": "bin/escodegen.js", 623 | "esgenerate": "bin/esgenerate.js" 624 | }, 625 | "engines": { 626 | "node": ">=0.12.0" 627 | }, 628 | "optionalDependencies": { 629 | "source-map": "~0.2.0" 630 | } 631 | }, 632 | "node_modules/escodegen/node_modules/estraverse": { 633 | "version": "1.9.3", 634 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", 635 | "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", 636 | "dev": true, 637 | "engines": { 638 | "node": ">=0.10.0" 639 | } 640 | }, 641 | "node_modules/eslint": { 642 | "version": "8.38.0", 643 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz", 644 | "integrity": "sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==", 645 | "dev": true, 646 | "dependencies": { 647 | "@eslint-community/eslint-utils": "^4.2.0", 648 | "@eslint-community/regexpp": "^4.4.0", 649 | "@eslint/eslintrc": "^2.0.2", 650 | "@eslint/js": "8.38.0", 651 | "@humanwhocodes/config-array": "^0.11.8", 652 | "@humanwhocodes/module-importer": "^1.0.1", 653 | "@nodelib/fs.walk": "^1.2.8", 654 | "ajv": "^6.10.0", 655 | "chalk": "^4.0.0", 656 | "cross-spawn": "^7.0.2", 657 | "debug": "^4.3.2", 658 | "doctrine": "^3.0.0", 659 | "escape-string-regexp": "^4.0.0", 660 | "eslint-scope": "^7.1.1", 661 | "eslint-visitor-keys": "^3.4.0", 662 | "espree": "^9.5.1", 663 | "esquery": "^1.4.2", 664 | "esutils": "^2.0.2", 665 | "fast-deep-equal": "^3.1.3", 666 | "file-entry-cache": "^6.0.1", 667 | "find-up": "^5.0.0", 668 | "glob-parent": "^6.0.2", 669 | "globals": "^13.19.0", 670 | "grapheme-splitter": "^1.0.4", 671 | "ignore": "^5.2.0", 672 | "import-fresh": "^3.0.0", 673 | "imurmurhash": "^0.1.4", 674 | "is-glob": "^4.0.0", 675 | "is-path-inside": "^3.0.3", 676 | "js-sdsl": "^4.1.4", 677 | "js-yaml": "^4.1.0", 678 | "json-stable-stringify-without-jsonify": "^1.0.1", 679 | "levn": "^0.4.1", 680 | "lodash.merge": "^4.6.2", 681 | "minimatch": "^3.1.2", 682 | "natural-compare": "^1.4.0", 683 | "optionator": "^0.9.1", 684 | "strip-ansi": "^6.0.1", 685 | "strip-json-comments": "^3.1.0", 686 | "text-table": "^0.2.0" 687 | }, 688 | "bin": { 689 | "eslint": "bin/eslint.js" 690 | }, 691 | "engines": { 692 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 693 | }, 694 | "funding": { 695 | "url": "https://opencollective.com/eslint" 696 | } 697 | }, 698 | "node_modules/eslint-scope": { 699 | "version": "7.2.0", 700 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", 701 | "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", 702 | "dev": true, 703 | "dependencies": { 704 | "esrecurse": "^4.3.0", 705 | "estraverse": "^5.2.0" 706 | }, 707 | "engines": { 708 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 709 | }, 710 | "funding": { 711 | "url": "https://opencollective.com/eslint" 712 | } 713 | }, 714 | "node_modules/eslint-visitor-keys": { 715 | "version": "3.4.0", 716 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", 717 | "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", 718 | "dev": true, 719 | "engines": { 720 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 721 | }, 722 | "funding": { 723 | "url": "https://opencollective.com/eslint" 724 | } 725 | }, 726 | "node_modules/eslint/node_modules/argparse": { 727 | "version": "2.0.1", 728 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 729 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 730 | "dev": true 731 | }, 732 | "node_modules/eslint/node_modules/glob-parent": { 733 | "version": "6.0.2", 734 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 735 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 736 | "dev": true, 737 | "dependencies": { 738 | "is-glob": "^4.0.3" 739 | }, 740 | "engines": { 741 | "node": ">=10.13.0" 742 | } 743 | }, 744 | "node_modules/eslint/node_modules/js-yaml": { 745 | "version": "4.1.0", 746 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 747 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 748 | "dev": true, 749 | "dependencies": { 750 | "argparse": "^2.0.1" 751 | }, 752 | "bin": { 753 | "js-yaml": "bin/js-yaml.js" 754 | } 755 | }, 756 | "node_modules/eslint/node_modules/levn": { 757 | "version": "0.4.1", 758 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 759 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 760 | "dev": true, 761 | "dependencies": { 762 | "prelude-ls": "^1.2.1", 763 | "type-check": "~0.4.0" 764 | }, 765 | "engines": { 766 | "node": ">= 0.8.0" 767 | } 768 | }, 769 | "node_modules/eslint/node_modules/optionator": { 770 | "version": "0.9.1", 771 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 772 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 773 | "dev": true, 774 | "dependencies": { 775 | "deep-is": "^0.1.3", 776 | "fast-levenshtein": "^2.0.6", 777 | "levn": "^0.4.1", 778 | "prelude-ls": "^1.2.1", 779 | "type-check": "^0.4.0", 780 | "word-wrap": "^1.2.3" 781 | }, 782 | "engines": { 783 | "node": ">= 0.8.0" 784 | } 785 | }, 786 | "node_modules/eslint/node_modules/prelude-ls": { 787 | "version": "1.2.1", 788 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 789 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 790 | "dev": true, 791 | "engines": { 792 | "node": ">= 0.8.0" 793 | } 794 | }, 795 | "node_modules/eslint/node_modules/type-check": { 796 | "version": "0.4.0", 797 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 798 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 799 | "dev": true, 800 | "dependencies": { 801 | "prelude-ls": "^1.2.1" 802 | }, 803 | "engines": { 804 | "node": ">= 0.8.0" 805 | } 806 | }, 807 | "node_modules/espree": { 808 | "version": "9.5.1", 809 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", 810 | "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", 811 | "dev": true, 812 | "dependencies": { 813 | "acorn": "^8.8.0", 814 | "acorn-jsx": "^5.3.2", 815 | "eslint-visitor-keys": "^3.4.0" 816 | }, 817 | "engines": { 818 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 819 | }, 820 | "funding": { 821 | "url": "https://opencollective.com/eslint" 822 | } 823 | }, 824 | "node_modules/esprima": { 825 | "version": "2.7.3", 826 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", 827 | "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", 828 | "dev": true, 829 | "bin": { 830 | "esparse": "bin/esparse.js", 831 | "esvalidate": "bin/esvalidate.js" 832 | }, 833 | "engines": { 834 | "node": ">=0.10.0" 835 | } 836 | }, 837 | "node_modules/esquery": { 838 | "version": "1.5.0", 839 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", 840 | "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", 841 | "dev": true, 842 | "dependencies": { 843 | "estraverse": "^5.1.0" 844 | }, 845 | "engines": { 846 | "node": ">=0.10" 847 | } 848 | }, 849 | "node_modules/esrecurse": { 850 | "version": "4.3.0", 851 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 852 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 853 | "dev": true, 854 | "dependencies": { 855 | "estraverse": "^5.2.0" 856 | }, 857 | "engines": { 858 | "node": ">=4.0" 859 | } 860 | }, 861 | "node_modules/estraverse": { 862 | "version": "5.3.0", 863 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 864 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 865 | "dev": true, 866 | "engines": { 867 | "node": ">=4.0" 868 | } 869 | }, 870 | "node_modules/esutils": { 871 | "version": "2.0.3", 872 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 873 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 874 | "dev": true, 875 | "engines": { 876 | "node": ">=0.10.0" 877 | } 878 | }, 879 | "node_modules/fast-deep-equal": { 880 | "version": "3.1.3", 881 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 882 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 883 | "dev": true 884 | }, 885 | "node_modules/fast-json-stable-stringify": { 886 | "version": "2.1.0", 887 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 888 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 889 | "dev": true 890 | }, 891 | "node_modules/fast-levenshtein": { 892 | "version": "2.0.6", 893 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 894 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 895 | "dev": true 896 | }, 897 | "node_modules/fastq": { 898 | "version": "1.15.0", 899 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 900 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 901 | "dev": true, 902 | "dependencies": { 903 | "reusify": "^1.0.4" 904 | } 905 | }, 906 | "node_modules/file-entry-cache": { 907 | "version": "6.0.1", 908 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 909 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 910 | "dev": true, 911 | "dependencies": { 912 | "flat-cache": "^3.0.4" 913 | }, 914 | "engines": { 915 | "node": "^10.12.0 || >=12.0.0" 916 | } 917 | }, 918 | "node_modules/fill-range": { 919 | "version": "7.1.1", 920 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 921 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 922 | "dev": true, 923 | "dependencies": { 924 | "to-regex-range": "^5.0.1" 925 | }, 926 | "engines": { 927 | "node": ">=8" 928 | } 929 | }, 930 | "node_modules/find-up": { 931 | "version": "5.0.0", 932 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 933 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 934 | "dev": true, 935 | "dependencies": { 936 | "locate-path": "^6.0.0", 937 | "path-exists": "^4.0.0" 938 | }, 939 | "engines": { 940 | "node": ">=10" 941 | }, 942 | "funding": { 943 | "url": "https://github.com/sponsors/sindresorhus" 944 | } 945 | }, 946 | "node_modules/flat": { 947 | "version": "5.0.2", 948 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 949 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 950 | "dev": true, 951 | "bin": { 952 | "flat": "cli.js" 953 | } 954 | }, 955 | "node_modules/flat-cache": { 956 | "version": "3.0.4", 957 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 958 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 959 | "dev": true, 960 | "dependencies": { 961 | "flatted": "^3.1.0", 962 | "rimraf": "^3.0.2" 963 | }, 964 | "engines": { 965 | "node": "^10.12.0 || >=12.0.0" 966 | } 967 | }, 968 | "node_modules/flatted": { 969 | "version": "3.2.7", 970 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", 971 | "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", 972 | "dev": true 973 | }, 974 | "node_modules/fs.realpath": { 975 | "version": "1.0.0", 976 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 977 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 978 | "dev": true 979 | }, 980 | "node_modules/fsevents": { 981 | "version": "2.3.2", 982 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 983 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 984 | "dev": true, 985 | "hasInstallScript": true, 986 | "optional": true, 987 | "os": [ 988 | "darwin" 989 | ], 990 | "engines": { 991 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 992 | } 993 | }, 994 | "node_modules/get-caller-file": { 995 | "version": "2.0.5", 996 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 997 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 998 | "dev": true, 999 | "engines": { 1000 | "node": "6.* || 8.* || >= 10.*" 1001 | } 1002 | }, 1003 | "node_modules/glob": { 1004 | "version": "7.2.0", 1005 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 1006 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 1007 | "dev": true, 1008 | "dependencies": { 1009 | "fs.realpath": "^1.0.0", 1010 | "inflight": "^1.0.4", 1011 | "inherits": "2", 1012 | "minimatch": "^3.0.4", 1013 | "once": "^1.3.0", 1014 | "path-is-absolute": "^1.0.0" 1015 | }, 1016 | "engines": { 1017 | "node": "*" 1018 | }, 1019 | "funding": { 1020 | "url": "https://github.com/sponsors/isaacs" 1021 | } 1022 | }, 1023 | "node_modules/glob-parent": { 1024 | "version": "5.1.2", 1025 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1026 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1027 | "dev": true, 1028 | "dependencies": { 1029 | "is-glob": "^4.0.1" 1030 | }, 1031 | "engines": { 1032 | "node": ">= 6" 1033 | } 1034 | }, 1035 | "node_modules/globals": { 1036 | "version": "13.20.0", 1037 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", 1038 | "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", 1039 | "dev": true, 1040 | "dependencies": { 1041 | "type-fest": "^0.20.2" 1042 | }, 1043 | "engines": { 1044 | "node": ">=8" 1045 | }, 1046 | "funding": { 1047 | "url": "https://github.com/sponsors/sindresorhus" 1048 | } 1049 | }, 1050 | "node_modules/grapheme-splitter": { 1051 | "version": "1.0.4", 1052 | "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", 1053 | "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", 1054 | "dev": true 1055 | }, 1056 | "node_modules/growl": { 1057 | "version": "1.10.5", 1058 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 1059 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 1060 | "dev": true, 1061 | "engines": { 1062 | "node": ">=4.x" 1063 | } 1064 | }, 1065 | "node_modules/handlebars": { 1066 | "version": "4.7.7", 1067 | "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", 1068 | "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", 1069 | "dev": true, 1070 | "dependencies": { 1071 | "minimist": "^1.2.5", 1072 | "neo-async": "^2.6.0", 1073 | "source-map": "^0.6.1", 1074 | "wordwrap": "^1.0.0" 1075 | }, 1076 | "bin": { 1077 | "handlebars": "bin/handlebars" 1078 | }, 1079 | "engines": { 1080 | "node": ">=0.4.7" 1081 | }, 1082 | "optionalDependencies": { 1083 | "uglify-js": "^3.1.4" 1084 | } 1085 | }, 1086 | "node_modules/handlebars/node_modules/source-map": { 1087 | "version": "0.6.1", 1088 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1089 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1090 | "dev": true, 1091 | "engines": { 1092 | "node": ">=0.10.0" 1093 | } 1094 | }, 1095 | "node_modules/has-flag": { 1096 | "version": "4.0.0", 1097 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1098 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1099 | "dev": true, 1100 | "engines": { 1101 | "node": ">=8" 1102 | } 1103 | }, 1104 | "node_modules/he": { 1105 | "version": "1.2.0", 1106 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 1107 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 1108 | "dev": true, 1109 | "bin": { 1110 | "he": "bin/he" 1111 | } 1112 | }, 1113 | "node_modules/ignore": { 1114 | "version": "5.2.4", 1115 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", 1116 | "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", 1117 | "dev": true, 1118 | "engines": { 1119 | "node": ">= 4" 1120 | } 1121 | }, 1122 | "node_modules/import-fresh": { 1123 | "version": "3.3.0", 1124 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1125 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1126 | "dev": true, 1127 | "dependencies": { 1128 | "parent-module": "^1.0.0", 1129 | "resolve-from": "^4.0.0" 1130 | }, 1131 | "engines": { 1132 | "node": ">=6" 1133 | }, 1134 | "funding": { 1135 | "url": "https://github.com/sponsors/sindresorhus" 1136 | } 1137 | }, 1138 | "node_modules/imurmurhash": { 1139 | "version": "0.1.4", 1140 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1141 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1142 | "dev": true, 1143 | "engines": { 1144 | "node": ">=0.8.19" 1145 | } 1146 | }, 1147 | "node_modules/inflight": { 1148 | "version": "1.0.6", 1149 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1150 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1151 | "dev": true, 1152 | "dependencies": { 1153 | "once": "^1.3.0", 1154 | "wrappy": "1" 1155 | } 1156 | }, 1157 | "node_modules/inherits": { 1158 | "version": "2.0.4", 1159 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1160 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1161 | "dev": true 1162 | }, 1163 | "node_modules/is-binary-path": { 1164 | "version": "2.1.0", 1165 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1166 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1167 | "dev": true, 1168 | "dependencies": { 1169 | "binary-extensions": "^2.0.0" 1170 | }, 1171 | "engines": { 1172 | "node": ">=8" 1173 | } 1174 | }, 1175 | "node_modules/is-extglob": { 1176 | "version": "2.1.1", 1177 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1178 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1179 | "dev": true, 1180 | "engines": { 1181 | "node": ">=0.10.0" 1182 | } 1183 | }, 1184 | "node_modules/is-glob": { 1185 | "version": "4.0.3", 1186 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1187 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1188 | "dev": true, 1189 | "dependencies": { 1190 | "is-extglob": "^2.1.1" 1191 | }, 1192 | "engines": { 1193 | "node": ">=0.10.0" 1194 | } 1195 | }, 1196 | "node_modules/is-number": { 1197 | "version": "7.0.0", 1198 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1199 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1200 | "dev": true, 1201 | "engines": { 1202 | "node": ">=0.12.0" 1203 | } 1204 | }, 1205 | "node_modules/is-path-inside": { 1206 | "version": "3.0.3", 1207 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 1208 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 1209 | "dev": true, 1210 | "engines": { 1211 | "node": ">=8" 1212 | } 1213 | }, 1214 | "node_modules/is-plain-obj": { 1215 | "version": "2.1.0", 1216 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 1217 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 1218 | "dev": true, 1219 | "engines": { 1220 | "node": ">=8" 1221 | } 1222 | }, 1223 | "node_modules/is-unicode-supported": { 1224 | "version": "0.1.0", 1225 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 1226 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 1227 | "dev": true, 1228 | "engines": { 1229 | "node": ">=10" 1230 | }, 1231 | "funding": { 1232 | "url": "https://github.com/sponsors/sindresorhus" 1233 | } 1234 | }, 1235 | "node_modules/isexe": { 1236 | "version": "2.0.0", 1237 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1238 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1239 | "dev": true 1240 | }, 1241 | "node_modules/istanbul": { 1242 | "version": "0.4.5", 1243 | "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", 1244 | "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", 1245 | "deprecated": "This module is no longer maintained, try this instead:\n npm i nyc\nVisit https://istanbul.js.org/integrations for other alternatives.", 1246 | "dev": true, 1247 | "dependencies": { 1248 | "abbrev": "1.0.x", 1249 | "async": "1.x", 1250 | "escodegen": "1.8.x", 1251 | "esprima": "2.7.x", 1252 | "glob": "^5.0.15", 1253 | "handlebars": "^4.0.1", 1254 | "js-yaml": "3.x", 1255 | "mkdirp": "0.5.x", 1256 | "nopt": "3.x", 1257 | "once": "1.x", 1258 | "resolve": "1.1.x", 1259 | "supports-color": "^3.1.0", 1260 | "which": "^1.1.1", 1261 | "wordwrap": "^1.0.0" 1262 | }, 1263 | "bin": { 1264 | "istanbul": "lib/cli.js" 1265 | } 1266 | }, 1267 | "node_modules/istanbul/node_modules/glob": { 1268 | "version": "5.0.15", 1269 | "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", 1270 | "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", 1271 | "dev": true, 1272 | "dependencies": { 1273 | "inflight": "^1.0.4", 1274 | "inherits": "2", 1275 | "minimatch": "2 || 3", 1276 | "once": "^1.3.0", 1277 | "path-is-absolute": "^1.0.0" 1278 | }, 1279 | "engines": { 1280 | "node": "*" 1281 | } 1282 | }, 1283 | "node_modules/istanbul/node_modules/has-flag": { 1284 | "version": "1.0.0", 1285 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", 1286 | "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", 1287 | "dev": true, 1288 | "engines": { 1289 | "node": ">=0.10.0" 1290 | } 1291 | }, 1292 | "node_modules/istanbul/node_modules/supports-color": { 1293 | "version": "3.2.3", 1294 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", 1295 | "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", 1296 | "dev": true, 1297 | "dependencies": { 1298 | "has-flag": "^1.0.0" 1299 | }, 1300 | "engines": { 1301 | "node": ">=0.8.0" 1302 | } 1303 | }, 1304 | "node_modules/js-sdsl": { 1305 | "version": "4.4.0", 1306 | "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", 1307 | "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", 1308 | "dev": true, 1309 | "funding": { 1310 | "type": "opencollective", 1311 | "url": "https://opencollective.com/js-sdsl" 1312 | } 1313 | }, 1314 | "node_modules/js-yaml": { 1315 | "version": "3.14.1", 1316 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 1317 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 1318 | "dev": true, 1319 | "dependencies": { 1320 | "argparse": "^1.0.7", 1321 | "esprima": "^4.0.0" 1322 | }, 1323 | "bin": { 1324 | "js-yaml": "bin/js-yaml.js" 1325 | } 1326 | }, 1327 | "node_modules/js-yaml/node_modules/esprima": { 1328 | "version": "4.0.1", 1329 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 1330 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 1331 | "dev": true, 1332 | "bin": { 1333 | "esparse": "bin/esparse.js", 1334 | "esvalidate": "bin/esvalidate.js" 1335 | }, 1336 | "engines": { 1337 | "node": ">=4" 1338 | } 1339 | }, 1340 | "node_modules/json-schema-traverse": { 1341 | "version": "0.4.1", 1342 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1343 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1344 | "dev": true 1345 | }, 1346 | "node_modules/json-stable-stringify-without-jsonify": { 1347 | "version": "1.0.1", 1348 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1349 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 1350 | "dev": true 1351 | }, 1352 | "node_modules/levn": { 1353 | "version": "0.3.0", 1354 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 1355 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 1356 | "dev": true, 1357 | "dependencies": { 1358 | "prelude-ls": "~1.1.2", 1359 | "type-check": "~0.3.2" 1360 | }, 1361 | "engines": { 1362 | "node": ">= 0.8.0" 1363 | } 1364 | }, 1365 | "node_modules/locate-path": { 1366 | "version": "6.0.0", 1367 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 1368 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 1369 | "dev": true, 1370 | "dependencies": { 1371 | "p-locate": "^5.0.0" 1372 | }, 1373 | "engines": { 1374 | "node": ">=10" 1375 | }, 1376 | "funding": { 1377 | "url": "https://github.com/sponsors/sindresorhus" 1378 | } 1379 | }, 1380 | "node_modules/lodash.merge": { 1381 | "version": "4.6.2", 1382 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 1383 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 1384 | "dev": true 1385 | }, 1386 | "node_modules/log-symbols": { 1387 | "version": "4.1.0", 1388 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 1389 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 1390 | "dev": true, 1391 | "dependencies": { 1392 | "chalk": "^4.1.0", 1393 | "is-unicode-supported": "^0.1.0" 1394 | }, 1395 | "engines": { 1396 | "node": ">=10" 1397 | }, 1398 | "funding": { 1399 | "url": "https://github.com/sponsors/sindresorhus" 1400 | } 1401 | }, 1402 | "node_modules/minimatch": { 1403 | "version": "3.1.2", 1404 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1405 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1406 | "dev": true, 1407 | "dependencies": { 1408 | "brace-expansion": "^1.1.7" 1409 | }, 1410 | "engines": { 1411 | "node": "*" 1412 | } 1413 | }, 1414 | "node_modules/minimist": { 1415 | "version": "1.2.6", 1416 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 1417 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", 1418 | "dev": true 1419 | }, 1420 | "node_modules/mkdirp": { 1421 | "version": "0.5.5", 1422 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 1423 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 1424 | "dev": true, 1425 | "dependencies": { 1426 | "minimist": "^1.2.5" 1427 | }, 1428 | "bin": { 1429 | "mkdirp": "bin/cmd.js" 1430 | } 1431 | }, 1432 | "node_modules/mocha": { 1433 | "version": "9.2.2", 1434 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", 1435 | "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", 1436 | "dev": true, 1437 | "dependencies": { 1438 | "@ungap/promise-all-settled": "1.1.2", 1439 | "ansi-colors": "4.1.1", 1440 | "browser-stdout": "1.3.1", 1441 | "chokidar": "3.5.3", 1442 | "debug": "4.3.3", 1443 | "diff": "5.0.0", 1444 | "escape-string-regexp": "4.0.0", 1445 | "find-up": "5.0.0", 1446 | "glob": "7.2.0", 1447 | "growl": "1.10.5", 1448 | "he": "1.2.0", 1449 | "js-yaml": "4.1.0", 1450 | "log-symbols": "4.1.0", 1451 | "minimatch": "4.2.1", 1452 | "ms": "2.1.3", 1453 | "nanoid": "3.3.1", 1454 | "serialize-javascript": "6.0.0", 1455 | "strip-json-comments": "3.1.1", 1456 | "supports-color": "8.1.1", 1457 | "which": "2.0.2", 1458 | "workerpool": "6.2.0", 1459 | "yargs": "16.2.0", 1460 | "yargs-parser": "20.2.4", 1461 | "yargs-unparser": "2.0.0" 1462 | }, 1463 | "bin": { 1464 | "_mocha": "bin/_mocha", 1465 | "mocha": "bin/mocha" 1466 | }, 1467 | "engines": { 1468 | "node": ">= 12.0.0" 1469 | }, 1470 | "funding": { 1471 | "type": "opencollective", 1472 | "url": "https://opencollective.com/mochajs" 1473 | } 1474 | }, 1475 | "node_modules/mocha/node_modules/argparse": { 1476 | "version": "2.0.1", 1477 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1478 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1479 | "dev": true 1480 | }, 1481 | "node_modules/mocha/node_modules/debug": { 1482 | "version": "4.3.3", 1483 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 1484 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 1485 | "dev": true, 1486 | "dependencies": { 1487 | "ms": "2.1.2" 1488 | }, 1489 | "engines": { 1490 | "node": ">=6.0" 1491 | }, 1492 | "peerDependenciesMeta": { 1493 | "supports-color": { 1494 | "optional": true 1495 | } 1496 | } 1497 | }, 1498 | "node_modules/mocha/node_modules/debug/node_modules/ms": { 1499 | "version": "2.1.2", 1500 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1501 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1502 | "dev": true 1503 | }, 1504 | "node_modules/mocha/node_modules/js-yaml": { 1505 | "version": "4.1.0", 1506 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1507 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1508 | "dev": true, 1509 | "dependencies": { 1510 | "argparse": "^2.0.1" 1511 | }, 1512 | "bin": { 1513 | "js-yaml": "bin/js-yaml.js" 1514 | } 1515 | }, 1516 | "node_modules/mocha/node_modules/minimatch": { 1517 | "version": "4.2.1", 1518 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", 1519 | "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", 1520 | "dev": true, 1521 | "dependencies": { 1522 | "brace-expansion": "^1.1.7" 1523 | }, 1524 | "engines": { 1525 | "node": ">=10" 1526 | } 1527 | }, 1528 | "node_modules/mocha/node_modules/supports-color": { 1529 | "version": "8.1.1", 1530 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 1531 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 1532 | "dev": true, 1533 | "dependencies": { 1534 | "has-flag": "^4.0.0" 1535 | }, 1536 | "engines": { 1537 | "node": ">=10" 1538 | }, 1539 | "funding": { 1540 | "url": "https://github.com/chalk/supports-color?sponsor=1" 1541 | } 1542 | }, 1543 | "node_modules/mocha/node_modules/which": { 1544 | "version": "2.0.2", 1545 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1546 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1547 | "dev": true, 1548 | "dependencies": { 1549 | "isexe": "^2.0.0" 1550 | }, 1551 | "bin": { 1552 | "node-which": "bin/node-which" 1553 | }, 1554 | "engines": { 1555 | "node": ">= 8" 1556 | } 1557 | }, 1558 | "node_modules/ms": { 1559 | "version": "2.1.3", 1560 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1561 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1562 | "dev": true 1563 | }, 1564 | "node_modules/nanoid": { 1565 | "version": "3.3.1", 1566 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", 1567 | "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", 1568 | "dev": true, 1569 | "bin": { 1570 | "nanoid": "bin/nanoid.cjs" 1571 | }, 1572 | "engines": { 1573 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1574 | } 1575 | }, 1576 | "node_modules/natural-compare": { 1577 | "version": "1.4.0", 1578 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1579 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1580 | "dev": true 1581 | }, 1582 | "node_modules/neo-async": { 1583 | "version": "2.6.2", 1584 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", 1585 | "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", 1586 | "dev": true 1587 | }, 1588 | "node_modules/nopt": { 1589 | "version": "3.0.6", 1590 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", 1591 | "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", 1592 | "dev": true, 1593 | "dependencies": { 1594 | "abbrev": "1" 1595 | }, 1596 | "bin": { 1597 | "nopt": "bin/nopt.js" 1598 | } 1599 | }, 1600 | "node_modules/normalize-path": { 1601 | "version": "3.0.0", 1602 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1603 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1604 | "dev": true, 1605 | "engines": { 1606 | "node": ">=0.10.0" 1607 | } 1608 | }, 1609 | "node_modules/once": { 1610 | "version": "1.4.0", 1611 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1612 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1613 | "dev": true, 1614 | "dependencies": { 1615 | "wrappy": "1" 1616 | } 1617 | }, 1618 | "node_modules/optionator": { 1619 | "version": "0.8.3", 1620 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", 1621 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", 1622 | "dev": true, 1623 | "dependencies": { 1624 | "deep-is": "~0.1.3", 1625 | "fast-levenshtein": "~2.0.6", 1626 | "levn": "~0.3.0", 1627 | "prelude-ls": "~1.1.2", 1628 | "type-check": "~0.3.2", 1629 | "word-wrap": "~1.2.3" 1630 | }, 1631 | "engines": { 1632 | "node": ">= 0.8.0" 1633 | } 1634 | }, 1635 | "node_modules/p-limit": { 1636 | "version": "3.1.0", 1637 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 1638 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1639 | "dev": true, 1640 | "dependencies": { 1641 | "yocto-queue": "^0.1.0" 1642 | }, 1643 | "engines": { 1644 | "node": ">=10" 1645 | }, 1646 | "funding": { 1647 | "url": "https://github.com/sponsors/sindresorhus" 1648 | } 1649 | }, 1650 | "node_modules/p-locate": { 1651 | "version": "5.0.0", 1652 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 1653 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1654 | "dev": true, 1655 | "dependencies": { 1656 | "p-limit": "^3.0.2" 1657 | }, 1658 | "engines": { 1659 | "node": ">=10" 1660 | }, 1661 | "funding": { 1662 | "url": "https://github.com/sponsors/sindresorhus" 1663 | } 1664 | }, 1665 | "node_modules/parent-module": { 1666 | "version": "1.0.1", 1667 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1668 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1669 | "dev": true, 1670 | "dependencies": { 1671 | "callsites": "^3.0.0" 1672 | }, 1673 | "engines": { 1674 | "node": ">=6" 1675 | } 1676 | }, 1677 | "node_modules/path-exists": { 1678 | "version": "4.0.0", 1679 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1680 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1681 | "dev": true, 1682 | "engines": { 1683 | "node": ">=8" 1684 | } 1685 | }, 1686 | "node_modules/path-is-absolute": { 1687 | "version": "1.0.1", 1688 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1689 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1690 | "dev": true, 1691 | "engines": { 1692 | "node": ">=0.10.0" 1693 | } 1694 | }, 1695 | "node_modules/path-key": { 1696 | "version": "3.1.1", 1697 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1698 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1699 | "dev": true, 1700 | "engines": { 1701 | "node": ">=8" 1702 | } 1703 | }, 1704 | "node_modules/picomatch": { 1705 | "version": "2.3.1", 1706 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1707 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1708 | "dev": true, 1709 | "engines": { 1710 | "node": ">=8.6" 1711 | }, 1712 | "funding": { 1713 | "url": "https://github.com/sponsors/jonschlinkert" 1714 | } 1715 | }, 1716 | "node_modules/prelude-ls": { 1717 | "version": "1.1.2", 1718 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 1719 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 1720 | "dev": true, 1721 | "engines": { 1722 | "node": ">= 0.8.0" 1723 | } 1724 | }, 1725 | "node_modules/punycode": { 1726 | "version": "2.3.0", 1727 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 1728 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 1729 | "dev": true, 1730 | "engines": { 1731 | "node": ">=6" 1732 | } 1733 | }, 1734 | "node_modules/queue-microtask": { 1735 | "version": "1.2.3", 1736 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1737 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1738 | "dev": true, 1739 | "funding": [ 1740 | { 1741 | "type": "github", 1742 | "url": "https://github.com/sponsors/feross" 1743 | }, 1744 | { 1745 | "type": "patreon", 1746 | "url": "https://www.patreon.com/feross" 1747 | }, 1748 | { 1749 | "type": "consulting", 1750 | "url": "https://feross.org/support" 1751 | } 1752 | ] 1753 | }, 1754 | "node_modules/randombytes": { 1755 | "version": "2.1.0", 1756 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1757 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1758 | "dev": true, 1759 | "dependencies": { 1760 | "safe-buffer": "^5.1.0" 1761 | } 1762 | }, 1763 | "node_modules/readdirp": { 1764 | "version": "3.6.0", 1765 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1766 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1767 | "dev": true, 1768 | "dependencies": { 1769 | "picomatch": "^2.2.1" 1770 | }, 1771 | "engines": { 1772 | "node": ">=8.10.0" 1773 | } 1774 | }, 1775 | "node_modules/require-directory": { 1776 | "version": "2.1.1", 1777 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1778 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 1779 | "dev": true, 1780 | "engines": { 1781 | "node": ">=0.10.0" 1782 | } 1783 | }, 1784 | "node_modules/resolve": { 1785 | "version": "1.1.7", 1786 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", 1787 | "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", 1788 | "dev": true 1789 | }, 1790 | "node_modules/resolve-from": { 1791 | "version": "4.0.0", 1792 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1793 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1794 | "dev": true, 1795 | "engines": { 1796 | "node": ">=4" 1797 | } 1798 | }, 1799 | "node_modules/reusify": { 1800 | "version": "1.0.4", 1801 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1802 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1803 | "dev": true, 1804 | "engines": { 1805 | "iojs": ">=1.0.0", 1806 | "node": ">=0.10.0" 1807 | } 1808 | }, 1809 | "node_modules/rimraf": { 1810 | "version": "3.0.2", 1811 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1812 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1813 | "dev": true, 1814 | "dependencies": { 1815 | "glob": "^7.1.3" 1816 | }, 1817 | "bin": { 1818 | "rimraf": "bin.js" 1819 | }, 1820 | "funding": { 1821 | "url": "https://github.com/sponsors/isaacs" 1822 | } 1823 | }, 1824 | "node_modules/run-parallel": { 1825 | "version": "1.2.0", 1826 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1827 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1828 | "dev": true, 1829 | "funding": [ 1830 | { 1831 | "type": "github", 1832 | "url": "https://github.com/sponsors/feross" 1833 | }, 1834 | { 1835 | "type": "patreon", 1836 | "url": "https://www.patreon.com/feross" 1837 | }, 1838 | { 1839 | "type": "consulting", 1840 | "url": "https://feross.org/support" 1841 | } 1842 | ], 1843 | "dependencies": { 1844 | "queue-microtask": "^1.2.2" 1845 | } 1846 | }, 1847 | "node_modules/safe-buffer": { 1848 | "version": "5.1.2", 1849 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1850 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1851 | "dev": true 1852 | }, 1853 | "node_modules/serialize-javascript": { 1854 | "version": "6.0.0", 1855 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", 1856 | "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", 1857 | "dev": true, 1858 | "dependencies": { 1859 | "randombytes": "^2.1.0" 1860 | } 1861 | }, 1862 | "node_modules/shebang-command": { 1863 | "version": "2.0.0", 1864 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1865 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1866 | "dev": true, 1867 | "dependencies": { 1868 | "shebang-regex": "^3.0.0" 1869 | }, 1870 | "engines": { 1871 | "node": ">=8" 1872 | } 1873 | }, 1874 | "node_modules/shebang-regex": { 1875 | "version": "3.0.0", 1876 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1877 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1878 | "dev": true, 1879 | "engines": { 1880 | "node": ">=8" 1881 | } 1882 | }, 1883 | "node_modules/source-map": { 1884 | "version": "0.2.0", 1885 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", 1886 | "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", 1887 | "dev": true, 1888 | "optional": true, 1889 | "dependencies": { 1890 | "amdefine": ">=0.0.4" 1891 | }, 1892 | "engines": { 1893 | "node": ">=0.8.0" 1894 | } 1895 | }, 1896 | "node_modules/sprintf-js": { 1897 | "version": "1.0.3", 1898 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1899 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1900 | "dev": true 1901 | }, 1902 | "node_modules/strip-ansi": { 1903 | "version": "6.0.1", 1904 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1905 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1906 | "dev": true, 1907 | "dependencies": { 1908 | "ansi-regex": "^5.0.1" 1909 | }, 1910 | "engines": { 1911 | "node": ">=8" 1912 | } 1913 | }, 1914 | "node_modules/strip-json-comments": { 1915 | "version": "3.1.1", 1916 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1917 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1918 | "dev": true, 1919 | "engines": { 1920 | "node": ">=8" 1921 | }, 1922 | "funding": { 1923 | "url": "https://github.com/sponsors/sindresorhus" 1924 | } 1925 | }, 1926 | "node_modules/supports-color": { 1927 | "version": "7.2.0", 1928 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1929 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1930 | "dev": true, 1931 | "dependencies": { 1932 | "has-flag": "^4.0.0" 1933 | }, 1934 | "engines": { 1935 | "node": ">=8" 1936 | } 1937 | }, 1938 | "node_modules/text-table": { 1939 | "version": "0.2.0", 1940 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1941 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 1942 | "dev": true 1943 | }, 1944 | "node_modules/to-regex-range": { 1945 | "version": "5.0.1", 1946 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1947 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1948 | "dev": true, 1949 | "dependencies": { 1950 | "is-number": "^7.0.0" 1951 | }, 1952 | "engines": { 1953 | "node": ">=8.0" 1954 | } 1955 | }, 1956 | "node_modules/type-check": { 1957 | "version": "0.3.2", 1958 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 1959 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 1960 | "dev": true, 1961 | "dependencies": { 1962 | "prelude-ls": "~1.1.2" 1963 | }, 1964 | "engines": { 1965 | "node": ">= 0.8.0" 1966 | } 1967 | }, 1968 | "node_modules/type-detect": { 1969 | "version": "1.0.0", 1970 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", 1971 | "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", 1972 | "dev": true, 1973 | "engines": { 1974 | "node": "*" 1975 | } 1976 | }, 1977 | "node_modules/type-fest": { 1978 | "version": "0.20.2", 1979 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 1980 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 1981 | "dev": true, 1982 | "engines": { 1983 | "node": ">=10" 1984 | }, 1985 | "funding": { 1986 | "url": "https://github.com/sponsors/sindresorhus" 1987 | } 1988 | }, 1989 | "node_modules/uglify-js": { 1990 | "version": "3.14.2", 1991 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.2.tgz", 1992 | "integrity": "sha512-rtPMlmcO4agTUfz10CbgJ1k6UAoXM2gWb3GoMPPZB/+/Ackf8lNWk11K4rYi2D0apgoFRLtQOZhb+/iGNJq26A==", 1993 | "dev": true, 1994 | "optional": true, 1995 | "bin": { 1996 | "uglifyjs": "bin/uglifyjs" 1997 | }, 1998 | "engines": { 1999 | "node": ">=0.8.0" 2000 | } 2001 | }, 2002 | "node_modules/uri-js": { 2003 | "version": "4.4.1", 2004 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 2005 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 2006 | "dev": true, 2007 | "dependencies": { 2008 | "punycode": "^2.1.0" 2009 | } 2010 | }, 2011 | "node_modules/which": { 2012 | "version": "1.3.1", 2013 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 2014 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 2015 | "dev": true, 2016 | "dependencies": { 2017 | "isexe": "^2.0.0" 2018 | }, 2019 | "bin": { 2020 | "which": "bin/which" 2021 | } 2022 | }, 2023 | "node_modules/word-wrap": { 2024 | "version": "1.2.4", 2025 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", 2026 | "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", 2027 | "dev": true, 2028 | "engines": { 2029 | "node": ">=0.10.0" 2030 | } 2031 | }, 2032 | "node_modules/wordwrap": { 2033 | "version": "1.0.0", 2034 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 2035 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 2036 | "dev": true 2037 | }, 2038 | "node_modules/workerpool": { 2039 | "version": "6.2.0", 2040 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", 2041 | "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", 2042 | "dev": true 2043 | }, 2044 | "node_modules/wrap-ansi": { 2045 | "version": "7.0.0", 2046 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2047 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2048 | "dev": true, 2049 | "dependencies": { 2050 | "ansi-styles": "^4.0.0", 2051 | "string-width": "^4.1.0", 2052 | "strip-ansi": "^6.0.0" 2053 | }, 2054 | "engines": { 2055 | "node": ">=10" 2056 | }, 2057 | "funding": { 2058 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2059 | } 2060 | }, 2061 | "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { 2062 | "version": "3.0.0", 2063 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2064 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 2065 | "dev": true, 2066 | "engines": { 2067 | "node": ">=8" 2068 | } 2069 | }, 2070 | "node_modules/wrap-ansi/node_modules/string-width": { 2071 | "version": "4.2.3", 2072 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2073 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2074 | "dev": true, 2075 | "dependencies": { 2076 | "emoji-regex": "^8.0.0", 2077 | "is-fullwidth-code-point": "^3.0.0", 2078 | "strip-ansi": "^6.0.1" 2079 | }, 2080 | "engines": { 2081 | "node": ">=8" 2082 | } 2083 | }, 2084 | "node_modules/wrappy": { 2085 | "version": "1.0.2", 2086 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2087 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2088 | "dev": true 2089 | }, 2090 | "node_modules/y18n": { 2091 | "version": "5.0.8", 2092 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2093 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 2094 | "dev": true, 2095 | "engines": { 2096 | "node": ">=10" 2097 | } 2098 | }, 2099 | "node_modules/yargs": { 2100 | "version": "16.2.0", 2101 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 2102 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 2103 | "dev": true, 2104 | "dependencies": { 2105 | "cliui": "^7.0.2", 2106 | "escalade": "^3.1.1", 2107 | "get-caller-file": "^2.0.5", 2108 | "require-directory": "^2.1.1", 2109 | "string-width": "^4.2.0", 2110 | "y18n": "^5.0.5", 2111 | "yargs-parser": "^20.2.2" 2112 | }, 2113 | "engines": { 2114 | "node": ">=10" 2115 | } 2116 | }, 2117 | "node_modules/yargs-parser": { 2118 | "version": "20.2.4", 2119 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", 2120 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", 2121 | "dev": true, 2122 | "engines": { 2123 | "node": ">=10" 2124 | } 2125 | }, 2126 | "node_modules/yargs-unparser": { 2127 | "version": "2.0.0", 2128 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 2129 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 2130 | "dev": true, 2131 | "dependencies": { 2132 | "camelcase": "^6.0.0", 2133 | "decamelize": "^4.0.0", 2134 | "flat": "^5.0.2", 2135 | "is-plain-obj": "^2.1.0" 2136 | }, 2137 | "engines": { 2138 | "node": ">=10" 2139 | } 2140 | }, 2141 | "node_modules/yargs/node_modules/is-fullwidth-code-point": { 2142 | "version": "3.0.0", 2143 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2144 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 2145 | "dev": true, 2146 | "engines": { 2147 | "node": ">=8" 2148 | } 2149 | }, 2150 | "node_modules/yargs/node_modules/string-width": { 2151 | "version": "4.2.3", 2152 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2153 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2154 | "dev": true, 2155 | "dependencies": { 2156 | "emoji-regex": "^8.0.0", 2157 | "is-fullwidth-code-point": "^3.0.0", 2158 | "strip-ansi": "^6.0.1" 2159 | }, 2160 | "engines": { 2161 | "node": ">=8" 2162 | } 2163 | }, 2164 | "node_modules/yocto-queue": { 2165 | "version": "0.1.0", 2166 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 2167 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 2168 | "dev": true, 2169 | "engines": { 2170 | "node": ">=10" 2171 | }, 2172 | "funding": { 2173 | "url": "https://github.com/sponsors/sindresorhus" 2174 | } 2175 | } 2176 | }, 2177 | "dependencies": { 2178 | "@eslint-community/eslint-utils": { 2179 | "version": "4.4.0", 2180 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", 2181 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 2182 | "dev": true, 2183 | "requires": { 2184 | "eslint-visitor-keys": "^3.3.0" 2185 | } 2186 | }, 2187 | "@eslint-community/regexpp": { 2188 | "version": "4.5.0", 2189 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz", 2190 | "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==", 2191 | "dev": true 2192 | }, 2193 | "@eslint/eslintrc": { 2194 | "version": "2.0.2", 2195 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", 2196 | "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", 2197 | "dev": true, 2198 | "requires": { 2199 | "ajv": "^6.12.4", 2200 | "debug": "^4.3.2", 2201 | "espree": "^9.5.1", 2202 | "globals": "^13.19.0", 2203 | "ignore": "^5.2.0", 2204 | "import-fresh": "^3.2.1", 2205 | "js-yaml": "^4.1.0", 2206 | "minimatch": "^3.1.2", 2207 | "strip-json-comments": "^3.1.1" 2208 | }, 2209 | "dependencies": { 2210 | "argparse": { 2211 | "version": "2.0.1", 2212 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 2213 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 2214 | "dev": true 2215 | }, 2216 | "js-yaml": { 2217 | "version": "4.1.0", 2218 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2219 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2220 | "dev": true, 2221 | "requires": { 2222 | "argparse": "^2.0.1" 2223 | } 2224 | } 2225 | } 2226 | }, 2227 | "@eslint/js": { 2228 | "version": "8.38.0", 2229 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.38.0.tgz", 2230 | "integrity": "sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==", 2231 | "dev": true 2232 | }, 2233 | "@humanwhocodes/config-array": { 2234 | "version": "0.11.8", 2235 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", 2236 | "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", 2237 | "dev": true, 2238 | "requires": { 2239 | "@humanwhocodes/object-schema": "^1.2.1", 2240 | "debug": "^4.1.1", 2241 | "minimatch": "^3.0.5" 2242 | } 2243 | }, 2244 | "@humanwhocodes/module-importer": { 2245 | "version": "1.0.1", 2246 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 2247 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 2248 | "dev": true 2249 | }, 2250 | "@humanwhocodes/object-schema": { 2251 | "version": "1.2.1", 2252 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 2253 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 2254 | "dev": true 2255 | }, 2256 | "@nodelib/fs.scandir": { 2257 | "version": "2.1.5", 2258 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 2259 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 2260 | "dev": true, 2261 | "requires": { 2262 | "@nodelib/fs.stat": "2.0.5", 2263 | "run-parallel": "^1.1.9" 2264 | } 2265 | }, 2266 | "@nodelib/fs.stat": { 2267 | "version": "2.0.5", 2268 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 2269 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 2270 | "dev": true 2271 | }, 2272 | "@nodelib/fs.walk": { 2273 | "version": "1.2.8", 2274 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 2275 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 2276 | "dev": true, 2277 | "requires": { 2278 | "@nodelib/fs.scandir": "2.1.5", 2279 | "fastq": "^1.6.0" 2280 | } 2281 | }, 2282 | "@ungap/promise-all-settled": { 2283 | "version": "1.1.2", 2284 | "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", 2285 | "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", 2286 | "dev": true 2287 | }, 2288 | "abbrev": { 2289 | "version": "1.0.9", 2290 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", 2291 | "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", 2292 | "dev": true 2293 | }, 2294 | "acorn": { 2295 | "version": "8.8.2", 2296 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", 2297 | "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", 2298 | "dev": true 2299 | }, 2300 | "acorn-jsx": { 2301 | "version": "5.3.2", 2302 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 2303 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 2304 | "dev": true, 2305 | "requires": {} 2306 | }, 2307 | "ajv": { 2308 | "version": "6.12.6", 2309 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 2310 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 2311 | "dev": true, 2312 | "requires": { 2313 | "fast-deep-equal": "^3.1.1", 2314 | "fast-json-stable-stringify": "^2.0.0", 2315 | "json-schema-traverse": "^0.4.1", 2316 | "uri-js": "^4.2.2" 2317 | } 2318 | }, 2319 | "amdefine": { 2320 | "version": "1.0.1", 2321 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", 2322 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", 2323 | "dev": true, 2324 | "optional": true 2325 | }, 2326 | "ansi-colors": { 2327 | "version": "4.1.1", 2328 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 2329 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 2330 | "dev": true 2331 | }, 2332 | "ansi-regex": { 2333 | "version": "5.0.1", 2334 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2335 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2336 | "dev": true 2337 | }, 2338 | "ansi-styles": { 2339 | "version": "4.3.0", 2340 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2341 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2342 | "dev": true, 2343 | "requires": { 2344 | "color-convert": "^2.0.1" 2345 | } 2346 | }, 2347 | "anymatch": { 2348 | "version": "3.1.3", 2349 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 2350 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 2351 | "dev": true, 2352 | "requires": { 2353 | "normalize-path": "^3.0.0", 2354 | "picomatch": "^2.0.4" 2355 | } 2356 | }, 2357 | "argparse": { 2358 | "version": "1.0.10", 2359 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 2360 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 2361 | "dev": true, 2362 | "requires": { 2363 | "sprintf-js": "~1.0.2" 2364 | } 2365 | }, 2366 | "assertion-error": { 2367 | "version": "1.1.0", 2368 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", 2369 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", 2370 | "dev": true 2371 | }, 2372 | "async": { 2373 | "version": "1.5.2", 2374 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", 2375 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", 2376 | "dev": true 2377 | }, 2378 | "balanced-match": { 2379 | "version": "1.0.2", 2380 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 2381 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 2382 | "dev": true 2383 | }, 2384 | "binary-extensions": { 2385 | "version": "2.2.0", 2386 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 2387 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 2388 | "dev": true 2389 | }, 2390 | "brace-expansion": { 2391 | "version": "1.1.11", 2392 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 2393 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 2394 | "dev": true, 2395 | "requires": { 2396 | "balanced-match": "^1.0.0", 2397 | "concat-map": "0.0.1" 2398 | } 2399 | }, 2400 | "braces": { 2401 | "version": "3.0.3", 2402 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 2403 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 2404 | "dev": true, 2405 | "requires": { 2406 | "fill-range": "^7.1.1" 2407 | } 2408 | }, 2409 | "browser-stdout": { 2410 | "version": "1.3.1", 2411 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 2412 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 2413 | "dev": true 2414 | }, 2415 | "callsites": { 2416 | "version": "3.1.0", 2417 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 2418 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 2419 | "dev": true 2420 | }, 2421 | "camelcase": { 2422 | "version": "6.2.0", 2423 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", 2424 | "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", 2425 | "dev": true 2426 | }, 2427 | "chai": { 2428 | "version": "3.5.0", 2429 | "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", 2430 | "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", 2431 | "dev": true, 2432 | "requires": { 2433 | "assertion-error": "^1.0.1", 2434 | "deep-eql": "^0.1.3", 2435 | "type-detect": "^1.0.0" 2436 | } 2437 | }, 2438 | "chalk": { 2439 | "version": "4.1.2", 2440 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 2441 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 2442 | "dev": true, 2443 | "requires": { 2444 | "ansi-styles": "^4.1.0", 2445 | "supports-color": "^7.1.0" 2446 | } 2447 | }, 2448 | "chokidar": { 2449 | "version": "3.5.3", 2450 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 2451 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 2452 | "dev": true, 2453 | "requires": { 2454 | "anymatch": "~3.1.2", 2455 | "braces": "~3.0.2", 2456 | "fsevents": "~2.3.2", 2457 | "glob-parent": "~5.1.2", 2458 | "is-binary-path": "~2.1.0", 2459 | "is-glob": "~4.0.1", 2460 | "normalize-path": "~3.0.0", 2461 | "readdirp": "~3.6.0" 2462 | } 2463 | }, 2464 | "cliui": { 2465 | "version": "7.0.4", 2466 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 2467 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 2468 | "dev": true, 2469 | "requires": { 2470 | "string-width": "^4.2.0", 2471 | "strip-ansi": "^6.0.0", 2472 | "wrap-ansi": "^7.0.0" 2473 | }, 2474 | "dependencies": { 2475 | "is-fullwidth-code-point": { 2476 | "version": "3.0.0", 2477 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2478 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 2479 | "dev": true 2480 | }, 2481 | "string-width": { 2482 | "version": "4.2.3", 2483 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2484 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2485 | "dev": true, 2486 | "requires": { 2487 | "emoji-regex": "^8.0.0", 2488 | "is-fullwidth-code-point": "^3.0.0", 2489 | "strip-ansi": "^6.0.1" 2490 | } 2491 | } 2492 | } 2493 | }, 2494 | "color-convert": { 2495 | "version": "2.0.1", 2496 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2497 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2498 | "dev": true, 2499 | "requires": { 2500 | "color-name": "~1.1.4" 2501 | } 2502 | }, 2503 | "color-name": { 2504 | "version": "1.1.4", 2505 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2506 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2507 | "dev": true 2508 | }, 2509 | "concat-map": { 2510 | "version": "0.0.1", 2511 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 2512 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 2513 | "dev": true 2514 | }, 2515 | "cross-spawn": { 2516 | "version": "7.0.3", 2517 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 2518 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 2519 | "dev": true, 2520 | "requires": { 2521 | "path-key": "^3.1.0", 2522 | "shebang-command": "^2.0.0", 2523 | "which": "^2.0.1" 2524 | }, 2525 | "dependencies": { 2526 | "which": { 2527 | "version": "2.0.2", 2528 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2529 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2530 | "dev": true, 2531 | "requires": { 2532 | "isexe": "^2.0.0" 2533 | } 2534 | } 2535 | } 2536 | }, 2537 | "debug": { 2538 | "version": "4.3.4", 2539 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 2540 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 2541 | "dev": true, 2542 | "requires": { 2543 | "ms": "2.1.2" 2544 | }, 2545 | "dependencies": { 2546 | "ms": { 2547 | "version": "2.1.2", 2548 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2549 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2550 | "dev": true 2551 | } 2552 | } 2553 | }, 2554 | "decamelize": { 2555 | "version": "4.0.0", 2556 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 2557 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 2558 | "dev": true 2559 | }, 2560 | "deep-eql": { 2561 | "version": "0.1.3", 2562 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", 2563 | "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", 2564 | "dev": true, 2565 | "requires": { 2566 | "type-detect": "0.1.1" 2567 | }, 2568 | "dependencies": { 2569 | "type-detect": { 2570 | "version": "0.1.1", 2571 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", 2572 | "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", 2573 | "dev": true 2574 | } 2575 | } 2576 | }, 2577 | "deep-is": { 2578 | "version": "0.1.4", 2579 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 2580 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 2581 | "dev": true 2582 | }, 2583 | "diff": { 2584 | "version": "5.0.0", 2585 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", 2586 | "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", 2587 | "dev": true 2588 | }, 2589 | "doctrine": { 2590 | "version": "3.0.0", 2591 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 2592 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 2593 | "dev": true, 2594 | "requires": { 2595 | "esutils": "^2.0.2" 2596 | } 2597 | }, 2598 | "emoji-regex": { 2599 | "version": "8.0.0", 2600 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2601 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 2602 | "dev": true 2603 | }, 2604 | "escalade": { 2605 | "version": "3.1.1", 2606 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 2607 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 2608 | "dev": true 2609 | }, 2610 | "escape-string-regexp": { 2611 | "version": "4.0.0", 2612 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2613 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 2614 | "dev": true 2615 | }, 2616 | "escodegen": { 2617 | "version": "1.8.1", 2618 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", 2619 | "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", 2620 | "dev": true, 2621 | "requires": { 2622 | "esprima": "^2.7.1", 2623 | "estraverse": "^1.9.1", 2624 | "esutils": "^2.0.2", 2625 | "optionator": "^0.8.1", 2626 | "source-map": "~0.2.0" 2627 | }, 2628 | "dependencies": { 2629 | "estraverse": { 2630 | "version": "1.9.3", 2631 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", 2632 | "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", 2633 | "dev": true 2634 | } 2635 | } 2636 | }, 2637 | "eslint": { 2638 | "version": "8.38.0", 2639 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz", 2640 | "integrity": "sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==", 2641 | "dev": true, 2642 | "requires": { 2643 | "@eslint-community/eslint-utils": "^4.2.0", 2644 | "@eslint-community/regexpp": "^4.4.0", 2645 | "@eslint/eslintrc": "^2.0.2", 2646 | "@eslint/js": "8.38.0", 2647 | "@humanwhocodes/config-array": "^0.11.8", 2648 | "@humanwhocodes/module-importer": "^1.0.1", 2649 | "@nodelib/fs.walk": "^1.2.8", 2650 | "ajv": "^6.10.0", 2651 | "chalk": "^4.0.0", 2652 | "cross-spawn": "^7.0.2", 2653 | "debug": "^4.3.2", 2654 | "doctrine": "^3.0.0", 2655 | "escape-string-regexp": "^4.0.0", 2656 | "eslint-scope": "^7.1.1", 2657 | "eslint-visitor-keys": "^3.4.0", 2658 | "espree": "^9.5.1", 2659 | "esquery": "^1.4.2", 2660 | "esutils": "^2.0.2", 2661 | "fast-deep-equal": "^3.1.3", 2662 | "file-entry-cache": "^6.0.1", 2663 | "find-up": "^5.0.0", 2664 | "glob-parent": "^6.0.2", 2665 | "globals": "^13.19.0", 2666 | "grapheme-splitter": "^1.0.4", 2667 | "ignore": "^5.2.0", 2668 | "import-fresh": "^3.0.0", 2669 | "imurmurhash": "^0.1.4", 2670 | "is-glob": "^4.0.0", 2671 | "is-path-inside": "^3.0.3", 2672 | "js-sdsl": "^4.1.4", 2673 | "js-yaml": "^4.1.0", 2674 | "json-stable-stringify-without-jsonify": "^1.0.1", 2675 | "levn": "^0.4.1", 2676 | "lodash.merge": "^4.6.2", 2677 | "minimatch": "^3.1.2", 2678 | "natural-compare": "^1.4.0", 2679 | "optionator": "^0.9.1", 2680 | "strip-ansi": "^6.0.1", 2681 | "strip-json-comments": "^3.1.0", 2682 | "text-table": "^0.2.0" 2683 | }, 2684 | "dependencies": { 2685 | "argparse": { 2686 | "version": "2.0.1", 2687 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 2688 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 2689 | "dev": true 2690 | }, 2691 | "glob-parent": { 2692 | "version": "6.0.2", 2693 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 2694 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 2695 | "dev": true, 2696 | "requires": { 2697 | "is-glob": "^4.0.3" 2698 | } 2699 | }, 2700 | "js-yaml": { 2701 | "version": "4.1.0", 2702 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2703 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2704 | "dev": true, 2705 | "requires": { 2706 | "argparse": "^2.0.1" 2707 | } 2708 | }, 2709 | "levn": { 2710 | "version": "0.4.1", 2711 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 2712 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 2713 | "dev": true, 2714 | "requires": { 2715 | "prelude-ls": "^1.2.1", 2716 | "type-check": "~0.4.0" 2717 | } 2718 | }, 2719 | "optionator": { 2720 | "version": "0.9.1", 2721 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 2722 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 2723 | "dev": true, 2724 | "requires": { 2725 | "deep-is": "^0.1.3", 2726 | "fast-levenshtein": "^2.0.6", 2727 | "levn": "^0.4.1", 2728 | "prelude-ls": "^1.2.1", 2729 | "type-check": "^0.4.0", 2730 | "word-wrap": "^1.2.3" 2731 | } 2732 | }, 2733 | "prelude-ls": { 2734 | "version": "1.2.1", 2735 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 2736 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 2737 | "dev": true 2738 | }, 2739 | "type-check": { 2740 | "version": "0.4.0", 2741 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 2742 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 2743 | "dev": true, 2744 | "requires": { 2745 | "prelude-ls": "^1.2.1" 2746 | } 2747 | } 2748 | } 2749 | }, 2750 | "eslint-scope": { 2751 | "version": "7.2.0", 2752 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", 2753 | "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", 2754 | "dev": true, 2755 | "requires": { 2756 | "esrecurse": "^4.3.0", 2757 | "estraverse": "^5.2.0" 2758 | } 2759 | }, 2760 | "eslint-visitor-keys": { 2761 | "version": "3.4.0", 2762 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", 2763 | "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", 2764 | "dev": true 2765 | }, 2766 | "espree": { 2767 | "version": "9.5.1", 2768 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", 2769 | "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", 2770 | "dev": true, 2771 | "requires": { 2772 | "acorn": "^8.8.0", 2773 | "acorn-jsx": "^5.3.2", 2774 | "eslint-visitor-keys": "^3.4.0" 2775 | } 2776 | }, 2777 | "esprima": { 2778 | "version": "2.7.3", 2779 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", 2780 | "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", 2781 | "dev": true 2782 | }, 2783 | "esquery": { 2784 | "version": "1.5.0", 2785 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", 2786 | "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", 2787 | "dev": true, 2788 | "requires": { 2789 | "estraverse": "^5.1.0" 2790 | } 2791 | }, 2792 | "esrecurse": { 2793 | "version": "4.3.0", 2794 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 2795 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 2796 | "dev": true, 2797 | "requires": { 2798 | "estraverse": "^5.2.0" 2799 | } 2800 | }, 2801 | "estraverse": { 2802 | "version": "5.3.0", 2803 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 2804 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 2805 | "dev": true 2806 | }, 2807 | "esutils": { 2808 | "version": "2.0.3", 2809 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 2810 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 2811 | "dev": true 2812 | }, 2813 | "fast-deep-equal": { 2814 | "version": "3.1.3", 2815 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 2816 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 2817 | "dev": true 2818 | }, 2819 | "fast-json-stable-stringify": { 2820 | "version": "2.1.0", 2821 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 2822 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 2823 | "dev": true 2824 | }, 2825 | "fast-levenshtein": { 2826 | "version": "2.0.6", 2827 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 2828 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 2829 | "dev": true 2830 | }, 2831 | "fastq": { 2832 | "version": "1.15.0", 2833 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 2834 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 2835 | "dev": true, 2836 | "requires": { 2837 | "reusify": "^1.0.4" 2838 | } 2839 | }, 2840 | "file-entry-cache": { 2841 | "version": "6.0.1", 2842 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 2843 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 2844 | "dev": true, 2845 | "requires": { 2846 | "flat-cache": "^3.0.4" 2847 | } 2848 | }, 2849 | "fill-range": { 2850 | "version": "7.1.1", 2851 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 2852 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 2853 | "dev": true, 2854 | "requires": { 2855 | "to-regex-range": "^5.0.1" 2856 | } 2857 | }, 2858 | "find-up": { 2859 | "version": "5.0.0", 2860 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 2861 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 2862 | "dev": true, 2863 | "requires": { 2864 | "locate-path": "^6.0.0", 2865 | "path-exists": "^4.0.0" 2866 | } 2867 | }, 2868 | "flat": { 2869 | "version": "5.0.2", 2870 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 2871 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 2872 | "dev": true 2873 | }, 2874 | "flat-cache": { 2875 | "version": "3.0.4", 2876 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 2877 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 2878 | "dev": true, 2879 | "requires": { 2880 | "flatted": "^3.1.0", 2881 | "rimraf": "^3.0.2" 2882 | } 2883 | }, 2884 | "flatted": { 2885 | "version": "3.2.7", 2886 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", 2887 | "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", 2888 | "dev": true 2889 | }, 2890 | "fs.realpath": { 2891 | "version": "1.0.0", 2892 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2893 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 2894 | "dev": true 2895 | }, 2896 | "fsevents": { 2897 | "version": "2.3.2", 2898 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 2899 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 2900 | "dev": true, 2901 | "optional": true 2902 | }, 2903 | "get-caller-file": { 2904 | "version": "2.0.5", 2905 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 2906 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 2907 | "dev": true 2908 | }, 2909 | "glob": { 2910 | "version": "7.2.0", 2911 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 2912 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 2913 | "dev": true, 2914 | "requires": { 2915 | "fs.realpath": "^1.0.0", 2916 | "inflight": "^1.0.4", 2917 | "inherits": "2", 2918 | "minimatch": "^3.0.4", 2919 | "once": "^1.3.0", 2920 | "path-is-absolute": "^1.0.0" 2921 | } 2922 | }, 2923 | "glob-parent": { 2924 | "version": "5.1.2", 2925 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2926 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2927 | "dev": true, 2928 | "requires": { 2929 | "is-glob": "^4.0.1" 2930 | } 2931 | }, 2932 | "globals": { 2933 | "version": "13.20.0", 2934 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", 2935 | "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", 2936 | "dev": true, 2937 | "requires": { 2938 | "type-fest": "^0.20.2" 2939 | } 2940 | }, 2941 | "grapheme-splitter": { 2942 | "version": "1.0.4", 2943 | "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", 2944 | "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", 2945 | "dev": true 2946 | }, 2947 | "growl": { 2948 | "version": "1.10.5", 2949 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 2950 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 2951 | "dev": true 2952 | }, 2953 | "handlebars": { 2954 | "version": "4.7.7", 2955 | "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", 2956 | "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", 2957 | "dev": true, 2958 | "requires": { 2959 | "minimist": "^1.2.5", 2960 | "neo-async": "^2.6.0", 2961 | "source-map": "^0.6.1", 2962 | "uglify-js": "^3.1.4", 2963 | "wordwrap": "^1.0.0" 2964 | }, 2965 | "dependencies": { 2966 | "source-map": { 2967 | "version": "0.6.1", 2968 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2969 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2970 | "dev": true 2971 | } 2972 | } 2973 | }, 2974 | "has-flag": { 2975 | "version": "4.0.0", 2976 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2977 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2978 | "dev": true 2979 | }, 2980 | "he": { 2981 | "version": "1.2.0", 2982 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 2983 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 2984 | "dev": true 2985 | }, 2986 | "ignore": { 2987 | "version": "5.2.4", 2988 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", 2989 | "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", 2990 | "dev": true 2991 | }, 2992 | "import-fresh": { 2993 | "version": "3.3.0", 2994 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 2995 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 2996 | "dev": true, 2997 | "requires": { 2998 | "parent-module": "^1.0.0", 2999 | "resolve-from": "^4.0.0" 3000 | } 3001 | }, 3002 | "imurmurhash": { 3003 | "version": "0.1.4", 3004 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 3005 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 3006 | "dev": true 3007 | }, 3008 | "inflight": { 3009 | "version": "1.0.6", 3010 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 3011 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 3012 | "dev": true, 3013 | "requires": { 3014 | "once": "^1.3.0", 3015 | "wrappy": "1" 3016 | } 3017 | }, 3018 | "inherits": { 3019 | "version": "2.0.4", 3020 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 3021 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 3022 | "dev": true 3023 | }, 3024 | "is-binary-path": { 3025 | "version": "2.1.0", 3026 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 3027 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 3028 | "dev": true, 3029 | "requires": { 3030 | "binary-extensions": "^2.0.0" 3031 | } 3032 | }, 3033 | "is-extglob": { 3034 | "version": "2.1.1", 3035 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 3036 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 3037 | "dev": true 3038 | }, 3039 | "is-glob": { 3040 | "version": "4.0.3", 3041 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 3042 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 3043 | "dev": true, 3044 | "requires": { 3045 | "is-extglob": "^2.1.1" 3046 | } 3047 | }, 3048 | "is-number": { 3049 | "version": "7.0.0", 3050 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 3051 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 3052 | "dev": true 3053 | }, 3054 | "is-path-inside": { 3055 | "version": "3.0.3", 3056 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 3057 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 3058 | "dev": true 3059 | }, 3060 | "is-plain-obj": { 3061 | "version": "2.1.0", 3062 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 3063 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 3064 | "dev": true 3065 | }, 3066 | "is-unicode-supported": { 3067 | "version": "0.1.0", 3068 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 3069 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 3070 | "dev": true 3071 | }, 3072 | "isexe": { 3073 | "version": "2.0.0", 3074 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 3075 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 3076 | "dev": true 3077 | }, 3078 | "istanbul": { 3079 | "version": "0.4.5", 3080 | "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", 3081 | "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", 3082 | "dev": true, 3083 | "requires": { 3084 | "abbrev": "1.0.x", 3085 | "async": "1.x", 3086 | "escodegen": "1.8.x", 3087 | "esprima": "2.7.x", 3088 | "glob": "^5.0.15", 3089 | "handlebars": "^4.0.1", 3090 | "js-yaml": "3.x", 3091 | "mkdirp": "0.5.x", 3092 | "nopt": "3.x", 3093 | "once": "1.x", 3094 | "resolve": "1.1.x", 3095 | "supports-color": "^3.1.0", 3096 | "which": "^1.1.1", 3097 | "wordwrap": "^1.0.0" 3098 | }, 3099 | "dependencies": { 3100 | "glob": { 3101 | "version": "5.0.15", 3102 | "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", 3103 | "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", 3104 | "dev": true, 3105 | "requires": { 3106 | "inflight": "^1.0.4", 3107 | "inherits": "2", 3108 | "minimatch": "2 || 3", 3109 | "once": "^1.3.0", 3110 | "path-is-absolute": "^1.0.0" 3111 | } 3112 | }, 3113 | "has-flag": { 3114 | "version": "1.0.0", 3115 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", 3116 | "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", 3117 | "dev": true 3118 | }, 3119 | "supports-color": { 3120 | "version": "3.2.3", 3121 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", 3122 | "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", 3123 | "dev": true, 3124 | "requires": { 3125 | "has-flag": "^1.0.0" 3126 | } 3127 | } 3128 | } 3129 | }, 3130 | "js-sdsl": { 3131 | "version": "4.4.0", 3132 | "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", 3133 | "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", 3134 | "dev": true 3135 | }, 3136 | "js-yaml": { 3137 | "version": "3.14.1", 3138 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 3139 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 3140 | "dev": true, 3141 | "requires": { 3142 | "argparse": "^1.0.7", 3143 | "esprima": "^4.0.0" 3144 | }, 3145 | "dependencies": { 3146 | "esprima": { 3147 | "version": "4.0.1", 3148 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 3149 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 3150 | "dev": true 3151 | } 3152 | } 3153 | }, 3154 | "json-schema-traverse": { 3155 | "version": "0.4.1", 3156 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 3157 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 3158 | "dev": true 3159 | }, 3160 | "json-stable-stringify-without-jsonify": { 3161 | "version": "1.0.1", 3162 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 3163 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 3164 | "dev": true 3165 | }, 3166 | "levn": { 3167 | "version": "0.3.0", 3168 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 3169 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 3170 | "dev": true, 3171 | "requires": { 3172 | "prelude-ls": "~1.1.2", 3173 | "type-check": "~0.3.2" 3174 | } 3175 | }, 3176 | "locate-path": { 3177 | "version": "6.0.0", 3178 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 3179 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 3180 | "dev": true, 3181 | "requires": { 3182 | "p-locate": "^5.0.0" 3183 | } 3184 | }, 3185 | "lodash.merge": { 3186 | "version": "4.6.2", 3187 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 3188 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 3189 | "dev": true 3190 | }, 3191 | "log-symbols": { 3192 | "version": "4.1.0", 3193 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 3194 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 3195 | "dev": true, 3196 | "requires": { 3197 | "chalk": "^4.1.0", 3198 | "is-unicode-supported": "^0.1.0" 3199 | } 3200 | }, 3201 | "minimatch": { 3202 | "version": "3.1.2", 3203 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 3204 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 3205 | "dev": true, 3206 | "requires": { 3207 | "brace-expansion": "^1.1.7" 3208 | } 3209 | }, 3210 | "minimist": { 3211 | "version": "1.2.6", 3212 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 3213 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", 3214 | "dev": true 3215 | }, 3216 | "mkdirp": { 3217 | "version": "0.5.5", 3218 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 3219 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 3220 | "dev": true, 3221 | "requires": { 3222 | "minimist": "^1.2.5" 3223 | } 3224 | }, 3225 | "mocha": { 3226 | "version": "9.2.2", 3227 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", 3228 | "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", 3229 | "dev": true, 3230 | "requires": { 3231 | "@ungap/promise-all-settled": "1.1.2", 3232 | "ansi-colors": "4.1.1", 3233 | "browser-stdout": "1.3.1", 3234 | "chokidar": "3.5.3", 3235 | "debug": "4.3.3", 3236 | "diff": "5.0.0", 3237 | "escape-string-regexp": "4.0.0", 3238 | "find-up": "5.0.0", 3239 | "glob": "7.2.0", 3240 | "growl": "1.10.5", 3241 | "he": "1.2.0", 3242 | "js-yaml": "4.1.0", 3243 | "log-symbols": "4.1.0", 3244 | "minimatch": "4.2.1", 3245 | "ms": "2.1.3", 3246 | "nanoid": "3.3.1", 3247 | "serialize-javascript": "6.0.0", 3248 | "strip-json-comments": "3.1.1", 3249 | "supports-color": "8.1.1", 3250 | "which": "2.0.2", 3251 | "workerpool": "6.2.0", 3252 | "yargs": "16.2.0", 3253 | "yargs-parser": "20.2.4", 3254 | "yargs-unparser": "2.0.0" 3255 | }, 3256 | "dependencies": { 3257 | "argparse": { 3258 | "version": "2.0.1", 3259 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 3260 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 3261 | "dev": true 3262 | }, 3263 | "debug": { 3264 | "version": "4.3.3", 3265 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 3266 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 3267 | "dev": true, 3268 | "requires": { 3269 | "ms": "2.1.2" 3270 | }, 3271 | "dependencies": { 3272 | "ms": { 3273 | "version": "2.1.2", 3274 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 3275 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 3276 | "dev": true 3277 | } 3278 | } 3279 | }, 3280 | "js-yaml": { 3281 | "version": "4.1.0", 3282 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 3283 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 3284 | "dev": true, 3285 | "requires": { 3286 | "argparse": "^2.0.1" 3287 | } 3288 | }, 3289 | "minimatch": { 3290 | "version": "4.2.1", 3291 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", 3292 | "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", 3293 | "dev": true, 3294 | "requires": { 3295 | "brace-expansion": "^1.1.7" 3296 | } 3297 | }, 3298 | "supports-color": { 3299 | "version": "8.1.1", 3300 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 3301 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 3302 | "dev": true, 3303 | "requires": { 3304 | "has-flag": "^4.0.0" 3305 | } 3306 | }, 3307 | "which": { 3308 | "version": "2.0.2", 3309 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3310 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3311 | "dev": true, 3312 | "requires": { 3313 | "isexe": "^2.0.0" 3314 | } 3315 | } 3316 | } 3317 | }, 3318 | "ms": { 3319 | "version": "2.1.3", 3320 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 3321 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 3322 | "dev": true 3323 | }, 3324 | "nanoid": { 3325 | "version": "3.3.1", 3326 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", 3327 | "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", 3328 | "dev": true 3329 | }, 3330 | "natural-compare": { 3331 | "version": "1.4.0", 3332 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 3333 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 3334 | "dev": true 3335 | }, 3336 | "neo-async": { 3337 | "version": "2.6.2", 3338 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", 3339 | "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", 3340 | "dev": true 3341 | }, 3342 | "nopt": { 3343 | "version": "3.0.6", 3344 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", 3345 | "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", 3346 | "dev": true, 3347 | "requires": { 3348 | "abbrev": "1" 3349 | } 3350 | }, 3351 | "normalize-path": { 3352 | "version": "3.0.0", 3353 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 3354 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 3355 | "dev": true 3356 | }, 3357 | "once": { 3358 | "version": "1.4.0", 3359 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 3360 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 3361 | "dev": true, 3362 | "requires": { 3363 | "wrappy": "1" 3364 | } 3365 | }, 3366 | "optionator": { 3367 | "version": "0.8.3", 3368 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", 3369 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", 3370 | "dev": true, 3371 | "requires": { 3372 | "deep-is": "~0.1.3", 3373 | "fast-levenshtein": "~2.0.6", 3374 | "levn": "~0.3.0", 3375 | "prelude-ls": "~1.1.2", 3376 | "type-check": "~0.3.2", 3377 | "word-wrap": "~1.2.3" 3378 | } 3379 | }, 3380 | "p-limit": { 3381 | "version": "3.1.0", 3382 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 3383 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 3384 | "dev": true, 3385 | "requires": { 3386 | "yocto-queue": "^0.1.0" 3387 | } 3388 | }, 3389 | "p-locate": { 3390 | "version": "5.0.0", 3391 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 3392 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 3393 | "dev": true, 3394 | "requires": { 3395 | "p-limit": "^3.0.2" 3396 | } 3397 | }, 3398 | "parent-module": { 3399 | "version": "1.0.1", 3400 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 3401 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 3402 | "dev": true, 3403 | "requires": { 3404 | "callsites": "^3.0.0" 3405 | } 3406 | }, 3407 | "path-exists": { 3408 | "version": "4.0.0", 3409 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 3410 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 3411 | "dev": true 3412 | }, 3413 | "path-is-absolute": { 3414 | "version": "1.0.1", 3415 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 3416 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 3417 | "dev": true 3418 | }, 3419 | "path-key": { 3420 | "version": "3.1.1", 3421 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 3422 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 3423 | "dev": true 3424 | }, 3425 | "picomatch": { 3426 | "version": "2.3.1", 3427 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 3428 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 3429 | "dev": true 3430 | }, 3431 | "prelude-ls": { 3432 | "version": "1.1.2", 3433 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 3434 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 3435 | "dev": true 3436 | }, 3437 | "punycode": { 3438 | "version": "2.3.0", 3439 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 3440 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 3441 | "dev": true 3442 | }, 3443 | "queue-microtask": { 3444 | "version": "1.2.3", 3445 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 3446 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 3447 | "dev": true 3448 | }, 3449 | "randombytes": { 3450 | "version": "2.1.0", 3451 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 3452 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 3453 | "dev": true, 3454 | "requires": { 3455 | "safe-buffer": "^5.1.0" 3456 | } 3457 | }, 3458 | "readdirp": { 3459 | "version": "3.6.0", 3460 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 3461 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 3462 | "dev": true, 3463 | "requires": { 3464 | "picomatch": "^2.2.1" 3465 | } 3466 | }, 3467 | "require-directory": { 3468 | "version": "2.1.1", 3469 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 3470 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 3471 | "dev": true 3472 | }, 3473 | "resolve": { 3474 | "version": "1.1.7", 3475 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", 3476 | "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", 3477 | "dev": true 3478 | }, 3479 | "resolve-from": { 3480 | "version": "4.0.0", 3481 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 3482 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 3483 | "dev": true 3484 | }, 3485 | "reusify": { 3486 | "version": "1.0.4", 3487 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 3488 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 3489 | "dev": true 3490 | }, 3491 | "rimraf": { 3492 | "version": "3.0.2", 3493 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 3494 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 3495 | "dev": true, 3496 | "requires": { 3497 | "glob": "^7.1.3" 3498 | } 3499 | }, 3500 | "run-parallel": { 3501 | "version": "1.2.0", 3502 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 3503 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 3504 | "dev": true, 3505 | "requires": { 3506 | "queue-microtask": "^1.2.2" 3507 | } 3508 | }, 3509 | "safe-buffer": { 3510 | "version": "5.1.2", 3511 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 3512 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 3513 | "dev": true 3514 | }, 3515 | "serialize-javascript": { 3516 | "version": "6.0.0", 3517 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", 3518 | "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", 3519 | "dev": true, 3520 | "requires": { 3521 | "randombytes": "^2.1.0" 3522 | } 3523 | }, 3524 | "shebang-command": { 3525 | "version": "2.0.0", 3526 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 3527 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 3528 | "dev": true, 3529 | "requires": { 3530 | "shebang-regex": "^3.0.0" 3531 | } 3532 | }, 3533 | "shebang-regex": { 3534 | "version": "3.0.0", 3535 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 3536 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 3537 | "dev": true 3538 | }, 3539 | "source-map": { 3540 | "version": "0.2.0", 3541 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", 3542 | "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", 3543 | "dev": true, 3544 | "optional": true, 3545 | "requires": { 3546 | "amdefine": ">=0.0.4" 3547 | } 3548 | }, 3549 | "sprintf-js": { 3550 | "version": "1.0.3", 3551 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 3552 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 3553 | "dev": true 3554 | }, 3555 | "strip-ansi": { 3556 | "version": "6.0.1", 3557 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3558 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3559 | "dev": true, 3560 | "requires": { 3561 | "ansi-regex": "^5.0.1" 3562 | } 3563 | }, 3564 | "strip-json-comments": { 3565 | "version": "3.1.1", 3566 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 3567 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 3568 | "dev": true 3569 | }, 3570 | "supports-color": { 3571 | "version": "7.2.0", 3572 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3573 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3574 | "dev": true, 3575 | "requires": { 3576 | "has-flag": "^4.0.0" 3577 | } 3578 | }, 3579 | "text-table": { 3580 | "version": "0.2.0", 3581 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 3582 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 3583 | "dev": true 3584 | }, 3585 | "to-regex-range": { 3586 | "version": "5.0.1", 3587 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3588 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3589 | "dev": true, 3590 | "requires": { 3591 | "is-number": "^7.0.0" 3592 | } 3593 | }, 3594 | "type-check": { 3595 | "version": "0.3.2", 3596 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 3597 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 3598 | "dev": true, 3599 | "requires": { 3600 | "prelude-ls": "~1.1.2" 3601 | } 3602 | }, 3603 | "type-detect": { 3604 | "version": "1.0.0", 3605 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", 3606 | "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", 3607 | "dev": true 3608 | }, 3609 | "type-fest": { 3610 | "version": "0.20.2", 3611 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 3612 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 3613 | "dev": true 3614 | }, 3615 | "uglify-js": { 3616 | "version": "3.14.2", 3617 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.2.tgz", 3618 | "integrity": "sha512-rtPMlmcO4agTUfz10CbgJ1k6UAoXM2gWb3GoMPPZB/+/Ackf8lNWk11K4rYi2D0apgoFRLtQOZhb+/iGNJq26A==", 3619 | "dev": true, 3620 | "optional": true 3621 | }, 3622 | "uri-js": { 3623 | "version": "4.4.1", 3624 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 3625 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 3626 | "dev": true, 3627 | "requires": { 3628 | "punycode": "^2.1.0" 3629 | } 3630 | }, 3631 | "which": { 3632 | "version": "1.3.1", 3633 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 3634 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 3635 | "dev": true, 3636 | "requires": { 3637 | "isexe": "^2.0.0" 3638 | } 3639 | }, 3640 | "word-wrap": { 3641 | "version": "1.2.4", 3642 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", 3643 | "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", 3644 | "dev": true 3645 | }, 3646 | "wordwrap": { 3647 | "version": "1.0.0", 3648 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 3649 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 3650 | "dev": true 3651 | }, 3652 | "workerpool": { 3653 | "version": "6.2.0", 3654 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", 3655 | "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", 3656 | "dev": true 3657 | }, 3658 | "wrap-ansi": { 3659 | "version": "7.0.0", 3660 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 3661 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 3662 | "dev": true, 3663 | "requires": { 3664 | "ansi-styles": "^4.0.0", 3665 | "string-width": "^4.1.0", 3666 | "strip-ansi": "^6.0.0" 3667 | }, 3668 | "dependencies": { 3669 | "is-fullwidth-code-point": { 3670 | "version": "3.0.0", 3671 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 3672 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 3673 | "dev": true 3674 | }, 3675 | "string-width": { 3676 | "version": "4.2.3", 3677 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3678 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3679 | "dev": true, 3680 | "requires": { 3681 | "emoji-regex": "^8.0.0", 3682 | "is-fullwidth-code-point": "^3.0.0", 3683 | "strip-ansi": "^6.0.1" 3684 | } 3685 | } 3686 | } 3687 | }, 3688 | "wrappy": { 3689 | "version": "1.0.2", 3690 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3691 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 3692 | "dev": true 3693 | }, 3694 | "y18n": { 3695 | "version": "5.0.8", 3696 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 3697 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 3698 | "dev": true 3699 | }, 3700 | "yargs": { 3701 | "version": "16.2.0", 3702 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 3703 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 3704 | "dev": true, 3705 | "requires": { 3706 | "cliui": "^7.0.2", 3707 | "escalade": "^3.1.1", 3708 | "get-caller-file": "^2.0.5", 3709 | "require-directory": "^2.1.1", 3710 | "string-width": "^4.2.0", 3711 | "y18n": "^5.0.5", 3712 | "yargs-parser": "^20.2.2" 3713 | }, 3714 | "dependencies": { 3715 | "is-fullwidth-code-point": { 3716 | "version": "3.0.0", 3717 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 3718 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 3719 | "dev": true 3720 | }, 3721 | "string-width": { 3722 | "version": "4.2.3", 3723 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3724 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3725 | "dev": true, 3726 | "requires": { 3727 | "emoji-regex": "^8.0.0", 3728 | "is-fullwidth-code-point": "^3.0.0", 3729 | "strip-ansi": "^6.0.1" 3730 | } 3731 | } 3732 | } 3733 | }, 3734 | "yargs-parser": { 3735 | "version": "20.2.4", 3736 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", 3737 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", 3738 | "dev": true 3739 | }, 3740 | "yargs-unparser": { 3741 | "version": "2.0.0", 3742 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 3743 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 3744 | "dev": true, 3745 | "requires": { 3746 | "camelcase": "^6.0.0", 3747 | "decamelize": "^4.0.0", 3748 | "flat": "^5.0.2", 3749 | "is-plain-obj": "^2.1.0" 3750 | } 3751 | }, 3752 | "yocto-queue": { 3753 | "version": "0.1.0", 3754 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 3755 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 3756 | "dev": true 3757 | } 3758 | } 3759 | } 3760 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "stream-buffers", 3 | "version": "3.0.3", 4 | "description": "Buffer-backed Streams for reading and writing.", 5 | "keywords": [ 6 | "memory streams", 7 | "streams", 8 | "buffer streams" 9 | ], 10 | "author": "Sam Day ", 11 | "main": "./lib/streambuffer.js", 12 | "engines": { 13 | "node": ">= 0.10.0" 14 | }, 15 | "devDependencies": { 16 | "chai": "^3.4.1", 17 | "eslint": "^8.38.0", 18 | "istanbul": "^0.4.0", 19 | "mocha": "^9.1.2" 20 | }, 21 | "license": "Unlicense", 22 | "repository": { 23 | "type": "git", 24 | "url": "https://github.com/samcday/node-stream-buffer.git" 25 | }, 26 | "scripts": { 27 | "test": "istanbul test _mocha", 28 | "lint": "eslint ." 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /test/fixtures.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var streamBuffer = require('../lib/streambuffer'); 4 | 5 | var simpleString = 'This is a String!'; 6 | var unicodeString = '\u00bd + \u00bc = \u00be'; 7 | var binaryData = new Buffer(64); 8 | for(var i = 0; i < binaryData.length; i++) { 9 | binaryData[i] = i; 10 | } 11 | 12 | // Binary data larger than initial size of buffers. 13 | var largeBinaryData = new Buffer(streamBuffer.DEFAULT_INITIAL_SIZE + 1); 14 | for(i = 0; i < largeBinaryData.length; i++) { 15 | largeBinaryData[i] = i % 256; 16 | } 17 | 18 | module.exports = { 19 | simpleString: simpleString, 20 | unicodeString: unicodeString, 21 | binaryData: binaryData, 22 | largeBinaryData: largeBinaryData 23 | }; 24 | -------------------------------------------------------------------------------- /test/readable_streambuffer.test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var expect = require('chai').expect; 4 | var fixtures = require('./fixtures'); 5 | var streamBuffer = require('../lib/streambuffer'); 6 | 7 | describe('A default ReadableStreamBuffer', function() { 8 | beforeEach(function() { 9 | this.buffer = new streamBuffer.ReadableStreamBuffer(); 10 | }); 11 | 12 | it('is a Stream', function() { 13 | expect(this.buffer).to.be.an.instanceOf(require('stream').Stream); 14 | }); 15 | 16 | it('is empty by default', function() { 17 | expect(this.buffer.size()).to.equal(0); 18 | }); 19 | 20 | it('has default backing buffer size', function() { 21 | expect(this.buffer.maxSize()).to.equal(streamBuffer.DEFAULT_INITIAL_SIZE); 22 | }); 23 | 24 | describe('when stopped', function() { 25 | beforeEach(function() { 26 | this.buffer.stop(); 27 | }); 28 | 29 | it('throws error on calling stop() again', function() { 30 | expect(this.buffer.stop.bind(this.buffer)).to.throw(Error); 31 | }); 32 | 33 | it('throws error on calls to put()', function() { 34 | expect(this.buffer.put.bind(this.buffer)).to.throw(Error); 35 | }); 36 | }); 37 | 38 | it('emits end event when stopped', function(done) { 39 | this.buffer.on('end', done); 40 | this.buffer.stop(); 41 | this.buffer.read(); 42 | }); 43 | 44 | it('emits end event after data, when stopped', function(done) { 45 | var that = this; 46 | var str = ''; 47 | this.buffer.on('readable', function() { 48 | str += (that.buffer.read() || new Buffer(0)).toString('utf8'); 49 | }); 50 | this.buffer.on('end', function() { 51 | expect(str).to.equal(fixtures.unicodeString); 52 | done(); 53 | }); 54 | this.buffer.put(fixtures.unicodeString); 55 | this.buffer.stop(); 56 | }); 57 | 58 | it('pushes new data even if read when empty', function(done) { 59 | var that = this; 60 | var str = ''; 61 | this.buffer.on('readable', function() { 62 | str += (that.buffer.read() || new Buffer(0)).toString('utf8'); 63 | }); 64 | this.buffer.on('end', function() { 65 | expect(str).to.equal(fixtures.unicodeString); 66 | done(); 67 | }); 68 | 69 | setTimeout(function() { 70 | that.buffer.put(fixtures.unicodeString); 71 | that.buffer.stop(); 72 | }, streamBuffer.DEFAULT_FREQUENCY + 1); 73 | }); 74 | 75 | describe('when writing binary data', function() { 76 | beforeEach(function(done) { 77 | var that = this; 78 | this.buffer.put(fixtures.binaryData); 79 | 80 | this.buffer.once('readable', function() { 81 | that.data = that.buffer.read(); 82 | done(); 83 | }); 84 | }); 85 | 86 | it('results in a Buffer', function() { 87 | expect(this.data).to.be.an.instanceOf(Buffer); 88 | }); 89 | 90 | it('with the correct data', function() { 91 | expect(this.data).to.deep.equal(fixtures.binaryData); 92 | }); 93 | }); 94 | 95 | it('supports putting in hex data', function(done) { 96 | this.buffer.put('BEEF', 'hex'); 97 | 98 | var that = this; 99 | this.buffer.once('readable', function() { 100 | var buf = that.buffer.read(); 101 | expect(buf[0]).to.equal(190); 102 | expect(buf[1]).to.equal(239); 103 | done(); 104 | }); 105 | }) 106 | 107 | describe('when writing binary data larger than initial backing buffer size', function() { 108 | beforeEach(function() { 109 | this.buffer.pause(); 110 | this.buffer.put(fixtures.largeBinaryData); 111 | }); 112 | 113 | it('buffer is correct size', function() { 114 | expect(this.buffer.size()).to.equal(fixtures.largeBinaryData.length); 115 | }); 116 | 117 | it('backing buffer is correct size', function() { 118 | expect(this.buffer.maxSize()).to.equal(streamBuffer.DEFAULT_INITIAL_SIZE + streamBuffer.DEFAULT_INCREMENT_AMOUNT); 119 | }); 120 | }); 121 | }); 122 | 123 | describe('A ReadableStreamBuffer using custom chunk size', function() { 124 | beforeEach(function(done) { 125 | var that = this; 126 | 127 | this.buffer = new streamBuffer.ReadableStreamBuffer({ 128 | chunkSize: 2 129 | }); 130 | 131 | this.buffer.once('readable', function() { 132 | that.data = that.buffer.read(); 133 | done(); 134 | }); 135 | this.buffer.put(fixtures.binaryData); 136 | }); 137 | 138 | it('yields a Buffer with the correct data', function() { 139 | expect(this.data).to.deep.equal(fixtures.binaryData.slice(0, 2)); 140 | }); 141 | }); 142 | 143 | describe('A ReadableStreamBuffer using custom frequency', function() { 144 | beforeEach(function(done) { 145 | var that = this; 146 | var startTime = new Date().getTime(); 147 | 148 | this.buffer = new streamBuffer.ReadableStreamBuffer({ 149 | frequency: 300 150 | }); 151 | 152 | this.buffer.once('readable', function() { 153 | that.time = new Date().getTime() - startTime; 154 | done(); 155 | }); 156 | this.buffer.put(fixtures.binaryData); 157 | }); 158 | 159 | it('gave us data after the correct amount of time', function() { 160 | // Wtfux: sometimes the timer is coming back a millisecond or two 161 | // faster. So we do a 'close-enough' assertion here ;) 162 | expect(this.time).to.be.at.least(295); 163 | }); 164 | }); -------------------------------------------------------------------------------- /test/writable_streambuffer.test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var expect = require('chai').expect; 4 | var fixtures = require('./fixtures'); 5 | var streamBuffer = require('../lib/streambuffer.js'); 6 | 7 | describe('WritableStreamBuffer with defaults', function() { 8 | beforeEach(function() { 9 | this.buffer = new streamBuffer.WritableStreamBuffer(); 10 | }); 11 | 12 | it('returns false on call to getContents() when empty', function() { 13 | expect(this.buffer.getContents()).to.be.false; 14 | }); 15 | 16 | it('returns false on call to getContentsAsString() when empty', function() { 17 | expect(this.buffer.getContentsAsString()).to.be.false; 18 | }); 19 | 20 | it('backing buffer should be default size', function() { 21 | expect(this.buffer.maxSize()).to.equal(streamBuffer.DEFAULT_INITIAL_SIZE); 22 | }); 23 | 24 | describe('when writing a simple string', function() { 25 | beforeEach(function() { 26 | this.buffer.write(fixtures.simpleString); 27 | }); 28 | 29 | it('should have a backing buffer of correct length', function() { 30 | expect(this.buffer.size()).to.equal(fixtures.simpleString.length); 31 | }); 32 | 33 | it('should have a default max size', function() { 34 | expect(this.buffer.maxSize()).to.equal(streamBuffer.DEFAULT_INITIAL_SIZE); 35 | }); 36 | 37 | it('contents should be correct', function() { 38 | expect(this.buffer.getContentsAsString()).to.equal(fixtures.simpleString); 39 | }); 40 | 41 | it('returns partial contents correctly', function() { 42 | var buf = Buffer.concat([ 43 | this.buffer.getContents(Math.floor(Buffer.byteLength(fixtures.simpleString) / 2)), 44 | this.buffer.getContents() 45 | ]); 46 | expect(buf.toString()).to.equal(fixtures.simpleString); 47 | }); 48 | }); 49 | 50 | describe('when writing a large binary blob', function() { 51 | beforeEach(function() { 52 | this.buffer.write(fixtures.largeBinaryData); 53 | }); 54 | 55 | it('should have a backing buffer of correct length', function() { 56 | expect(this.buffer.size()).to.equal(fixtures.largeBinaryData.length); 57 | }); 58 | 59 | it('should have a larger backing buffer max size', function() { 60 | expect(this.buffer.maxSize()).to.equal(streamBuffer.DEFAULT_INITIAL_SIZE + streamBuffer.DEFAULT_INCREMENT_AMOUNT); 61 | }); 62 | 63 | it('contents are valid', function() { 64 | expect(this.buffer.getContents()).to.deep.equal(fixtures.largeBinaryData); 65 | }); 66 | }); 67 | 68 | describe('when writing some simple data to the stream', function() { 69 | beforeEach(function() { 70 | this.buffer = new streamBuffer.WritableStreamBuffer(); 71 | this.buffer.write(fixtures.simpleString); 72 | }); 73 | 74 | describe('and retrieving half of it', function() { 75 | beforeEach(function() { 76 | this.firstStr = this.buffer.getContentsAsString('utf8', Math.floor(fixtures.simpleString.length / 2)); 77 | }); 78 | 79 | it('returns correct data', function() { 80 | expect(this.firstStr).to.equal(fixtures.simpleString.substring(0, Math.floor(fixtures.simpleString.length / 2))); 81 | }); 82 | 83 | it('leaves correct amount of data remaining in buffer', function() { 84 | expect(this.buffer.size()).to.equal(Math.ceil(fixtures.simpleString.length / 2)); 85 | }); 86 | 87 | describe('and then retrieving the other half of it', function() { 88 | beforeEach(function() { 89 | this.secondStr = this.buffer.getContentsAsString('utf8', Math.ceil(fixtures.simpleString.length / 2)); 90 | }); 91 | 92 | it('returns correct data', function() { 93 | expect(this.secondStr).to.equal(fixtures.simpleString.substring(Math.floor(fixtures.simpleString.length / 2))); 94 | }); 95 | 96 | it('results in an empty buffer', function() { 97 | expect(this.buffer.size()).to.equal(0); 98 | }); 99 | }); 100 | }); 101 | }); 102 | }); 103 | 104 | describe('WritableStreamBuffer with a different initial size and increment amount', function() { 105 | beforeEach(function() { 106 | this.buffer = new streamBuffer.WritableStreamBuffer({ 107 | initialSize: 62, 108 | incrementAmount: 321 109 | }); 110 | }); 111 | 112 | it('has the correct initial size', function() { 113 | expect(this.buffer.maxSize()).to.equal(62); 114 | }); 115 | 116 | describe('after data is written', function() { 117 | beforeEach(function() { 118 | this.buffer.write(fixtures.binaryData); 119 | }); 120 | 121 | it('has correct initial size + custom increment amount', function() { 122 | expect(this.buffer.maxSize()).to.equal(321 + 62); 123 | }); 124 | }); 125 | }); 126 | 127 | describe('When WritableStreamBuffer is written in two chunks', function() { 128 | beforeEach(function() { 129 | this.buffer = new streamBuffer.WritableStreamBuffer(); 130 | this.buffer.write(fixtures.simpleString); 131 | this.buffer.write(fixtures.simpleString); 132 | }); 133 | 134 | it('buffer contents are correct', function() { 135 | expect(this.buffer.getContentsAsString()).to.equal(fixtures.simpleString + fixtures.simpleString); 136 | }); 137 | }); 138 | --------------------------------------------------------------------------------