├── .coveralls.yml ├── .github ├── FUNDING.yml └── workflows │ ├── codeql-analysis.yml │ └── master-checks.yml ├── .gitignore ├── .npmignore ├── .play ├── es6Proxy.coffee ├── es6ProxyTest.coffee ├── es6ProxyTest2.coffee └── statSize.coffee ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE.md ├── LocalStorage.coffee ├── README.md ├── SECURITY.md ├── package-lock.json ├── package.json ├── register.js └── test ├── error-test.coffee ├── es6-test.coffee ├── json-storage-test.coffee ├── localstorage-test.coffee ├── no-tostring-test.coffee ├── recursive-mkdir-test.coffee ├── same-directory-twice-test.coffee ├── special-characters-in-keys-test.coffee ├── sync-test.coffee └── test.html /.coveralls.yml: -------------------------------------------------------------------------------- 1 | service_name: travis-pro 2 | repo_token: R1SoJjU5njYQYWAsEaKr47EdkI4zOW3om 3 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [lmaccherone] 4 | -------------------------------------------------------------------------------- /.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: [ master ] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [ master ] 20 | schedule: 21 | - cron: '18 19 * * 6' 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@v1 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@v1 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@v1 72 | -------------------------------------------------------------------------------- /.github/workflows/master-checks.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: CI 4 | 5 | # Controls when the action will run. 6 | on: 7 | # Triggers the workflow on push or pull request events but only for the master branch 8 | push: 9 | branches: [ master ] 10 | pull_request: 11 | branches: [ master ] 12 | 13 | # Allows you to run this workflow manually from the Actions tab 14 | workflow_dispatch: 15 | 16 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 17 | jobs: 18 | # This workflow contains a single job called "build" 19 | build: 20 | runs-on: ${{ matrix.os }} 21 | strategy: 22 | matrix: 23 | os: 24 | - ubuntu-latest 25 | - macos-latest 26 | - windows-latest 27 | node_version: 28 | # - 10 29 | # - 12 30 | - 14 31 | - 16 32 | - 18 33 | 34 | # Steps represent a sequence of tasks that will be executed as part of the job 35 | steps: 36 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 37 | - uses: actions/checkout@v2 38 | 39 | - name: Build and test 40 | run: | 41 | npm ci 42 | npm test 43 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | scratch 3 | coverage 4 | .nyc_output 5 | .play 6 | node_modules 7 | .idea 8 | LocalStorage.js 9 | *.map 10 | .dccache 11 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .idea/ 3 | .git/ 4 | node_modules/ 5 | coverage 6 | .nyc_output 7 | .play 8 | .dccache 9 | test 10 | *.yml 11 | Cakefile 12 | *.coffee 13 | *.map 14 | -------------------------------------------------------------------------------- /.play/es6Proxy.coffee: -------------------------------------------------------------------------------- 1 | # This now works on at least npm v5.x, but still requires harmony-proxies flag 2 | # To run `coffee --nodejs --harmony-proxies .play/es6Proxy.coffee` 3 | 4 | class ObjectLike 5 | constructor: (obj) -> 6 | unless obj? 7 | obj = {} 8 | @dummy = obj 9 | 10 | interceptor = 11 | set: (receiver, key, value) => 12 | @dummy[key] = value 13 | 14 | get: (receiver, key) => 15 | return @dummy[key] 16 | 17 | return Proxy.create(interceptor, @dummy) 18 | 19 | a = new ObjectLike() 20 | a['something long'] = 10 21 | console.log(a['something long']) -------------------------------------------------------------------------------- /.play/es6ProxyTest.coffee: -------------------------------------------------------------------------------- 1 | class ObjectLike 2 | constructor: (obj) -> 3 | unless obj? 4 | obj = {} 5 | @dummy = obj 6 | 7 | interceptor = 8 | set: (receiver, key, value) => 9 | @dummy[key] = value 10 | 11 | get: (receiver, key) => 12 | return @dummy[key] 13 | 14 | return Proxy.create(interceptor, @dummy) 15 | 16 | exports.es6ProxyTest = 17 | 18 | theTest: (test) -> 19 | a = new ObjectLike() 20 | a['something long'] = 10 21 | test.equal(a['something long'], 11) 22 | test.done() -------------------------------------------------------------------------------- /.play/es6ProxyTest2.coffee: -------------------------------------------------------------------------------- 1 | class ObjectLike 2 | constructor: (obj) -> 3 | unless obj? 4 | obj = {} 5 | @dummy = obj 6 | 7 | interceptor = 8 | set: (receiver, key, value) => 9 | @dummy[key] = value 10 | 11 | get: (receiver, key) => 12 | return @dummy[key] 13 | 14 | return Proxy.create(interceptor, @dummy) 15 | 16 | exports.es6ProxyTest = 17 | 18 | theTest: (test) -> 19 | a = new ObjectLike() 20 | a['something long'] = 10 21 | test.equal(a['something long'], 11) 22 | test.done() -------------------------------------------------------------------------------- /.play/statSize.coffee: -------------------------------------------------------------------------------- 1 | fs = require('fs') 2 | 3 | filename = '/Users/larry/.bash_history' 4 | console.log(fs.statSync(filename).size) 5 | file = fs.readFileSync(filename, 'utf8') 6 | console.log(file.length) 7 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | 2 | # Contributor Covenant Code of Conduct 3 | 4 | ## Our Pledge 5 | 6 | We as members, contributors, and leaders pledge to make participation in our 7 | community a harassment-free experience for everyone, regardless of age, body 8 | size, visible or invisible disability, ethnicity, sex characteristics, gender 9 | identity and expression, level of experience, education, socio-economic status, 10 | nationality, personal appearance, race, caste, color, religion, or sexual 11 | identity and orientation. 12 | 13 | We pledge to act and interact in ways that contribute to an open, welcoming, 14 | diverse, inclusive, and healthy community. 15 | 16 | ## Our Standards 17 | 18 | Examples of behavior that contributes to a positive environment for our 19 | community include: 20 | 21 | * Demonstrating empathy and kindness toward other people 22 | * Being respectful of differing opinions, viewpoints, and experiences 23 | * Giving and gracefully accepting constructive feedback 24 | * Accepting responsibility and apologizing to those affected by our mistakes, 25 | and learning from the experience 26 | * Focusing on what is best not just for us as individuals, but for the overall 27 | community 28 | 29 | Examples of unacceptable behavior include: 30 | 31 | * The use of sexualized language or imagery, and sexual attention or advances of 32 | any kind 33 | * Trolling, insulting or derogatory comments, and personal or political attacks 34 | * Public or private harassment 35 | * Publishing others' private information, such as a physical or email address, 36 | without their explicit permission 37 | * Other conduct which could reasonably be considered inappropriate in a 38 | professional setting 39 | 40 | ## Enforcement Responsibilities 41 | 42 | Community leaders are responsible for clarifying and enforcing our standards of 43 | acceptable behavior and will take appropriate and fair corrective action in 44 | response to any behavior that they deem inappropriate, threatening, offensive, 45 | or harmful. 46 | 47 | Community leaders have the right and responsibility to remove, edit, or reject 48 | comments, commits, code, wiki edits, issues, and other contributions that are 49 | not aligned to this Code of Conduct, and will communicate reasons for moderation 50 | decisions when appropriate. 51 | 52 | ## Scope 53 | 54 | This Code of Conduct applies within all community spaces, and also applies when 55 | an individual is officially representing the community in public spaces. 56 | Examples of representing our community include using an official e-mail address, 57 | posting via an official social media account, or acting as an appointed 58 | representative at an online or offline event. 59 | 60 | ## Enforcement 61 | 62 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 63 | reported to the primary community leader by private DM to 64 | [Larry on LinkedIn](https://www.linkedin.com/in/LarryMaccherone/). 65 | All complaints will be reviewed and investigated promptly and fairly. 66 | 67 | All community leaders are obligated to respect the privacy and security of the 68 | reporter of any incident. 69 | 70 | ## Enforcement Guidelines 71 | 72 | Community leaders will follow these Community Impact Guidelines in determining 73 | the consequences for any action they deem in violation of this Code of Conduct: 74 | 75 | ### 1. Correction 76 | 77 | **Community Impact**: Use of inappropriate language or other behavior deemed 78 | unprofessional or unwelcome in the community. 79 | 80 | **Consequence**: A private, written warning from community leaders, providing 81 | clarity around the nature of the violation and an explanation of why the 82 | behavior was inappropriate. A public apology may be requested. 83 | 84 | ### 2. Warning 85 | 86 | **Community Impact**: A violation through a single incident or series of 87 | actions. 88 | 89 | **Consequence**: A warning with consequences for continued behavior. No 90 | interaction with the people involved, including unsolicited interaction with 91 | those enforcing the Code of Conduct, for a specified period of time. This 92 | includes avoiding interactions in community spaces as well as external channels 93 | like social media. Violating these terms may lead to a temporary or permanent 94 | ban. 95 | 96 | ### 3. Temporary Ban 97 | 98 | **Community Impact**: A serious violation of community standards, including 99 | sustained inappropriate behavior. 100 | 101 | **Consequence**: A temporary ban from any sort of interaction or public 102 | communication with the community for a specified period of time. No public or 103 | private interaction with the people involved, including unsolicited interaction 104 | with those enforcing the Code of Conduct, is allowed during this period. 105 | Violating these terms may lead to a permanent ban. 106 | 107 | ### 4. Permanent Ban 108 | 109 | **Community Impact**: Demonstrating a pattern of violation of community 110 | standards, including sustained inappropriate behavior, harassment of an 111 | individual, or aggression toward or disparagement of classes of individuals. 112 | 113 | **Consequence**: A permanent ban from any sort of public interaction within the 114 | community. 115 | 116 | ## Attribution 117 | 118 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 119 | version 2.1, available at 120 | [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. 121 | 122 | Community Impact Guidelines were inspired by 123 | [Mozilla's code of conduct enforcement ladder][Mozilla CoC]. 124 | 125 | For answers to common questions about this code of conduct, see the FAQ at 126 | [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at 127 | [https://www.contributor-covenant.org/translations][translations]. 128 | 129 | [homepage]: https://www.contributor-covenant.org 130 | [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html 131 | [Mozilla CoC]: https://github.com/mozilla/diversity 132 | [FAQ]: https://www.contributor-covenant.org/faq 133 | [translations]: https://www.contributor-covenant.org/translations 134 | 135 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | 2 | # Contributing to node-localstorage 3 | 4 | First off, thanks for taking the time to contribute! ❤️ 5 | 6 | All types of contributions are encouraged and valued. See the [Table of Contents](#table-of-contents) for different ways to help and details about how this project handles them. The community looks forward to your contributions. 🎉 7 | 8 | ## I Have a Question 9 | 10 | Before you ask a question read the available [documentation](https://github.com/lmaccherone/node-localstorage/blob/master/README.md) and search for existing [issues](https://github.com/lmaccherone/node-localstorage/issues) that might help you. In case you have found a suitable issue but need more clarification, you can write your question as a comment in the issue. 11 | 12 | If you then still need to ask a question, then feel free open an [Issue](https://github.com/lmaccherone/node-localstorage/issues/new). 13 | 14 | We will respond to the issue as soon as possible. 15 | 16 | 17 | ## I Want To Contribute 18 | 19 | > ### Legal Notice 20 | > Contributions must be free of any encumberance. Contributions are an attestation that you have the necessary authority to contribute it under the project license. By making a contribution of code or documentation, you agree to donate rights to the contribution to the project for the project to do with it whatever it wishes including but not limited to offering the project under a different license. 21 | 22 | ### Reporting Bugs 23 | 24 | > #### Security Issues 25 | > You must never report security related issues, including vulnerabilities or the presence of sensitive information, to the issue tracker or elsewhere in public. See [SECURITY.md](https://github.com/lmaccherone/node-localstorage/blob/master/SECURITY.md) for instructions on how to report security issues. 26 | 27 | We use GitHub issues to track bugs and errors. If you run into an issue with the project: 28 | 29 | - Open an [Issue](https://github.com/lmaccherone/node-localstorage/issues/new). 30 | - Explain the behavior you would expect and the actual behavior. 31 | - The working agreement for this project is that the first step in fixing a bug is reproducing it in an automated test case, so the ideal bug report includes a failing test case but at the very least should include enough information for someone to reproduce it and write a test case. If you can't reproduce it, we can't fix it. 32 | - Make sure that your preferences are set so that you are notified when the issue is updated. This will allow you to respond to any questions or requests for additional information. 33 | 34 | 35 | ### Suggesting Enhancements 36 | 37 | Enhancement suggestions are tracked as [GitHub issues](https://github.com/lmaccherone/node-localstorage/issues). 38 | 39 | Steps to suggest an enhancement: 40 | 41 | - Make sure that you are using the latest version. 42 | - Read the [documentation](https://github.com/lmaccherone/node-localstorage/blob/master/README.md) carefully and find out if the functionality is already covered, maybe with an optional parameter or configuration. 43 | - Perform a [search](https://github.com/lmaccherone/node-localstorage/issues) to see if the enhancement has already been suggested. If it has, add a comment to the existing issue in support rather than opening a new one. 44 | - Think about whether your idea fits with the scope and goals of the project. 45 | - Open an [Issue](https://github.com/lmaccherone/node-localstorage/issues/new). 46 | - Describe the enhancement and the motivation behind it. If your enhancement targets a minority of users or is backward breaking propose it as optional with additional parameters or configuration. 47 | 48 | 49 | ### Your First Contribution 50 | 51 | Use the steps below to make your first code or documentation contribution to the project: 52 | 53 | - Fork the [repository](https://github.com/lmaccherone/node-localstorage/fork) into your account. 54 | - Make your changes in your fork. 55 | - Be sure to keep the style consistent with the existing code or documentation. 56 | - If your contribution adds new functionality, make sure that you add tests for both the happy path and unexpected inputs. 57 | - If your contribution fixes a bug, start by writing a failing test the duplicates the bug, then modify the code so the test no longer fails. Then go back and write more tests to cover any other cases similar to the one you just fixed. 58 | 59 | 60 | ## Attribution 61 | This guide is based on the **contributing-gen**. [Make your own](https://github.com/bttger/contributing-gen)! 62 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011 Lawrence S. Maccherone, Jr. 2 | 3 | MIT License 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated 6 | documentation files (the "Software"), to deal in the Software without restriction, including without limitation 7 | the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and 8 | to permit persons to whom the Software is furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 11 | 12 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 13 | TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 14 | THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 15 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 16 | IN THE SOFTWARE. -------------------------------------------------------------------------------- /LocalStorage.coffee: -------------------------------------------------------------------------------- 1 | path = require('path') 2 | fs = require('fs') 3 | events = require('events') 4 | writeSync = require('write-file-atomic').sync 5 | 6 | KEY_FOR_EMPTY_STRING = '---.EMPTY_STRING.---' # Chose something that no one is likely to ever use 7 | 8 | _emptyDirectory = (target) -> 9 | _rm(path.join(target, p)) for p in fs.readdirSync(target) 10 | 11 | _rm = (target) -> 12 | if fs.statSync(target).isDirectory() 13 | _emptyDirectory(target) 14 | fs.rmdirSync(target) 15 | else 16 | fs.unlinkSync(target) 17 | 18 | _escapeKey = (key) -> 19 | if key is '' 20 | newKey = KEY_FOR_EMPTY_STRING 21 | else 22 | newKey = "#{key}" 23 | return newKey 24 | 25 | class QUOTA_EXCEEDED_ERR extends Error 26 | constructor: (@message = 'Unknown error.') -> 27 | super() 28 | if Error.captureStackTrace? 29 | Error.captureStackTrace(this, @constructor) 30 | @name = @constructor.name 31 | 32 | toString: () -> 33 | return "#{@name}: #{@message}" 34 | 35 | class StorageEvent 36 | constructor: (@key, @oldValue, @newValue, @url, @storageArea = 'localStorage') -> 37 | 38 | class MetaKey # MetaKey contains key and size 39 | constructor: (@key, @index) -> 40 | unless this instanceof MetaKey 41 | return new MetaKey(@key, @index) 42 | 43 | createMap = -> # createMap contains Metakeys as properties 44 | Map = -> 45 | return 46 | Map.prototype = Object.create(null); 47 | return new Map() 48 | 49 | 50 | class LocalStorage extends events.EventEmitter 51 | instanceMap = {} 52 | 53 | constructor: (@_location, @quota = 5 * 1024 * 1024) -> 54 | super() 55 | # super(_location, quota) 56 | # @_location = _location 57 | # @quota = quota 58 | unless this instanceof LocalStorage 59 | return new LocalStorage(@_location, @quota) 60 | 61 | @_location = path.resolve(@_location) 62 | 63 | if instanceMap[@_location]? 64 | return instanceMap[@_location] 65 | 66 | @length = 0 # !TODO: Maybe change this to a property with __defineProperty__ 67 | @_bytesInUse = 0 68 | @_keys = [] 69 | @_metaKeyMap = createMap() 70 | @_eventUrl = "pid:" + process.pid 71 | @_init() 72 | @_QUOTA_EXCEEDED_ERR = QUOTA_EXCEEDED_ERR 73 | 74 | if Proxy? 75 | handler = 76 | set: (receiver, key, value) => 77 | if @[key]? 78 | @[key] = value 79 | else 80 | @setItem(key, value) 81 | return true 82 | 83 | get: (receiver, key) => 84 | if @[key]? 85 | return @[key] 86 | else 87 | return @getItem(key) 88 | 89 | ownKeys: (target) => 90 | return @_keys.map((k) -> 91 | if k is KEY_FOR_EMPTY_STRING 92 | '' 93 | else 94 | k 95 | ) 96 | 97 | getOwnPropertyDescriptor: (target, key) => 98 | return 99 | value: @[key] 100 | enumerable: true 101 | configurable: true 102 | 103 | instanceMap[@_location] = new Proxy(this, handler) 104 | return instanceMap[@_location] 105 | 106 | # else it'll return this 107 | instanceMap[@_location] = this 108 | return instanceMap[@_location] 109 | 110 | _init: () -> 111 | try 112 | stat = fs.statSync(@_location) 113 | if stat? and not stat.isDirectory() 114 | throw new Error("A file exists at the location '#{@_location}' when trying to create/open localStorage") 115 | # At this point, it exists and is definitely a directory. So read it. 116 | 117 | @_sync() 118 | 119 | return 120 | catch e 121 | # If it errors, that might mean it didn't exist, so try to create it 122 | if e.code != "ENOENT" 123 | throw e 124 | try 125 | fs.mkdirSync(@_location, { recursive: true }) 126 | catch e 127 | if e.code != "EEXIST" 128 | throw e 129 | return 130 | 131 | _sync:()-> 132 | @_bytesInUse = 0 133 | @length = 0 134 | _keys = fs.readdirSync(@_location) 135 | for k, index in _keys 136 | _decodedKey = decodeURIComponent(k) 137 | @_keys.push(_decodedKey) 138 | _MetaKey = new MetaKey(k, index) 139 | @_metaKeyMap[_decodedKey] = _MetaKey 140 | stat = @_getStat(k) 141 | if stat?.size? 142 | _MetaKey.size = stat.size 143 | @_bytesInUse += stat.size 144 | @length = _keys.length 145 | 146 | setItem: (key, value) -> 147 | hasListeners = this.listenerCount('storage') 148 | oldValue = null 149 | if hasListeners 150 | oldValue = this.getItem(key) 151 | key = _escapeKey(key) 152 | encodedKey = encodeURIComponent(key).replace(/[!'()]/g, escape).replace(/\*/g, "%2A") 153 | 154 | filename = path.join(@_location, encodedKey) 155 | valueString = "#{value}" 156 | valueStringLength = valueString.length 157 | metaKey = @_metaKeyMap[key] 158 | existsBeforeSet = !!metaKey 159 | if existsBeforeSet 160 | oldLength = metaKey.size 161 | else 162 | oldLength = 0 163 | if @_bytesInUse - oldLength + valueStringLength > @quota 164 | throw new QUOTA_EXCEEDED_ERR() 165 | writeSync(filename, valueString, {encoding:'utf8'}) 166 | unless existsBeforeSet 167 | metaKey = new MetaKey(encodedKey, (@_keys.push(key)) - 1) 168 | metaKey.size = valueStringLength 169 | @_metaKeyMap[key] = metaKey 170 | @length += 1 171 | @_bytesInUse += valueStringLength 172 | if hasListeners 173 | evnt = new StorageEvent(key, oldValue, value, @_eventUrl) 174 | this.emit('storage', evnt) 175 | 176 | getItem: (key) -> 177 | key = _escapeKey(key) 178 | metaKey = @_metaKeyMap[key] 179 | if !!metaKey 180 | filename = path.join(@_location, metaKey.key) 181 | return fs.readFileSync(filename, 'utf8') 182 | else 183 | return null 184 | 185 | _getStat: (key) -> 186 | key = _escapeKey(key) 187 | filename = path.join(@_location, encodeURIComponent(key)) 188 | try 189 | return fs.statSync(filename) 190 | catch 191 | return null 192 | 193 | removeItem: (key) -> 194 | key = _escapeKey(key) 195 | metaKey = @_metaKeyMap[key] 196 | if (!!metaKey) 197 | hasListeners = this.listenerCount('storage') 198 | oldValue = null 199 | if hasListeners 200 | oldValue = this.getItem(key) 201 | delete @_metaKeyMap[key] 202 | @length -= 1 203 | @_bytesInUse -= metaKey.size 204 | filename = path.join(@_location, metaKey.key) 205 | @_keys.splice(metaKey.index,1) 206 | for k,v of @_metaKeyMap 207 | meta = @_metaKeyMap[k] 208 | if meta.index > metaKey.index 209 | meta.index -= 1 210 | _rm(filename) 211 | if hasListeners 212 | evnt = new StorageEvent(key, oldValue, null, @_eventUrl) 213 | this.emit('storage', evnt) 214 | 215 | key: (n) -> 216 | rawKey = @_keys[n] 217 | if rawKey is KEY_FOR_EMPTY_STRING 218 | return '' 219 | else 220 | return rawKey 221 | 222 | clear: () -> 223 | _emptyDirectory(@_location) 224 | @_metaKeyMap = createMap() 225 | @_keys = [] 226 | @length = 0 227 | @_bytesInUse = 0 228 | if this.listenerCount('storage') 229 | evnt = new StorageEvent(null, null, null, @_eventUrl) 230 | this.emit('storage', evnt) 231 | 232 | _getBytesInUse: () -> 233 | return @_bytesInUse 234 | 235 | _deleteLocation: () -> 236 | delete instanceMap[@_location] 237 | _rm(@_location) 238 | @_metaKeyMap = {} 239 | @_keys = [] 240 | @length = 0 241 | @_bytesInUse = 0 242 | 243 | class JSONStorage extends LocalStorage 244 | 245 | setItem: (key, value) -> 246 | newValue = JSON.stringify(value) 247 | super(key, newValue) 248 | 249 | getItem: (key) -> 250 | return JSON.parse(super(key)) 251 | 252 | exports.LocalStorage = LocalStorage 253 | exports.JSONStorage = JSONStorage 254 | exports.QUOTA_EXCEEDED_ERR = QUOTA_EXCEEDED_ERR 255 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |  2 | 3 |  4 | 5 | # node-localstorage [](https://github.com/sponsors/lmaccherone) # 6 | 7 | Copyright (c) 2012, Lawrence S. Maccherone, Jr. 8 | 9 | _A drop-in substitute for the browser native localStorage API that runs on node.js._ 10 | 11 | ### Fully implements the localStorage specfication including: ### 12 | 13 | * All methods in the [localStorage spec](http://www.w3.org/TR/webstorage/#storage) 14 | interface including: 15 | * length 16 | * setItem(key, value) 17 | * getItem(key) 18 | * removeItem(key) 19 | * key(n) 20 | * clear() 21 | * Serializes to disk in the location specified during instantiation 22 | * Supports the setting of a quota (default 5MB) 23 | * Events. Follows the spec in all ways that make sense for node.js. 24 | However, the spec states that events are NOT supposed to be emitted to the 25 | browser window that took the action that triggered the event in the first place. 26 | Since we don't really have the equivalent of a browser window in node.js, we trigger 27 | events in the current process. 28 | * Associative array `localStorage['myKey'] = 'myValue'` and dot property `localStorage.myKey = 'myValue'` 29 | syntax if you are in an ES6 supported environment. 30 | * Using non-standard `_sync()` files can be re-read from disk. This is useful if you are using more 31 | than one process to access the same storage location. 32 | 33 | ### Limitations: 34 | 35 | * When using Associative array or dot property syntax, you cannot use keys that 36 | collide with my "private" properties and methods including keys that start 37 | with "_" like "_init" 38 | * If you specify a location that already has files in it when you create an 39 | instance, you might already exceed the quota or might do so sooner than you 40 | expect. This is intentional because we want it to behave like the browser 41 | and persist the storage even after your program is restarted. 42 | 43 | ## Credits ## 44 | 45 | Author: [Larry Maccherone](http://maccherone.com) 46 | 47 | ## Usage ## 48 | 49 | ### CoffeeScript ### 50 | 51 | ```coffee 52 | unless localStorage? 53 | {LocalStorage} = require('../') # require('node-localstorage') for you 54 | localStorage = new LocalStorage('./scratch') 55 | 56 | localStorage.setItem('myFirstKey', 'myFirstValue') 57 | console.log(localStorage.getItem('myFirstKey')) 58 | # myFirstValue 59 | 60 | localStorage._deleteLocation() # cleans up ./scratch created during doctest 61 | ``` 62 | 63 | ### ReactJs ### 64 | 65 | Open or create `src/setupTests.js` and add these two lines: 66 | 67 | ``` JavaScript 68 | // /src/setupTests.js 69 | import { LocalStorage } from "node-localstorage"; 70 | 71 | global.localStorage = new LocalStorage('./scratch'); 72 | ``` 73 | 74 | ### JavaScript ### 75 | 76 | ```JavaScript 77 | if (typeof localStorage === "undefined" || localStorage === null) { 78 | var LocalStorage = require('node-localstorage').LocalStorage; 79 | localStorage = new LocalStorage('./scratch'); 80 | } 81 | 82 | localStorage.setItem('myFirstKey', 'myFirstValue'); 83 | console.log(localStorage.getItem('myFirstKey')); 84 | ``` 85 | 86 | ### Polyfill on Node.js ### 87 | 88 | Polyfil your node.js environment with this as the global localStorage when launching your own code 89 | 90 | ```sh 91 | node -r node-localstorage/register my-code.js 92 | ``` 93 | 94 | ## Installation ## 95 | 96 | `npm install node-localstorage` 97 | 98 | ## Changelog ## 99 | 100 | * 3.0.5 - 2023-08-05 - Fixed bug with `_sync()` (thanks @create3000 for the report) 101 | * 3.0.4 - 2023-07-25 - Merged pull request to add `_sync()` method (thanks @NexusNull) 102 | * 3.0.2 - 2023-07-25 - Grrr forgot to update changlelog and package.json before running `npm publish` 103 | * 3.0.1 - 2023-07-25 - Object.keys(localStorage) now behaves the same as browser closing Issue #27 (thanks @Hotell) 104 | * 3.0.0 - 2023-07-25 - **Backward breaking** Upgrade node.js requirements to 14.x. Bug and compatability fixes 105 | * 2.2.1 - 2021-06-04 - Fixed serveral small issues reported by users 106 | * 2.1.7 - 2020-06-08 - Fixed stringifying null and undefined (thanks @gamesaucer) 107 | * 2.1.6 - 2020-04-10 - Fix backward compatibility bug (thanks @WillBartee) 108 | * 2.1.5 - 2019-12-02 - Fixed empty string key(n) return (@appy-one, thanks for reporting) 109 | * 2.1.2 thru 2.1.4 - 2019-11-17 - Upgrading and testing npm publish scripts 110 | * 2.1.1 - 2019-11-17 - npm publish cleanup 111 | * 2.1.0 - 2019-11-17 - Added back dot-property and associative-array syntax using ES6 Proxy 112 | * 2.0.0 - 2019-11-17 - Updated all the depdendencies, added ability to register as polyfill (thanks @dy) 113 | * 1.3.1 - 2018-03-19 - Resolves issue #32 (thanks, plamens) 114 | * 1.3.0 - 2016-04-09 - **Possibly backward breaking if you were using experimental syntax** Reverted experimental 115 | associative array and dot-property syntax. The API for Proxy changed with node.js v6.x which broke it. Then when 116 | I switched to the new syntax, it broke the EventEmitter functionality. Will restore once I know how to fix that. 117 | * 1.2.0 - 2016-04-09 - Atomic writes (thanks, mvayngrib) 118 | * 1.1.2 - 2016-01-08 - Resolves issue #17 (thanks, evilaliv3) 119 | * 1.1.1 - 2016-01-04 - Smarter associative array and dot-property syntax support 120 | * 1.1.0 - 2016-01-03 - **Backward breaking** if you used any of the non-standard methods. They are now all preceded with 121 | an underscore. Big upgrade for this version is experimental support for associative array and dot-property syntax. 122 | * 1.0.0 - 2016-01-03 - Fixed bug with empty string key (thanks, tinybike) 123 | * 0.6.0 - 2015-09-11 - Removed references to deprecated fs.existsSync() (thanks, josephbosire) 124 | * 0.5.2 - 2015-08-01 - Fixed defect where keys were not being updated correctly by removeItem() (thanks, ed69140) 125 | * 0.5.1 - 2015-06-01 - Added support for events 126 | * 0.5.0 - 2015-02-02 - Added JSONStorage class which allows you set and get native JSON 127 | * 0.4.1 - 2015-02-02 - More robust publishing/tagging (like Lumenize) 128 | * 0.4.0 - 2015-02-02 - Uses more efficient fs.statSync to set initial size (thanks, sudheer594) 129 | * 0.3.6 - 2014-12-24 - Allows usage without `new` 130 | * 0.3.5 - 2014-12-23 - Fixed toString() for QuotaExceededError 131 | * 0.3.4 - 2013-07-07 - Moved CoffeeScript to devDependencies 132 | * 0.3.3 - 2013-04-05 - Added support for '/' in keys by escaping before creating file names 133 | * 0.3.2 - 2013-01-19 - Renamed QuotaExceededError to QUOTA_EXCEEDED_ERR to match most browsers 134 | * 0.3.1 - 2013-01-19 - Fixed bug where it threw plain old Error instead of new QuotaExceededError 135 | * 0.3.0 - 2013-01-19 - Added QuotaExceededError support 136 | * 0.2.0 - 2013-01-03 - Added quota support 137 | * 0.1.2 - 2012-11-02 - Finally got Travis CI working 138 | * 0.1.1 - 2012-10-29 - Update to support Travis CI 139 | * 0.1.0 - 2012-10-29 - Original version 140 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | I release patches for security vulnerabilities. Which versions are eligible 6 | receiving such patches depend on the CVSS v3.0 Rating: 7 | 8 | | CVSS v3.0 | Supported Versions | 9 | | --------- | ----------------------------------------- | 10 | | 9.0-10.0 | Releases within the previous three months | 11 | | 4.0-8.9 | Most recent release | 12 | 13 | ## Reporting a Vulnerability 14 | 15 | Please report (suspected) security vulnerabilities by private DM to 16 | [Larry on LinkedIn](https://www.linkedin.com/in/LarryMaccherone/). 17 | You will receive a response within 48 hours. If the issue is confirmed, 18 | I will release a patch as soon as possible depending on complexity 19 | but historically within a few days. 20 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node-localstorage", 3 | "version": "3.0.2", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "node-localstorage", 9 | "version": "3.0.2", 10 | "license": "MIT", 11 | "dependencies": { 12 | "write-file-atomic": "^5.0.1" 13 | }, 14 | "devDependencies": { 15 | "coffeescript": "^2.7.0", 16 | "coffeetape": "^2.0.0", 17 | "nyc": "^15.1.0", 18 | "tap-nyc": "^1.0.3", 19 | "tap-spec": "^5.0.0", 20 | "tape": "^5.6.6" 21 | }, 22 | "engines": { 23 | "node": ">=0.12" 24 | } 25 | }, 26 | "node_modules/@ampproject/remapping": { 27 | "version": "2.2.1", 28 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", 29 | "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", 30 | "dev": true, 31 | "dependencies": { 32 | "@jridgewell/gen-mapping": "^0.3.0", 33 | "@jridgewell/trace-mapping": "^0.3.9" 34 | }, 35 | "engines": { 36 | "node": ">=6.0.0" 37 | } 38 | }, 39 | "node_modules/@babel/code-frame": { 40 | "version": "7.22.5", 41 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", 42 | "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", 43 | "dev": true, 44 | "dependencies": { 45 | "@babel/highlight": "^7.22.5" 46 | }, 47 | "engines": { 48 | "node": ">=6.9.0" 49 | } 50 | }, 51 | "node_modules/@babel/compat-data": { 52 | "version": "7.22.9", 53 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", 54 | "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", 55 | "dev": true, 56 | "engines": { 57 | "node": ">=6.9.0" 58 | } 59 | }, 60 | "node_modules/@babel/core": { 61 | "version": "7.22.9", 62 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", 63 | "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", 64 | "dev": true, 65 | "dependencies": { 66 | "@ampproject/remapping": "^2.2.0", 67 | "@babel/code-frame": "^7.22.5", 68 | "@babel/generator": "^7.22.9", 69 | "@babel/helper-compilation-targets": "^7.22.9", 70 | "@babel/helper-module-transforms": "^7.22.9", 71 | "@babel/helpers": "^7.22.6", 72 | "@babel/parser": "^7.22.7", 73 | "@babel/template": "^7.22.5", 74 | "@babel/traverse": "^7.22.8", 75 | "@babel/types": "^7.22.5", 76 | "convert-source-map": "^1.7.0", 77 | "debug": "^4.1.0", 78 | "gensync": "^1.0.0-beta.2", 79 | "json5": "^2.2.2", 80 | "semver": "^6.3.1" 81 | }, 82 | "engines": { 83 | "node": ">=6.9.0" 84 | }, 85 | "funding": { 86 | "type": "opencollective", 87 | "url": "https://opencollective.com/babel" 88 | } 89 | }, 90 | "node_modules/@babel/generator": { 91 | "version": "7.22.9", 92 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", 93 | "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", 94 | "dev": true, 95 | "dependencies": { 96 | "@babel/types": "^7.22.5", 97 | "@jridgewell/gen-mapping": "^0.3.2", 98 | "@jridgewell/trace-mapping": "^0.3.17", 99 | "jsesc": "^2.5.1" 100 | }, 101 | "engines": { 102 | "node": ">=6.9.0" 103 | } 104 | }, 105 | "node_modules/@babel/helper-compilation-targets": { 106 | "version": "7.22.9", 107 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", 108 | "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", 109 | "dev": true, 110 | "dependencies": { 111 | "@babel/compat-data": "^7.22.9", 112 | "@babel/helper-validator-option": "^7.22.5", 113 | "browserslist": "^4.21.9", 114 | "lru-cache": "^5.1.1", 115 | "semver": "^6.3.1" 116 | }, 117 | "engines": { 118 | "node": ">=6.9.0" 119 | }, 120 | "peerDependencies": { 121 | "@babel/core": "^7.0.0" 122 | } 123 | }, 124 | "node_modules/@babel/helper-environment-visitor": { 125 | "version": "7.22.5", 126 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", 127 | "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", 128 | "dev": true, 129 | "engines": { 130 | "node": ">=6.9.0" 131 | } 132 | }, 133 | "node_modules/@babel/helper-function-name": { 134 | "version": "7.22.5", 135 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", 136 | "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", 137 | "dev": true, 138 | "dependencies": { 139 | "@babel/template": "^7.22.5", 140 | "@babel/types": "^7.22.5" 141 | }, 142 | "engines": { 143 | "node": ">=6.9.0" 144 | } 145 | }, 146 | "node_modules/@babel/helper-hoist-variables": { 147 | "version": "7.22.5", 148 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", 149 | "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", 150 | "dev": true, 151 | "dependencies": { 152 | "@babel/types": "^7.22.5" 153 | }, 154 | "engines": { 155 | "node": ">=6.9.0" 156 | } 157 | }, 158 | "node_modules/@babel/helper-module-imports": { 159 | "version": "7.22.5", 160 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", 161 | "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", 162 | "dev": true, 163 | "dependencies": { 164 | "@babel/types": "^7.22.5" 165 | }, 166 | "engines": { 167 | "node": ">=6.9.0" 168 | } 169 | }, 170 | "node_modules/@babel/helper-module-transforms": { 171 | "version": "7.22.9", 172 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", 173 | "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", 174 | "dev": true, 175 | "dependencies": { 176 | "@babel/helper-environment-visitor": "^7.22.5", 177 | "@babel/helper-module-imports": "^7.22.5", 178 | "@babel/helper-simple-access": "^7.22.5", 179 | "@babel/helper-split-export-declaration": "^7.22.6", 180 | "@babel/helper-validator-identifier": "^7.22.5" 181 | }, 182 | "engines": { 183 | "node": ">=6.9.0" 184 | }, 185 | "peerDependencies": { 186 | "@babel/core": "^7.0.0" 187 | } 188 | }, 189 | "node_modules/@babel/helper-simple-access": { 190 | "version": "7.22.5", 191 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", 192 | "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", 193 | "dev": true, 194 | "dependencies": { 195 | "@babel/types": "^7.22.5" 196 | }, 197 | "engines": { 198 | "node": ">=6.9.0" 199 | } 200 | }, 201 | "node_modules/@babel/helper-split-export-declaration": { 202 | "version": "7.22.6", 203 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", 204 | "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", 205 | "dev": true, 206 | "dependencies": { 207 | "@babel/types": "^7.22.5" 208 | }, 209 | "engines": { 210 | "node": ">=6.9.0" 211 | } 212 | }, 213 | "node_modules/@babel/helper-string-parser": { 214 | "version": "7.22.5", 215 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", 216 | "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", 217 | "dev": true, 218 | "engines": { 219 | "node": ">=6.9.0" 220 | } 221 | }, 222 | "node_modules/@babel/helper-validator-identifier": { 223 | "version": "7.22.5", 224 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", 225 | "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", 226 | "dev": true, 227 | "engines": { 228 | "node": ">=6.9.0" 229 | } 230 | }, 231 | "node_modules/@babel/helper-validator-option": { 232 | "version": "7.22.5", 233 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", 234 | "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", 235 | "dev": true, 236 | "engines": { 237 | "node": ">=6.9.0" 238 | } 239 | }, 240 | "node_modules/@babel/helpers": { 241 | "version": "7.22.6", 242 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", 243 | "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", 244 | "dev": true, 245 | "dependencies": { 246 | "@babel/template": "^7.22.5", 247 | "@babel/traverse": "^7.22.6", 248 | "@babel/types": "^7.22.5" 249 | }, 250 | "engines": { 251 | "node": ">=6.9.0" 252 | } 253 | }, 254 | "node_modules/@babel/highlight": { 255 | "version": "7.22.5", 256 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", 257 | "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", 258 | "dev": true, 259 | "dependencies": { 260 | "@babel/helper-validator-identifier": "^7.22.5", 261 | "chalk": "^2.0.0", 262 | "js-tokens": "^4.0.0" 263 | }, 264 | "engines": { 265 | "node": ">=6.9.0" 266 | } 267 | }, 268 | "node_modules/@babel/highlight/node_modules/ansi-styles": { 269 | "version": "3.2.1", 270 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 271 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 272 | "dev": true, 273 | "dependencies": { 274 | "color-convert": "^1.9.0" 275 | }, 276 | "engines": { 277 | "node": ">=4" 278 | } 279 | }, 280 | "node_modules/@babel/highlight/node_modules/chalk": { 281 | "version": "2.4.2", 282 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 283 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 284 | "dev": true, 285 | "dependencies": { 286 | "ansi-styles": "^3.2.1", 287 | "escape-string-regexp": "^1.0.5", 288 | "supports-color": "^5.3.0" 289 | }, 290 | "engines": { 291 | "node": ">=4" 292 | } 293 | }, 294 | "node_modules/@babel/highlight/node_modules/supports-color": { 295 | "version": "5.5.0", 296 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 297 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 298 | "dev": true, 299 | "dependencies": { 300 | "has-flag": "^3.0.0" 301 | }, 302 | "engines": { 303 | "node": ">=4" 304 | } 305 | }, 306 | "node_modules/@babel/parser": { 307 | "version": "7.22.7", 308 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", 309 | "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", 310 | "dev": true, 311 | "bin": { 312 | "parser": "bin/babel-parser.js" 313 | }, 314 | "engines": { 315 | "node": ">=6.0.0" 316 | } 317 | }, 318 | "node_modules/@babel/template": { 319 | "version": "7.22.5", 320 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", 321 | "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", 322 | "dev": true, 323 | "dependencies": { 324 | "@babel/code-frame": "^7.22.5", 325 | "@babel/parser": "^7.22.5", 326 | "@babel/types": "^7.22.5" 327 | }, 328 | "engines": { 329 | "node": ">=6.9.0" 330 | } 331 | }, 332 | "node_modules/@babel/traverse": { 333 | "version": "7.22.8", 334 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", 335 | "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", 336 | "dev": true, 337 | "dependencies": { 338 | "@babel/code-frame": "^7.22.5", 339 | "@babel/generator": "^7.22.7", 340 | "@babel/helper-environment-visitor": "^7.22.5", 341 | "@babel/helper-function-name": "^7.22.5", 342 | "@babel/helper-hoist-variables": "^7.22.5", 343 | "@babel/helper-split-export-declaration": "^7.22.6", 344 | "@babel/parser": "^7.22.7", 345 | "@babel/types": "^7.22.5", 346 | "debug": "^4.1.0", 347 | "globals": "^11.1.0" 348 | }, 349 | "engines": { 350 | "node": ">=6.9.0" 351 | } 352 | }, 353 | "node_modules/@babel/types": { 354 | "version": "7.22.5", 355 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", 356 | "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", 357 | "dev": true, 358 | "dependencies": { 359 | "@babel/helper-string-parser": "^7.22.5", 360 | "@babel/helper-validator-identifier": "^7.22.5", 361 | "to-fast-properties": "^2.0.0" 362 | }, 363 | "engines": { 364 | "node": ">=6.9.0" 365 | } 366 | }, 367 | "node_modules/@istanbuljs/load-nyc-config": { 368 | "version": "1.1.0", 369 | "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", 370 | "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", 371 | "dev": true, 372 | "dependencies": { 373 | "camelcase": "^5.3.1", 374 | "find-up": "^4.1.0", 375 | "get-package-type": "^0.1.0", 376 | "js-yaml": "^3.13.1", 377 | "resolve-from": "^5.0.0" 378 | }, 379 | "engines": { 380 | "node": ">=8" 381 | } 382 | }, 383 | "node_modules/@istanbuljs/schema": { 384 | "version": "0.1.3", 385 | "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", 386 | "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", 387 | "dev": true, 388 | "engines": { 389 | "node": ">=8" 390 | } 391 | }, 392 | "node_modules/@jridgewell/gen-mapping": { 393 | "version": "0.3.3", 394 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", 395 | "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", 396 | "dev": true, 397 | "dependencies": { 398 | "@jridgewell/set-array": "^1.0.1", 399 | "@jridgewell/sourcemap-codec": "^1.4.10", 400 | "@jridgewell/trace-mapping": "^0.3.9" 401 | }, 402 | "engines": { 403 | "node": ">=6.0.0" 404 | } 405 | }, 406 | "node_modules/@jridgewell/resolve-uri": { 407 | "version": "3.1.0", 408 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", 409 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", 410 | "dev": true, 411 | "engines": { 412 | "node": ">=6.0.0" 413 | } 414 | }, 415 | "node_modules/@jridgewell/set-array": { 416 | "version": "1.1.2", 417 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 418 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 419 | "dev": true, 420 | "engines": { 421 | "node": ">=6.0.0" 422 | } 423 | }, 424 | "node_modules/@jridgewell/sourcemap-codec": { 425 | "version": "1.4.15", 426 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 427 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 428 | "dev": true 429 | }, 430 | "node_modules/@jridgewell/trace-mapping": { 431 | "version": "0.3.18", 432 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", 433 | "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", 434 | "dev": true, 435 | "dependencies": { 436 | "@jridgewell/resolve-uri": "3.1.0", 437 | "@jridgewell/sourcemap-codec": "1.4.14" 438 | } 439 | }, 440 | "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { 441 | "version": "1.4.14", 442 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", 443 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", 444 | "dev": true 445 | }, 446 | "node_modules/@ljharb/resumer": { 447 | "version": "0.0.1", 448 | "resolved": "https://registry.npmjs.org/@ljharb/resumer/-/resumer-0.0.1.tgz", 449 | "integrity": "sha512-skQiAOrCfO7vRTq53cxznMpks7wS1va95UCidALlOVWqvBAzwPVErwizDwoMqNVMEn1mDq0utxZd02eIrvF1lw==", 450 | "dev": true, 451 | "dependencies": { 452 | "@ljharb/through": "^2.3.9" 453 | }, 454 | "engines": { 455 | "node": ">= 0.4" 456 | } 457 | }, 458 | "node_modules/@ljharb/through": { 459 | "version": "2.3.9", 460 | "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.9.tgz", 461 | "integrity": "sha512-yN599ZBuMPPK4tdoToLlvgJB4CLK8fGl7ntfy0Wn7U6ttNvHYurd81bfUiK/6sMkiIwm65R6ck4L6+Y3DfVbNQ==", 462 | "dev": true, 463 | "engines": { 464 | "node": ">= 0.4" 465 | } 466 | }, 467 | "node_modules/aggregate-error": { 468 | "version": "3.1.0", 469 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", 470 | "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", 471 | "dev": true, 472 | "dependencies": { 473 | "clean-stack": "^2.0.0", 474 | "indent-string": "^4.0.0" 475 | }, 476 | "engines": { 477 | "node": ">=8" 478 | } 479 | }, 480 | "node_modules/ansi-regex": { 481 | "version": "2.1.1", 482 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 483 | "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", 484 | "dev": true, 485 | "engines": { 486 | "node": ">=0.10.0" 487 | } 488 | }, 489 | "node_modules/ansi-styles": { 490 | "version": "2.2.1", 491 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 492 | "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", 493 | "dev": true, 494 | "engines": { 495 | "node": ">=0.10.0" 496 | } 497 | }, 498 | "node_modules/append-transform": { 499 | "version": "2.0.0", 500 | "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", 501 | "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", 502 | "dev": true, 503 | "dependencies": { 504 | "default-require-extensions": "^3.0.0" 505 | }, 506 | "engines": { 507 | "node": ">=8" 508 | } 509 | }, 510 | "node_modules/archy": { 511 | "version": "1.0.0", 512 | "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", 513 | "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", 514 | "dev": true 515 | }, 516 | "node_modules/argparse": { 517 | "version": "1.0.10", 518 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 519 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 520 | "dev": true, 521 | "dependencies": { 522 | "sprintf-js": "~1.0.2" 523 | } 524 | }, 525 | "node_modules/array-buffer-byte-length": { 526 | "version": "1.0.0", 527 | "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", 528 | "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", 529 | "dev": true, 530 | "dependencies": { 531 | "call-bind": "^1.0.2", 532 | "is-array-buffer": "^3.0.1" 533 | }, 534 | "funding": { 535 | "url": "https://github.com/sponsors/ljharb" 536 | } 537 | }, 538 | "node_modules/array.prototype.every": { 539 | "version": "1.1.4", 540 | "resolved": "https://registry.npmjs.org/array.prototype.every/-/array.prototype.every-1.1.4.tgz", 541 | "integrity": "sha512-Aui35iRZk1HHLRAyF7QP0KAnOnduaQ6fo6k1NVWfRc0xTs2AZ70ytlXvOmkC6Di4JmUs2Wv3DYzGtCQFSk5uGg==", 542 | "dev": true, 543 | "dependencies": { 544 | "call-bind": "^1.0.2", 545 | "define-properties": "^1.1.4", 546 | "es-abstract": "^1.20.4", 547 | "is-string": "^1.0.7" 548 | }, 549 | "engines": { 550 | "node": ">= 0.4" 551 | }, 552 | "funding": { 553 | "url": "https://github.com/sponsors/ljharb" 554 | } 555 | }, 556 | "node_modules/arraybuffer.prototype.slice": { 557 | "version": "1.0.1", 558 | "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", 559 | "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", 560 | "dev": true, 561 | "dependencies": { 562 | "array-buffer-byte-length": "^1.0.0", 563 | "call-bind": "^1.0.2", 564 | "define-properties": "^1.2.0", 565 | "get-intrinsic": "^1.2.1", 566 | "is-array-buffer": "^3.0.2", 567 | "is-shared-array-buffer": "^1.0.2" 568 | }, 569 | "engines": { 570 | "node": ">= 0.4" 571 | }, 572 | "funding": { 573 | "url": "https://github.com/sponsors/ljharb" 574 | } 575 | }, 576 | "node_modules/available-typed-arrays": { 577 | "version": "1.0.5", 578 | "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", 579 | "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", 580 | "dev": true, 581 | "engines": { 582 | "node": ">= 0.4" 583 | }, 584 | "funding": { 585 | "url": "https://github.com/sponsors/ljharb" 586 | } 587 | }, 588 | "node_modules/balanced-match": { 589 | "version": "1.0.2", 590 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 591 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 592 | "dev": true 593 | }, 594 | "node_modules/brace-expansion": { 595 | "version": "1.1.11", 596 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 597 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 598 | "dev": true, 599 | "dependencies": { 600 | "balanced-match": "^1.0.0", 601 | "concat-map": "0.0.1" 602 | } 603 | }, 604 | "node_modules/browserslist": { 605 | "version": "4.21.9", 606 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", 607 | "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", 608 | "dev": true, 609 | "funding": [ 610 | { 611 | "type": "opencollective", 612 | "url": "https://opencollective.com/browserslist" 613 | }, 614 | { 615 | "type": "tidelift", 616 | "url": "https://tidelift.com/funding/github/npm/browserslist" 617 | }, 618 | { 619 | "type": "github", 620 | "url": "https://github.com/sponsors/ai" 621 | } 622 | ], 623 | "dependencies": { 624 | "caniuse-lite": "^1.0.30001503", 625 | "electron-to-chromium": "^1.4.431", 626 | "node-releases": "^2.0.12", 627 | "update-browserslist-db": "^1.0.11" 628 | }, 629 | "bin": { 630 | "browserslist": "cli.js" 631 | }, 632 | "engines": { 633 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 634 | } 635 | }, 636 | "node_modules/buffer-shims": { 637 | "version": "1.0.0", 638 | "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", 639 | "integrity": "sha512-Zy8ZXMyxIT6RMTeY7OP/bDndfj6bwCan7SS98CEndS6deHwWPpseeHlwarNcBim+etXnF9HBc1non5JgDaJU1g==", 640 | "dev": true 641 | }, 642 | "node_modules/caching-transform": { 643 | "version": "4.0.0", 644 | "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", 645 | "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", 646 | "dev": true, 647 | "dependencies": { 648 | "hasha": "^5.0.0", 649 | "make-dir": "^3.0.0", 650 | "package-hash": "^4.0.0", 651 | "write-file-atomic": "^3.0.0" 652 | }, 653 | "engines": { 654 | "node": ">=8" 655 | } 656 | }, 657 | "node_modules/caching-transform/node_modules/write-file-atomic": { 658 | "version": "3.0.3", 659 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", 660 | "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", 661 | "dev": true, 662 | "dependencies": { 663 | "imurmurhash": "^0.1.4", 664 | "is-typedarray": "^1.0.0", 665 | "signal-exit": "^3.0.2", 666 | "typedarray-to-buffer": "^3.1.5" 667 | } 668 | }, 669 | "node_modules/call-bind": { 670 | "version": "1.0.2", 671 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 672 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 673 | "dev": true, 674 | "dependencies": { 675 | "function-bind": "^1.1.1", 676 | "get-intrinsic": "^1.0.2" 677 | }, 678 | "funding": { 679 | "url": "https://github.com/sponsors/ljharb" 680 | } 681 | }, 682 | "node_modules/camelcase": { 683 | "version": "5.3.1", 684 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 685 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 686 | "dev": true, 687 | "engines": { 688 | "node": ">=6" 689 | } 690 | }, 691 | "node_modules/caniuse-lite": { 692 | "version": "1.0.30001517", 693 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", 694 | "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", 695 | "dev": true, 696 | "funding": [ 697 | { 698 | "type": "opencollective", 699 | "url": "https://opencollective.com/browserslist" 700 | }, 701 | { 702 | "type": "tidelift", 703 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 704 | }, 705 | { 706 | "type": "github", 707 | "url": "https://github.com/sponsors/ai" 708 | } 709 | ] 710 | }, 711 | "node_modules/chalk": { 712 | "version": "1.1.3", 713 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 714 | "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", 715 | "dev": true, 716 | "dependencies": { 717 | "ansi-styles": "^2.2.1", 718 | "escape-string-regexp": "^1.0.2", 719 | "has-ansi": "^2.0.0", 720 | "strip-ansi": "^3.0.0", 721 | "supports-color": "^2.0.0" 722 | }, 723 | "engines": { 724 | "node": ">=0.10.0" 725 | } 726 | }, 727 | "node_modules/clean-stack": { 728 | "version": "2.2.0", 729 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", 730 | "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", 731 | "dev": true, 732 | "engines": { 733 | "node": ">=6" 734 | } 735 | }, 736 | "node_modules/cliui": { 737 | "version": "6.0.0", 738 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", 739 | "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", 740 | "dev": true, 741 | "dependencies": { 742 | "string-width": "^4.2.0", 743 | "strip-ansi": "^6.0.0", 744 | "wrap-ansi": "^6.2.0" 745 | } 746 | }, 747 | "node_modules/cliui/node_modules/ansi-regex": { 748 | "version": "5.0.1", 749 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 750 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 751 | "dev": true, 752 | "engines": { 753 | "node": ">=8" 754 | } 755 | }, 756 | "node_modules/cliui/node_modules/strip-ansi": { 757 | "version": "6.0.1", 758 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 759 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 760 | "dev": true, 761 | "dependencies": { 762 | "ansi-regex": "^5.0.1" 763 | }, 764 | "engines": { 765 | "node": ">=8" 766 | } 767 | }, 768 | "node_modules/coffeescript": { 769 | "version": "2.7.0", 770 | "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.7.0.tgz", 771 | "integrity": "sha512-hzWp6TUE2d/jCcN67LrW1eh5b/rSDKQK6oD6VMLlggYVUUFexgTH9z3dNYihzX4RMhze5FTUsUmOXViJKFQR/A==", 772 | "dev": true, 773 | "bin": { 774 | "cake": "bin/cake", 775 | "coffee": "bin/coffee" 776 | }, 777 | "engines": { 778 | "node": ">=6" 779 | } 780 | }, 781 | "node_modules/coffeetape": { 782 | "version": "2.0.0", 783 | "resolved": "https://registry.npmjs.org/coffeetape/-/coffeetape-2.0.0.tgz", 784 | "integrity": "sha512-mDBHP4gq1BDxEF0Q0NMdIvGYEVuZeqYtt5JNMW2EFUnpNclkE8qwiBLpiBzj5+HBwdbpYdCQdntRxJcsHGtD9A==", 785 | "dev": true, 786 | "dependencies": { 787 | "coffeescript": "^2.3.2", 788 | "tape": "^4.10.1" 789 | }, 790 | "bin": { 791 | "coffeetape": "bin/coffeetape" 792 | } 793 | }, 794 | "node_modules/coffeetape/node_modules/deep-equal": { 795 | "version": "1.1.1", 796 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", 797 | "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", 798 | "dev": true, 799 | "dependencies": { 800 | "is-arguments": "^1.0.4", 801 | "is-date-object": "^1.0.1", 802 | "is-regex": "^1.0.4", 803 | "object-is": "^1.0.1", 804 | "object-keys": "^1.1.1", 805 | "regexp.prototype.flags": "^1.2.0" 806 | }, 807 | "funding": { 808 | "url": "https://github.com/sponsors/ljharb" 809 | } 810 | }, 811 | "node_modules/coffeetape/node_modules/resolve": { 812 | "version": "1.22.2", 813 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", 814 | "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", 815 | "dev": true, 816 | "dependencies": { 817 | "is-core-module": "^2.11.0", 818 | "path-parse": "^1.0.7", 819 | "supports-preserve-symlinks-flag": "^1.0.0" 820 | }, 821 | "bin": { 822 | "resolve": "bin/resolve" 823 | }, 824 | "funding": { 825 | "url": "https://github.com/sponsors/ljharb" 826 | } 827 | }, 828 | "node_modules/coffeetape/node_modules/tape": { 829 | "version": "4.16.2", 830 | "resolved": "https://registry.npmjs.org/tape/-/tape-4.16.2.tgz", 831 | "integrity": "sha512-TUChV+q0GxBBCEbfCYkGLkv8hDJYjMdSWdE0/Lr331sB389dsvFUHNV9ph5iQqKzt8Ss9drzcda/YeexclBFqg==", 832 | "dev": true, 833 | "dependencies": { 834 | "call-bind": "~1.0.2", 835 | "deep-equal": "~1.1.1", 836 | "defined": "~1.0.1", 837 | "dotignore": "~0.1.2", 838 | "for-each": "~0.3.3", 839 | "glob": "~7.2.3", 840 | "has": "~1.0.3", 841 | "inherits": "~2.0.4", 842 | "is-regex": "~1.1.4", 843 | "minimist": "~1.2.7", 844 | "object-inspect": "~1.12.3", 845 | "resolve": "~1.22.1", 846 | "resumer": "~0.0.0", 847 | "string.prototype.trim": "~1.2.7", 848 | "through": "~2.3.8" 849 | }, 850 | "bin": { 851 | "tape": "bin/tape" 852 | }, 853 | "funding": { 854 | "url": "https://github.com/sponsors/ljharb" 855 | } 856 | }, 857 | "node_modules/color-convert": { 858 | "version": "1.9.3", 859 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 860 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 861 | "dev": true, 862 | "dependencies": { 863 | "color-name": "1.1.3" 864 | } 865 | }, 866 | "node_modules/color-name": { 867 | "version": "1.1.3", 868 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 869 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", 870 | "dev": true 871 | }, 872 | "node_modules/commondir": { 873 | "version": "1.0.1", 874 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 875 | "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", 876 | "dev": true 877 | }, 878 | "node_modules/concat-map": { 879 | "version": "0.0.1", 880 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 881 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 882 | "dev": true 883 | }, 884 | "node_modules/convert-source-map": { 885 | "version": "1.9.0", 886 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", 887 | "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", 888 | "dev": true 889 | }, 890 | "node_modules/core-util-is": { 891 | "version": "1.0.2", 892 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 893 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 894 | "dev": true 895 | }, 896 | "node_modules/cross-spawn": { 897 | "version": "7.0.3", 898 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 899 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 900 | "dev": true, 901 | "dependencies": { 902 | "path-key": "^3.1.0", 903 | "shebang-command": "^2.0.0", 904 | "which": "^2.0.1" 905 | }, 906 | "engines": { 907 | "node": ">= 8" 908 | } 909 | }, 910 | "node_modules/debug": { 911 | "version": "4.3.4", 912 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 913 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 914 | "dev": true, 915 | "dependencies": { 916 | "ms": "2.1.2" 917 | }, 918 | "engines": { 919 | "node": ">=6.0" 920 | }, 921 | "peerDependenciesMeta": { 922 | "supports-color": { 923 | "optional": true 924 | } 925 | } 926 | }, 927 | "node_modules/decamelize": { 928 | "version": "1.2.0", 929 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 930 | "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", 931 | "dev": true, 932 | "engines": { 933 | "node": ">=0.10.0" 934 | } 935 | }, 936 | "node_modules/deep-equal": { 937 | "version": "2.2.2", 938 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", 939 | "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", 940 | "dev": true, 941 | "dependencies": { 942 | "array-buffer-byte-length": "^1.0.0", 943 | "call-bind": "^1.0.2", 944 | "es-get-iterator": "^1.1.3", 945 | "get-intrinsic": "^1.2.1", 946 | "is-arguments": "^1.1.1", 947 | "is-array-buffer": "^3.0.2", 948 | "is-date-object": "^1.0.5", 949 | "is-regex": "^1.1.4", 950 | "is-shared-array-buffer": "^1.0.2", 951 | "isarray": "^2.0.5", 952 | "object-is": "^1.1.5", 953 | "object-keys": "^1.1.1", 954 | "object.assign": "^4.1.4", 955 | "regexp.prototype.flags": "^1.5.0", 956 | "side-channel": "^1.0.4", 957 | "which-boxed-primitive": "^1.0.2", 958 | "which-collection": "^1.0.1", 959 | "which-typed-array": "^1.1.9" 960 | }, 961 | "funding": { 962 | "url": "https://github.com/sponsors/ljharb" 963 | } 964 | }, 965 | "node_modules/deep-equal/node_modules/isarray": { 966 | "version": "2.0.5", 967 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", 968 | "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", 969 | "dev": true 970 | }, 971 | "node_modules/default-require-extensions": { 972 | "version": "3.0.1", 973 | "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", 974 | "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", 975 | "dev": true, 976 | "dependencies": { 977 | "strip-bom": "^4.0.0" 978 | }, 979 | "engines": { 980 | "node": ">=8" 981 | }, 982 | "funding": { 983 | "url": "https://github.com/sponsors/sindresorhus" 984 | } 985 | }, 986 | "node_modules/define-properties": { 987 | "version": "1.2.0", 988 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", 989 | "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", 990 | "dev": true, 991 | "dependencies": { 992 | "has-property-descriptors": "^1.0.0", 993 | "object-keys": "^1.1.1" 994 | }, 995 | "engines": { 996 | "node": ">= 0.4" 997 | }, 998 | "funding": { 999 | "url": "https://github.com/sponsors/ljharb" 1000 | } 1001 | }, 1002 | "node_modules/defined": { 1003 | "version": "1.0.1", 1004 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", 1005 | "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", 1006 | "dev": true, 1007 | "funding": { 1008 | "url": "https://github.com/sponsors/ljharb" 1009 | } 1010 | }, 1011 | "node_modules/dotignore": { 1012 | "version": "0.1.2", 1013 | "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", 1014 | "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", 1015 | "dev": true, 1016 | "dependencies": { 1017 | "minimatch": "^3.0.4" 1018 | }, 1019 | "bin": { 1020 | "ignored": "bin/ignored" 1021 | } 1022 | }, 1023 | "node_modules/duplexer": { 1024 | "version": "0.1.1", 1025 | "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", 1026 | "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", 1027 | "dev": true 1028 | }, 1029 | "node_modules/electron-to-chromium": { 1030 | "version": "1.4.470", 1031 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.470.tgz", 1032 | "integrity": "sha512-zZM48Lmy2FKWgqyvsX9XK+J6FfP7aCDUFLmgooLJzA7v1agCs/sxSoBpTIwDLhmbhpx9yJIxj2INig/ncjJRqg==", 1033 | "dev": true 1034 | }, 1035 | "node_modules/emoji-regex": { 1036 | "version": "8.0.0", 1037 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1038 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1039 | "dev": true 1040 | }, 1041 | "node_modules/es-abstract": { 1042 | "version": "1.22.1", 1043 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", 1044 | "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", 1045 | "dev": true, 1046 | "dependencies": { 1047 | "array-buffer-byte-length": "^1.0.0", 1048 | "arraybuffer.prototype.slice": "^1.0.1", 1049 | "available-typed-arrays": "^1.0.5", 1050 | "call-bind": "^1.0.2", 1051 | "es-set-tostringtag": "^2.0.1", 1052 | "es-to-primitive": "^1.2.1", 1053 | "function.prototype.name": "^1.1.5", 1054 | "get-intrinsic": "^1.2.1", 1055 | "get-symbol-description": "^1.0.0", 1056 | "globalthis": "^1.0.3", 1057 | "gopd": "^1.0.1", 1058 | "has": "^1.0.3", 1059 | "has-property-descriptors": "^1.0.0", 1060 | "has-proto": "^1.0.1", 1061 | "has-symbols": "^1.0.3", 1062 | "internal-slot": "^1.0.5", 1063 | "is-array-buffer": "^3.0.2", 1064 | "is-callable": "^1.2.7", 1065 | "is-negative-zero": "^2.0.2", 1066 | "is-regex": "^1.1.4", 1067 | "is-shared-array-buffer": "^1.0.2", 1068 | "is-string": "^1.0.7", 1069 | "is-typed-array": "^1.1.10", 1070 | "is-weakref": "^1.0.2", 1071 | "object-inspect": "^1.12.3", 1072 | "object-keys": "^1.1.1", 1073 | "object.assign": "^4.1.4", 1074 | "regexp.prototype.flags": "^1.5.0", 1075 | "safe-array-concat": "^1.0.0", 1076 | "safe-regex-test": "^1.0.0", 1077 | "string.prototype.trim": "^1.2.7", 1078 | "string.prototype.trimend": "^1.0.6", 1079 | "string.prototype.trimstart": "^1.0.6", 1080 | "typed-array-buffer": "^1.0.0", 1081 | "typed-array-byte-length": "^1.0.0", 1082 | "typed-array-byte-offset": "^1.0.0", 1083 | "typed-array-length": "^1.0.4", 1084 | "unbox-primitive": "^1.0.2", 1085 | "which-typed-array": "^1.1.10" 1086 | }, 1087 | "engines": { 1088 | "node": ">= 0.4" 1089 | }, 1090 | "funding": { 1091 | "url": "https://github.com/sponsors/ljharb" 1092 | } 1093 | }, 1094 | "node_modules/es-get-iterator": { 1095 | "version": "1.1.3", 1096 | "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", 1097 | "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", 1098 | "dev": true, 1099 | "dependencies": { 1100 | "call-bind": "^1.0.2", 1101 | "get-intrinsic": "^1.1.3", 1102 | "has-symbols": "^1.0.3", 1103 | "is-arguments": "^1.1.1", 1104 | "is-map": "^2.0.2", 1105 | "is-set": "^2.0.2", 1106 | "is-string": "^1.0.7", 1107 | "isarray": "^2.0.5", 1108 | "stop-iteration-iterator": "^1.0.0" 1109 | }, 1110 | "funding": { 1111 | "url": "https://github.com/sponsors/ljharb" 1112 | } 1113 | }, 1114 | "node_modules/es-get-iterator/node_modules/isarray": { 1115 | "version": "2.0.5", 1116 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", 1117 | "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", 1118 | "dev": true 1119 | }, 1120 | "node_modules/es-set-tostringtag": { 1121 | "version": "2.0.1", 1122 | "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", 1123 | "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", 1124 | "dev": true, 1125 | "dependencies": { 1126 | "get-intrinsic": "^1.1.3", 1127 | "has": "^1.0.3", 1128 | "has-tostringtag": "^1.0.0" 1129 | }, 1130 | "engines": { 1131 | "node": ">= 0.4" 1132 | } 1133 | }, 1134 | "node_modules/es-to-primitive": { 1135 | "version": "1.2.1", 1136 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 1137 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 1138 | "dev": true, 1139 | "dependencies": { 1140 | "is-callable": "^1.1.4", 1141 | "is-date-object": "^1.0.1", 1142 | "is-symbol": "^1.0.2" 1143 | }, 1144 | "engines": { 1145 | "node": ">= 0.4" 1146 | }, 1147 | "funding": { 1148 | "url": "https://github.com/sponsors/ljharb" 1149 | } 1150 | }, 1151 | "node_modules/es6-error": { 1152 | "version": "4.1.1", 1153 | "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", 1154 | "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", 1155 | "dev": true 1156 | }, 1157 | "node_modules/escalade": { 1158 | "version": "3.1.1", 1159 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1160 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1161 | "dev": true, 1162 | "engines": { 1163 | "node": ">=6" 1164 | } 1165 | }, 1166 | "node_modules/escape-string-regexp": { 1167 | "version": "1.0.5", 1168 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1169 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1170 | "dev": true, 1171 | "engines": { 1172 | "node": ">=0.8.0" 1173 | } 1174 | }, 1175 | "node_modules/esprima": { 1176 | "version": "4.0.1", 1177 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 1178 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 1179 | "dev": true, 1180 | "bin": { 1181 | "esparse": "bin/esparse.js", 1182 | "esvalidate": "bin/esvalidate.js" 1183 | }, 1184 | "engines": { 1185 | "node": ">=4" 1186 | } 1187 | }, 1188 | "node_modules/figures": { 1189 | "version": "1.7.0", 1190 | "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", 1191 | "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", 1192 | "dev": true, 1193 | "dependencies": { 1194 | "escape-string-regexp": "^1.0.5", 1195 | "object-assign": "^4.1.0" 1196 | }, 1197 | "engines": { 1198 | "node": ">=0.10.0" 1199 | } 1200 | }, 1201 | "node_modules/find-cache-dir": { 1202 | "version": "3.3.2", 1203 | "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", 1204 | "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", 1205 | "dev": true, 1206 | "dependencies": { 1207 | "commondir": "^1.0.1", 1208 | "make-dir": "^3.0.2", 1209 | "pkg-dir": "^4.1.0" 1210 | }, 1211 | "engines": { 1212 | "node": ">=8" 1213 | }, 1214 | "funding": { 1215 | "url": "https://github.com/avajs/find-cache-dir?sponsor=1" 1216 | } 1217 | }, 1218 | "node_modules/find-up": { 1219 | "version": "4.1.0", 1220 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 1221 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 1222 | "dev": true, 1223 | "dependencies": { 1224 | "locate-path": "^5.0.0", 1225 | "path-exists": "^4.0.0" 1226 | }, 1227 | "engines": { 1228 | "node": ">=8" 1229 | } 1230 | }, 1231 | "node_modules/for-each": { 1232 | "version": "0.3.3", 1233 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", 1234 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", 1235 | "dev": true, 1236 | "dependencies": { 1237 | "is-callable": "^1.1.3" 1238 | } 1239 | }, 1240 | "node_modules/foreground-child": { 1241 | "version": "2.0.0", 1242 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", 1243 | "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", 1244 | "dev": true, 1245 | "dependencies": { 1246 | "cross-spawn": "^7.0.0", 1247 | "signal-exit": "^3.0.2" 1248 | }, 1249 | "engines": { 1250 | "node": ">=8.0.0" 1251 | } 1252 | }, 1253 | "node_modules/fromentries": { 1254 | "version": "1.3.2", 1255 | "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", 1256 | "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", 1257 | "dev": true, 1258 | "funding": [ 1259 | { 1260 | "type": "github", 1261 | "url": "https://github.com/sponsors/feross" 1262 | }, 1263 | { 1264 | "type": "patreon", 1265 | "url": "https://www.patreon.com/feross" 1266 | }, 1267 | { 1268 | "type": "consulting", 1269 | "url": "https://feross.org/support" 1270 | } 1271 | ] 1272 | }, 1273 | "node_modules/fs.realpath": { 1274 | "version": "1.0.0", 1275 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1276 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1277 | "dev": true 1278 | }, 1279 | "node_modules/function-bind": { 1280 | "version": "1.1.1", 1281 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1282 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1283 | "dev": true 1284 | }, 1285 | "node_modules/function.prototype.name": { 1286 | "version": "1.1.5", 1287 | "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", 1288 | "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", 1289 | "dev": true, 1290 | "dependencies": { 1291 | "call-bind": "^1.0.2", 1292 | "define-properties": "^1.1.3", 1293 | "es-abstract": "^1.19.0", 1294 | "functions-have-names": "^1.2.2" 1295 | }, 1296 | "engines": { 1297 | "node": ">= 0.4" 1298 | }, 1299 | "funding": { 1300 | "url": "https://github.com/sponsors/ljharb" 1301 | } 1302 | }, 1303 | "node_modules/functions-have-names": { 1304 | "version": "1.2.3", 1305 | "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", 1306 | "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", 1307 | "dev": true, 1308 | "funding": { 1309 | "url": "https://github.com/sponsors/ljharb" 1310 | } 1311 | }, 1312 | "node_modules/gensync": { 1313 | "version": "1.0.0-beta.2", 1314 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 1315 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 1316 | "dev": true, 1317 | "engines": { 1318 | "node": ">=6.9.0" 1319 | } 1320 | }, 1321 | "node_modules/get-caller-file": { 1322 | "version": "2.0.5", 1323 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1324 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1325 | "dev": true, 1326 | "engines": { 1327 | "node": "6.* || 8.* || >= 10.*" 1328 | } 1329 | }, 1330 | "node_modules/get-intrinsic": { 1331 | "version": "1.2.1", 1332 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", 1333 | "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", 1334 | "dev": true, 1335 | "dependencies": { 1336 | "function-bind": "^1.1.1", 1337 | "has": "^1.0.3", 1338 | "has-proto": "^1.0.1", 1339 | "has-symbols": "^1.0.3" 1340 | }, 1341 | "funding": { 1342 | "url": "https://github.com/sponsors/ljharb" 1343 | } 1344 | }, 1345 | "node_modules/get-package-type": { 1346 | "version": "0.1.0", 1347 | "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", 1348 | "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", 1349 | "dev": true, 1350 | "engines": { 1351 | "node": ">=8.0.0" 1352 | } 1353 | }, 1354 | "node_modules/get-symbol-description": { 1355 | "version": "1.0.0", 1356 | "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", 1357 | "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", 1358 | "dev": true, 1359 | "dependencies": { 1360 | "call-bind": "^1.0.2", 1361 | "get-intrinsic": "^1.1.1" 1362 | }, 1363 | "engines": { 1364 | "node": ">= 0.4" 1365 | }, 1366 | "funding": { 1367 | "url": "https://github.com/sponsors/ljharb" 1368 | } 1369 | }, 1370 | "node_modules/glob": { 1371 | "version": "7.2.3", 1372 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1373 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1374 | "dev": true, 1375 | "dependencies": { 1376 | "fs.realpath": "^1.0.0", 1377 | "inflight": "^1.0.4", 1378 | "inherits": "2", 1379 | "minimatch": "^3.1.1", 1380 | "once": "^1.3.0", 1381 | "path-is-absolute": "^1.0.0" 1382 | }, 1383 | "engines": { 1384 | "node": "*" 1385 | }, 1386 | "funding": { 1387 | "url": "https://github.com/sponsors/isaacs" 1388 | } 1389 | }, 1390 | "node_modules/globals": { 1391 | "version": "11.12.0", 1392 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 1393 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 1394 | "dev": true, 1395 | "engines": { 1396 | "node": ">=4" 1397 | } 1398 | }, 1399 | "node_modules/globalthis": { 1400 | "version": "1.0.3", 1401 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", 1402 | "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", 1403 | "dev": true, 1404 | "dependencies": { 1405 | "define-properties": "^1.1.3" 1406 | }, 1407 | "engines": { 1408 | "node": ">= 0.4" 1409 | }, 1410 | "funding": { 1411 | "url": "https://github.com/sponsors/ljharb" 1412 | } 1413 | }, 1414 | "node_modules/gopd": { 1415 | "version": "1.0.1", 1416 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 1417 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 1418 | "dev": true, 1419 | "dependencies": { 1420 | "get-intrinsic": "^1.1.3" 1421 | }, 1422 | "funding": { 1423 | "url": "https://github.com/sponsors/ljharb" 1424 | } 1425 | }, 1426 | "node_modules/graceful-fs": { 1427 | "version": "4.2.11", 1428 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 1429 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 1430 | "dev": true 1431 | }, 1432 | "node_modules/has": { 1433 | "version": "1.0.3", 1434 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1435 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1436 | "dev": true, 1437 | "dependencies": { 1438 | "function-bind": "^1.1.1" 1439 | }, 1440 | "engines": { 1441 | "node": ">= 0.4.0" 1442 | } 1443 | }, 1444 | "node_modules/has-ansi": { 1445 | "version": "2.0.0", 1446 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 1447 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 1448 | "dev": true, 1449 | "dependencies": { 1450 | "ansi-regex": "^2.0.0" 1451 | }, 1452 | "engines": { 1453 | "node": ">=0.10.0" 1454 | } 1455 | }, 1456 | "node_modules/has-bigints": { 1457 | "version": "1.0.2", 1458 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", 1459 | "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", 1460 | "dev": true, 1461 | "funding": { 1462 | "url": "https://github.com/sponsors/ljharb" 1463 | } 1464 | }, 1465 | "node_modules/has-dynamic-import": { 1466 | "version": "2.0.1", 1467 | "resolved": "https://registry.npmjs.org/has-dynamic-import/-/has-dynamic-import-2.0.1.tgz", 1468 | "integrity": "sha512-X3fbtsZmwb6W7fJGR9o7x65fZoodygCrZ3TVycvghP62yYQfS0t4RS0Qcz+j5tQYUKeSWS09tHkWW6WhFV3XhQ==", 1469 | "dev": true, 1470 | "dependencies": { 1471 | "call-bind": "^1.0.2", 1472 | "get-intrinsic": "^1.1.1" 1473 | }, 1474 | "funding": { 1475 | "url": "https://github.com/sponsors/ljharb" 1476 | } 1477 | }, 1478 | "node_modules/has-flag": { 1479 | "version": "3.0.0", 1480 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1481 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 1482 | "dev": true, 1483 | "engines": { 1484 | "node": ">=4" 1485 | } 1486 | }, 1487 | "node_modules/has-property-descriptors": { 1488 | "version": "1.0.0", 1489 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", 1490 | "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", 1491 | "dev": true, 1492 | "dependencies": { 1493 | "get-intrinsic": "^1.1.1" 1494 | }, 1495 | "funding": { 1496 | "url": "https://github.com/sponsors/ljharb" 1497 | } 1498 | }, 1499 | "node_modules/has-proto": { 1500 | "version": "1.0.1", 1501 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 1502 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 1503 | "dev": true, 1504 | "engines": { 1505 | "node": ">= 0.4" 1506 | }, 1507 | "funding": { 1508 | "url": "https://github.com/sponsors/ljharb" 1509 | } 1510 | }, 1511 | "node_modules/has-symbols": { 1512 | "version": "1.0.3", 1513 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1514 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 1515 | "dev": true, 1516 | "engines": { 1517 | "node": ">= 0.4" 1518 | }, 1519 | "funding": { 1520 | "url": "https://github.com/sponsors/ljharb" 1521 | } 1522 | }, 1523 | "node_modules/has-tostringtag": { 1524 | "version": "1.0.0", 1525 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", 1526 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", 1527 | "dev": true, 1528 | "dependencies": { 1529 | "has-symbols": "^1.0.2" 1530 | }, 1531 | "engines": { 1532 | "node": ">= 0.4" 1533 | }, 1534 | "funding": { 1535 | "url": "https://github.com/sponsors/ljharb" 1536 | } 1537 | }, 1538 | "node_modules/hasha": { 1539 | "version": "5.2.2", 1540 | "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", 1541 | "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", 1542 | "dev": true, 1543 | "dependencies": { 1544 | "is-stream": "^2.0.0", 1545 | "type-fest": "^0.8.0" 1546 | }, 1547 | "engines": { 1548 | "node": ">=8" 1549 | }, 1550 | "funding": { 1551 | "url": "https://github.com/sponsors/sindresorhus" 1552 | } 1553 | }, 1554 | "node_modules/html-escaper": { 1555 | "version": "2.0.2", 1556 | "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", 1557 | "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", 1558 | "dev": true 1559 | }, 1560 | "node_modules/imurmurhash": { 1561 | "version": "0.1.4", 1562 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1563 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1564 | "engines": { 1565 | "node": ">=0.8.19" 1566 | } 1567 | }, 1568 | "node_modules/indent-string": { 1569 | "version": "4.0.0", 1570 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 1571 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", 1572 | "dev": true, 1573 | "engines": { 1574 | "node": ">=8" 1575 | } 1576 | }, 1577 | "node_modules/inflight": { 1578 | "version": "1.0.6", 1579 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1580 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1581 | "dev": true, 1582 | "dependencies": { 1583 | "once": "^1.3.0", 1584 | "wrappy": "1" 1585 | } 1586 | }, 1587 | "node_modules/inherits": { 1588 | "version": "2.0.4", 1589 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1590 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1591 | "dev": true 1592 | }, 1593 | "node_modules/internal-slot": { 1594 | "version": "1.0.5", 1595 | "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", 1596 | "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", 1597 | "dev": true, 1598 | "dependencies": { 1599 | "get-intrinsic": "^1.2.0", 1600 | "has": "^1.0.3", 1601 | "side-channel": "^1.0.4" 1602 | }, 1603 | "engines": { 1604 | "node": ">= 0.4" 1605 | } 1606 | }, 1607 | "node_modules/is-arguments": { 1608 | "version": "1.1.1", 1609 | "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", 1610 | "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", 1611 | "dev": true, 1612 | "dependencies": { 1613 | "call-bind": "^1.0.2", 1614 | "has-tostringtag": "^1.0.0" 1615 | }, 1616 | "engines": { 1617 | "node": ">= 0.4" 1618 | }, 1619 | "funding": { 1620 | "url": "https://github.com/sponsors/ljharb" 1621 | } 1622 | }, 1623 | "node_modules/is-array-buffer": { 1624 | "version": "3.0.2", 1625 | "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", 1626 | "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", 1627 | "dev": true, 1628 | "dependencies": { 1629 | "call-bind": "^1.0.2", 1630 | "get-intrinsic": "^1.2.0", 1631 | "is-typed-array": "^1.1.10" 1632 | }, 1633 | "funding": { 1634 | "url": "https://github.com/sponsors/ljharb" 1635 | } 1636 | }, 1637 | "node_modules/is-bigint": { 1638 | "version": "1.0.4", 1639 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", 1640 | "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", 1641 | "dev": true, 1642 | "dependencies": { 1643 | "has-bigints": "^1.0.1" 1644 | }, 1645 | "funding": { 1646 | "url": "https://github.com/sponsors/ljharb" 1647 | } 1648 | }, 1649 | "node_modules/is-boolean-object": { 1650 | "version": "1.1.2", 1651 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", 1652 | "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", 1653 | "dev": true, 1654 | "dependencies": { 1655 | "call-bind": "^1.0.2", 1656 | "has-tostringtag": "^1.0.0" 1657 | }, 1658 | "engines": { 1659 | "node": ">= 0.4" 1660 | }, 1661 | "funding": { 1662 | "url": "https://github.com/sponsors/ljharb" 1663 | } 1664 | }, 1665 | "node_modules/is-callable": { 1666 | "version": "1.2.7", 1667 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", 1668 | "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", 1669 | "dev": true, 1670 | "engines": { 1671 | "node": ">= 0.4" 1672 | }, 1673 | "funding": { 1674 | "url": "https://github.com/sponsors/ljharb" 1675 | } 1676 | }, 1677 | "node_modules/is-core-module": { 1678 | "version": "2.12.1", 1679 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", 1680 | "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", 1681 | "dev": true, 1682 | "dependencies": { 1683 | "has": "^1.0.3" 1684 | }, 1685 | "funding": { 1686 | "url": "https://github.com/sponsors/ljharb" 1687 | } 1688 | }, 1689 | "node_modules/is-date-object": { 1690 | "version": "1.0.5", 1691 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", 1692 | "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", 1693 | "dev": true, 1694 | "dependencies": { 1695 | "has-tostringtag": "^1.0.0" 1696 | }, 1697 | "engines": { 1698 | "node": ">= 0.4" 1699 | }, 1700 | "funding": { 1701 | "url": "https://github.com/sponsors/ljharb" 1702 | } 1703 | }, 1704 | "node_modules/is-finite": { 1705 | "version": "1.0.2", 1706 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 1707 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", 1708 | "dev": true, 1709 | "dependencies": { 1710 | "number-is-nan": "^1.0.0" 1711 | }, 1712 | "engines": { 1713 | "node": ">=0.10.0" 1714 | } 1715 | }, 1716 | "node_modules/is-fullwidth-code-point": { 1717 | "version": "3.0.0", 1718 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1719 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1720 | "dev": true, 1721 | "engines": { 1722 | "node": ">=8" 1723 | } 1724 | }, 1725 | "node_modules/is-map": { 1726 | "version": "2.0.2", 1727 | "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", 1728 | "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", 1729 | "dev": true, 1730 | "funding": { 1731 | "url": "https://github.com/sponsors/ljharb" 1732 | } 1733 | }, 1734 | "node_modules/is-negative-zero": { 1735 | "version": "2.0.2", 1736 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", 1737 | "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", 1738 | "dev": true, 1739 | "engines": { 1740 | "node": ">= 0.4" 1741 | }, 1742 | "funding": { 1743 | "url": "https://github.com/sponsors/ljharb" 1744 | } 1745 | }, 1746 | "node_modules/is-number-object": { 1747 | "version": "1.0.7", 1748 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", 1749 | "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", 1750 | "dev": true, 1751 | "dependencies": { 1752 | "has-tostringtag": "^1.0.0" 1753 | }, 1754 | "engines": { 1755 | "node": ">= 0.4" 1756 | }, 1757 | "funding": { 1758 | "url": "https://github.com/sponsors/ljharb" 1759 | } 1760 | }, 1761 | "node_modules/is-regex": { 1762 | "version": "1.1.4", 1763 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", 1764 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", 1765 | "dev": true, 1766 | "dependencies": { 1767 | "call-bind": "^1.0.2", 1768 | "has-tostringtag": "^1.0.0" 1769 | }, 1770 | "engines": { 1771 | "node": ">= 0.4" 1772 | }, 1773 | "funding": { 1774 | "url": "https://github.com/sponsors/ljharb" 1775 | } 1776 | }, 1777 | "node_modules/is-set": { 1778 | "version": "2.0.2", 1779 | "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", 1780 | "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", 1781 | "dev": true, 1782 | "funding": { 1783 | "url": "https://github.com/sponsors/ljharb" 1784 | } 1785 | }, 1786 | "node_modules/is-shared-array-buffer": { 1787 | "version": "1.0.2", 1788 | "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", 1789 | "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", 1790 | "dev": true, 1791 | "dependencies": { 1792 | "call-bind": "^1.0.2" 1793 | }, 1794 | "funding": { 1795 | "url": "https://github.com/sponsors/ljharb" 1796 | } 1797 | }, 1798 | "node_modules/is-stream": { 1799 | "version": "2.0.1", 1800 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 1801 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 1802 | "dev": true, 1803 | "engines": { 1804 | "node": ">=8" 1805 | }, 1806 | "funding": { 1807 | "url": "https://github.com/sponsors/sindresorhus" 1808 | } 1809 | }, 1810 | "node_modules/is-string": { 1811 | "version": "1.0.7", 1812 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", 1813 | "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", 1814 | "dev": true, 1815 | "dependencies": { 1816 | "has-tostringtag": "^1.0.0" 1817 | }, 1818 | "engines": { 1819 | "node": ">= 0.4" 1820 | }, 1821 | "funding": { 1822 | "url": "https://github.com/sponsors/ljharb" 1823 | } 1824 | }, 1825 | "node_modules/is-symbol": { 1826 | "version": "1.0.4", 1827 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", 1828 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", 1829 | "dev": true, 1830 | "dependencies": { 1831 | "has-symbols": "^1.0.2" 1832 | }, 1833 | "engines": { 1834 | "node": ">= 0.4" 1835 | }, 1836 | "funding": { 1837 | "url": "https://github.com/sponsors/ljharb" 1838 | } 1839 | }, 1840 | "node_modules/is-typed-array": { 1841 | "version": "1.1.12", 1842 | "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", 1843 | "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", 1844 | "dev": true, 1845 | "dependencies": { 1846 | "which-typed-array": "^1.1.11" 1847 | }, 1848 | "engines": { 1849 | "node": ">= 0.4" 1850 | }, 1851 | "funding": { 1852 | "url": "https://github.com/sponsors/ljharb" 1853 | } 1854 | }, 1855 | "node_modules/is-typedarray": { 1856 | "version": "1.0.0", 1857 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1858 | "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", 1859 | "dev": true 1860 | }, 1861 | "node_modules/is-weakmap": { 1862 | "version": "2.0.1", 1863 | "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", 1864 | "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", 1865 | "dev": true, 1866 | "funding": { 1867 | "url": "https://github.com/sponsors/ljharb" 1868 | } 1869 | }, 1870 | "node_modules/is-weakref": { 1871 | "version": "1.0.2", 1872 | "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", 1873 | "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", 1874 | "dev": true, 1875 | "dependencies": { 1876 | "call-bind": "^1.0.2" 1877 | }, 1878 | "funding": { 1879 | "url": "https://github.com/sponsors/ljharb" 1880 | } 1881 | }, 1882 | "node_modules/is-weakset": { 1883 | "version": "2.0.2", 1884 | "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", 1885 | "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", 1886 | "dev": true, 1887 | "dependencies": { 1888 | "call-bind": "^1.0.2", 1889 | "get-intrinsic": "^1.1.1" 1890 | }, 1891 | "funding": { 1892 | "url": "https://github.com/sponsors/ljharb" 1893 | } 1894 | }, 1895 | "node_modules/is-windows": { 1896 | "version": "1.0.2", 1897 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", 1898 | "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", 1899 | "dev": true, 1900 | "engines": { 1901 | "node": ">=0.10.0" 1902 | } 1903 | }, 1904 | "node_modules/isarray": { 1905 | "version": "1.0.0", 1906 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1907 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 1908 | "dev": true 1909 | }, 1910 | "node_modules/isexe": { 1911 | "version": "2.0.0", 1912 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1913 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1914 | "dev": true 1915 | }, 1916 | "node_modules/istanbul-lib-coverage": { 1917 | "version": "3.2.0", 1918 | "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", 1919 | "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", 1920 | "dev": true, 1921 | "engines": { 1922 | "node": ">=8" 1923 | } 1924 | }, 1925 | "node_modules/istanbul-lib-hook": { 1926 | "version": "3.0.0", 1927 | "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", 1928 | "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", 1929 | "dev": true, 1930 | "dependencies": { 1931 | "append-transform": "^2.0.0" 1932 | }, 1933 | "engines": { 1934 | "node": ">=8" 1935 | } 1936 | }, 1937 | "node_modules/istanbul-lib-instrument": { 1938 | "version": "4.0.3", 1939 | "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", 1940 | "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", 1941 | "dev": true, 1942 | "dependencies": { 1943 | "@babel/core": "^7.7.5", 1944 | "@istanbuljs/schema": "^0.1.2", 1945 | "istanbul-lib-coverage": "^3.0.0", 1946 | "semver": "^6.3.0" 1947 | }, 1948 | "engines": { 1949 | "node": ">=8" 1950 | } 1951 | }, 1952 | "node_modules/istanbul-lib-processinfo": { 1953 | "version": "2.0.3", 1954 | "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", 1955 | "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", 1956 | "dev": true, 1957 | "dependencies": { 1958 | "archy": "^1.0.0", 1959 | "cross-spawn": "^7.0.3", 1960 | "istanbul-lib-coverage": "^3.2.0", 1961 | "p-map": "^3.0.0", 1962 | "rimraf": "^3.0.0", 1963 | "uuid": "^8.3.2" 1964 | }, 1965 | "engines": { 1966 | "node": ">=8" 1967 | } 1968 | }, 1969 | "node_modules/istanbul-lib-report": { 1970 | "version": "3.0.1", 1971 | "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", 1972 | "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", 1973 | "dev": true, 1974 | "dependencies": { 1975 | "istanbul-lib-coverage": "^3.0.0", 1976 | "make-dir": "^4.0.0", 1977 | "supports-color": "^7.1.0" 1978 | }, 1979 | "engines": { 1980 | "node": ">=10" 1981 | } 1982 | }, 1983 | "node_modules/istanbul-lib-report/node_modules/has-flag": { 1984 | "version": "4.0.0", 1985 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1986 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1987 | "dev": true, 1988 | "engines": { 1989 | "node": ">=8" 1990 | } 1991 | }, 1992 | "node_modules/istanbul-lib-report/node_modules/lru-cache": { 1993 | "version": "6.0.0", 1994 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1995 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1996 | "dev": true, 1997 | "dependencies": { 1998 | "yallist": "^4.0.0" 1999 | }, 2000 | "engines": { 2001 | "node": ">=10" 2002 | } 2003 | }, 2004 | "node_modules/istanbul-lib-report/node_modules/make-dir": { 2005 | "version": "4.0.0", 2006 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", 2007 | "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", 2008 | "dev": true, 2009 | "dependencies": { 2010 | "semver": "^7.5.3" 2011 | }, 2012 | "engines": { 2013 | "node": ">=10" 2014 | }, 2015 | "funding": { 2016 | "url": "https://github.com/sponsors/sindresorhus" 2017 | } 2018 | }, 2019 | "node_modules/istanbul-lib-report/node_modules/semver": { 2020 | "version": "7.5.4", 2021 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", 2022 | "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", 2023 | "dev": true, 2024 | "dependencies": { 2025 | "lru-cache": "^6.0.0" 2026 | }, 2027 | "bin": { 2028 | "semver": "bin/semver.js" 2029 | }, 2030 | "engines": { 2031 | "node": ">=10" 2032 | } 2033 | }, 2034 | "node_modules/istanbul-lib-report/node_modules/supports-color": { 2035 | "version": "7.2.0", 2036 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2037 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2038 | "dev": true, 2039 | "dependencies": { 2040 | "has-flag": "^4.0.0" 2041 | }, 2042 | "engines": { 2043 | "node": ">=8" 2044 | } 2045 | }, 2046 | "node_modules/istanbul-lib-report/node_modules/yallist": { 2047 | "version": "4.0.0", 2048 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2049 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2050 | "dev": true 2051 | }, 2052 | "node_modules/istanbul-lib-source-maps": { 2053 | "version": "4.0.1", 2054 | "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", 2055 | "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", 2056 | "dev": true, 2057 | "dependencies": { 2058 | "debug": "^4.1.1", 2059 | "istanbul-lib-coverage": "^3.0.0", 2060 | "source-map": "^0.6.1" 2061 | }, 2062 | "engines": { 2063 | "node": ">=10" 2064 | } 2065 | }, 2066 | "node_modules/istanbul-reports": { 2067 | "version": "3.1.6", 2068 | "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", 2069 | "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", 2070 | "dev": true, 2071 | "dependencies": { 2072 | "html-escaper": "^2.0.0", 2073 | "istanbul-lib-report": "^3.0.0" 2074 | }, 2075 | "engines": { 2076 | "node": ">=8" 2077 | } 2078 | }, 2079 | "node_modules/js-tokens": { 2080 | "version": "4.0.0", 2081 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2082 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 2083 | "dev": true 2084 | }, 2085 | "node_modules/js-yaml": { 2086 | "version": "3.14.1", 2087 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 2088 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 2089 | "dev": true, 2090 | "dependencies": { 2091 | "argparse": "^1.0.7", 2092 | "esprima": "^4.0.0" 2093 | }, 2094 | "bin": { 2095 | "js-yaml": "bin/js-yaml.js" 2096 | } 2097 | }, 2098 | "node_modules/jsesc": { 2099 | "version": "2.5.2", 2100 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 2101 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 2102 | "dev": true, 2103 | "bin": { 2104 | "jsesc": "bin/jsesc" 2105 | }, 2106 | "engines": { 2107 | "node": ">=4" 2108 | } 2109 | }, 2110 | "node_modules/json5": { 2111 | "version": "2.2.3", 2112 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 2113 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 2114 | "dev": true, 2115 | "bin": { 2116 | "json5": "lib/cli.js" 2117 | }, 2118 | "engines": { 2119 | "node": ">=6" 2120 | } 2121 | }, 2122 | "node_modules/locate-path": { 2123 | "version": "5.0.0", 2124 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 2125 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 2126 | "dev": true, 2127 | "dependencies": { 2128 | "p-locate": "^4.1.0" 2129 | }, 2130 | "engines": { 2131 | "node": ">=8" 2132 | } 2133 | }, 2134 | "node_modules/lodash": { 2135 | "version": "4.17.21", 2136 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 2137 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 2138 | "dev": true 2139 | }, 2140 | "node_modules/lodash.flattendeep": { 2141 | "version": "4.4.0", 2142 | "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", 2143 | "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", 2144 | "dev": true 2145 | }, 2146 | "node_modules/lru-cache": { 2147 | "version": "5.1.1", 2148 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 2149 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 2150 | "dev": true, 2151 | "dependencies": { 2152 | "yallist": "^3.0.2" 2153 | } 2154 | }, 2155 | "node_modules/make-dir": { 2156 | "version": "3.1.0", 2157 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 2158 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 2159 | "dev": true, 2160 | "dependencies": { 2161 | "semver": "^6.0.0" 2162 | }, 2163 | "engines": { 2164 | "node": ">=8" 2165 | }, 2166 | "funding": { 2167 | "url": "https://github.com/sponsors/sindresorhus" 2168 | } 2169 | }, 2170 | "node_modules/minimatch": { 2171 | "version": "3.1.2", 2172 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2173 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2174 | "dev": true, 2175 | "dependencies": { 2176 | "brace-expansion": "^1.1.7" 2177 | }, 2178 | "engines": { 2179 | "node": "*" 2180 | } 2181 | }, 2182 | "node_modules/minimist": { 2183 | "version": "1.2.8", 2184 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 2185 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 2186 | "dev": true, 2187 | "funding": { 2188 | "url": "https://github.com/sponsors/ljharb" 2189 | } 2190 | }, 2191 | "node_modules/ms": { 2192 | "version": "2.1.2", 2193 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2194 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2195 | "dev": true 2196 | }, 2197 | "node_modules/node-preload": { 2198 | "version": "0.2.1", 2199 | "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", 2200 | "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", 2201 | "dev": true, 2202 | "dependencies": { 2203 | "process-on-spawn": "^1.0.0" 2204 | }, 2205 | "engines": { 2206 | "node": ">=8" 2207 | } 2208 | }, 2209 | "node_modules/node-releases": { 2210 | "version": "2.0.13", 2211 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", 2212 | "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", 2213 | "dev": true 2214 | }, 2215 | "node_modules/number-is-nan": { 2216 | "version": "1.0.1", 2217 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 2218 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 2219 | "dev": true, 2220 | "engines": { 2221 | "node": ">=0.10.0" 2222 | } 2223 | }, 2224 | "node_modules/nyc": { 2225 | "version": "15.1.0", 2226 | "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", 2227 | "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", 2228 | "dev": true, 2229 | "dependencies": { 2230 | "@istanbuljs/load-nyc-config": "^1.0.0", 2231 | "@istanbuljs/schema": "^0.1.2", 2232 | "caching-transform": "^4.0.0", 2233 | "convert-source-map": "^1.7.0", 2234 | "decamelize": "^1.2.0", 2235 | "find-cache-dir": "^3.2.0", 2236 | "find-up": "^4.1.0", 2237 | "foreground-child": "^2.0.0", 2238 | "get-package-type": "^0.1.0", 2239 | "glob": "^7.1.6", 2240 | "istanbul-lib-coverage": "^3.0.0", 2241 | "istanbul-lib-hook": "^3.0.0", 2242 | "istanbul-lib-instrument": "^4.0.0", 2243 | "istanbul-lib-processinfo": "^2.0.2", 2244 | "istanbul-lib-report": "^3.0.0", 2245 | "istanbul-lib-source-maps": "^4.0.0", 2246 | "istanbul-reports": "^3.0.2", 2247 | "make-dir": "^3.0.0", 2248 | "node-preload": "^0.2.1", 2249 | "p-map": "^3.0.0", 2250 | "process-on-spawn": "^1.0.0", 2251 | "resolve-from": "^5.0.0", 2252 | "rimraf": "^3.0.0", 2253 | "signal-exit": "^3.0.2", 2254 | "spawn-wrap": "^2.0.0", 2255 | "test-exclude": "^6.0.0", 2256 | "yargs": "^15.0.2" 2257 | }, 2258 | "bin": { 2259 | "nyc": "bin/nyc.js" 2260 | }, 2261 | "engines": { 2262 | "node": ">=8.9" 2263 | } 2264 | }, 2265 | "node_modules/object-assign": { 2266 | "version": "4.1.1", 2267 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2268 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 2269 | "dev": true, 2270 | "engines": { 2271 | "node": ">=0.10.0" 2272 | } 2273 | }, 2274 | "node_modules/object-inspect": { 2275 | "version": "1.12.3", 2276 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", 2277 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", 2278 | "dev": true, 2279 | "funding": { 2280 | "url": "https://github.com/sponsors/ljharb" 2281 | } 2282 | }, 2283 | "node_modules/object-is": { 2284 | "version": "1.1.5", 2285 | "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", 2286 | "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", 2287 | "dev": true, 2288 | "dependencies": { 2289 | "call-bind": "^1.0.2", 2290 | "define-properties": "^1.1.3" 2291 | }, 2292 | "engines": { 2293 | "node": ">= 0.4" 2294 | }, 2295 | "funding": { 2296 | "url": "https://github.com/sponsors/ljharb" 2297 | } 2298 | }, 2299 | "node_modules/object-keys": { 2300 | "version": "1.1.1", 2301 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 2302 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 2303 | "dev": true, 2304 | "engines": { 2305 | "node": ">= 0.4" 2306 | } 2307 | }, 2308 | "node_modules/object.assign": { 2309 | "version": "4.1.4", 2310 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", 2311 | "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", 2312 | "dev": true, 2313 | "dependencies": { 2314 | "call-bind": "^1.0.2", 2315 | "define-properties": "^1.1.4", 2316 | "has-symbols": "^1.0.3", 2317 | "object-keys": "^1.1.1" 2318 | }, 2319 | "engines": { 2320 | "node": ">= 0.4" 2321 | }, 2322 | "funding": { 2323 | "url": "https://github.com/sponsors/ljharb" 2324 | } 2325 | }, 2326 | "node_modules/once": { 2327 | "version": "1.4.0", 2328 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2329 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2330 | "dev": true, 2331 | "dependencies": { 2332 | "wrappy": "1" 2333 | } 2334 | }, 2335 | "node_modules/p-limit": { 2336 | "version": "2.3.0", 2337 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 2338 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 2339 | "dev": true, 2340 | "dependencies": { 2341 | "p-try": "^2.0.0" 2342 | }, 2343 | "engines": { 2344 | "node": ">=6" 2345 | }, 2346 | "funding": { 2347 | "url": "https://github.com/sponsors/sindresorhus" 2348 | } 2349 | }, 2350 | "node_modules/p-locate": { 2351 | "version": "4.1.0", 2352 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 2353 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 2354 | "dev": true, 2355 | "dependencies": { 2356 | "p-limit": "^2.2.0" 2357 | }, 2358 | "engines": { 2359 | "node": ">=8" 2360 | } 2361 | }, 2362 | "node_modules/p-map": { 2363 | "version": "3.0.0", 2364 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", 2365 | "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", 2366 | "dev": true, 2367 | "dependencies": { 2368 | "aggregate-error": "^3.0.0" 2369 | }, 2370 | "engines": { 2371 | "node": ">=8" 2372 | } 2373 | }, 2374 | "node_modules/p-try": { 2375 | "version": "2.2.0", 2376 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 2377 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 2378 | "dev": true, 2379 | "engines": { 2380 | "node": ">=6" 2381 | } 2382 | }, 2383 | "node_modules/package-hash": { 2384 | "version": "4.0.0", 2385 | "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", 2386 | "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", 2387 | "dev": true, 2388 | "dependencies": { 2389 | "graceful-fs": "^4.1.15", 2390 | "hasha": "^5.0.0", 2391 | "lodash.flattendeep": "^4.4.0", 2392 | "release-zalgo": "^1.0.0" 2393 | }, 2394 | "engines": { 2395 | "node": ">=8" 2396 | } 2397 | }, 2398 | "node_modules/parse-ms": { 2399 | "version": "1.0.1", 2400 | "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz", 2401 | "integrity": "sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0=", 2402 | "dev": true, 2403 | "engines": { 2404 | "node": ">=0.10.0" 2405 | } 2406 | }, 2407 | "node_modules/path-exists": { 2408 | "version": "4.0.0", 2409 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2410 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2411 | "dev": true, 2412 | "engines": { 2413 | "node": ">=8" 2414 | } 2415 | }, 2416 | "node_modules/path-is-absolute": { 2417 | "version": "1.0.1", 2418 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2419 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 2420 | "dev": true, 2421 | "engines": { 2422 | "node": ">=0.10.0" 2423 | } 2424 | }, 2425 | "node_modules/path-key": { 2426 | "version": "3.1.1", 2427 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2428 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2429 | "dev": true, 2430 | "engines": { 2431 | "node": ">=8" 2432 | } 2433 | }, 2434 | "node_modules/path-parse": { 2435 | "version": "1.0.7", 2436 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 2437 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 2438 | "dev": true 2439 | }, 2440 | "node_modules/picocolors": { 2441 | "version": "1.0.0", 2442 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 2443 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 2444 | "dev": true 2445 | }, 2446 | "node_modules/pkg-dir": { 2447 | "version": "4.2.0", 2448 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 2449 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 2450 | "dev": true, 2451 | "dependencies": { 2452 | "find-up": "^4.0.0" 2453 | }, 2454 | "engines": { 2455 | "node": ">=8" 2456 | } 2457 | }, 2458 | "node_modules/plur": { 2459 | "version": "1.0.0", 2460 | "resolved": "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz", 2461 | "integrity": "sha1-24XGgU9eXlo7Se/CjWBP7GKXUVY=", 2462 | "dev": true, 2463 | "engines": { 2464 | "node": ">=0.10.0" 2465 | } 2466 | }, 2467 | "node_modules/pretty-ms": { 2468 | "version": "2.1.0", 2469 | "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-2.1.0.tgz", 2470 | "integrity": "sha1-QlfCVt8/sLRR1q/6qwIYhBJpgdw=", 2471 | "dev": true, 2472 | "dependencies": { 2473 | "is-finite": "^1.0.1", 2474 | "parse-ms": "^1.0.0", 2475 | "plur": "^1.0.0" 2476 | }, 2477 | "engines": { 2478 | "node": ">=0.10.0" 2479 | } 2480 | }, 2481 | "node_modules/process-nextick-args": { 2482 | "version": "2.0.1", 2483 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 2484 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 2485 | "dev": true 2486 | }, 2487 | "node_modules/process-on-spawn": { 2488 | "version": "1.0.0", 2489 | "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", 2490 | "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", 2491 | "dev": true, 2492 | "dependencies": { 2493 | "fromentries": "^1.2.0" 2494 | }, 2495 | "engines": { 2496 | "node": ">=8" 2497 | } 2498 | }, 2499 | "node_modules/re-emitter": { 2500 | "version": "1.1.4", 2501 | "resolved": "https://registry.npmjs.org/re-emitter/-/re-emitter-1.1.4.tgz", 2502 | "integrity": "sha512-C0SIXdXDSus2yqqvV7qifnb4NoWP7mEBXJq3axci301mXHCZb8Djwm4hrEZo4UeXRaEnfjH98uQ8EBppk2oNWA==", 2503 | "dev": true 2504 | }, 2505 | "node_modules/readable-stream": { 2506 | "version": "2.3.6", 2507 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 2508 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 2509 | "dev": true, 2510 | "dependencies": { 2511 | "core-util-is": "~1.0.0", 2512 | "inherits": "~2.0.3", 2513 | "isarray": "~1.0.0", 2514 | "process-nextick-args": "~2.0.0", 2515 | "safe-buffer": "~5.1.1", 2516 | "string_decoder": "~1.1.1", 2517 | "util-deprecate": "~1.0.1" 2518 | } 2519 | }, 2520 | "node_modules/regexp.prototype.flags": { 2521 | "version": "1.5.0", 2522 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", 2523 | "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", 2524 | "dev": true, 2525 | "dependencies": { 2526 | "call-bind": "^1.0.2", 2527 | "define-properties": "^1.2.0", 2528 | "functions-have-names": "^1.2.3" 2529 | }, 2530 | "engines": { 2531 | "node": ">= 0.4" 2532 | }, 2533 | "funding": { 2534 | "url": "https://github.com/sponsors/ljharb" 2535 | } 2536 | }, 2537 | "node_modules/release-zalgo": { 2538 | "version": "1.0.0", 2539 | "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", 2540 | "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", 2541 | "dev": true, 2542 | "dependencies": { 2543 | "es6-error": "^4.0.1" 2544 | }, 2545 | "engines": { 2546 | "node": ">=4" 2547 | } 2548 | }, 2549 | "node_modules/repeat-string": { 2550 | "version": "1.6.1", 2551 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 2552 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", 2553 | "dev": true, 2554 | "engines": { 2555 | "node": ">=0.10" 2556 | } 2557 | }, 2558 | "node_modules/require-directory": { 2559 | "version": "2.1.1", 2560 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 2561 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 2562 | "dev": true, 2563 | "engines": { 2564 | "node": ">=0.10.0" 2565 | } 2566 | }, 2567 | "node_modules/require-main-filename": { 2568 | "version": "2.0.0", 2569 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 2570 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", 2571 | "dev": true 2572 | }, 2573 | "node_modules/resolve": { 2574 | "version": "2.0.0-next.4", 2575 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", 2576 | "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", 2577 | "dev": true, 2578 | "dependencies": { 2579 | "is-core-module": "^2.9.0", 2580 | "path-parse": "^1.0.7", 2581 | "supports-preserve-symlinks-flag": "^1.0.0" 2582 | }, 2583 | "bin": { 2584 | "resolve": "bin/resolve" 2585 | }, 2586 | "funding": { 2587 | "url": "https://github.com/sponsors/ljharb" 2588 | } 2589 | }, 2590 | "node_modules/resolve-from": { 2591 | "version": "5.0.0", 2592 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 2593 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 2594 | "dev": true, 2595 | "engines": { 2596 | "node": ">=8" 2597 | } 2598 | }, 2599 | "node_modules/resumer": { 2600 | "version": "0.0.0", 2601 | "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", 2602 | "integrity": "sha512-Fn9X8rX8yYF4m81rZCK/5VmrmsSbqS/i3rDLl6ZZHAXgC2nTAx3dhwG8q8odP/RmdLa2YrybDJaAMg+X1ajY3w==", 2603 | "dev": true, 2604 | "dependencies": { 2605 | "through": "~2.3.4" 2606 | } 2607 | }, 2608 | "node_modules/rimraf": { 2609 | "version": "3.0.2", 2610 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 2611 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 2612 | "dev": true, 2613 | "dependencies": { 2614 | "glob": "^7.1.3" 2615 | }, 2616 | "bin": { 2617 | "rimraf": "bin.js" 2618 | }, 2619 | "funding": { 2620 | "url": "https://github.com/sponsors/isaacs" 2621 | } 2622 | }, 2623 | "node_modules/safe-array-concat": { 2624 | "version": "1.0.0", 2625 | "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", 2626 | "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", 2627 | "dev": true, 2628 | "dependencies": { 2629 | "call-bind": "^1.0.2", 2630 | "get-intrinsic": "^1.2.0", 2631 | "has-symbols": "^1.0.3", 2632 | "isarray": "^2.0.5" 2633 | }, 2634 | "engines": { 2635 | "node": ">=0.4" 2636 | }, 2637 | "funding": { 2638 | "url": "https://github.com/sponsors/ljharb" 2639 | } 2640 | }, 2641 | "node_modules/safe-array-concat/node_modules/isarray": { 2642 | "version": "2.0.5", 2643 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", 2644 | "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", 2645 | "dev": true 2646 | }, 2647 | "node_modules/safe-buffer": { 2648 | "version": "5.1.2", 2649 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2650 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 2651 | "dev": true 2652 | }, 2653 | "node_modules/safe-regex-test": { 2654 | "version": "1.0.0", 2655 | "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", 2656 | "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", 2657 | "dev": true, 2658 | "dependencies": { 2659 | "call-bind": "^1.0.2", 2660 | "get-intrinsic": "^1.1.3", 2661 | "is-regex": "^1.1.4" 2662 | }, 2663 | "funding": { 2664 | "url": "https://github.com/sponsors/ljharb" 2665 | } 2666 | }, 2667 | "node_modules/semver": { 2668 | "version": "6.3.1", 2669 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 2670 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 2671 | "dev": true, 2672 | "bin": { 2673 | "semver": "bin/semver.js" 2674 | } 2675 | }, 2676 | "node_modules/set-blocking": { 2677 | "version": "2.0.0", 2678 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 2679 | "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", 2680 | "dev": true 2681 | }, 2682 | "node_modules/shebang-command": { 2683 | "version": "2.0.0", 2684 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2685 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2686 | "dev": true, 2687 | "dependencies": { 2688 | "shebang-regex": "^3.0.0" 2689 | }, 2690 | "engines": { 2691 | "node": ">=8" 2692 | } 2693 | }, 2694 | "node_modules/shebang-regex": { 2695 | "version": "3.0.0", 2696 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2697 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2698 | "dev": true, 2699 | "engines": { 2700 | "node": ">=8" 2701 | } 2702 | }, 2703 | "node_modules/side-channel": { 2704 | "version": "1.0.4", 2705 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 2706 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 2707 | "dev": true, 2708 | "dependencies": { 2709 | "call-bind": "^1.0.0", 2710 | "get-intrinsic": "^1.0.2", 2711 | "object-inspect": "^1.9.0" 2712 | }, 2713 | "funding": { 2714 | "url": "https://github.com/sponsors/ljharb" 2715 | } 2716 | }, 2717 | "node_modules/signal-exit": { 2718 | "version": "3.0.7", 2719 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 2720 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 2721 | "dev": true 2722 | }, 2723 | "node_modules/source-map": { 2724 | "version": "0.6.1", 2725 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2726 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2727 | "dev": true, 2728 | "engines": { 2729 | "node": ">=0.10.0" 2730 | } 2731 | }, 2732 | "node_modules/spawn-wrap": { 2733 | "version": "2.0.0", 2734 | "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", 2735 | "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", 2736 | "dev": true, 2737 | "dependencies": { 2738 | "foreground-child": "^2.0.0", 2739 | "is-windows": "^1.0.2", 2740 | "make-dir": "^3.0.0", 2741 | "rimraf": "^3.0.0", 2742 | "signal-exit": "^3.0.2", 2743 | "which": "^2.0.1" 2744 | }, 2745 | "engines": { 2746 | "node": ">=8" 2747 | } 2748 | }, 2749 | "node_modules/split": { 2750 | "version": "1.0.1", 2751 | "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", 2752 | "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", 2753 | "dev": true, 2754 | "dependencies": { 2755 | "through": "2" 2756 | }, 2757 | "engines": { 2758 | "node": "*" 2759 | } 2760 | }, 2761 | "node_modules/sprintf-js": { 2762 | "version": "1.0.3", 2763 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 2764 | "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", 2765 | "dev": true 2766 | }, 2767 | "node_modules/stop-iteration-iterator": { 2768 | "version": "1.0.0", 2769 | "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", 2770 | "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", 2771 | "dev": true, 2772 | "dependencies": { 2773 | "internal-slot": "^1.0.4" 2774 | }, 2775 | "engines": { 2776 | "node": ">= 0.4" 2777 | } 2778 | }, 2779 | "node_modules/string_decoder": { 2780 | "version": "1.1.1", 2781 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2782 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2783 | "dev": true, 2784 | "dependencies": { 2785 | "safe-buffer": "~5.1.0" 2786 | } 2787 | }, 2788 | "node_modules/string-width": { 2789 | "version": "4.2.3", 2790 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2791 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2792 | "dev": true, 2793 | "dependencies": { 2794 | "emoji-regex": "^8.0.0", 2795 | "is-fullwidth-code-point": "^3.0.0", 2796 | "strip-ansi": "^6.0.1" 2797 | }, 2798 | "engines": { 2799 | "node": ">=8" 2800 | } 2801 | }, 2802 | "node_modules/string-width/node_modules/ansi-regex": { 2803 | "version": "5.0.1", 2804 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2805 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2806 | "dev": true, 2807 | "engines": { 2808 | "node": ">=8" 2809 | } 2810 | }, 2811 | "node_modules/string-width/node_modules/strip-ansi": { 2812 | "version": "6.0.1", 2813 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2814 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2815 | "dev": true, 2816 | "dependencies": { 2817 | "ansi-regex": "^5.0.1" 2818 | }, 2819 | "engines": { 2820 | "node": ">=8" 2821 | } 2822 | }, 2823 | "node_modules/string.prototype.trim": { 2824 | "version": "1.2.7", 2825 | "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", 2826 | "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", 2827 | "dev": true, 2828 | "dependencies": { 2829 | "call-bind": "^1.0.2", 2830 | "define-properties": "^1.1.4", 2831 | "es-abstract": "^1.20.4" 2832 | }, 2833 | "engines": { 2834 | "node": ">= 0.4" 2835 | }, 2836 | "funding": { 2837 | "url": "https://github.com/sponsors/ljharb" 2838 | } 2839 | }, 2840 | "node_modules/string.prototype.trimend": { 2841 | "version": "1.0.6", 2842 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", 2843 | "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", 2844 | "dev": true, 2845 | "dependencies": { 2846 | "call-bind": "^1.0.2", 2847 | "define-properties": "^1.1.4", 2848 | "es-abstract": "^1.20.4" 2849 | }, 2850 | "funding": { 2851 | "url": "https://github.com/sponsors/ljharb" 2852 | } 2853 | }, 2854 | "node_modules/string.prototype.trimstart": { 2855 | "version": "1.0.6", 2856 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", 2857 | "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", 2858 | "dev": true, 2859 | "dependencies": { 2860 | "call-bind": "^1.0.2", 2861 | "define-properties": "^1.1.4", 2862 | "es-abstract": "^1.20.4" 2863 | }, 2864 | "funding": { 2865 | "url": "https://github.com/sponsors/ljharb" 2866 | } 2867 | }, 2868 | "node_modules/strip-ansi": { 2869 | "version": "3.0.1", 2870 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 2871 | "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", 2872 | "dev": true, 2873 | "dependencies": { 2874 | "ansi-regex": "^2.0.0" 2875 | }, 2876 | "engines": { 2877 | "node": ">=0.10.0" 2878 | } 2879 | }, 2880 | "node_modules/strip-bom": { 2881 | "version": "4.0.0", 2882 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", 2883 | "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", 2884 | "dev": true, 2885 | "engines": { 2886 | "node": ">=8" 2887 | } 2888 | }, 2889 | "node_modules/supports-color": { 2890 | "version": "2.0.0", 2891 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 2892 | "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", 2893 | "dev": true, 2894 | "engines": { 2895 | "node": ">=0.8.0" 2896 | } 2897 | }, 2898 | "node_modules/supports-preserve-symlinks-flag": { 2899 | "version": "1.0.0", 2900 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2901 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 2902 | "dev": true, 2903 | "engines": { 2904 | "node": ">= 0.4" 2905 | }, 2906 | "funding": { 2907 | "url": "https://github.com/sponsors/ljharb" 2908 | } 2909 | }, 2910 | "node_modules/tap-nyc": { 2911 | "version": "1.0.3", 2912 | "resolved": "https://registry.npmjs.org/tap-nyc/-/tap-nyc-1.0.3.tgz", 2913 | "integrity": "sha512-s3yicc3YGitxZJj38VsVwyomO0k4D/HpwYV44ueGC1n0Edmg0EK1IC1CI8z2Qj8sI2tFawEQQRjyNmkvceUsIA==", 2914 | "dev": true, 2915 | "dependencies": { 2916 | "chalk": "^1.0.0", 2917 | "duplexer": "^0.1.1", 2918 | "figures": "^1.4.0", 2919 | "pretty-ms": "^2.1.0", 2920 | "repeat-string": "^1.5.2", 2921 | "tap-out": "^1.4.1", 2922 | "through2": "^2.0.0" 2923 | }, 2924 | "bin": { 2925 | "tap-nyc": "bin/cmd.js" 2926 | } 2927 | }, 2928 | "node_modules/tap-out": { 2929 | "version": "1.4.2", 2930 | "resolved": "https://registry.npmjs.org/tap-out/-/tap-out-1.4.2.tgz", 2931 | "integrity": "sha512-66lGHiYP7ZJKnAuY0FQTi2e5N+IT7m+q1CMbyAb+XqbfdF+ZuDJEwu8NP3PKErKyrq9pVL+r/EflB+N5IanBog==", 2932 | "dev": true, 2933 | "dependencies": { 2934 | "re-emitter": "^1.0.0", 2935 | "readable-stream": "^2.0.0", 2936 | "split": "^1.0.0", 2937 | "trim": "0.0.1" 2938 | }, 2939 | "bin": { 2940 | "tap-out": "bin/cmd.js" 2941 | } 2942 | }, 2943 | "node_modules/tap-spec": { 2944 | "version": "5.0.0", 2945 | "resolved": "https://registry.npmjs.org/tap-spec/-/tap-spec-5.0.0.tgz", 2946 | "integrity": "sha512-zMDVJiE5I6Y4XGjlueGXJIX2YIkbDN44broZlnypT38Hj/czfOXrszHNNJBF/DXR8n+x6gbfSx68x04kIEHdrw==", 2947 | "dev": true, 2948 | "dependencies": { 2949 | "chalk": "^1.0.0", 2950 | "duplexer": "^0.1.1", 2951 | "figures": "^1.4.0", 2952 | "lodash": "^4.17.10", 2953 | "pretty-ms": "^2.1.0", 2954 | "repeat-string": "^1.5.2", 2955 | "tap-out": "^2.1.0", 2956 | "through2": "^2.0.0" 2957 | }, 2958 | "bin": { 2959 | "tap-spec": "bin/cmd.js", 2960 | "tspec": "bin/cmd.js" 2961 | } 2962 | }, 2963 | "node_modules/tap-spec/node_modules/process-nextick-args": { 2964 | "version": "1.0.7", 2965 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 2966 | "integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==", 2967 | "dev": true 2968 | }, 2969 | "node_modules/tap-spec/node_modules/re-emitter": { 2970 | "version": "1.1.3", 2971 | "resolved": "https://registry.npmjs.org/re-emitter/-/re-emitter-1.1.3.tgz", 2972 | "integrity": "sha512-bHJul9CWcocrS+w5e5QrKYXV9NkbSA9hxSEyhYuctwm6keY9NXR2Xt/4A0vbMP0QvuwyfEyb4bkowYXv1ziEbg==", 2973 | "dev": true 2974 | }, 2975 | "node_modules/tap-spec/node_modules/readable-stream": { 2976 | "version": "2.2.9", 2977 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", 2978 | "integrity": "sha512-iuxqX7b7FYt08AriYECxUsK9KTXE3A/FenxIa3IPmvANHxaTP/wGIwwf+IidvvIDk/MsCp/oEV6A8CXo4SDcCg==", 2979 | "dev": true, 2980 | "dependencies": { 2981 | "buffer-shims": "~1.0.0", 2982 | "core-util-is": "~1.0.0", 2983 | "inherits": "~2.0.1", 2984 | "isarray": "~1.0.0", 2985 | "process-nextick-args": "~1.0.6", 2986 | "string_decoder": "~1.0.0", 2987 | "util-deprecate": "~1.0.1" 2988 | } 2989 | }, 2990 | "node_modules/tap-spec/node_modules/split": { 2991 | "version": "1.0.0", 2992 | "resolved": "https://registry.npmjs.org/split/-/split-1.0.0.tgz", 2993 | "integrity": "sha512-3SVfJe2A0WZg3D+ZEtXqYkvpSGAVaZ1MgufNCeHioBESCqQFsuT1VcQufiopBfJZqh92ZwQ6ddL378iUSbqVNQ==", 2994 | "dev": true, 2995 | "dependencies": { 2996 | "through": "2" 2997 | }, 2998 | "engines": { 2999 | "node": "*" 3000 | } 3001 | }, 3002 | "node_modules/tap-spec/node_modules/string_decoder": { 3003 | "version": "1.0.3", 3004 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 3005 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 3006 | "dev": true, 3007 | "dependencies": { 3008 | "safe-buffer": "~5.1.0" 3009 | } 3010 | }, 3011 | "node_modules/tap-spec/node_modules/tap-out": { 3012 | "version": "2.1.0", 3013 | "resolved": "https://registry.npmjs.org/tap-out/-/tap-out-2.1.0.tgz", 3014 | "integrity": "sha512-LJE+TBoVbOWhwdz4+FQk40nmbIuxJLqaGvj3WauQw3NYYU5TdjoV3C0x/yq37YAvVyi+oeBXmWnxWSjJ7IEyUw==", 3015 | "dev": true, 3016 | "dependencies": { 3017 | "re-emitter": "1.1.3", 3018 | "readable-stream": "2.2.9", 3019 | "split": "1.0.0", 3020 | "trim": "0.0.1" 3021 | }, 3022 | "bin": { 3023 | "tap-out": "bin/cmd.js" 3024 | } 3025 | }, 3026 | "node_modules/tape": { 3027 | "version": "5.6.6", 3028 | "resolved": "https://registry.npmjs.org/tape/-/tape-5.6.6.tgz", 3029 | "integrity": "sha512-rGp2cZ3rfZ6QfTBm6yvohf8aXmDqPyzMKZwTMV12w4i+b/N2Adwlg8PlW8jLqWzlJUZhglyYaLOSrMt/ZlZkAA==", 3030 | "dev": true, 3031 | "dependencies": { 3032 | "@ljharb/resumer": "^0.0.1", 3033 | "@ljharb/through": "^2.3.9", 3034 | "array.prototype.every": "^1.1.4", 3035 | "call-bind": "^1.0.2", 3036 | "deep-equal": "^2.2.2", 3037 | "defined": "^1.0.1", 3038 | "dotignore": "^0.1.2", 3039 | "for-each": "^0.3.3", 3040 | "get-package-type": "^0.1.0", 3041 | "glob": "^7.2.3", 3042 | "has": "^1.0.3", 3043 | "has-dynamic-import": "^2.0.1", 3044 | "inherits": "^2.0.4", 3045 | "is-regex": "^1.1.4", 3046 | "minimist": "^1.2.8", 3047 | "object-inspect": "^1.12.3", 3048 | "object-is": "^1.1.5", 3049 | "object-keys": "^1.1.1", 3050 | "object.assign": "^4.1.4", 3051 | "resolve": "^2.0.0-next.4", 3052 | "string.prototype.trim": "^1.2.7" 3053 | }, 3054 | "bin": { 3055 | "tape": "bin/tape" 3056 | }, 3057 | "funding": { 3058 | "url": "https://github.com/sponsors/ljharb" 3059 | } 3060 | }, 3061 | "node_modules/test-exclude": { 3062 | "version": "6.0.0", 3063 | "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", 3064 | "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", 3065 | "dev": true, 3066 | "dependencies": { 3067 | "@istanbuljs/schema": "^0.1.2", 3068 | "glob": "^7.1.4", 3069 | "minimatch": "^3.0.4" 3070 | }, 3071 | "engines": { 3072 | "node": ">=8" 3073 | } 3074 | }, 3075 | "node_modules/through": { 3076 | "version": "2.3.8", 3077 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 3078 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 3079 | "dev": true 3080 | }, 3081 | "node_modules/through2": { 3082 | "version": "2.0.5", 3083 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 3084 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 3085 | "dev": true, 3086 | "dependencies": { 3087 | "readable-stream": "~2.3.6", 3088 | "xtend": "~4.0.1" 3089 | } 3090 | }, 3091 | "node_modules/to-fast-properties": { 3092 | "version": "2.0.0", 3093 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 3094 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", 3095 | "dev": true, 3096 | "engines": { 3097 | "node": ">=4" 3098 | } 3099 | }, 3100 | "node_modules/trim": { 3101 | "version": "0.0.1", 3102 | "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", 3103 | "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==", 3104 | "deprecated": "Use String.prototype.trim() instead", 3105 | "dev": true 3106 | }, 3107 | "node_modules/type-fest": { 3108 | "version": "0.8.1", 3109 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 3110 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 3111 | "dev": true, 3112 | "engines": { 3113 | "node": ">=8" 3114 | } 3115 | }, 3116 | "node_modules/typed-array-buffer": { 3117 | "version": "1.0.0", 3118 | "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", 3119 | "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", 3120 | "dev": true, 3121 | "dependencies": { 3122 | "call-bind": "^1.0.2", 3123 | "get-intrinsic": "^1.2.1", 3124 | "is-typed-array": "^1.1.10" 3125 | }, 3126 | "engines": { 3127 | "node": ">= 0.4" 3128 | } 3129 | }, 3130 | "node_modules/typed-array-byte-length": { 3131 | "version": "1.0.0", 3132 | "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", 3133 | "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", 3134 | "dev": true, 3135 | "dependencies": { 3136 | "call-bind": "^1.0.2", 3137 | "for-each": "^0.3.3", 3138 | "has-proto": "^1.0.1", 3139 | "is-typed-array": "^1.1.10" 3140 | }, 3141 | "engines": { 3142 | "node": ">= 0.4" 3143 | }, 3144 | "funding": { 3145 | "url": "https://github.com/sponsors/ljharb" 3146 | } 3147 | }, 3148 | "node_modules/typed-array-byte-offset": { 3149 | "version": "1.0.0", 3150 | "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", 3151 | "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", 3152 | "dev": true, 3153 | "dependencies": { 3154 | "available-typed-arrays": "^1.0.5", 3155 | "call-bind": "^1.0.2", 3156 | "for-each": "^0.3.3", 3157 | "has-proto": "^1.0.1", 3158 | "is-typed-array": "^1.1.10" 3159 | }, 3160 | "engines": { 3161 | "node": ">= 0.4" 3162 | }, 3163 | "funding": { 3164 | "url": "https://github.com/sponsors/ljharb" 3165 | } 3166 | }, 3167 | "node_modules/typed-array-length": { 3168 | "version": "1.0.4", 3169 | "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", 3170 | "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", 3171 | "dev": true, 3172 | "dependencies": { 3173 | "call-bind": "^1.0.2", 3174 | "for-each": "^0.3.3", 3175 | "is-typed-array": "^1.1.9" 3176 | }, 3177 | "funding": { 3178 | "url": "https://github.com/sponsors/ljharb" 3179 | } 3180 | }, 3181 | "node_modules/typedarray-to-buffer": { 3182 | "version": "3.1.5", 3183 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", 3184 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", 3185 | "dev": true, 3186 | "dependencies": { 3187 | "is-typedarray": "^1.0.0" 3188 | } 3189 | }, 3190 | "node_modules/unbox-primitive": { 3191 | "version": "1.0.2", 3192 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", 3193 | "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", 3194 | "dev": true, 3195 | "dependencies": { 3196 | "call-bind": "^1.0.2", 3197 | "has-bigints": "^1.0.2", 3198 | "has-symbols": "^1.0.3", 3199 | "which-boxed-primitive": "^1.0.2" 3200 | }, 3201 | "funding": { 3202 | "url": "https://github.com/sponsors/ljharb" 3203 | } 3204 | }, 3205 | "node_modules/update-browserslist-db": { 3206 | "version": "1.0.11", 3207 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", 3208 | "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", 3209 | "dev": true, 3210 | "funding": [ 3211 | { 3212 | "type": "opencollective", 3213 | "url": "https://opencollective.com/browserslist" 3214 | }, 3215 | { 3216 | "type": "tidelift", 3217 | "url": "https://tidelift.com/funding/github/npm/browserslist" 3218 | }, 3219 | { 3220 | "type": "github", 3221 | "url": "https://github.com/sponsors/ai" 3222 | } 3223 | ], 3224 | "dependencies": { 3225 | "escalade": "^3.1.1", 3226 | "picocolors": "^1.0.0" 3227 | }, 3228 | "bin": { 3229 | "update-browserslist-db": "cli.js" 3230 | }, 3231 | "peerDependencies": { 3232 | "browserslist": ">= 4.21.0" 3233 | } 3234 | }, 3235 | "node_modules/util-deprecate": { 3236 | "version": "1.0.2", 3237 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3238 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 3239 | "dev": true 3240 | }, 3241 | "node_modules/uuid": { 3242 | "version": "8.3.2", 3243 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 3244 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", 3245 | "dev": true, 3246 | "bin": { 3247 | "uuid": "dist/bin/uuid" 3248 | } 3249 | }, 3250 | "node_modules/which": { 3251 | "version": "2.0.2", 3252 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3253 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3254 | "dev": true, 3255 | "dependencies": { 3256 | "isexe": "^2.0.0" 3257 | }, 3258 | "bin": { 3259 | "node-which": "bin/node-which" 3260 | }, 3261 | "engines": { 3262 | "node": ">= 8" 3263 | } 3264 | }, 3265 | "node_modules/which-boxed-primitive": { 3266 | "version": "1.0.2", 3267 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", 3268 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", 3269 | "dev": true, 3270 | "dependencies": { 3271 | "is-bigint": "^1.0.1", 3272 | "is-boolean-object": "^1.1.0", 3273 | "is-number-object": "^1.0.4", 3274 | "is-string": "^1.0.5", 3275 | "is-symbol": "^1.0.3" 3276 | }, 3277 | "funding": { 3278 | "url": "https://github.com/sponsors/ljharb" 3279 | } 3280 | }, 3281 | "node_modules/which-collection": { 3282 | "version": "1.0.1", 3283 | "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", 3284 | "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", 3285 | "dev": true, 3286 | "dependencies": { 3287 | "is-map": "^2.0.1", 3288 | "is-set": "^2.0.1", 3289 | "is-weakmap": "^2.0.1", 3290 | "is-weakset": "^2.0.1" 3291 | }, 3292 | "funding": { 3293 | "url": "https://github.com/sponsors/ljharb" 3294 | } 3295 | }, 3296 | "node_modules/which-module": { 3297 | "version": "2.0.1", 3298 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", 3299 | "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", 3300 | "dev": true 3301 | }, 3302 | "node_modules/which-typed-array": { 3303 | "version": "1.1.11", 3304 | "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", 3305 | "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", 3306 | "dev": true, 3307 | "dependencies": { 3308 | "available-typed-arrays": "^1.0.5", 3309 | "call-bind": "^1.0.2", 3310 | "for-each": "^0.3.3", 3311 | "gopd": "^1.0.1", 3312 | "has-tostringtag": "^1.0.0" 3313 | }, 3314 | "engines": { 3315 | "node": ">= 0.4" 3316 | }, 3317 | "funding": { 3318 | "url": "https://github.com/sponsors/ljharb" 3319 | } 3320 | }, 3321 | "node_modules/wrap-ansi": { 3322 | "version": "6.2.0", 3323 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", 3324 | "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", 3325 | "dev": true, 3326 | "dependencies": { 3327 | "ansi-styles": "^4.0.0", 3328 | "string-width": "^4.1.0", 3329 | "strip-ansi": "^6.0.0" 3330 | }, 3331 | "engines": { 3332 | "node": ">=8" 3333 | } 3334 | }, 3335 | "node_modules/wrap-ansi/node_modules/ansi-regex": { 3336 | "version": "5.0.1", 3337 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 3338 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 3339 | "dev": true, 3340 | "engines": { 3341 | "node": ">=8" 3342 | } 3343 | }, 3344 | "node_modules/wrap-ansi/node_modules/ansi-styles": { 3345 | "version": "4.3.0", 3346 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 3347 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 3348 | "dev": true, 3349 | "dependencies": { 3350 | "color-convert": "^2.0.1" 3351 | }, 3352 | "engines": { 3353 | "node": ">=8" 3354 | }, 3355 | "funding": { 3356 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 3357 | } 3358 | }, 3359 | "node_modules/wrap-ansi/node_modules/color-convert": { 3360 | "version": "2.0.1", 3361 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 3362 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 3363 | "dev": true, 3364 | "dependencies": { 3365 | "color-name": "~1.1.4" 3366 | }, 3367 | "engines": { 3368 | "node": ">=7.0.0" 3369 | } 3370 | }, 3371 | "node_modules/wrap-ansi/node_modules/color-name": { 3372 | "version": "1.1.4", 3373 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 3374 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 3375 | "dev": true 3376 | }, 3377 | "node_modules/wrap-ansi/node_modules/strip-ansi": { 3378 | "version": "6.0.1", 3379 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3380 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3381 | "dev": true, 3382 | "dependencies": { 3383 | "ansi-regex": "^5.0.1" 3384 | }, 3385 | "engines": { 3386 | "node": ">=8" 3387 | } 3388 | }, 3389 | "node_modules/wrappy": { 3390 | "version": "1.0.2", 3391 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3392 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 3393 | "dev": true 3394 | }, 3395 | "node_modules/write-file-atomic": { 3396 | "version": "5.0.1", 3397 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", 3398 | "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", 3399 | "dependencies": { 3400 | "imurmurhash": "^0.1.4", 3401 | "signal-exit": "^4.0.1" 3402 | }, 3403 | "engines": { 3404 | "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 3405 | } 3406 | }, 3407 | "node_modules/write-file-atomic/node_modules/signal-exit": { 3408 | "version": "4.0.2", 3409 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", 3410 | "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", 3411 | "engines": { 3412 | "node": ">=14" 3413 | }, 3414 | "funding": { 3415 | "url": "https://github.com/sponsors/isaacs" 3416 | } 3417 | }, 3418 | "node_modules/xtend": { 3419 | "version": "4.0.2", 3420 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 3421 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 3422 | "dev": true, 3423 | "engines": { 3424 | "node": ">=0.4" 3425 | } 3426 | }, 3427 | "node_modules/y18n": { 3428 | "version": "4.0.3", 3429 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", 3430 | "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", 3431 | "dev": true 3432 | }, 3433 | "node_modules/yallist": { 3434 | "version": "3.1.1", 3435 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 3436 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 3437 | "dev": true 3438 | }, 3439 | "node_modules/yargs": { 3440 | "version": "15.4.1", 3441 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", 3442 | "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", 3443 | "dev": true, 3444 | "dependencies": { 3445 | "cliui": "^6.0.0", 3446 | "decamelize": "^1.2.0", 3447 | "find-up": "^4.1.0", 3448 | "get-caller-file": "^2.0.1", 3449 | "require-directory": "^2.1.1", 3450 | "require-main-filename": "^2.0.0", 3451 | "set-blocking": "^2.0.0", 3452 | "string-width": "^4.2.0", 3453 | "which-module": "^2.0.0", 3454 | "y18n": "^4.0.0", 3455 | "yargs-parser": "^18.1.2" 3456 | }, 3457 | "engines": { 3458 | "node": ">=8" 3459 | } 3460 | }, 3461 | "node_modules/yargs-parser": { 3462 | "version": "18.1.3", 3463 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", 3464 | "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", 3465 | "dev": true, 3466 | "dependencies": { 3467 | "camelcase": "^5.0.0", 3468 | "decamelize": "^1.2.0" 3469 | }, 3470 | "engines": { 3471 | "node": ">=6" 3472 | } 3473 | } 3474 | } 3475 | } 3476 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node-localstorage", 3 | "version": "3.0.5", 4 | "main": "./LocalStorage", 5 | "description": "A drop-in substitute for the browser native localStorage API that runs on node.js.", 6 | "keywords": [ 7 | "localStorage", 8 | "Web Storage", 9 | "node.js" 10 | ], 11 | "author": { 12 | "name": "Larry Maccherone", 13 | "url": "https://www.LinkedIn.com/in/LarryMaccherone/" 14 | }, 15 | "homepage": "https://github.com/lmaccherone/node-localstorage", 16 | "engines": { 17 | "node": ">=0.12" 18 | }, 19 | "repository": { 20 | "type": "git", 21 | "url": "http://github.com/lmaccherone/node-localstorage.git" 22 | }, 23 | "preferGlobal": false, 24 | "devDependencies": { 25 | "coffeescript": "^2.7.0", 26 | "coffeetape": "^2.0.0", 27 | "nyc": "^15.1.0", 28 | "tap-nyc": "^1.0.3", 29 | "tap-spec": "^5.0.0", 30 | "tape": "^5.6.6" 31 | }, 32 | "scripts": { 33 | "test": "npm run build && coffeetape test/*.coffee | tap-spec", 34 | "coverage": "npm run build && nyc --reporter=lcov coffeetape test/*.coffee | tap-nyc", 35 | "coverage:summary": "nyc report --reporter=text-summary", 36 | "coverage:report": "python3 -m http.server 3000 -d coverage/lcov-report", 37 | "publish:patch": "npm run test && npm version patch && npm publish", 38 | "publish:minor": "npm run test && npm version minor && npm publish", 39 | "publish:major": "npm run test && npm version major && npm publish", 40 | "postpublish": "git push --tags", 41 | "build": "coffee -c LocalStorage.coffee", 42 | "prepublishOnly": "coffee -c LocalStorage.coffee" 43 | }, 44 | "license": "MIT", 45 | "dependencies": { 46 | "write-file-atomic": "^5.0.1" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /register.js: -------------------------------------------------------------------------------- 1 | if (typeof localStorage === "undefined" || localStorage === null) { 2 | const LocalStorage = require('node-localstorage').LocalStorage; 3 | global.localStorage = new LocalStorage('./scratch'); 4 | } 5 | -------------------------------------------------------------------------------- /test/error-test.coffee: -------------------------------------------------------------------------------- 1 | {LocalStorage} = require('../') 2 | fs = require('fs') 3 | tape = require('tape') 4 | 5 | tape('file exists error', (test) => 6 | fs.writeFileSync('./scratchFile', 'hello', 'utf8') 7 | f = () -> 8 | ls2 = new LocalStorage('./scratchFile') 9 | test.throws(f, Error) 10 | fs.unlinkSync('./scratchFile') 11 | test.end() 12 | ) -------------------------------------------------------------------------------- /test/es6-test.coffee: -------------------------------------------------------------------------------- 1 | {LocalStorage} = require('../') 2 | tape = require('tape') 3 | 4 | tape('array and dot notation', (test) => # TODO: These tests are inadequate in that it will pass even when there is no Proxy object. Need to check for file existence. 5 | localStorage = new LocalStorage('./scratch9') 6 | 7 | localStorage['a'] = 'something' 8 | test.equal(localStorage['a'], 'something') 9 | 10 | localStorage[''] = 'something else' 11 | test.equal(localStorage[''], 'something else') 12 | 13 | localStorage.b = 1 14 | test.equal(localStorage['b'], '1') 15 | 16 | test.deepEqual(Object.keys(localStorage), ['a', '', 'b']) 17 | 18 | localStorage._deleteLocation() 19 | test.end() 20 | ) -------------------------------------------------------------------------------- /test/json-storage-test.coffee: -------------------------------------------------------------------------------- 1 | {JSONStorage} = require('../') 2 | path = require('path') 3 | tape = require('tape') 4 | 5 | tape('JSONStorage', (test) => 6 | localStorage = new JSONStorage('./scratch') 7 | 8 | test.equal(localStorage._location, path.resolve('./scratch')) 9 | 10 | localStorage.setItem('/', 'something') 11 | test.equal(localStorage.getItem('/'), 'something') 12 | o = {a:1, b:'some string', c:{x: 1, y: 2}} 13 | localStorage.setItem('2', o) 14 | test.deepEqual(localStorage.getItem('2'), o) 15 | 16 | a = [1, 'some string', {a:1, b:'some string', c:{x: 1, y: 2}}] 17 | localStorage.setItem('2', a) 18 | test.deepEqual(localStorage.getItem('2'), a) 19 | 20 | test.deepEqual(localStorage._keys, ['/', '2']) 21 | test.equal(localStorage.length, 2) 22 | 23 | localStorage.removeItem('2') 24 | test.equal(localStorage.getItem('2'), null) 25 | 26 | test.deepEqual(localStorage._keys, ['/']) 27 | test.equal(localStorage.length, 1) 28 | 29 | test.equal(localStorage.key(0), '/') 30 | localStorage.clear() 31 | test.equal(localStorage.length, 0) 32 | 33 | localStorage._deleteLocation() 34 | test.end() 35 | ) 36 | 37 | # tape('no new keyword', (test) => 38 | # local = JSONStorage('./scratch3') 39 | # local.setItem('Hello', ' world!') 40 | # test.equals(local.getItem('Hello'), ' world!') 41 | # local._deleteLocation() 42 | # test.end() 43 | # ) 44 | 45 | tape('null', (test) => 46 | local = new JSONStorage('./scratch4') 47 | test.equals(local.getItem('junk'), null) 48 | local._deleteLocation() 49 | test.end() 50 | ) -------------------------------------------------------------------------------- /test/localstorage-test.coffee: -------------------------------------------------------------------------------- 1 | {LocalStorage} = require('../') 2 | path = require('path') 3 | tape = require('tape') 4 | 5 | repeat = (string, count) -> 6 | a = [] 7 | while count-- 8 | a.push(string) 9 | return a.join('') 10 | 11 | tape('localStorage API', (test) => 12 | localStorage = new LocalStorage('./scratch') 13 | 14 | test.equal(localStorage._location, path.resolve('./scratch')) 15 | 16 | localStorage.setItem('/', 'something') 17 | test.equal(localStorage.getItem('/'), 'something') 18 | o = {a:1, b:'some string', c:{x: 1, y: 2}} 19 | localStorage.setItem('2', o) 20 | test.deepEqual(localStorage.getItem('2'), o.toString()) 21 | 22 | a = [1, 'some string', {a:1, b:'some string', c:{x: 1, y: 2}}] 23 | localStorage.setItem('2', a) 24 | test.deepEqual(localStorage.getItem('2'), a.toString()) 25 | 26 | test.deepEqual(localStorage._keys, ['/', '2']) 27 | test.equal(localStorage.length, 2) 28 | 29 | localStorage.removeItem('2') 30 | test.equal(localStorage.getItem('2'), null) 31 | 32 | test.deepEqual(localStorage._keys, ['/']) 33 | test.equal(localStorage.length, 1) 34 | 35 | test.equal(localStorage.key(0), '/') 36 | localStorage.clear() 37 | test.equal(localStorage.length, 0) 38 | 39 | localStorage._deleteLocation() 40 | test.end() 41 | ) 42 | 43 | tape('quota', (test) => 44 | n10 = '01234567890' 45 | n100 = repeat('0123456789', 10) 46 | n1000 = repeat(n100, 10) 47 | n10000 = repeat(n1000, 10) 48 | 49 | ls = new LocalStorage('./scratch2', 3000) 50 | ls.setItem(1, n1000) 51 | ls.setItem(2, n1000) 52 | ls.setItem(3, n1000) 53 | test.equal(ls._getBytesInUse(), 3000) 54 | 55 | f = () -> 56 | ls.setItem(6, n10) 57 | 58 | test.throws(f, Error) 59 | ls.setItem(2, n1000) # Should not throw because it replaces one of equal size 60 | 61 | ls.removeItem(3) 62 | ls.setItem(7, n100) 63 | f2 = () -> 64 | ls.setitem(8, n1000) 65 | test.throws(f2, Error) 66 | 67 | ls._deleteLocation() 68 | test.end() 69 | ) 70 | 71 | # tape('no new keyword', (test) => 72 | # local = LocalStorage('./scratch3') 73 | # local.setItem('Hello', ' world!') 74 | # test.equals(local.getItem('Hello'), ' world!') 75 | # local._deleteLocation() 76 | # test.end() 77 | # ) 78 | 79 | tape('null', (test) => 80 | local = new LocalStorage('./scratch4') 81 | test.equals(local.getItem('junk'), null) 82 | local._deleteLocation() 83 | test.end() 84 | ) 85 | 86 | tape('remove keys', (test) => 87 | localStorage = new LocalStorage('./scratch6'); 88 | 89 | localStorage.setItem('a', 'hello') 90 | localStorage.setItem('b', 'hello') 91 | localStorage.setItem('c', 'hello') 92 | localStorage.setItem('d', 'hello') 93 | 94 | test.deepEqual(localStorage._keys, ['a', 'b', 'c', 'd']) 95 | test.deepEqual(Object.keys(localStorage), ['a', 'b', 'c', 'd']) 96 | localStorage.removeItem('c') 97 | test.deepEqual(localStorage._keys, ['a', 'b', 'd']) 98 | localStorage.removeItem('a'); 99 | test.deepEqual(localStorage._keys, ['b', 'd']) 100 | localStorage.removeItem('b') 101 | test.deepEqual(localStorage._keys, ['d']) 102 | localStorage.removeItem('d') 103 | test.deepEqual(localStorage._keys, []) 104 | test.deepEqual(Object.keys(localStorage), []) 105 | 106 | localStorage._deleteLocation() 107 | test.end() 108 | ) 109 | 110 | tape('events', (test) => 111 | localStorage = new LocalStorage('./scratch5') 112 | 113 | expectedUrl = "pid:" + process.pid 114 | key = null; oldVal = null; newVal = null; url = null 115 | handleEvent = (evnt) -> 116 | key = evnt.key 117 | oldVal = evnt.oldValue 118 | newVal = evnt.newValue 119 | url = evnt.url 120 | 121 | localStorage.on('storage', handleEvent) 122 | 123 | localStorage.setItem('a', 'something') 124 | test.equal(localStorage.getItem('a'), 'something') 125 | test.equal(key, 'a') 126 | test.equal(oldVal, null) 127 | test.equal(newVal, 'something') 128 | test.equal(url, expectedUrl) 129 | 130 | key = null; oldVal = null; newVal = null; url = null 131 | localStorage.setItem('a', 'somethingnew') 132 | test.equal(localStorage.getItem('a'), 'somethingnew') 133 | test.equal(key, 'a') 134 | test.equal(oldVal, 'something') 135 | test.equal(newVal, 'somethingnew') 136 | test.equal(url, expectedUrl) 137 | 138 | key = null; oldVal = null; newVal = null; url = null 139 | localStorage.removeItem('a') 140 | test.equal(localStorage.getItem('a'), null) 141 | test.equal(key, 'a') 142 | test.equal(oldVal, 'somethingnew') 143 | test.equal(newVal, null) 144 | test.equal(url, expectedUrl) 145 | 146 | key = null; oldVal = null; newVal = null; url = null 147 | localStorage.clear(); 148 | test.equal(localStorage.getItem('a'), null) 149 | test.equal(key, null) 150 | test.equal(oldVal, null) 151 | test.equal(newVal, null) 152 | test.equal(url, expectedUrl) 153 | 154 | localStorage._deleteLocation() 155 | test.end() 156 | ) 157 | 158 | tape('get stat', (test) => 159 | localStorage = new LocalStorage('./scratch7') 160 | 161 | o = {a:1, b:'some string', c:{x: 1, y: 2}} 162 | localStorage.setItem('stat', o) 163 | test.deepEqual(localStorage.getItem('stat'), o.toString()) 164 | 165 | test.ok(localStorage._getStat('stat')?) 166 | test.equal(localStorage._getStat('not there'), null) 167 | 168 | localStorage._deleteLocation() 169 | test.end() 170 | ) 171 | 172 | tape('empty string', (test) => 173 | localStorage = new LocalStorage('./scratch8') 174 | 175 | localStorage.setItem('', 'something') 176 | test.equal(localStorage.getItem(''), 'something') 177 | 178 | test.equal(localStorage.key(0), '') 179 | 180 | localStorage._deleteLocation() 181 | test.end() 182 | ) 183 | 184 | -------------------------------------------------------------------------------- /test/no-tostring-test.coffee: -------------------------------------------------------------------------------- 1 | {LocalStorage} = require('../') 2 | tape = require('tape') 3 | 4 | tape('use key without toString', (test) => 5 | localStorage = new LocalStorage('./scratch11') 6 | 7 | test.doesNotThrow(() => localStorage.setItem(null, 'foo')) 8 | test.doesNotThrow(() => localStorage.setItem(undefined, 'bar')) 9 | 10 | test.equal(localStorage.getItem('null'), 'foo') 11 | test.equal(localStorage.getItem('undefined'), 'bar') 12 | 13 | localStorage._deleteLocation() 14 | test.end() 15 | ) 16 | 17 | tape('set value without toString', (test) => 18 | localStorage = new LocalStorage('./scratch12') 19 | 20 | test.doesNotThrow(() => localStorage.setItem('foo', null)) 21 | test.doesNotThrow(() => localStorage.setItem('bar', undefined)) 22 | 23 | test.equal(localStorage.getItem('foo'), 'null') 24 | test.equal(localStorage.getItem('bar'), 'undefined') 25 | 26 | localStorage._deleteLocation() 27 | test.end() 28 | ) -------------------------------------------------------------------------------- /test/recursive-mkdir-test.coffee: -------------------------------------------------------------------------------- 1 | {LocalStorage} = require('../') 2 | fs = require('fs') 3 | path = require('path') 4 | semver = require('semver') 5 | tape = require('tape') 6 | 7 | tape('recursive mkdir', (test) => 8 | non_existent_directory = path.resolve('./does_not_exist'); 9 | test.notOk(fs.existsSync(non_existent_directory), 'directory does not exist'); 10 | non_existent_subdirectory = path.resolve(path.join(non_existent_directory, 'desired_location')); 11 | test.notOk(fs.existsSync(non_existent_subdirectory), 'subdirectory does not exist'); 12 | 13 | if semver.gte(process.version, '10.12.0') 14 | ls1 = new LocalStorage(non_existent_subdirectory); 15 | test.ok(fs.existsSync(non_existent_directory), 'directory now exists'); 16 | test.ok(fs.existsSync(non_existent_subdirectory), 'subdirectory now exists'); 17 | ls1._deleteLocation() 18 | test.notOk(fs.existsSync(non_existent_subdirectory), 'subdirectory has been removed'); 19 | fs.rmdirSync(non_existent_directory) 20 | test.notOk(fs.existsSync(non_existent_directory), 'directory has been removed'); 21 | else 22 | f = () -> 23 | ls1 = new LocalStorage() 24 | test.throws(f, 'node version '+process.version+' expected to fail on recursive directory creation') 25 | test.end() 26 | ) 27 | -------------------------------------------------------------------------------- /test/same-directory-twice-test.coffee: -------------------------------------------------------------------------------- 1 | {LocalStorage} = require('../') 2 | tape = require('tape') 3 | 4 | tape('same directory twice', (test) => 5 | localStorage1 = new LocalStorage('./scratch10') 6 | localStorage2 = new LocalStorage('./scratch10') 7 | 8 | localStorage1.setItem("key1", "value1") 9 | 10 | test.equal(localStorage1.getItem('key1'), localStorage2.getItem('key1')) 11 | 12 | localStorage1._deleteLocation() 13 | test.end() 14 | ) 15 | 16 | 17 | -------------------------------------------------------------------------------- /test/special-characters-in-keys-test.coffee: -------------------------------------------------------------------------------- 1 | {LocalStorage} = require('../') 2 | tape = require('tape') 3 | 4 | tape('use key with asterix', (test) => 5 | localStorage = new LocalStorage('./scratch11') 6 | 7 | test.doesNotThrow(() => localStorage.setItem("***test***", 'foo')) 8 | 9 | test.equal(localStorage.getItem('***test***'), 'foo') 10 | 11 | localStorage._deleteLocation() 12 | test.end() 13 | ) 14 | -------------------------------------------------------------------------------- /test/sync-test.coffee: -------------------------------------------------------------------------------- 1 | {LocalStorage} = require('../') 2 | tape = require('tape') 3 | 4 | tape('use key with asterix', (test) => 5 | storage1 = new LocalStorage('./scratch12') 6 | storage2 = new LocalStorage('./scratch12') 7 | 8 | test.doesNotThrow(() => storage1.setItem("***test***", 'foo')) 9 | test.doesNotThrow(() => storage2._sync()); 10 | test.equal(storage2.getItem('***test***'), 'foo') 11 | 12 | storage1._deleteLocation() 13 | test.end() 14 | ) -------------------------------------------------------------------------------- /test/test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |