├── .github └── workflows │ └── node.js.yml ├── .gitignore ├── .npmignore ├── .npmrc ├── LICENSE ├── README.md ├── cjs ├── index.js └── package.json ├── es.js ├── esm └── index.js ├── index.js ├── package-lock.json ├── package.json ├── rollup ├── es.config.js └── index.config.js ├── src └── broadcast.js └── test ├── index.html ├── index.js └── package.json /.github/workflows/node.js.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 | 4 | name: build 5 | 6 | on: [push, pull_request] 7 | 8 | jobs: 9 | build: 10 | 11 | runs-on: ubuntu-latest 12 | 13 | strategy: 14 | matrix: 15 | node-version: [16] 16 | 17 | steps: 18 | - uses: actions/checkout@v2 19 | - name: Use Node.js ${{ matrix.node-version }} 20 | uses: actions/setup-node@v2 21 | with: 22 | node-version: ${{ matrix.node-version }} 23 | cache: 'npm' 24 | - run: npm ci 25 | - run: npm run build --if-present 26 | - run: npm test 27 | - run: npm run coverage --if-present 28 | - name: Coveralls 29 | uses: coverallsapp/github-action@master 30 | with: 31 | github-token: ${{ secrets.GITHUB_TOKEN }} 32 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .nyc_output 3 | coverage/ 4 | node_modules/ 5 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .nyc_output 3 | .eslintrc.json 4 | .travis.yml 5 | coverage/ 6 | node_modules/ 7 | rollup/ 8 | test/ 9 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | package-lock=true 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | ISC License 2 | 3 | Copyright (c) 2015-2021, Andrea Giammarchi, @WebReflection 4 | 5 | Permission to use, copy, modify, and/or distribute this software for any 6 | purpose with or without fee is hereby granted, provided that the above 7 | copyright notice and this permission notice appear in all copies. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 10 | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 11 | AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 12 | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 13 | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 14 | OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 15 | PERFORMANCE OF THIS SOFTWARE. 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # broadcast 2 | 3 | [![build status](https://github.com/WebReflection/broadcast/actions/workflows/node.js.yml/badge.svg)](https://github.com/WebReflection/broadcast/actions) [![Coverage Status](https://coveralls.io/repos/github/WebReflection/broadcast/badge.svg)](https://coveralls.io/github/WebReflection/broadcast) 4 | 5 | Previously known as [notify-js](https://www.webreflection.co.uk/blog/2015/08/14/the-line-between-events-and-promises), 6 | `broadcast` is a private or public notification chanel inspired by standards. 7 | 8 | Useful for loaders, components bootstrap, geo position updates, and all other asynchronous or on demand user granted privileges operations, `broadcast` works on every browser and every platform, it's 100% tests covered, and it weights about 0.3K. 9 | 10 | ### V4 Release 11 | 12 | * **Breaking** 13 | * removed `new` method; the export now is `broadcast` and the `Broadcast` class 14 | * changed `when` signature; it now always returns a *Promise* 15 | * no transpilation anymore, usable by ES2015+ compatible engines 16 | * **New** 17 | * smaller 18 | * faster 19 | * better 20 | * stronger 21 | 22 | ### API 23 | 24 | * `.all(type:any, callback:Function):void` to be notified every time a specific _type_ changes (i.e. each `.that(type, value)` call in the future). 25 | * `.drop(type:any[, callback:Function]):void` remove a specific _callback_ from all future changes. If the callback is omitted, it removes _type_ from the internal _Map_ (drop all callbacks and value). 26 | * `.that(type:any[, value:any]):Function|void` broadcast to all callbacks and resolves all promises with `value`. If omitted, it returns a callback that will broadcast, once invoked, the received `value` (i.e. `thing.addListener(any, broadcast.that(type))`). 27 | * `.when(type:any):Promise` returns a _Promise_ that will resolve once _type_ is known. 28 | 29 | ### Examples 30 | 31 | ```js 32 | import {broadcast} from 'broadcast'; 33 | 34 | // as Promise, 35 | // inspired by customRegistry.whenDefined(...).then(...) 36 | // will you ever ask for a geo position or 37 | // have you asked for it already ? 38 | broadcast.when('geo:position').then(info => { 39 | showOnMap(info.coords); 40 | }); 41 | 42 | // as one-off Event (Promise or Callback) 43 | broadcast 44 | .when('dom:DOMContentLoaded') 45 | .then(boostrapMyApp); 46 | ``` 47 | 48 | It doesn't matter if a channel was resolved, updated, or never asked for, 49 | whenever that happens, broadcasts will follow. 50 | 51 | ```js 52 | // that position? only once asked for it 53 | navigator.geolocation.getCurrentPosition(info => { 54 | // manual broadcast 55 | broadcast.that('geo:position', info); 56 | }); 57 | 58 | // update the position each change? same 59 | navigator.geolocation.watchPosition( 60 | // implicit broadcast once executed 61 | broadcast.that('geo:position') 62 | ); 63 | 64 | // the file? You got it. 65 | fs.readFile( 66 | 'README.md', 67 | // will broadcast once executed 68 | (err, data) => broadcast.that('fs:README.md', err || data) 69 | ); 70 | 71 | // top of the page 72 | document.addEventListener( 73 | 'DOMContentLoaded', 74 | broadcast.that('dom:DOMContentLoaded') 75 | ); 76 | ``` 77 | 78 | #### one broadcast VS all broadcasts 79 | 80 | A `broadcast` happens only once asked for it, and it will receive the latest resolution. 81 | 82 | If you'd like to listen to all broadcasted changes, you can use `broadcast.all(type, callback)`, 83 | and eventually stop listening to it via `broadcast.drop(type, callback)`. 84 | 85 | ```js 86 | 87 | let watchId; 88 | 89 | function updatePosition(info) { 90 | mapTracker.setCoords(info.coords); 91 | } 92 | 93 | button.addEventListener('click', e => { 94 | if (watchId) { 95 | navigator.geolocation.clearWatch(watcher); 96 | watchId = 0; 97 | broadcast.drop('geo:position', updatePosition); 98 | } else { 99 | watchId = navigator.geolocation.watchPosition( 100 | // updates the latest position info on each call 101 | broadcast.that('geo:position') 102 | ); 103 | broadcast.all('geo:position', updatePosition); 104 | } 105 | }); 106 | ``` 107 | 108 | 109 | #### private broadcasts 110 | There are two different ways to have a private broadcasts: 111 | 112 | * using a secret `type` as channel, like in `broadcast.when(privateSymbol)` 113 | * create an instance a part via `import {Broadcast} from 'broadcast';` and `const bc = new Broadcast;` 114 | 115 | The first way enables shared, yet private, resolutions while the second one would be unreachable outside its scope. 116 | -------------------------------------------------------------------------------- /cjs/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | /*! (c) Andrea Giammarchi - ISC */ 3 | 4 | const _ = new WeakMap; 5 | 6 | class Broadcast { 7 | constructor() { 8 | _.set(this, {v: new Map, f: new Map}); 9 | } 10 | all(type, callback) { 11 | const {v, f} = _.get(this); 12 | if (!f.has(type)) 13 | f.set(type, new Set); 14 | f.get(type).add(callback); 15 | if (v.has(type)) 16 | Promise.resolve(v.get(type)).then(callback); 17 | } 18 | drop(type) { 19 | const {v, f} = _.get(this); 20 | if (1 < arguments.length) { 21 | if (f.has(type)) 22 | f.get(type).delete(arguments[1]); 23 | } 24 | else { 25 | v.delete(type); 26 | f.delete(type); 27 | } 28 | } 29 | that(type) { 30 | if (1 < arguments.length) { 31 | const value = arguments[1]; 32 | const {v, f} = _.get(this); 33 | v.set(type, value); 34 | if (f.has(type)) { 35 | for (const callback of f.get(type)) 36 | callback(value); 37 | } 38 | return; 39 | } 40 | return value => this.that(type, value); 41 | } 42 | when(type) { 43 | const {v} = _.get(this); 44 | return v.has(type) ? 45 | Promise.resolve(v.get(type)) : 46 | new Promise(resolve => { 47 | const resolved = value => { 48 | this.drop(type, resolved); 49 | resolve(value); 50 | }; 51 | this.all(type, resolved); 52 | }); 53 | } 54 | } 55 | exports.Broadcast = Broadcast 56 | 57 | const broadcast = new Broadcast; 58 | exports.broadcast = broadcast; 59 | -------------------------------------------------------------------------------- /cjs/package.json: -------------------------------------------------------------------------------- 1 | {"type":"commonjs"} -------------------------------------------------------------------------------- /es.js: -------------------------------------------------------------------------------- 1 | /*! (c) Andrea Giammarchi - ISC */ 2 | const t=new WeakMap;class e{constructor(){t.set(this,{v:new Map,f:new Map})}all(e,s){const{v:n,f:o}=t.get(this);o.has(e)||o.set(e,new Set),o.get(e).add(s),n.has(e)&&Promise.resolve(n.get(e)).then(s)}drop(e){const{v:s,f:n}=t.get(this);1this.that(e,t);{const s=arguments[1],{v:n,f:o}=t.get(this);if(n.set(e,s),o.has(e))for(const t of o.get(e))t(s)}}when(e){const{v:s}=t.get(this);return s.has(e)?Promise.resolve(s.get(e)):new Promise((t=>{const s=n=>{this.drop(e,s),t(n)};this.all(e,s)}))}}const s=new e;export{e as Broadcast,s as broadcast}; 3 | -------------------------------------------------------------------------------- /esm/index.js: -------------------------------------------------------------------------------- 1 | /*! (c) Andrea Giammarchi - ISC */ 2 | 3 | const _ = new WeakMap; 4 | 5 | export class Broadcast { 6 | constructor() { 7 | _.set(this, {v: new Map, f: new Map}); 8 | } 9 | all(type, callback) { 10 | const {v, f} = _.get(this); 11 | if (!f.has(type)) 12 | f.set(type, new Set); 13 | f.get(type).add(callback); 14 | if (v.has(type)) 15 | Promise.resolve(v.get(type)).then(callback); 16 | } 17 | drop(type) { 18 | const {v, f} = _.get(this); 19 | if (1 < arguments.length) { 20 | if (f.has(type)) 21 | f.get(type).delete(arguments[1]); 22 | } 23 | else { 24 | v.delete(type); 25 | f.delete(type); 26 | } 27 | } 28 | that(type) { 29 | if (1 < arguments.length) { 30 | const value = arguments[1]; 31 | const {v, f} = _.get(this); 32 | v.set(type, value); 33 | if (f.has(type)) { 34 | for (const callback of f.get(type)) 35 | callback(value); 36 | } 37 | return; 38 | } 39 | return value => this.that(type, value); 40 | } 41 | when(type) { 42 | const {v} = _.get(this); 43 | return v.has(type) ? 44 | Promise.resolve(v.get(type)) : 45 | new Promise(resolve => { 46 | const resolved = value => { 47 | this.drop(type, resolved); 48 | resolve(value); 49 | }; 50 | this.all(type, resolved); 51 | }); 52 | } 53 | } 54 | 55 | export const broadcast = new Broadcast; 56 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /*! (c) Andrea Giammarchi - ISC */ 2 | 3 | const _ = new WeakMap; 4 | 5 | class Broadcast { 6 | constructor() { 7 | _.set(this, {v: new Map, f: new Map}); 8 | } 9 | all(type, callback) { 10 | const {v, f} = _.get(this); 11 | if (!f.has(type)) 12 | f.set(type, new Set); 13 | f.get(type).add(callback); 14 | if (v.has(type)) 15 | Promise.resolve(v.get(type)).then(callback); 16 | } 17 | drop(type) { 18 | const {v, f} = _.get(this); 19 | if (1 < arguments.length) { 20 | if (f.has(type)) 21 | f.get(type).delete(arguments[1]); 22 | } 23 | else { 24 | v.delete(type); 25 | f.delete(type); 26 | } 27 | } 28 | that(type) { 29 | if (1 < arguments.length) { 30 | const value = arguments[1]; 31 | const {v, f} = _.get(this); 32 | v.set(type, value); 33 | if (f.has(type)) { 34 | for (const callback of f.get(type)) 35 | callback(value); 36 | } 37 | return; 38 | } 39 | return value => this.that(type, value); 40 | } 41 | when(type) { 42 | const {v} = _.get(this); 43 | return v.has(type) ? 44 | Promise.resolve(v.get(type)) : 45 | new Promise(resolve => { 46 | const resolved = value => { 47 | this.drop(type, resolved); 48 | resolve(value); 49 | }; 50 | this.all(type, resolved); 51 | }); 52 | } 53 | } 54 | 55 | const broadcast = new Broadcast; 56 | 57 | export { Broadcast, broadcast }; 58 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "broadcast", 3 | "version": "4.0.2", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "broadcast", 9 | "version": "4.0.2", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "@rollup/plugin-node-resolve": "^13.0.6", 13 | "ascjs": "^5.0.1", 14 | "c8": "^7.10.0", 15 | "rollup": "^2.60.1", 16 | "rollup-plugin-terser": "^7.0.2" 17 | } 18 | }, 19 | "node_modules/@babel/code-frame": { 20 | "version": "7.16.0", 21 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", 22 | "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", 23 | "dev": true, 24 | "dependencies": { 25 | "@babel/highlight": "^7.16.0" 26 | }, 27 | "engines": { 28 | "node": ">=6.9.0" 29 | } 30 | }, 31 | "node_modules/@babel/helper-validator-identifier": { 32 | "version": "7.15.7", 33 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", 34 | "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", 35 | "dev": true, 36 | "engines": { 37 | "node": ">=6.9.0" 38 | } 39 | }, 40 | "node_modules/@babel/highlight": { 41 | "version": "7.16.0", 42 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", 43 | "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", 44 | "dev": true, 45 | "dependencies": { 46 | "@babel/helper-validator-identifier": "^7.15.7", 47 | "chalk": "^2.0.0", 48 | "js-tokens": "^4.0.0" 49 | }, 50 | "engines": { 51 | "node": ">=6.9.0" 52 | } 53 | }, 54 | "node_modules/@babel/parser": { 55 | "version": "7.16.4", 56 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", 57 | "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", 58 | "dev": true, 59 | "bin": { 60 | "parser": "bin/babel-parser.js" 61 | }, 62 | "engines": { 63 | "node": ">=6.0.0" 64 | } 65 | }, 66 | "node_modules/@bcoe/v8-coverage": { 67 | "version": "0.2.3", 68 | "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", 69 | "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", 70 | "dev": true 71 | }, 72 | "node_modules/@istanbuljs/schema": { 73 | "version": "0.1.3", 74 | "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", 75 | "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", 76 | "dev": true, 77 | "engines": { 78 | "node": ">=8" 79 | } 80 | }, 81 | "node_modules/@rollup/plugin-node-resolve": { 82 | "version": "13.0.6", 83 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.6.tgz", 84 | "integrity": "sha512-sFsPDMPd4gMqnh2gS0uIxELnoRUp5kBl5knxD2EO0778G1oOJv4G1vyT2cpWz75OU2jDVcXhjVUuTAczGyFNKA==", 85 | "dev": true, 86 | "dependencies": { 87 | "@rollup/pluginutils": "^3.1.0", 88 | "@types/resolve": "1.17.1", 89 | "builtin-modules": "^3.1.0", 90 | "deepmerge": "^4.2.2", 91 | "is-module": "^1.0.0", 92 | "resolve": "^1.19.0" 93 | }, 94 | "engines": { 95 | "node": ">= 10.0.0" 96 | }, 97 | "peerDependencies": { 98 | "rollup": "^2.42.0" 99 | } 100 | }, 101 | "node_modules/@rollup/pluginutils": { 102 | "version": "3.1.0", 103 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", 104 | "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", 105 | "dev": true, 106 | "dependencies": { 107 | "@types/estree": "0.0.39", 108 | "estree-walker": "^1.0.1", 109 | "picomatch": "^2.2.2" 110 | }, 111 | "engines": { 112 | "node": ">= 8.0.0" 113 | }, 114 | "peerDependencies": { 115 | "rollup": "^1.20.0||^2.0.0" 116 | } 117 | }, 118 | "node_modules/@types/estree": { 119 | "version": "0.0.39", 120 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", 121 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", 122 | "dev": true 123 | }, 124 | "node_modules/@types/istanbul-lib-coverage": { 125 | "version": "2.0.3", 126 | "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", 127 | "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", 128 | "dev": true 129 | }, 130 | "node_modules/@types/node": { 131 | "version": "16.11.10", 132 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.10.tgz", 133 | "integrity": "sha512-3aRnHa1KlOEEhJ6+CvyHKK5vE9BcLGjtUpwvqYLRvYNQKMfabu3BwfJaA/SLW8dxe28LsNDjtHwePTuzn3gmOA==", 134 | "dev": true 135 | }, 136 | "node_modules/@types/resolve": { 137 | "version": "1.17.1", 138 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", 139 | "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", 140 | "dev": true, 141 | "dependencies": { 142 | "@types/node": "*" 143 | } 144 | }, 145 | "node_modules/ansi-regex": { 146 | "version": "5.0.1", 147 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 148 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 149 | "dev": true, 150 | "engines": { 151 | "node": ">=8" 152 | } 153 | }, 154 | "node_modules/ansi-styles": { 155 | "version": "3.2.1", 156 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 157 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 158 | "dev": true, 159 | "dependencies": { 160 | "color-convert": "^1.9.0" 161 | }, 162 | "engines": { 163 | "node": ">=4" 164 | } 165 | }, 166 | "node_modules/ascjs": { 167 | "version": "5.0.1", 168 | "resolved": "https://registry.npmjs.org/ascjs/-/ascjs-5.0.1.tgz", 169 | "integrity": "sha512-1d/QdICzpywXiP53/Zz3fMdaC0/BB1ybLf+fK+QrqY8iyXNnWUHUrpmrowueXeswo+O+meJWm43TJSg2ClP3Sg==", 170 | "dev": true, 171 | "dependencies": { 172 | "@babel/parser": "^7.12.5" 173 | }, 174 | "bin": { 175 | "ascjs": "bin.js" 176 | } 177 | }, 178 | "node_modules/balanced-match": { 179 | "version": "1.0.2", 180 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 181 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 182 | "dev": true 183 | }, 184 | "node_modules/brace-expansion": { 185 | "version": "1.1.11", 186 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 187 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 188 | "dev": true, 189 | "dependencies": { 190 | "balanced-match": "^1.0.0", 191 | "concat-map": "0.0.1" 192 | } 193 | }, 194 | "node_modules/buffer-from": { 195 | "version": "1.1.2", 196 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 197 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 198 | "dev": true 199 | }, 200 | "node_modules/builtin-modules": { 201 | "version": "3.2.0", 202 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", 203 | "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", 204 | "dev": true, 205 | "engines": { 206 | "node": ">=6" 207 | }, 208 | "funding": { 209 | "url": "https://github.com/sponsors/sindresorhus" 210 | } 211 | }, 212 | "node_modules/c8": { 213 | "version": "7.10.0", 214 | "resolved": "https://registry.npmjs.org/c8/-/c8-7.10.0.tgz", 215 | "integrity": "sha512-OAwfC5+emvA6R7pkYFVBTOtI5ruf9DahffGmIqUc9l6wEh0h7iAFP6dt/V9Ioqlr2zW5avX9U9/w1I4alTRHkA==", 216 | "dev": true, 217 | "dependencies": { 218 | "@bcoe/v8-coverage": "^0.2.3", 219 | "@istanbuljs/schema": "^0.1.2", 220 | "find-up": "^5.0.0", 221 | "foreground-child": "^2.0.0", 222 | "istanbul-lib-coverage": "^3.0.1", 223 | "istanbul-lib-report": "^3.0.0", 224 | "istanbul-reports": "^3.0.2", 225 | "rimraf": "^3.0.0", 226 | "test-exclude": "^6.0.0", 227 | "v8-to-istanbul": "^8.0.0", 228 | "yargs": "^16.2.0", 229 | "yargs-parser": "^20.2.7" 230 | }, 231 | "bin": { 232 | "c8": "bin/c8.js" 233 | }, 234 | "engines": { 235 | "node": ">=10.12.0" 236 | } 237 | }, 238 | "node_modules/chalk": { 239 | "version": "2.4.2", 240 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 241 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 242 | "dev": true, 243 | "dependencies": { 244 | "ansi-styles": "^3.2.1", 245 | "escape-string-regexp": "^1.0.5", 246 | "supports-color": "^5.3.0" 247 | }, 248 | "engines": { 249 | "node": ">=4" 250 | } 251 | }, 252 | "node_modules/chalk/node_modules/has-flag": { 253 | "version": "3.0.0", 254 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 255 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 256 | "dev": true, 257 | "engines": { 258 | "node": ">=4" 259 | } 260 | }, 261 | "node_modules/chalk/node_modules/supports-color": { 262 | "version": "5.5.0", 263 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 264 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 265 | "dev": true, 266 | "dependencies": { 267 | "has-flag": "^3.0.0" 268 | }, 269 | "engines": { 270 | "node": ">=4" 271 | } 272 | }, 273 | "node_modules/cliui": { 274 | "version": "7.0.4", 275 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 276 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 277 | "dev": true, 278 | "dependencies": { 279 | "string-width": "^4.2.0", 280 | "strip-ansi": "^6.0.0", 281 | "wrap-ansi": "^7.0.0" 282 | } 283 | }, 284 | "node_modules/color-convert": { 285 | "version": "1.9.3", 286 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 287 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 288 | "dev": true, 289 | "dependencies": { 290 | "color-name": "1.1.3" 291 | } 292 | }, 293 | "node_modules/color-name": { 294 | "version": "1.1.3", 295 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 296 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 297 | "dev": true 298 | }, 299 | "node_modules/commander": { 300 | "version": "2.20.3", 301 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 302 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 303 | "dev": true 304 | }, 305 | "node_modules/concat-map": { 306 | "version": "0.0.1", 307 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 308 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 309 | "dev": true 310 | }, 311 | "node_modules/convert-source-map": { 312 | "version": "1.8.0", 313 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", 314 | "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", 315 | "dev": true, 316 | "dependencies": { 317 | "safe-buffer": "~5.1.1" 318 | } 319 | }, 320 | "node_modules/convert-source-map/node_modules/safe-buffer": { 321 | "version": "5.1.2", 322 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 323 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 324 | "dev": true 325 | }, 326 | "node_modules/cross-spawn": { 327 | "version": "7.0.3", 328 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 329 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 330 | "dev": true, 331 | "dependencies": { 332 | "path-key": "^3.1.0", 333 | "shebang-command": "^2.0.0", 334 | "which": "^2.0.1" 335 | }, 336 | "engines": { 337 | "node": ">= 8" 338 | } 339 | }, 340 | "node_modules/deepmerge": { 341 | "version": "4.2.2", 342 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 343 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", 344 | "dev": true, 345 | "engines": { 346 | "node": ">=0.10.0" 347 | } 348 | }, 349 | "node_modules/emoji-regex": { 350 | "version": "8.0.0", 351 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 352 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 353 | "dev": true 354 | }, 355 | "node_modules/escalade": { 356 | "version": "3.1.1", 357 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 358 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 359 | "dev": true, 360 | "engines": { 361 | "node": ">=6" 362 | } 363 | }, 364 | "node_modules/escape-string-regexp": { 365 | "version": "1.0.5", 366 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 367 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 368 | "dev": true, 369 | "engines": { 370 | "node": ">=0.8.0" 371 | } 372 | }, 373 | "node_modules/estree-walker": { 374 | "version": "1.0.1", 375 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", 376 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", 377 | "dev": true 378 | }, 379 | "node_modules/find-up": { 380 | "version": "5.0.0", 381 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 382 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 383 | "dev": true, 384 | "dependencies": { 385 | "locate-path": "^6.0.0", 386 | "path-exists": "^4.0.0" 387 | }, 388 | "engines": { 389 | "node": ">=10" 390 | }, 391 | "funding": { 392 | "url": "https://github.com/sponsors/sindresorhus" 393 | } 394 | }, 395 | "node_modules/foreground-child": { 396 | "version": "2.0.0", 397 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", 398 | "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", 399 | "dev": true, 400 | "dependencies": { 401 | "cross-spawn": "^7.0.0", 402 | "signal-exit": "^3.0.2" 403 | }, 404 | "engines": { 405 | "node": ">=8.0.0" 406 | } 407 | }, 408 | "node_modules/fs.realpath": { 409 | "version": "1.0.0", 410 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 411 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 412 | "dev": true 413 | }, 414 | "node_modules/fsevents": { 415 | "version": "2.3.2", 416 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 417 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 418 | "dev": true, 419 | "hasInstallScript": true, 420 | "optional": true, 421 | "os": [ 422 | "darwin" 423 | ], 424 | "engines": { 425 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 426 | } 427 | }, 428 | "node_modules/function-bind": { 429 | "version": "1.1.1", 430 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 431 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 432 | "dev": true 433 | }, 434 | "node_modules/get-caller-file": { 435 | "version": "2.0.5", 436 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 437 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 438 | "dev": true, 439 | "engines": { 440 | "node": "6.* || 8.* || >= 10.*" 441 | } 442 | }, 443 | "node_modules/glob": { 444 | "version": "7.2.0", 445 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 446 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 447 | "dev": true, 448 | "dependencies": { 449 | "fs.realpath": "^1.0.0", 450 | "inflight": "^1.0.4", 451 | "inherits": "2", 452 | "minimatch": "^3.0.4", 453 | "once": "^1.3.0", 454 | "path-is-absolute": "^1.0.0" 455 | }, 456 | "engines": { 457 | "node": "*" 458 | }, 459 | "funding": { 460 | "url": "https://github.com/sponsors/isaacs" 461 | } 462 | }, 463 | "node_modules/has": { 464 | "version": "1.0.3", 465 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 466 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 467 | "dev": true, 468 | "dependencies": { 469 | "function-bind": "^1.1.1" 470 | }, 471 | "engines": { 472 | "node": ">= 0.4.0" 473 | } 474 | }, 475 | "node_modules/has-flag": { 476 | "version": "4.0.0", 477 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 478 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 479 | "dev": true, 480 | "engines": { 481 | "node": ">=8" 482 | } 483 | }, 484 | "node_modules/html-escaper": { 485 | "version": "2.0.2", 486 | "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", 487 | "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", 488 | "dev": true 489 | }, 490 | "node_modules/inflight": { 491 | "version": "1.0.6", 492 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 493 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 494 | "dev": true, 495 | "dependencies": { 496 | "once": "^1.3.0", 497 | "wrappy": "1" 498 | } 499 | }, 500 | "node_modules/inherits": { 501 | "version": "2.0.4", 502 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 503 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 504 | "dev": true 505 | }, 506 | "node_modules/is-core-module": { 507 | "version": "2.8.0", 508 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", 509 | "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", 510 | "dev": true, 511 | "dependencies": { 512 | "has": "^1.0.3" 513 | }, 514 | "funding": { 515 | "url": "https://github.com/sponsors/ljharb" 516 | } 517 | }, 518 | "node_modules/is-fullwidth-code-point": { 519 | "version": "3.0.0", 520 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 521 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 522 | "dev": true, 523 | "engines": { 524 | "node": ">=8" 525 | } 526 | }, 527 | "node_modules/is-module": { 528 | "version": "1.0.0", 529 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 530 | "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", 531 | "dev": true 532 | }, 533 | "node_modules/isexe": { 534 | "version": "2.0.0", 535 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 536 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 537 | "dev": true 538 | }, 539 | "node_modules/istanbul-lib-coverage": { 540 | "version": "3.2.0", 541 | "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", 542 | "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", 543 | "dev": true, 544 | "engines": { 545 | "node": ">=8" 546 | } 547 | }, 548 | "node_modules/istanbul-lib-report": { 549 | "version": "3.0.0", 550 | "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", 551 | "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", 552 | "dev": true, 553 | "dependencies": { 554 | "istanbul-lib-coverage": "^3.0.0", 555 | "make-dir": "^3.0.0", 556 | "supports-color": "^7.1.0" 557 | }, 558 | "engines": { 559 | "node": ">=8" 560 | } 561 | }, 562 | "node_modules/istanbul-reports": { 563 | "version": "3.0.5", 564 | "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", 565 | "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", 566 | "dev": true, 567 | "dependencies": { 568 | "html-escaper": "^2.0.0", 569 | "istanbul-lib-report": "^3.0.0" 570 | }, 571 | "engines": { 572 | "node": ">=8" 573 | } 574 | }, 575 | "node_modules/jest-worker": { 576 | "version": "26.6.2", 577 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", 578 | "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", 579 | "dev": true, 580 | "dependencies": { 581 | "@types/node": "*", 582 | "merge-stream": "^2.0.0", 583 | "supports-color": "^7.0.0" 584 | }, 585 | "engines": { 586 | "node": ">= 10.13.0" 587 | } 588 | }, 589 | "node_modules/js-tokens": { 590 | "version": "4.0.0", 591 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 592 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 593 | "dev": true 594 | }, 595 | "node_modules/locate-path": { 596 | "version": "6.0.0", 597 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 598 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 599 | "dev": true, 600 | "dependencies": { 601 | "p-locate": "^5.0.0" 602 | }, 603 | "engines": { 604 | "node": ">=10" 605 | }, 606 | "funding": { 607 | "url": "https://github.com/sponsors/sindresorhus" 608 | } 609 | }, 610 | "node_modules/make-dir": { 611 | "version": "3.1.0", 612 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 613 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 614 | "dev": true, 615 | "dependencies": { 616 | "semver": "^6.0.0" 617 | }, 618 | "engines": { 619 | "node": ">=8" 620 | }, 621 | "funding": { 622 | "url": "https://github.com/sponsors/sindresorhus" 623 | } 624 | }, 625 | "node_modules/merge-stream": { 626 | "version": "2.0.0", 627 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 628 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 629 | "dev": true 630 | }, 631 | "node_modules/minimatch": { 632 | "version": "3.0.4", 633 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 634 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 635 | "dev": true, 636 | "dependencies": { 637 | "brace-expansion": "^1.1.7" 638 | }, 639 | "engines": { 640 | "node": "*" 641 | } 642 | }, 643 | "node_modules/once": { 644 | "version": "1.4.0", 645 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 646 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 647 | "dev": true, 648 | "dependencies": { 649 | "wrappy": "1" 650 | } 651 | }, 652 | "node_modules/p-limit": { 653 | "version": "3.1.0", 654 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 655 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 656 | "dev": true, 657 | "dependencies": { 658 | "yocto-queue": "^0.1.0" 659 | }, 660 | "engines": { 661 | "node": ">=10" 662 | }, 663 | "funding": { 664 | "url": "https://github.com/sponsors/sindresorhus" 665 | } 666 | }, 667 | "node_modules/p-locate": { 668 | "version": "5.0.0", 669 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 670 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 671 | "dev": true, 672 | "dependencies": { 673 | "p-limit": "^3.0.2" 674 | }, 675 | "engines": { 676 | "node": ">=10" 677 | }, 678 | "funding": { 679 | "url": "https://github.com/sponsors/sindresorhus" 680 | } 681 | }, 682 | "node_modules/path-exists": { 683 | "version": "4.0.0", 684 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 685 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 686 | "dev": true, 687 | "engines": { 688 | "node": ">=8" 689 | } 690 | }, 691 | "node_modules/path-is-absolute": { 692 | "version": "1.0.1", 693 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 694 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 695 | "dev": true, 696 | "engines": { 697 | "node": ">=0.10.0" 698 | } 699 | }, 700 | "node_modules/path-key": { 701 | "version": "3.1.1", 702 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 703 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 704 | "dev": true, 705 | "engines": { 706 | "node": ">=8" 707 | } 708 | }, 709 | "node_modules/path-parse": { 710 | "version": "1.0.7", 711 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 712 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 713 | "dev": true 714 | }, 715 | "node_modules/picomatch": { 716 | "version": "2.3.0", 717 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 718 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 719 | "dev": true, 720 | "engines": { 721 | "node": ">=8.6" 722 | }, 723 | "funding": { 724 | "url": "https://github.com/sponsors/jonschlinkert" 725 | } 726 | }, 727 | "node_modules/randombytes": { 728 | "version": "2.1.0", 729 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 730 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 731 | "dev": true, 732 | "dependencies": { 733 | "safe-buffer": "^5.1.0" 734 | } 735 | }, 736 | "node_modules/require-directory": { 737 | "version": "2.1.1", 738 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 739 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 740 | "dev": true, 741 | "engines": { 742 | "node": ">=0.10.0" 743 | } 744 | }, 745 | "node_modules/resolve": { 746 | "version": "1.20.0", 747 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 748 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 749 | "dev": true, 750 | "dependencies": { 751 | "is-core-module": "^2.2.0", 752 | "path-parse": "^1.0.6" 753 | }, 754 | "funding": { 755 | "url": "https://github.com/sponsors/ljharb" 756 | } 757 | }, 758 | "node_modules/rimraf": { 759 | "version": "3.0.2", 760 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 761 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 762 | "dev": true, 763 | "dependencies": { 764 | "glob": "^7.1.3" 765 | }, 766 | "bin": { 767 | "rimraf": "bin.js" 768 | }, 769 | "funding": { 770 | "url": "https://github.com/sponsors/isaacs" 771 | } 772 | }, 773 | "node_modules/rollup": { 774 | "version": "2.60.1", 775 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.60.1.tgz", 776 | "integrity": "sha512-akwfnpjY0rXEDSn1UTVfKXJhPsEBu+imi1gqBA1ZkHGydUnkV/fWCC90P7rDaLEW8KTwBcS1G3N4893Ndz+jwg==", 777 | "dev": true, 778 | "bin": { 779 | "rollup": "dist/bin/rollup" 780 | }, 781 | "engines": { 782 | "node": ">=10.0.0" 783 | }, 784 | "optionalDependencies": { 785 | "fsevents": "~2.3.2" 786 | } 787 | }, 788 | "node_modules/rollup-plugin-terser": { 789 | "version": "7.0.2", 790 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", 791 | "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", 792 | "dev": true, 793 | "dependencies": { 794 | "@babel/code-frame": "^7.10.4", 795 | "jest-worker": "^26.2.1", 796 | "serialize-javascript": "^4.0.0", 797 | "terser": "^5.0.0" 798 | }, 799 | "peerDependencies": { 800 | "rollup": "^2.0.0" 801 | } 802 | }, 803 | "node_modules/safe-buffer": { 804 | "version": "5.2.1", 805 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 806 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 807 | "dev": true, 808 | "funding": [ 809 | { 810 | "type": "github", 811 | "url": "https://github.com/sponsors/feross" 812 | }, 813 | { 814 | "type": "patreon", 815 | "url": "https://www.patreon.com/feross" 816 | }, 817 | { 818 | "type": "consulting", 819 | "url": "https://feross.org/support" 820 | } 821 | ] 822 | }, 823 | "node_modules/semver": { 824 | "version": "6.3.0", 825 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 826 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 827 | "dev": true, 828 | "bin": { 829 | "semver": "bin/semver.js" 830 | } 831 | }, 832 | "node_modules/serialize-javascript": { 833 | "version": "4.0.0", 834 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 835 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 836 | "dev": true, 837 | "dependencies": { 838 | "randombytes": "^2.1.0" 839 | } 840 | }, 841 | "node_modules/shebang-command": { 842 | "version": "2.0.0", 843 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 844 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 845 | "dev": true, 846 | "dependencies": { 847 | "shebang-regex": "^3.0.0" 848 | }, 849 | "engines": { 850 | "node": ">=8" 851 | } 852 | }, 853 | "node_modules/shebang-regex": { 854 | "version": "3.0.0", 855 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 856 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 857 | "dev": true, 858 | "engines": { 859 | "node": ">=8" 860 | } 861 | }, 862 | "node_modules/signal-exit": { 863 | "version": "3.0.6", 864 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", 865 | "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", 866 | "dev": true 867 | }, 868 | "node_modules/source-map": { 869 | "version": "0.7.3", 870 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 871 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", 872 | "dev": true, 873 | "engines": { 874 | "node": ">= 8" 875 | } 876 | }, 877 | "node_modules/source-map-support": { 878 | "version": "0.5.21", 879 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 880 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 881 | "dev": true, 882 | "dependencies": { 883 | "buffer-from": "^1.0.0", 884 | "source-map": "^0.6.0" 885 | } 886 | }, 887 | "node_modules/source-map-support/node_modules/source-map": { 888 | "version": "0.6.1", 889 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 890 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 891 | "dev": true, 892 | "engines": { 893 | "node": ">=0.10.0" 894 | } 895 | }, 896 | "node_modules/string-width": { 897 | "version": "4.2.3", 898 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 899 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 900 | "dev": true, 901 | "dependencies": { 902 | "emoji-regex": "^8.0.0", 903 | "is-fullwidth-code-point": "^3.0.0", 904 | "strip-ansi": "^6.0.1" 905 | }, 906 | "engines": { 907 | "node": ">=8" 908 | } 909 | }, 910 | "node_modules/strip-ansi": { 911 | "version": "6.0.1", 912 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 913 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 914 | "dev": true, 915 | "dependencies": { 916 | "ansi-regex": "^5.0.1" 917 | }, 918 | "engines": { 919 | "node": ">=8" 920 | } 921 | }, 922 | "node_modules/supports-color": { 923 | "version": "7.2.0", 924 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 925 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 926 | "dev": true, 927 | "dependencies": { 928 | "has-flag": "^4.0.0" 929 | }, 930 | "engines": { 931 | "node": ">=8" 932 | } 933 | }, 934 | "node_modules/terser": { 935 | "version": "5.10.0", 936 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", 937 | "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", 938 | "dev": true, 939 | "dependencies": { 940 | "commander": "^2.20.0", 941 | "source-map": "~0.7.2", 942 | "source-map-support": "~0.5.20" 943 | }, 944 | "bin": { 945 | "terser": "bin/terser" 946 | }, 947 | "engines": { 948 | "node": ">=10" 949 | }, 950 | "peerDependencies": { 951 | "acorn": "^8.5.0" 952 | }, 953 | "peerDependenciesMeta": { 954 | "acorn": { 955 | "optional": true 956 | } 957 | } 958 | }, 959 | "node_modules/test-exclude": { 960 | "version": "6.0.0", 961 | "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", 962 | "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", 963 | "dev": true, 964 | "dependencies": { 965 | "@istanbuljs/schema": "^0.1.2", 966 | "glob": "^7.1.4", 967 | "minimatch": "^3.0.4" 968 | }, 969 | "engines": { 970 | "node": ">=8" 971 | } 972 | }, 973 | "node_modules/v8-to-istanbul": { 974 | "version": "8.1.0", 975 | "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", 976 | "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", 977 | "dev": true, 978 | "dependencies": { 979 | "@types/istanbul-lib-coverage": "^2.0.1", 980 | "convert-source-map": "^1.6.0", 981 | "source-map": "^0.7.3" 982 | }, 983 | "engines": { 984 | "node": ">=10.12.0" 985 | } 986 | }, 987 | "node_modules/which": { 988 | "version": "2.0.2", 989 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 990 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 991 | "dev": true, 992 | "dependencies": { 993 | "isexe": "^2.0.0" 994 | }, 995 | "bin": { 996 | "node-which": "bin/node-which" 997 | }, 998 | "engines": { 999 | "node": ">= 8" 1000 | } 1001 | }, 1002 | "node_modules/wrap-ansi": { 1003 | "version": "7.0.0", 1004 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1005 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1006 | "dev": true, 1007 | "dependencies": { 1008 | "ansi-styles": "^4.0.0", 1009 | "string-width": "^4.1.0", 1010 | "strip-ansi": "^6.0.0" 1011 | }, 1012 | "engines": { 1013 | "node": ">=10" 1014 | }, 1015 | "funding": { 1016 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1017 | } 1018 | }, 1019 | "node_modules/wrap-ansi/node_modules/ansi-styles": { 1020 | "version": "4.3.0", 1021 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1022 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1023 | "dev": true, 1024 | "dependencies": { 1025 | "color-convert": "^2.0.1" 1026 | }, 1027 | "engines": { 1028 | "node": ">=8" 1029 | }, 1030 | "funding": { 1031 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1032 | } 1033 | }, 1034 | "node_modules/wrap-ansi/node_modules/color-convert": { 1035 | "version": "2.0.1", 1036 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1037 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1038 | "dev": true, 1039 | "dependencies": { 1040 | "color-name": "~1.1.4" 1041 | }, 1042 | "engines": { 1043 | "node": ">=7.0.0" 1044 | } 1045 | }, 1046 | "node_modules/wrap-ansi/node_modules/color-name": { 1047 | "version": "1.1.4", 1048 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1049 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1050 | "dev": true 1051 | }, 1052 | "node_modules/wrappy": { 1053 | "version": "1.0.2", 1054 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1055 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1056 | "dev": true 1057 | }, 1058 | "node_modules/y18n": { 1059 | "version": "5.0.8", 1060 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1061 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 1062 | "dev": true, 1063 | "engines": { 1064 | "node": ">=10" 1065 | } 1066 | }, 1067 | "node_modules/yargs": { 1068 | "version": "16.2.0", 1069 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 1070 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 1071 | "dev": true, 1072 | "dependencies": { 1073 | "cliui": "^7.0.2", 1074 | "escalade": "^3.1.1", 1075 | "get-caller-file": "^2.0.5", 1076 | "require-directory": "^2.1.1", 1077 | "string-width": "^4.2.0", 1078 | "y18n": "^5.0.5", 1079 | "yargs-parser": "^20.2.2" 1080 | }, 1081 | "engines": { 1082 | "node": ">=10" 1083 | } 1084 | }, 1085 | "node_modules/yargs-parser": { 1086 | "version": "20.2.9", 1087 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", 1088 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", 1089 | "dev": true, 1090 | "engines": { 1091 | "node": ">=10" 1092 | } 1093 | }, 1094 | "node_modules/yocto-queue": { 1095 | "version": "0.1.0", 1096 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 1097 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 1098 | "dev": true, 1099 | "engines": { 1100 | "node": ">=10" 1101 | }, 1102 | "funding": { 1103 | "url": "https://github.com/sponsors/sindresorhus" 1104 | } 1105 | } 1106 | }, 1107 | "dependencies": { 1108 | "@babel/code-frame": { 1109 | "version": "7.16.0", 1110 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", 1111 | "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", 1112 | "dev": true, 1113 | "requires": { 1114 | "@babel/highlight": "^7.16.0" 1115 | } 1116 | }, 1117 | "@babel/helper-validator-identifier": { 1118 | "version": "7.15.7", 1119 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", 1120 | "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", 1121 | "dev": true 1122 | }, 1123 | "@babel/highlight": { 1124 | "version": "7.16.0", 1125 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", 1126 | "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", 1127 | "dev": true, 1128 | "requires": { 1129 | "@babel/helper-validator-identifier": "^7.15.7", 1130 | "chalk": "^2.0.0", 1131 | "js-tokens": "^4.0.0" 1132 | } 1133 | }, 1134 | "@babel/parser": { 1135 | "version": "7.16.4", 1136 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", 1137 | "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", 1138 | "dev": true 1139 | }, 1140 | "@bcoe/v8-coverage": { 1141 | "version": "0.2.3", 1142 | "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", 1143 | "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", 1144 | "dev": true 1145 | }, 1146 | "@istanbuljs/schema": { 1147 | "version": "0.1.3", 1148 | "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", 1149 | "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", 1150 | "dev": true 1151 | }, 1152 | "@rollup/plugin-node-resolve": { 1153 | "version": "13.0.6", 1154 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.6.tgz", 1155 | "integrity": "sha512-sFsPDMPd4gMqnh2gS0uIxELnoRUp5kBl5knxD2EO0778G1oOJv4G1vyT2cpWz75OU2jDVcXhjVUuTAczGyFNKA==", 1156 | "dev": true, 1157 | "requires": { 1158 | "@rollup/pluginutils": "^3.1.0", 1159 | "@types/resolve": "1.17.1", 1160 | "builtin-modules": "^3.1.0", 1161 | "deepmerge": "^4.2.2", 1162 | "is-module": "^1.0.0", 1163 | "resolve": "^1.19.0" 1164 | } 1165 | }, 1166 | "@rollup/pluginutils": { 1167 | "version": "3.1.0", 1168 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", 1169 | "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", 1170 | "dev": true, 1171 | "requires": { 1172 | "@types/estree": "0.0.39", 1173 | "estree-walker": "^1.0.1", 1174 | "picomatch": "^2.2.2" 1175 | } 1176 | }, 1177 | "@types/estree": { 1178 | "version": "0.0.39", 1179 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", 1180 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", 1181 | "dev": true 1182 | }, 1183 | "@types/istanbul-lib-coverage": { 1184 | "version": "2.0.3", 1185 | "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", 1186 | "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", 1187 | "dev": true 1188 | }, 1189 | "@types/node": { 1190 | "version": "16.11.10", 1191 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.10.tgz", 1192 | "integrity": "sha512-3aRnHa1KlOEEhJ6+CvyHKK5vE9BcLGjtUpwvqYLRvYNQKMfabu3BwfJaA/SLW8dxe28LsNDjtHwePTuzn3gmOA==", 1193 | "dev": true 1194 | }, 1195 | "@types/resolve": { 1196 | "version": "1.17.1", 1197 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", 1198 | "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", 1199 | "dev": true, 1200 | "requires": { 1201 | "@types/node": "*" 1202 | } 1203 | }, 1204 | "ansi-regex": { 1205 | "version": "5.0.1", 1206 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1207 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1208 | "dev": true 1209 | }, 1210 | "ansi-styles": { 1211 | "version": "3.2.1", 1212 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1213 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1214 | "dev": true, 1215 | "requires": { 1216 | "color-convert": "^1.9.0" 1217 | } 1218 | }, 1219 | "ascjs": { 1220 | "version": "5.0.1", 1221 | "resolved": "https://registry.npmjs.org/ascjs/-/ascjs-5.0.1.tgz", 1222 | "integrity": "sha512-1d/QdICzpywXiP53/Zz3fMdaC0/BB1ybLf+fK+QrqY8iyXNnWUHUrpmrowueXeswo+O+meJWm43TJSg2ClP3Sg==", 1223 | "dev": true, 1224 | "requires": { 1225 | "@babel/parser": "^7.12.5" 1226 | } 1227 | }, 1228 | "balanced-match": { 1229 | "version": "1.0.2", 1230 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1231 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1232 | "dev": true 1233 | }, 1234 | "brace-expansion": { 1235 | "version": "1.1.11", 1236 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1237 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1238 | "dev": true, 1239 | "requires": { 1240 | "balanced-match": "^1.0.0", 1241 | "concat-map": "0.0.1" 1242 | } 1243 | }, 1244 | "buffer-from": { 1245 | "version": "1.1.2", 1246 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 1247 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 1248 | "dev": true 1249 | }, 1250 | "builtin-modules": { 1251 | "version": "3.2.0", 1252 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", 1253 | "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", 1254 | "dev": true 1255 | }, 1256 | "c8": { 1257 | "version": "7.10.0", 1258 | "resolved": "https://registry.npmjs.org/c8/-/c8-7.10.0.tgz", 1259 | "integrity": "sha512-OAwfC5+emvA6R7pkYFVBTOtI5ruf9DahffGmIqUc9l6wEh0h7iAFP6dt/V9Ioqlr2zW5avX9U9/w1I4alTRHkA==", 1260 | "dev": true, 1261 | "requires": { 1262 | "@bcoe/v8-coverage": "^0.2.3", 1263 | "@istanbuljs/schema": "^0.1.2", 1264 | "find-up": "^5.0.0", 1265 | "foreground-child": "^2.0.0", 1266 | "istanbul-lib-coverage": "^3.0.1", 1267 | "istanbul-lib-report": "^3.0.0", 1268 | "istanbul-reports": "^3.0.2", 1269 | "rimraf": "^3.0.0", 1270 | "test-exclude": "^6.0.0", 1271 | "v8-to-istanbul": "^8.0.0", 1272 | "yargs": "^16.2.0", 1273 | "yargs-parser": "^20.2.7" 1274 | } 1275 | }, 1276 | "chalk": { 1277 | "version": "2.4.2", 1278 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1279 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1280 | "dev": true, 1281 | "requires": { 1282 | "ansi-styles": "^3.2.1", 1283 | "escape-string-regexp": "^1.0.5", 1284 | "supports-color": "^5.3.0" 1285 | }, 1286 | "dependencies": { 1287 | "has-flag": { 1288 | "version": "3.0.0", 1289 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1290 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1291 | "dev": true 1292 | }, 1293 | "supports-color": { 1294 | "version": "5.5.0", 1295 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1296 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1297 | "dev": true, 1298 | "requires": { 1299 | "has-flag": "^3.0.0" 1300 | } 1301 | } 1302 | } 1303 | }, 1304 | "cliui": { 1305 | "version": "7.0.4", 1306 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 1307 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 1308 | "dev": true, 1309 | "requires": { 1310 | "string-width": "^4.2.0", 1311 | "strip-ansi": "^6.0.0", 1312 | "wrap-ansi": "^7.0.0" 1313 | } 1314 | }, 1315 | "color-convert": { 1316 | "version": "1.9.3", 1317 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1318 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1319 | "dev": true, 1320 | "requires": { 1321 | "color-name": "1.1.3" 1322 | } 1323 | }, 1324 | "color-name": { 1325 | "version": "1.1.3", 1326 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1327 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1328 | "dev": true 1329 | }, 1330 | "commander": { 1331 | "version": "2.20.3", 1332 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1333 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1334 | "dev": true 1335 | }, 1336 | "concat-map": { 1337 | "version": "0.0.1", 1338 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1339 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 1340 | "dev": true 1341 | }, 1342 | "convert-source-map": { 1343 | "version": "1.8.0", 1344 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", 1345 | "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", 1346 | "dev": true, 1347 | "requires": { 1348 | "safe-buffer": "~5.1.1" 1349 | }, 1350 | "dependencies": { 1351 | "safe-buffer": { 1352 | "version": "5.1.2", 1353 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1354 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1355 | "dev": true 1356 | } 1357 | } 1358 | }, 1359 | "cross-spawn": { 1360 | "version": "7.0.3", 1361 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1362 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1363 | "dev": true, 1364 | "requires": { 1365 | "path-key": "^3.1.0", 1366 | "shebang-command": "^2.0.0", 1367 | "which": "^2.0.1" 1368 | } 1369 | }, 1370 | "deepmerge": { 1371 | "version": "4.2.2", 1372 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 1373 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", 1374 | "dev": true 1375 | }, 1376 | "emoji-regex": { 1377 | "version": "8.0.0", 1378 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1379 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1380 | "dev": true 1381 | }, 1382 | "escalade": { 1383 | "version": "3.1.1", 1384 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1385 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1386 | "dev": true 1387 | }, 1388 | "escape-string-regexp": { 1389 | "version": "1.0.5", 1390 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1391 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1392 | "dev": true 1393 | }, 1394 | "estree-walker": { 1395 | "version": "1.0.1", 1396 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", 1397 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", 1398 | "dev": true 1399 | }, 1400 | "find-up": { 1401 | "version": "5.0.0", 1402 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1403 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1404 | "dev": true, 1405 | "requires": { 1406 | "locate-path": "^6.0.0", 1407 | "path-exists": "^4.0.0" 1408 | } 1409 | }, 1410 | "foreground-child": { 1411 | "version": "2.0.0", 1412 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", 1413 | "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", 1414 | "dev": true, 1415 | "requires": { 1416 | "cross-spawn": "^7.0.0", 1417 | "signal-exit": "^3.0.2" 1418 | } 1419 | }, 1420 | "fs.realpath": { 1421 | "version": "1.0.0", 1422 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1423 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1424 | "dev": true 1425 | }, 1426 | "fsevents": { 1427 | "version": "2.3.2", 1428 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1429 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1430 | "dev": true, 1431 | "optional": true 1432 | }, 1433 | "function-bind": { 1434 | "version": "1.1.1", 1435 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1436 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1437 | "dev": true 1438 | }, 1439 | "get-caller-file": { 1440 | "version": "2.0.5", 1441 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1442 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1443 | "dev": true 1444 | }, 1445 | "glob": { 1446 | "version": "7.2.0", 1447 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 1448 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 1449 | "dev": true, 1450 | "requires": { 1451 | "fs.realpath": "^1.0.0", 1452 | "inflight": "^1.0.4", 1453 | "inherits": "2", 1454 | "minimatch": "^3.0.4", 1455 | "once": "^1.3.0", 1456 | "path-is-absolute": "^1.0.0" 1457 | } 1458 | }, 1459 | "has": { 1460 | "version": "1.0.3", 1461 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1462 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1463 | "dev": true, 1464 | "requires": { 1465 | "function-bind": "^1.1.1" 1466 | } 1467 | }, 1468 | "has-flag": { 1469 | "version": "4.0.0", 1470 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1471 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1472 | "dev": true 1473 | }, 1474 | "html-escaper": { 1475 | "version": "2.0.2", 1476 | "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", 1477 | "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", 1478 | "dev": true 1479 | }, 1480 | "inflight": { 1481 | "version": "1.0.6", 1482 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1483 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1484 | "dev": true, 1485 | "requires": { 1486 | "once": "^1.3.0", 1487 | "wrappy": "1" 1488 | } 1489 | }, 1490 | "inherits": { 1491 | "version": "2.0.4", 1492 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1493 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1494 | "dev": true 1495 | }, 1496 | "is-core-module": { 1497 | "version": "2.8.0", 1498 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", 1499 | "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", 1500 | "dev": true, 1501 | "requires": { 1502 | "has": "^1.0.3" 1503 | } 1504 | }, 1505 | "is-fullwidth-code-point": { 1506 | "version": "3.0.0", 1507 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1508 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1509 | "dev": true 1510 | }, 1511 | "is-module": { 1512 | "version": "1.0.0", 1513 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 1514 | "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", 1515 | "dev": true 1516 | }, 1517 | "isexe": { 1518 | "version": "2.0.0", 1519 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1520 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1521 | "dev": true 1522 | }, 1523 | "istanbul-lib-coverage": { 1524 | "version": "3.2.0", 1525 | "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", 1526 | "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", 1527 | "dev": true 1528 | }, 1529 | "istanbul-lib-report": { 1530 | "version": "3.0.0", 1531 | "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", 1532 | "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", 1533 | "dev": true, 1534 | "requires": { 1535 | "istanbul-lib-coverage": "^3.0.0", 1536 | "make-dir": "^3.0.0", 1537 | "supports-color": "^7.1.0" 1538 | } 1539 | }, 1540 | "istanbul-reports": { 1541 | "version": "3.0.5", 1542 | "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", 1543 | "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", 1544 | "dev": true, 1545 | "requires": { 1546 | "html-escaper": "^2.0.0", 1547 | "istanbul-lib-report": "^3.0.0" 1548 | } 1549 | }, 1550 | "jest-worker": { 1551 | "version": "26.6.2", 1552 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", 1553 | "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", 1554 | "dev": true, 1555 | "requires": { 1556 | "@types/node": "*", 1557 | "merge-stream": "^2.0.0", 1558 | "supports-color": "^7.0.0" 1559 | } 1560 | }, 1561 | "js-tokens": { 1562 | "version": "4.0.0", 1563 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1564 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1565 | "dev": true 1566 | }, 1567 | "locate-path": { 1568 | "version": "6.0.0", 1569 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 1570 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 1571 | "dev": true, 1572 | "requires": { 1573 | "p-locate": "^5.0.0" 1574 | } 1575 | }, 1576 | "make-dir": { 1577 | "version": "3.1.0", 1578 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 1579 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 1580 | "dev": true, 1581 | "requires": { 1582 | "semver": "^6.0.0" 1583 | } 1584 | }, 1585 | "merge-stream": { 1586 | "version": "2.0.0", 1587 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1588 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1589 | "dev": true 1590 | }, 1591 | "minimatch": { 1592 | "version": "3.0.4", 1593 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1594 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1595 | "dev": true, 1596 | "requires": { 1597 | "brace-expansion": "^1.1.7" 1598 | } 1599 | }, 1600 | "once": { 1601 | "version": "1.4.0", 1602 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1603 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1604 | "dev": true, 1605 | "requires": { 1606 | "wrappy": "1" 1607 | } 1608 | }, 1609 | "p-limit": { 1610 | "version": "3.1.0", 1611 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 1612 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1613 | "dev": true, 1614 | "requires": { 1615 | "yocto-queue": "^0.1.0" 1616 | } 1617 | }, 1618 | "p-locate": { 1619 | "version": "5.0.0", 1620 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 1621 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1622 | "dev": true, 1623 | "requires": { 1624 | "p-limit": "^3.0.2" 1625 | } 1626 | }, 1627 | "path-exists": { 1628 | "version": "4.0.0", 1629 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1630 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1631 | "dev": true 1632 | }, 1633 | "path-is-absolute": { 1634 | "version": "1.0.1", 1635 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1636 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1637 | "dev": true 1638 | }, 1639 | "path-key": { 1640 | "version": "3.1.1", 1641 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1642 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1643 | "dev": true 1644 | }, 1645 | "path-parse": { 1646 | "version": "1.0.7", 1647 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1648 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1649 | "dev": true 1650 | }, 1651 | "picomatch": { 1652 | "version": "2.3.0", 1653 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 1654 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 1655 | "dev": true 1656 | }, 1657 | "randombytes": { 1658 | "version": "2.1.0", 1659 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1660 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1661 | "dev": true, 1662 | "requires": { 1663 | "safe-buffer": "^5.1.0" 1664 | } 1665 | }, 1666 | "require-directory": { 1667 | "version": "2.1.1", 1668 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1669 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 1670 | "dev": true 1671 | }, 1672 | "resolve": { 1673 | "version": "1.20.0", 1674 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 1675 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 1676 | "dev": true, 1677 | "requires": { 1678 | "is-core-module": "^2.2.0", 1679 | "path-parse": "^1.0.6" 1680 | } 1681 | }, 1682 | "rimraf": { 1683 | "version": "3.0.2", 1684 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1685 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1686 | "dev": true, 1687 | "requires": { 1688 | "glob": "^7.1.3" 1689 | } 1690 | }, 1691 | "rollup": { 1692 | "version": "2.60.1", 1693 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.60.1.tgz", 1694 | "integrity": "sha512-akwfnpjY0rXEDSn1UTVfKXJhPsEBu+imi1gqBA1ZkHGydUnkV/fWCC90P7rDaLEW8KTwBcS1G3N4893Ndz+jwg==", 1695 | "dev": true, 1696 | "requires": { 1697 | "fsevents": "~2.3.2" 1698 | } 1699 | }, 1700 | "rollup-plugin-terser": { 1701 | "version": "7.0.2", 1702 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", 1703 | "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", 1704 | "dev": true, 1705 | "requires": { 1706 | "@babel/code-frame": "^7.10.4", 1707 | "jest-worker": "^26.2.1", 1708 | "serialize-javascript": "^4.0.0", 1709 | "terser": "^5.0.0" 1710 | } 1711 | }, 1712 | "safe-buffer": { 1713 | "version": "5.2.1", 1714 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1715 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1716 | "dev": true 1717 | }, 1718 | "semver": { 1719 | "version": "6.3.0", 1720 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1721 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1722 | "dev": true 1723 | }, 1724 | "serialize-javascript": { 1725 | "version": "4.0.0", 1726 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 1727 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 1728 | "dev": true, 1729 | "requires": { 1730 | "randombytes": "^2.1.0" 1731 | } 1732 | }, 1733 | "shebang-command": { 1734 | "version": "2.0.0", 1735 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1736 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1737 | "dev": true, 1738 | "requires": { 1739 | "shebang-regex": "^3.0.0" 1740 | } 1741 | }, 1742 | "shebang-regex": { 1743 | "version": "3.0.0", 1744 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1745 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1746 | "dev": true 1747 | }, 1748 | "signal-exit": { 1749 | "version": "3.0.6", 1750 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", 1751 | "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", 1752 | "dev": true 1753 | }, 1754 | "source-map": { 1755 | "version": "0.7.3", 1756 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 1757 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", 1758 | "dev": true 1759 | }, 1760 | "source-map-support": { 1761 | "version": "0.5.21", 1762 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 1763 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 1764 | "dev": true, 1765 | "requires": { 1766 | "buffer-from": "^1.0.0", 1767 | "source-map": "^0.6.0" 1768 | }, 1769 | "dependencies": { 1770 | "source-map": { 1771 | "version": "0.6.1", 1772 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1773 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1774 | "dev": true 1775 | } 1776 | } 1777 | }, 1778 | "string-width": { 1779 | "version": "4.2.3", 1780 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1781 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1782 | "dev": true, 1783 | "requires": { 1784 | "emoji-regex": "^8.0.0", 1785 | "is-fullwidth-code-point": "^3.0.0", 1786 | "strip-ansi": "^6.0.1" 1787 | } 1788 | }, 1789 | "strip-ansi": { 1790 | "version": "6.0.1", 1791 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1792 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1793 | "dev": true, 1794 | "requires": { 1795 | "ansi-regex": "^5.0.1" 1796 | } 1797 | }, 1798 | "supports-color": { 1799 | "version": "7.2.0", 1800 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1801 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1802 | "dev": true, 1803 | "requires": { 1804 | "has-flag": "^4.0.0" 1805 | } 1806 | }, 1807 | "terser": { 1808 | "version": "5.10.0", 1809 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", 1810 | "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", 1811 | "dev": true, 1812 | "requires": { 1813 | "commander": "^2.20.0", 1814 | "source-map": "~0.7.2", 1815 | "source-map-support": "~0.5.20" 1816 | } 1817 | }, 1818 | "test-exclude": { 1819 | "version": "6.0.0", 1820 | "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", 1821 | "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", 1822 | "dev": true, 1823 | "requires": { 1824 | "@istanbuljs/schema": "^0.1.2", 1825 | "glob": "^7.1.4", 1826 | "minimatch": "^3.0.4" 1827 | } 1828 | }, 1829 | "v8-to-istanbul": { 1830 | "version": "8.1.0", 1831 | "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", 1832 | "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", 1833 | "dev": true, 1834 | "requires": { 1835 | "@types/istanbul-lib-coverage": "^2.0.1", 1836 | "convert-source-map": "^1.6.0", 1837 | "source-map": "^0.7.3" 1838 | } 1839 | }, 1840 | "which": { 1841 | "version": "2.0.2", 1842 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1843 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1844 | "dev": true, 1845 | "requires": { 1846 | "isexe": "^2.0.0" 1847 | } 1848 | }, 1849 | "wrap-ansi": { 1850 | "version": "7.0.0", 1851 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1852 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1853 | "dev": true, 1854 | "requires": { 1855 | "ansi-styles": "^4.0.0", 1856 | "string-width": "^4.1.0", 1857 | "strip-ansi": "^6.0.0" 1858 | }, 1859 | "dependencies": { 1860 | "ansi-styles": { 1861 | "version": "4.3.0", 1862 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1863 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1864 | "dev": true, 1865 | "requires": { 1866 | "color-convert": "^2.0.1" 1867 | } 1868 | }, 1869 | "color-convert": { 1870 | "version": "2.0.1", 1871 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1872 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1873 | "dev": true, 1874 | "requires": { 1875 | "color-name": "~1.1.4" 1876 | } 1877 | }, 1878 | "color-name": { 1879 | "version": "1.1.4", 1880 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1881 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1882 | "dev": true 1883 | } 1884 | } 1885 | }, 1886 | "wrappy": { 1887 | "version": "1.0.2", 1888 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1889 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1890 | "dev": true 1891 | }, 1892 | "y18n": { 1893 | "version": "5.0.8", 1894 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1895 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 1896 | "dev": true 1897 | }, 1898 | "yargs": { 1899 | "version": "16.2.0", 1900 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 1901 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 1902 | "dev": true, 1903 | "requires": { 1904 | "cliui": "^7.0.2", 1905 | "escalade": "^3.1.1", 1906 | "get-caller-file": "^2.0.5", 1907 | "require-directory": "^2.1.1", 1908 | "string-width": "^4.2.0", 1909 | "y18n": "^5.0.5", 1910 | "yargs-parser": "^20.2.2" 1911 | } 1912 | }, 1913 | "yargs-parser": { 1914 | "version": "20.2.9", 1915 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", 1916 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", 1917 | "dev": true 1918 | }, 1919 | "yocto-queue": { 1920 | "version": "0.1.0", 1921 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 1922 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 1923 | "dev": true 1924 | } 1925 | } 1926 | } 1927 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "broadcast", 3 | "version": "4.0.2", 4 | "description": "A promises based notification channel", 5 | "main": "./cjs/index.js", 6 | "scripts": { 7 | "build": "npm run cjs && npm run rollup:es && npm run rollup:index && npm run fix:default && npm run test", 8 | "cjs": "ascjs --no-default esm cjs", 9 | "rollup:es": "rollup --config rollup/es.config.js && sed -i.bck 's/^var /self./' es.js && rm -rf es.js.bck", 10 | "rollup:index": "rollup --config rollup/index.config.js", 11 | "fix:default": "sed -i 's/({})/({}).default/' index.js && sed -i 's/({})/({}).default/' es.js", 12 | "test": "c8 node test/index.js", 13 | "coverage": "mkdir -p ./coverage; c8 report --reporter=text-lcov > ./coverage/lcov.info" 14 | }, 15 | "keywords": [ 16 | "broadcast", 17 | "notification", 18 | "private", 19 | "global", 20 | "channel" 21 | ], 22 | "author": "Andrea Giammarchi", 23 | "license": "ISC", 24 | "devDependencies": { 25 | "@rollup/plugin-node-resolve": "^13.0.6", 26 | "ascjs": "^5.0.1", 27 | "c8": "^7.10.0", 28 | "rollup": "^2.60.1", 29 | "rollup-plugin-terser": "^7.0.2" 30 | }, 31 | "module": "./esm/index.js", 32 | "type": "module", 33 | "exports": { 34 | ".": { 35 | "import": "./esm/index.js", 36 | "default": "./cjs/index.js" 37 | }, 38 | "./package.json": "./package.json" 39 | }, 40 | "unpkg": "es.js" 41 | } 42 | -------------------------------------------------------------------------------- /rollup/es.config.js: -------------------------------------------------------------------------------- 1 | import {nodeResolve} from '@rollup/plugin-node-resolve'; 2 | import {terser} from 'rollup-plugin-terser'; 3 | 4 | export default { 5 | input: './esm/index.js', 6 | plugins: [ 7 | 8 | nodeResolve(), 9 | terser() 10 | ], 11 | 12 | output: { 13 | esModule: false, 14 | exports: 'named', 15 | file: './es.js', 16 | format: 'es' 17 | } 18 | }; 19 | -------------------------------------------------------------------------------- /rollup/index.config.js: -------------------------------------------------------------------------------- 1 | import {nodeResolve} from '@rollup/plugin-node-resolve'; 2 | 3 | export default { 4 | input: './esm/index.js', 5 | plugins: [ 6 | 7 | nodeResolve() 8 | ], 9 | 10 | output: { 11 | esModule: false, 12 | exports: 'named', 13 | file: './index.js', 14 | format: 'es' 15 | } 16 | }; 17 | -------------------------------------------------------------------------------- /src/broadcast.js: -------------------------------------------------------------------------------- 1 | /** 2 | * // assuming "data" event hasn't happened yet 3 | * broadcast.when("data", function (data) { 4 | * console.log(data); 5 | * }); 6 | * 7 | * // whenever it will happen 8 | * broadcast.that("data", {any:'value'}); 9 | * // all listeners waiting for it, will be triggered 10 | * 11 | * 12 | * // what if you add a listener after the `.that` call? 13 | * broadcast.when("data", function (data) { 14 | * console.log('yep, instantly called!', data); 15 | * }); 16 | * 17 | * 18 | * // what if we redefine data ? 19 | * broadcast.that("data", {another:'value'}); 20 | * // from now on, whoever will ask `.when` data 21 | * // the value will be the updated one 22 | * // but every listener already fired and satisfied 23 | * // will be simply ignored 24 | * 25 | * 26 | * // what if I want to be sure the channel is private? 27 | * // feel free to use a Symbol as channel 28 | * var myPrivateSymbol = Symbol(); 29 | * broadcast.when(myPrivateSymbol, ...); 30 | * 31 | * // otherwise create a new broadcast like variable 32 | * var privateBroadcast = broadcast.new(); 33 | */ 34 | function create(O) {'use strict'; 35 | 36 | var 37 | // flag for internal operations (used by all) 38 | invoke = true, 39 | // create a dictionary, fallback as regular object 40 | _ = (O.create || O)(null), 41 | // dictionaries don't have this method, borrow it 42 | hOP = O.prototype.hasOwnProperty, 43 | // will invoke the callback within the Promise 44 | broadcast = function (args) { 45 | this.apply(null, args); 46 | }, 47 | // IE < 9 doesn't have this method, sham it 48 | bind = O.bind || function (self) { 49 | var cb = this; 50 | return function () { 51 | return cb.apply(self, arguments); 52 | }; 53 | }, 54 | // IE < 9 doesn't have this method, sham it 55 | indexOf = Array.prototype.indexOf || function indexOf(v) { 56 | var i = this.length; 57 | while (i-- && this[i] !== v) {} 58 | return i; 59 | }, 60 | resolve = typeof Promise == 'undefined' ? 61 | function (value) { 62 | return {then: function (cb) { 63 | setTimeout(cb, 1, value); 64 | }}; 65 | } : 66 | function (value) { 67 | return Promise.resolve(value); 68 | }, 69 | // little partial WeakMap poly 70 | wm = typeof WeakMap == 'undefined' ? 71 | (function (k, v) { 72 | return { 73 | // delete used to be a reserved property name 74 | 'delete': function (x) { 75 | var i = indexOf.call(k, x); 76 | k.splice(i, 1); 77 | v.splice(i, 1); 78 | }, 79 | get: function (x) { 80 | return v[indexOf.call(k, x)]; 81 | }, 82 | set: function (x, y) { 83 | v[k.push(x) - 1] = y; 84 | } 85 | }; 86 | }([], [])) : 87 | new WeakMap() 88 | ; 89 | 90 | // check if a private _[type] is known 91 | // if not, create the info object 92 | // returns such object either cases 93 | function get(type) { 94 | return hOP.call(_, type) ? 95 | _[type] : 96 | (_[type] = { 97 | args: null, 98 | cb: [] 99 | }); 100 | } 101 | 102 | function that(type) { 103 | var 104 | len = arguments.length, 105 | info = get(type), 106 | i = 1, 107 | cb 108 | ; 109 | // in case it's invoked 110 | // without any error or value 111 | if (i === len) { 112 | // creates a callback 113 | // that once invoked will resolve 114 | return function () { 115 | var args = [type]; 116 | args.push.apply(args, arguments); 117 | return that.apply(null, args); 118 | }; 119 | } 120 | // in every other case 121 | // resolve the type with any amount 122 | // of arguments received 123 | else { 124 | info.args = []; 125 | while (i < len) info.args.push(arguments[i++]); 126 | i = 0; 127 | len = info.cb.length; 128 | // be sure the list of waiting listeners 129 | // will be cleaned up so these won't 130 | // every be notified more than once 131 | // ( unless these are passed again via `.when` ) 132 | // NOTE: .splice(0) would be enough 133 | // but IE8 wants the length too 134 | cb = info.cb.splice(i, len); 135 | while (i < len) resolve(info.args).then(bind.call(broadcast, cb[i++])); 136 | } 137 | return info.args[0]; 138 | } 139 | 140 | function when(type, callback) { 141 | var info = get(type), out; 142 | if (arguments.length === 1) { 143 | out = new Promise(function (resolve) { 144 | callback = resolve; 145 | }); 146 | } 147 | if (invoke && info.args) { 148 | resolve(info.args).then(bind.call(broadcast, callback)); 149 | } else if(indexOf.call(info.cb, callback) < 0) { 150 | info.cb.push(callback); 151 | } 152 | return out; 153 | } 154 | 155 | // freeze, if possible, the broadcast object 156 | // to be sure no other scripts can change its methods 157 | return (O.freeze || O)({ 158 | 159 | // There are two ways to use this method 160 | // 161 | // .when(type, callback) 162 | // add a listener to a generic type 163 | // whenever such type will happen 164 | // or if it happened already 165 | // invoke the callback with the resolved value 166 | // 167 | // .when(type) 168 | // return a new Promise that will be resolved 169 | // once the notification will happen 170 | // 171 | // broadcast.when('event').then(function (data) { ... }); 172 | // 173 | when: when, 174 | 175 | // .about is an alias for .that 176 | about: that, 177 | 178 | // There are two ways to use this method 179 | // 180 | // .that(type) 181 | // will return a callback 182 | // that will try to resolve once executed 183 | // fs.readFile('setup.json', broadcast.that('setup.json')) 184 | // 185 | // overload 186 | // .that(type, any1[, any2[, ...]]) 187 | // resolve type passing anyValue around 188 | // 189 | // // through one argument 190 | // broadcast.that('some-event', {all: 'good'}); 191 | // // through more arguments 192 | // broadcast.that('some-event', null, 'OK'); 193 | // 194 | that: that, 195 | 196 | // if we set a listener through `.when` 197 | // and this hasn't been notified yet 198 | // but we changed our mind about such notification 199 | // we can still remove such listener via `.drop` 200 | // otherwise, if we know the key, we can drop it. 201 | drop: function drop(type, callback) { 202 | if (arguments.length === 1) 203 | delete _[type]; 204 | else { 205 | var fn = wm.get(callback), cb, i; 206 | if (fn) { 207 | wm['delete'](callback); 208 | drop(type, fn); 209 | } else { 210 | cb = get(type).cb; 211 | i = indexOf.call(cb, callback); 212 | if (~i) cb.splice(i, 1); 213 | } 214 | } 215 | }, 216 | 217 | // create a new broadcast-like object 218 | 'new': function () { 219 | return create(O); 220 | }, 221 | 222 | // in case we'd like to react each time 223 | // to a specific event. 224 | // In this case a callback is mandatory, 225 | // and it's also needed to eventually drop. 226 | all: function all(type, callback) { 227 | if (!wm.get(callback)) { 228 | wm.set(callback, function fn() { 229 | invoke = false; 230 | when(type, fn); 231 | invoke = true; 232 | resolve(arguments).then(bind.call(broadcast, callback)); 233 | }); 234 | when(type, wm.get(callback)); 235 | } 236 | } 237 | }); 238 | } 239 | -------------------------------------------------------------------------------- /test/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | broadcast 7 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | const {broadcast} = require('../cjs'); 2 | 3 | const ms = delay => new Promise($ => setTimeout($, delay)); 4 | 5 | (async () => { 6 | let random = Math.random(); 7 | let calls = 0; 8 | let value; 9 | let fn = (_) => { 10 | calls++; 11 | value = _; 12 | }; 13 | 14 | broadcast.when('random').then(fn); 15 | await ms(10); 16 | console.assert(calls === 0); 17 | 18 | broadcast.that('random', random); 19 | await ms(10); 20 | console.assert(calls === 1); 21 | console.assert(value === random); 22 | 23 | broadcast.that('random')(Math.random()); 24 | await ms(10); 25 | console.assert(calls === 1); 26 | console.assert(value === random); 27 | 28 | broadcast.when('random').then(fn); 29 | await ms(10); 30 | console.assert(calls === 2); 31 | console.assert(value !== random); 32 | random = value; 33 | 34 | broadcast.all('random', fn); 35 | await ms(10); 36 | console.assert(calls === 3); 37 | console.assert(value === random); 38 | 39 | broadcast.that('random')(Math.random()); 40 | await ms(10); 41 | console.assert(calls === 4); 42 | console.assert(value !== random); 43 | random = value; 44 | 45 | broadcast.drop('random', fn); 46 | broadcast.that('random')(Math.random()); 47 | await ms(10); 48 | console.assert(calls === 4); 49 | console.assert(value === random); 50 | 51 | broadcast.drop('random'); 52 | broadcast.that('random')(Math.random()); 53 | await ms(10); 54 | console.assert(calls === 4); 55 | console.assert(value === random); 56 | })(); 57 | -------------------------------------------------------------------------------- /test/package.json: -------------------------------------------------------------------------------- 1 | {"type":"commonjs"} --------------------------------------------------------------------------------