├── .babelrc ├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md ├── example ├── README.md ├── index.html └── index.js ├── lib ├── gen │ └── .gitkeep ├── index.d.ts ├── index.js ├── node.js ├── randombytes.c └── wrapper.c ├── package-lock.json ├── package.json └── test └── test.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["env"] 3 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | lib/gen 3 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "sss"] 2 | path = sss 3 | url = https://github.com/dsprenkels/sss.git 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Joel Thorstensson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Shamir secret sharing for Javascript 2 | [Shamir secret sharing](https://en.wikipedia.org/wiki/Shamir's_Secret_Sharing) is an algorithm for splitting data into multiple `shares`, a subset of which can then be combined to reconstruct the original secret. This library aims to provide javascript bindings for [dsprenkles/sss](https://github.com/dsprenkels/sss/tree/master) implementation of this algorithm using Web Assembly. 3 | 4 | ## Background 5 | Currently there are bindings for sss in node.js. However this code will not run in the browser since it uses node binaries. By using Web Assembly it is possible to create a javascript library that works both in the browser as well as node.js. 6 | 7 | ## Usage 8 | ```ts 9 | // Import the sss library 10 | import * as sss from 'sss-wasm' 11 | 12 | // Create a buffer for the data that will be shared (must be 64 bytes long) 13 | const data = new Uint8Array(64); 14 | data.fill(0x42); 15 | 16 | const amount = 5; 17 | const threshold = 4; 18 | 19 | // Creating 5 shares (need 3 to restore) 20 | const shares = await sss.createShares(data, amount, threshold); 21 | 22 | // For demonstrational purpose, lose one of the shares 23 | const newShares = [shares[3], shares[2], shares[4], shares[0]] 24 | 25 | // Restore the original secret 26 | const restored = await sss.combineShares(newShares); 27 | 28 | // Dump the original secret back to the screen 29 | console.log(restored) 30 | ``` 31 | 32 | ## Build 33 | We need Emscripten toolchain installed to build wasm. [More info](https://webassembly.org/getting-started/developers-guide/) 34 | 35 | You need to setup submodules first. 36 | ``` 37 | git submodules init 38 | git submodules update 39 | cd sss 40 | git submodules init 41 | git submodules update 42 | ``` 43 | 44 | Then go to the root folder. 45 | ``` 46 | npm install 47 | npm run build 48 | npm run test 49 | ``` 50 | -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | # Shamir secret sharing web-ui 2 | 3 | This subdirectory of [`sss-wasm`](https://github.com/3box/sss-wasm) 4 | implements a web interface for splitting and combining secrets using Daan Sprenkels' 5 | [Shamir secret sharing library][sss]. 6 | 7 | Run it from root: 8 | ``` 9 | npm run serve 10 | ``` 11 | 12 | and then go to `http://localhost:3000/example/` in a web browser. 13 | -------------------------------------------------------------------------------- /example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Shamir secret sharing web-ui 6 | 11 |

Shamir secret sharing web-ui

12 |

13 | This page allows you to split your secrets into parts using Daan Sprenkels' 14 | Shamir secret sharing library. ( 15 | source code) 16 |

17 |

18 | Note: Currently the maximum secret size is 63 bytes. 19 |

20 |
21 |

Secret:

22 | 23 |
24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
32 |
33 |

Shares:

34 | 35 |
36 | 37 | 104 | -------------------------------------------------------------------------------- /example/index.js: -------------------------------------------------------------------------------- 1 | import * as sss from '../lib/index.js' 2 | 3 | globalThis.sss = sss; 4 | -------------------------------------------------------------------------------- /lib/gen/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/3box/sss-wasm/af620badbc03462fd7ea89c11d256a005821a119/lib/gen/.gitkeep -------------------------------------------------------------------------------- /lib/index.d.ts: -------------------------------------------------------------------------------- 1 | export function createShares(data: Uint8Array, n: number, k: number): Promise> 2 | export function combineShares(shares: Array): Promise 3 | export function createKeyshares(data: Uint8Array, n: number, k: number): Promise> 4 | export function combineKeyshares(shares: Array): Promise 5 | -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | import Wrapper from "./gen/wrapper.js"; 2 | 3 | let api = undefined; 4 | 5 | function load() { 6 | if (api) return new Promise(resolve => resolve(api)); 7 | return new Promise(resolve => { 8 | Wrapper().then(Module => { 9 | api = { 10 | set: (d, p) => Module.HEAPU8.set(d, p), 11 | slice: (f, t) => Module.HEAPU8.slice(f, t), 12 | getShareLen: Module.cwrap('get_share_len', 'number', []), 13 | getMessageLen: Module.cwrap('get_message_len', 'number', []), 14 | getKeyshareLen: Module.cwrap('get_keyshare_len', 'number', []), 15 | getKeyLen: Module.cwrap('get_key_len', 'number', []), 16 | createBuffer: Module.cwrap('create_buffer', 'number', ['number', 'number']), 17 | destroyBuffer: Module.cwrap('destroy_buffer', '', ['number']), 18 | createShares: Module.cwrap('create_shares', 'number', ['number', 'number', 'number']), 19 | combineShares: Module.cwrap('combine_shares', 'number', ['number', 'number']), 20 | createKeyshares: Module.cwrap('create_keyshares', 'number', ['number', 'number', 'number']), 21 | combineKeyshares: Module.cwrap('combine_keyshares', 'number', ['number', 'number']), 22 | }; 23 | resolve(api); 24 | }); 25 | }); 26 | } 27 | 28 | export const createShares = function createShares(data, n, k) { 29 | return load().then(api => { 30 | const datap = api.createBuffer(data.length); 31 | api.set(data, datap); 32 | const sharep = api.createShares(datap, n, k); 33 | api.destroyBuffer(datap); 34 | 35 | const shareLen = api.getShareLen(); 36 | const shares = []; 37 | for (let i = 0; i < n; i++) { 38 | shares[i] = api.slice(sharep + shareLen * i, sharep + shareLen * (i + 1)); 39 | } 40 | return shares; 41 | }); 42 | }; 43 | 44 | export const combineShares = function combineShares(shares) { 45 | return load().then(api => { 46 | const input = api.createBuffer(api.getShareLen() * shares.length); 47 | for (let s in shares) { 48 | api.set(shares[s], input + s * api.getShareLen()); 49 | } 50 | 51 | const datap = api.combineShares(input, shares.length); 52 | if (!datap) throw "InvalidAccessError: invalid or too few shares provided"; 53 | api.destroyBuffer(input); 54 | 55 | return api.slice(datap, datap + api.getMessageLen()); 56 | }); 57 | }; 58 | 59 | export const createKeyshares = function createKeyshares(key, n, k) { 60 | return load().then(api => { 61 | const keyp = api.createBuffer(key.length); 62 | api.set(key, keyp); 63 | const sharep = api.createKeyshares(keyp, n, k); 64 | api.destroyBuffer(keyp); 65 | 66 | const shareLen = api.getKeyshareLen(); 67 | const shares = []; 68 | for (let i = 0; i < n; i++) { 69 | shares[i] = api.slice(sharep + shareLen * i, sharep + shareLen * (i + 1)); 70 | } 71 | return shares; 72 | }); 73 | } 74 | 75 | export const combineKeyshares = function combineKeyshares(keyshares) { 76 | return load().then(api => { 77 | const input = api.createBuffer(api.getKeyshareLen() * keyshares.length); 78 | for (let s in keyshares) { 79 | api.set(keyshares[s], input + s * api.getKeyshareLen()); 80 | } 81 | 82 | const keyp = api.combineKeyshares(input, keyshares.length); 83 | api.destroyBuffer(input); 84 | 85 | return api.slice(keyp, keyp + api.getKeyLen()); 86 | }); 87 | } 88 | -------------------------------------------------------------------------------- /lib/node.js: -------------------------------------------------------------------------------- 1 | globalThis.__dirname = import.meta.url.match(/^(.+)\/([^\/]+)$/)[1].replace(/^file:\/\//, '') 2 | import { createRequire } from 'module'; 3 | globalThis.require = (p) => { 4 | const origRequire = createRequire(import.meta.url); 5 | if (p === 'path') { 6 | const module = origRequire('path') 7 | return { 8 | ...module, 9 | normalize: (a) => a.replace(/^file:\/\//, '') 10 | } 11 | } else { 12 | return origRequire(p) 13 | } 14 | } 15 | 16 | export * from './index.js' 17 | -------------------------------------------------------------------------------- /lib/randombytes.c: -------------------------------------------------------------------------------- 1 | #include "../sss/randombytes.h" 2 | 3 | #ifdef __EMSCRIPTEN__ 4 | #include 5 | #endif 6 | 7 | #if defined(__EMSCRIPTEN__) 8 | static int randombytes_emscripten_randombytes(void *buf, size_t n) 9 | { 10 | const int ret = EM_ASM_INT({ 11 | if (typeof window!=="undefined") { 12 | var crypto = window.crypto || window.msCrypto; 13 | if (crypto) { 14 | var buf = new window.Uint8Array($1); 15 | crypto.getRandomValues(buf); 16 | writeArrayToMemory(buf, $0); 17 | return 0; 18 | } 19 | } 20 | var crypto = require('crypto'); 21 | if (crypto) { 22 | writeArrayToMemory(crypto.randomBytes($1), $0); 23 | return 0; 24 | } 25 | return -1; 26 | }, buf, n); 27 | return ret; 28 | } 29 | #endif /* defined(__EMSCRIPTEN__) */ 30 | 31 | int randombytes(void *buf, size_t n) 32 | { 33 | #if defined(__EMSCRIPTEN__) 34 | #pragma message("Using browser window.crypto.getRandomValues") 35 | /* Use window.crypto.getRandomValues */ 36 | return randombytes_emscripten_randombytes(buf, n); 37 | #else 38 | #error "randombytes(...) is not supported on this platform" 39 | #endif 40 | } 41 | -------------------------------------------------------------------------------- /lib/wrapper.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include "../sss/sss.h" 4 | #include "../sss/randombytes/randombytes.h" 5 | 6 | EMSCRIPTEN_KEEPALIVE 7 | int get_share_len() 8 | { 9 | return sss_SHARE_LEN; 10 | } 11 | 12 | EMSCRIPTEN_KEEPALIVE 13 | int get_message_len() 14 | { 15 | return sss_MLEN; 16 | } 17 | 18 | EMSCRIPTEN_KEEPALIVE 19 | int get_keyshare_len() 20 | { 21 | return sss_KEYSHARE_LEN; 22 | } 23 | 24 | EMSCRIPTEN_KEEPALIVE 25 | int get_key_len() 26 | { 27 | return 32; 28 | } 29 | 30 | EMSCRIPTEN_KEEPALIVE 31 | uint8_t *create_shares(uint8_t *data, uint8_t n, uint8_t k) 32 | { 33 | uint8_t *output = (uint8_t *)malloc(sss_SHARE_LEN * n); 34 | sss_create_shares((sss_Share *)output, data, n, k); 35 | return output; 36 | } 37 | 38 | EMSCRIPTEN_KEEPALIVE 39 | uint8_t *combine_shares(uint8_t *input, uint8_t k) 40 | { 41 | uint8_t *data = (uint8_t *)malloc(sss_MLEN); 42 | if (sss_combine_shares(data, (sss_Share *)input, k) == 0) { 43 | return data; 44 | } else { 45 | free(data); 46 | return NULL; 47 | } 48 | } 49 | 50 | EMSCRIPTEN_KEEPALIVE 51 | uint8_t *create_keyshares(uint8_t *key, uint8_t n, uint8_t k) 52 | { 53 | uint8_t *output = (uint8_t *)malloc(sss_KEYSHARE_LEN * n); 54 | sss_create_keyshares((sss_Keyshare *)output, key, n, k); 55 | return output; 56 | } 57 | 58 | EMSCRIPTEN_KEEPALIVE 59 | uint8_t *combine_keyshares(uint8_t *input, uint8_t k) 60 | { 61 | uint8_t *key = (uint8_t *)malloc(32); 62 | sss_combine_keyshares(key, (sss_Keyshare *)input, k); 63 | return key; 64 | } 65 | 66 | EMSCRIPTEN_KEEPALIVE 67 | uint8_t *create_buffer(uint8_t length) 68 | { 69 | return malloc(length * sizeof(uint8_t)); 70 | } 71 | 72 | EMSCRIPTEN_KEEPALIVE 73 | void destroy_buffer(uint8_t *p) 74 | { 75 | free(p); 76 | } 77 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sss-wasm", 3 | "version": "0.4.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "sss-wasm", 9 | "version": "0.4.0", 10 | "license": "Apache-2.0", 11 | "devDependencies": { 12 | "gh-pages": "^4.0.0", 13 | "jsverify": "^0.8.4", 14 | "serve": "^14.0.1", 15 | "shuffle-array": "1.0" 16 | } 17 | }, 18 | "node_modules/@zeit/schemas": { 19 | "version": "2.21.0", 20 | "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.21.0.tgz", 21 | "integrity": "sha512-/J4WBTpWtQ4itN1rb3ao8LfClmVcmz2pO6oYb7Qd4h7VSqUhIbJIvrykz9Ew1WMg6eFWsKdsMHc5uPbFxqlCpg==", 22 | "dev": true 23 | }, 24 | "node_modules/accepts": { 25 | "version": "1.3.8", 26 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 27 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 28 | "dev": true, 29 | "dependencies": { 30 | "mime-types": "~2.1.34", 31 | "negotiator": "0.6.3" 32 | }, 33 | "engines": { 34 | "node": ">= 0.6" 35 | } 36 | }, 37 | "node_modules/ajv": { 38 | "version": "8.11.0", 39 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", 40 | "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", 41 | "dev": true, 42 | "dependencies": { 43 | "fast-deep-equal": "^3.1.1", 44 | "json-schema-traverse": "^1.0.0", 45 | "require-from-string": "^2.0.2", 46 | "uri-js": "^4.2.2" 47 | }, 48 | "funding": { 49 | "type": "github", 50 | "url": "https://github.com/sponsors/epoberezkin" 51 | } 52 | }, 53 | "node_modules/ansi-align": { 54 | "version": "3.0.1", 55 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", 56 | "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", 57 | "dev": true, 58 | "dependencies": { 59 | "string-width": "^4.1.0" 60 | } 61 | }, 62 | "node_modules/ansi-align/node_modules/ansi-regex": { 63 | "version": "5.0.1", 64 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 65 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 66 | "dev": true, 67 | "engines": { 68 | "node": ">=8" 69 | } 70 | }, 71 | "node_modules/ansi-align/node_modules/emoji-regex": { 72 | "version": "8.0.0", 73 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 74 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 75 | "dev": true 76 | }, 77 | "node_modules/ansi-align/node_modules/string-width": { 78 | "version": "4.2.3", 79 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 80 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 81 | "dev": true, 82 | "dependencies": { 83 | "emoji-regex": "^8.0.0", 84 | "is-fullwidth-code-point": "^3.0.0", 85 | "strip-ansi": "^6.0.1" 86 | }, 87 | "engines": { 88 | "node": ">=8" 89 | } 90 | }, 91 | "node_modules/ansi-align/node_modules/strip-ansi": { 92 | "version": "6.0.1", 93 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 94 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 95 | "dev": true, 96 | "dependencies": { 97 | "ansi-regex": "^5.0.1" 98 | }, 99 | "engines": { 100 | "node": ">=8" 101 | } 102 | }, 103 | "node_modules/ansi-regex": { 104 | "version": "6.0.1", 105 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 106 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 107 | "dev": true, 108 | "engines": { 109 | "node": ">=12" 110 | }, 111 | "funding": { 112 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 113 | } 114 | }, 115 | "node_modules/ansi-styles": { 116 | "version": "6.1.0", 117 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", 118 | "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", 119 | "dev": true, 120 | "engines": { 121 | "node": ">=12" 122 | }, 123 | "funding": { 124 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 125 | } 126 | }, 127 | "node_modules/arch": { 128 | "version": "2.2.0", 129 | "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", 130 | "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", 131 | "dev": true, 132 | "funding": [ 133 | { 134 | "type": "github", 135 | "url": "https://github.com/sponsors/feross" 136 | }, 137 | { 138 | "type": "patreon", 139 | "url": "https://www.patreon.com/feross" 140 | }, 141 | { 142 | "type": "consulting", 143 | "url": "https://feross.org/support" 144 | } 145 | ] 146 | }, 147 | "node_modules/arg": { 148 | "version": "5.0.2", 149 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 150 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", 151 | "dev": true 152 | }, 153 | "node_modules/array-union": { 154 | "version": "1.0.2", 155 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", 156 | "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", 157 | "dev": true, 158 | "dependencies": { 159 | "array-uniq": "^1.0.1" 160 | }, 161 | "engines": { 162 | "node": ">=0.10.0" 163 | } 164 | }, 165 | "node_modules/array-uniq": { 166 | "version": "1.0.3", 167 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", 168 | "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", 169 | "dev": true, 170 | "engines": { 171 | "node": ">=0.10.0" 172 | } 173 | }, 174 | "node_modules/async": { 175 | "version": "2.6.4", 176 | "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", 177 | "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", 178 | "dev": true, 179 | "dependencies": { 180 | "lodash": "^4.17.14" 181 | } 182 | }, 183 | "node_modules/balanced-match": { 184 | "version": "1.0.2", 185 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 186 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 187 | "dev": true 188 | }, 189 | "node_modules/boxen": { 190 | "version": "7.0.0", 191 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz", 192 | "integrity": "sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==", 193 | "dev": true, 194 | "dependencies": { 195 | "ansi-align": "^3.0.1", 196 | "camelcase": "^7.0.0", 197 | "chalk": "^5.0.1", 198 | "cli-boxes": "^3.0.0", 199 | "string-width": "^5.1.2", 200 | "type-fest": "^2.13.0", 201 | "widest-line": "^4.0.1", 202 | "wrap-ansi": "^8.0.1" 203 | }, 204 | "engines": { 205 | "node": ">=14.16" 206 | }, 207 | "funding": { 208 | "url": "https://github.com/sponsors/sindresorhus" 209 | } 210 | }, 211 | "node_modules/brace-expansion": { 212 | "version": "1.1.11", 213 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 214 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 215 | "dev": true, 216 | "dependencies": { 217 | "balanced-match": "^1.0.0", 218 | "concat-map": "0.0.1" 219 | } 220 | }, 221 | "node_modules/bytes": { 222 | "version": "3.0.0", 223 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 224 | "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", 225 | "dev": true, 226 | "engines": { 227 | "node": ">= 0.8" 228 | } 229 | }, 230 | "node_modules/camelcase": { 231 | "version": "7.0.0", 232 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.0.tgz", 233 | "integrity": "sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ==", 234 | "dev": true, 235 | "engines": { 236 | "node": ">=14.16" 237 | }, 238 | "funding": { 239 | "url": "https://github.com/sponsors/sindresorhus" 240 | } 241 | }, 242 | "node_modules/chalk": { 243 | "version": "5.0.1", 244 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", 245 | "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", 246 | "dev": true, 247 | "engines": { 248 | "node": "^12.17.0 || ^14.13 || >=16.0.0" 249 | }, 250 | "funding": { 251 | "url": "https://github.com/chalk/chalk?sponsor=1" 252 | } 253 | }, 254 | "node_modules/chalk-template": { 255 | "version": "0.4.0", 256 | "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", 257 | "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", 258 | "dev": true, 259 | "dependencies": { 260 | "chalk": "^4.1.2" 261 | }, 262 | "engines": { 263 | "node": ">=12" 264 | }, 265 | "funding": { 266 | "url": "https://github.com/chalk/chalk-template?sponsor=1" 267 | } 268 | }, 269 | "node_modules/chalk-template/node_modules/ansi-styles": { 270 | "version": "4.3.0", 271 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 272 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 273 | "dev": true, 274 | "dependencies": { 275 | "color-convert": "^2.0.1" 276 | }, 277 | "engines": { 278 | "node": ">=8" 279 | }, 280 | "funding": { 281 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 282 | } 283 | }, 284 | "node_modules/chalk-template/node_modules/chalk": { 285 | "version": "4.1.2", 286 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 287 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 288 | "dev": true, 289 | "dependencies": { 290 | "ansi-styles": "^4.1.0", 291 | "supports-color": "^7.1.0" 292 | }, 293 | "engines": { 294 | "node": ">=10" 295 | }, 296 | "funding": { 297 | "url": "https://github.com/chalk/chalk?sponsor=1" 298 | } 299 | }, 300 | "node_modules/cli-boxes": { 301 | "version": "3.0.0", 302 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", 303 | "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", 304 | "dev": true, 305 | "engines": { 306 | "node": ">=10" 307 | }, 308 | "funding": { 309 | "url": "https://github.com/sponsors/sindresorhus" 310 | } 311 | }, 312 | "node_modules/clipboardy": { 313 | "version": "3.0.0", 314 | "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz", 315 | "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==", 316 | "dev": true, 317 | "dependencies": { 318 | "arch": "^2.2.0", 319 | "execa": "^5.1.1", 320 | "is-wsl": "^2.2.0" 321 | }, 322 | "engines": { 323 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 324 | }, 325 | "funding": { 326 | "url": "https://github.com/sponsors/sindresorhus" 327 | } 328 | }, 329 | "node_modules/color-convert": { 330 | "version": "2.0.1", 331 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 332 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 333 | "dev": true, 334 | "dependencies": { 335 | "color-name": "~1.1.4" 336 | }, 337 | "engines": { 338 | "node": ">=7.0.0" 339 | } 340 | }, 341 | "node_modules/color-name": { 342 | "version": "1.1.4", 343 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 344 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 345 | "dev": true 346 | }, 347 | "node_modules/commander": { 348 | "version": "2.20.3", 349 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 350 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 351 | "dev": true 352 | }, 353 | "node_modules/commondir": { 354 | "version": "1.0.1", 355 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 356 | "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", 357 | "dev": true 358 | }, 359 | "node_modules/compressible": { 360 | "version": "2.0.18", 361 | "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", 362 | "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", 363 | "dev": true, 364 | "dependencies": { 365 | "mime-db": ">= 1.43.0 < 2" 366 | }, 367 | "engines": { 368 | "node": ">= 0.6" 369 | } 370 | }, 371 | "node_modules/compression": { 372 | "version": "1.7.4", 373 | "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", 374 | "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", 375 | "dev": true, 376 | "dependencies": { 377 | "accepts": "~1.3.5", 378 | "bytes": "3.0.0", 379 | "compressible": "~2.0.16", 380 | "debug": "2.6.9", 381 | "on-headers": "~1.0.2", 382 | "safe-buffer": "5.1.2", 383 | "vary": "~1.1.2" 384 | }, 385 | "engines": { 386 | "node": ">= 0.8.0" 387 | } 388 | }, 389 | "node_modules/concat-map": { 390 | "version": "0.0.1", 391 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 392 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 393 | "dev": true 394 | }, 395 | "node_modules/content-disposition": { 396 | "version": "0.5.2", 397 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 398 | "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", 399 | "dev": true, 400 | "engines": { 401 | "node": ">= 0.6" 402 | } 403 | }, 404 | "node_modules/cross-spawn": { 405 | "version": "7.0.3", 406 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 407 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 408 | "dev": true, 409 | "dependencies": { 410 | "path-key": "^3.1.0", 411 | "shebang-command": "^2.0.0", 412 | "which": "^2.0.1" 413 | }, 414 | "engines": { 415 | "node": ">= 8" 416 | } 417 | }, 418 | "node_modules/debug": { 419 | "version": "2.6.9", 420 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 421 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 422 | "dev": true, 423 | "dependencies": { 424 | "ms": "2.0.0" 425 | } 426 | }, 427 | "node_modules/deep-extend": { 428 | "version": "0.6.0", 429 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 430 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 431 | "dev": true, 432 | "engines": { 433 | "node": ">=4.0.0" 434 | } 435 | }, 436 | "node_modules/eastasianwidth": { 437 | "version": "0.2.0", 438 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 439 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 440 | "dev": true 441 | }, 442 | "node_modules/email-addresses": { 443 | "version": "3.1.0", 444 | "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz", 445 | "integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==", 446 | "dev": true 447 | }, 448 | "node_modules/emoji-regex": { 449 | "version": "9.2.2", 450 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 451 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 452 | "dev": true 453 | }, 454 | "node_modules/escape-string-regexp": { 455 | "version": "1.0.5", 456 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 457 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 458 | "dev": true, 459 | "engines": { 460 | "node": ">=0.8.0" 461 | } 462 | }, 463 | "node_modules/execa": { 464 | "version": "5.1.1", 465 | "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", 466 | "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", 467 | "dev": true, 468 | "dependencies": { 469 | "cross-spawn": "^7.0.3", 470 | "get-stream": "^6.0.0", 471 | "human-signals": "^2.1.0", 472 | "is-stream": "^2.0.0", 473 | "merge-stream": "^2.0.0", 474 | "npm-run-path": "^4.0.1", 475 | "onetime": "^5.1.2", 476 | "signal-exit": "^3.0.3", 477 | "strip-final-newline": "^2.0.0" 478 | }, 479 | "engines": { 480 | "node": ">=10" 481 | }, 482 | "funding": { 483 | "url": "https://github.com/sindresorhus/execa?sponsor=1" 484 | } 485 | }, 486 | "node_modules/fast-deep-equal": { 487 | "version": "3.1.3", 488 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 489 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 490 | "dev": true 491 | }, 492 | "node_modules/fast-url-parser": { 493 | "version": "1.1.3", 494 | "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", 495 | "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", 496 | "dev": true, 497 | "dependencies": { 498 | "punycode": "^1.3.2" 499 | } 500 | }, 501 | "node_modules/filename-reserved-regex": { 502 | "version": "2.0.0", 503 | "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", 504 | "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", 505 | "dev": true, 506 | "engines": { 507 | "node": ">=4" 508 | } 509 | }, 510 | "node_modules/filenamify": { 511 | "version": "4.3.0", 512 | "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", 513 | "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", 514 | "dev": true, 515 | "dependencies": { 516 | "filename-reserved-regex": "^2.0.0", 517 | "strip-outer": "^1.0.1", 518 | "trim-repeated": "^1.0.0" 519 | }, 520 | "engines": { 521 | "node": ">=8" 522 | }, 523 | "funding": { 524 | "url": "https://github.com/sponsors/sindresorhus" 525 | } 526 | }, 527 | "node_modules/find-cache-dir": { 528 | "version": "3.3.2", 529 | "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", 530 | "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", 531 | "dev": true, 532 | "dependencies": { 533 | "commondir": "^1.0.1", 534 | "make-dir": "^3.0.2", 535 | "pkg-dir": "^4.1.0" 536 | }, 537 | "engines": { 538 | "node": ">=8" 539 | }, 540 | "funding": { 541 | "url": "https://github.com/avajs/find-cache-dir?sponsor=1" 542 | } 543 | }, 544 | "node_modules/find-up": { 545 | "version": "4.1.0", 546 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 547 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 548 | "dev": true, 549 | "dependencies": { 550 | "locate-path": "^5.0.0", 551 | "path-exists": "^4.0.0" 552 | }, 553 | "engines": { 554 | "node": ">=8" 555 | } 556 | }, 557 | "node_modules/fs-extra": { 558 | "version": "8.1.0", 559 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 560 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 561 | "dev": true, 562 | "dependencies": { 563 | "graceful-fs": "^4.2.0", 564 | "jsonfile": "^4.0.0", 565 | "universalify": "^0.1.0" 566 | }, 567 | "engines": { 568 | "node": ">=6 <7 || >=8" 569 | } 570 | }, 571 | "node_modules/fs.realpath": { 572 | "version": "1.0.0", 573 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 574 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 575 | "dev": true 576 | }, 577 | "node_modules/get-stream": { 578 | "version": "6.0.1", 579 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", 580 | "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", 581 | "dev": true, 582 | "engines": { 583 | "node": ">=10" 584 | }, 585 | "funding": { 586 | "url": "https://github.com/sponsors/sindresorhus" 587 | } 588 | }, 589 | "node_modules/gh-pages": { 590 | "version": "4.0.0", 591 | "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-4.0.0.tgz", 592 | "integrity": "sha512-p8S0T3aGJc68MtwOcZusul5qPSNZCalap3NWbhRUZYu1YOdp+EjZ+4kPmRM8h3NNRdqw00yuevRjlkuSzCn7iQ==", 593 | "dev": true, 594 | "dependencies": { 595 | "async": "^2.6.1", 596 | "commander": "^2.18.0", 597 | "email-addresses": "^3.0.1", 598 | "filenamify": "^4.3.0", 599 | "find-cache-dir": "^3.3.1", 600 | "fs-extra": "^8.1.0", 601 | "globby": "^6.1.0" 602 | }, 603 | "bin": { 604 | "gh-pages": "bin/gh-pages.js", 605 | "gh-pages-clean": "bin/gh-pages-clean.js" 606 | }, 607 | "engines": { 608 | "node": ">=10" 609 | } 610 | }, 611 | "node_modules/glob": { 612 | "version": "7.2.3", 613 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 614 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 615 | "dev": true, 616 | "dependencies": { 617 | "fs.realpath": "^1.0.0", 618 | "inflight": "^1.0.4", 619 | "inherits": "2", 620 | "minimatch": "^3.1.1", 621 | "once": "^1.3.0", 622 | "path-is-absolute": "^1.0.0" 623 | }, 624 | "engines": { 625 | "node": "*" 626 | }, 627 | "funding": { 628 | "url": "https://github.com/sponsors/isaacs" 629 | } 630 | }, 631 | "node_modules/globby": { 632 | "version": "6.1.0", 633 | "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", 634 | "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", 635 | "dev": true, 636 | "dependencies": { 637 | "array-union": "^1.0.1", 638 | "glob": "^7.0.3", 639 | "object-assign": "^4.0.1", 640 | "pify": "^2.0.0", 641 | "pinkie-promise": "^2.0.0" 642 | }, 643 | "engines": { 644 | "node": ">=0.10.0" 645 | } 646 | }, 647 | "node_modules/graceful-fs": { 648 | "version": "4.2.10", 649 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 650 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", 651 | "dev": true 652 | }, 653 | "node_modules/has-flag": { 654 | "version": "4.0.0", 655 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 656 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 657 | "dev": true, 658 | "engines": { 659 | "node": ">=8" 660 | } 661 | }, 662 | "node_modules/human-signals": { 663 | "version": "2.1.0", 664 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", 665 | "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", 666 | "dev": true, 667 | "engines": { 668 | "node": ">=10.17.0" 669 | } 670 | }, 671 | "node_modules/inflight": { 672 | "version": "1.0.6", 673 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 674 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 675 | "dev": true, 676 | "dependencies": { 677 | "once": "^1.3.0", 678 | "wrappy": "1" 679 | } 680 | }, 681 | "node_modules/inherits": { 682 | "version": "2.0.4", 683 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 684 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 685 | "dev": true 686 | }, 687 | "node_modules/ini": { 688 | "version": "1.3.8", 689 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 690 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 691 | "dev": true 692 | }, 693 | "node_modules/is-docker": { 694 | "version": "2.2.1", 695 | "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", 696 | "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", 697 | "dev": true, 698 | "bin": { 699 | "is-docker": "cli.js" 700 | }, 701 | "engines": { 702 | "node": ">=8" 703 | }, 704 | "funding": { 705 | "url": "https://github.com/sponsors/sindresorhus" 706 | } 707 | }, 708 | "node_modules/is-fullwidth-code-point": { 709 | "version": "3.0.0", 710 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 711 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 712 | "dev": true, 713 | "engines": { 714 | "node": ">=8" 715 | } 716 | }, 717 | "node_modules/is-port-reachable": { 718 | "version": "4.0.0", 719 | "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-4.0.0.tgz", 720 | "integrity": "sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==", 721 | "dev": true, 722 | "engines": { 723 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 724 | }, 725 | "funding": { 726 | "url": "https://github.com/sponsors/sindresorhus" 727 | } 728 | }, 729 | "node_modules/is-stream": { 730 | "version": "2.0.1", 731 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 732 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 733 | "dev": true, 734 | "engines": { 735 | "node": ">=8" 736 | }, 737 | "funding": { 738 | "url": "https://github.com/sponsors/sindresorhus" 739 | } 740 | }, 741 | "node_modules/is-wsl": { 742 | "version": "2.2.0", 743 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", 744 | "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", 745 | "dev": true, 746 | "dependencies": { 747 | "is-docker": "^2.0.0" 748 | }, 749 | "engines": { 750 | "node": ">=8" 751 | } 752 | }, 753 | "node_modules/isexe": { 754 | "version": "2.0.0", 755 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 756 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 757 | "dev": true 758 | }, 759 | "node_modules/json-schema-traverse": { 760 | "version": "1.0.0", 761 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 762 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 763 | "dev": true 764 | }, 765 | "node_modules/jsonfile": { 766 | "version": "4.0.0", 767 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 768 | "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", 769 | "dev": true, 770 | "optionalDependencies": { 771 | "graceful-fs": "^4.1.6" 772 | } 773 | }, 774 | "node_modules/jsverify": { 775 | "version": "0.8.4", 776 | "resolved": "https://registry.npmjs.org/jsverify/-/jsverify-0.8.4.tgz", 777 | "integrity": "sha512-nUG73Sfi8L4eOkc7pv9sflgAm43v+z6XMuePGVdRoBUxBLJiVcMcf3Xgc4h19eHHF3JwsaagOkUu825UnPBLJw==", 778 | "dev": true, 779 | "dependencies": { 780 | "lazy-seq": "^1.0.0", 781 | "rc4": "~0.1.5", 782 | "trampa": "^1.0.0", 783 | "typify-parser": "^1.1.0" 784 | }, 785 | "engines": { 786 | "node": ">= 0.8.0" 787 | } 788 | }, 789 | "node_modules/lazy-seq": { 790 | "version": "1.0.0", 791 | "resolved": "https://registry.npmjs.org/lazy-seq/-/lazy-seq-1.0.0.tgz", 792 | "integrity": "sha512-AQ4vRcnULa7FX6R6YTAjKQAE1MuEThidVQm0TEtTpedaBpnOwid5k6go16E5NDkafel1xAsZL73WkwdG03IzhA==", 793 | "dev": true, 794 | "engines": { 795 | "node": ">= 0.10.0" 796 | } 797 | }, 798 | "node_modules/locate-path": { 799 | "version": "5.0.0", 800 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 801 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 802 | "dev": true, 803 | "dependencies": { 804 | "p-locate": "^4.1.0" 805 | }, 806 | "engines": { 807 | "node": ">=8" 808 | } 809 | }, 810 | "node_modules/lodash": { 811 | "version": "4.17.21", 812 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 813 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 814 | "dev": true 815 | }, 816 | "node_modules/make-dir": { 817 | "version": "3.1.0", 818 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 819 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 820 | "dev": true, 821 | "dependencies": { 822 | "semver": "^6.0.0" 823 | }, 824 | "engines": { 825 | "node": ">=8" 826 | }, 827 | "funding": { 828 | "url": "https://github.com/sponsors/sindresorhus" 829 | } 830 | }, 831 | "node_modules/merge-stream": { 832 | "version": "2.0.0", 833 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 834 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 835 | "dev": true 836 | }, 837 | "node_modules/mime-db": { 838 | "version": "1.52.0", 839 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 840 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 841 | "dev": true, 842 | "engines": { 843 | "node": ">= 0.6" 844 | } 845 | }, 846 | "node_modules/mime-types": { 847 | "version": "2.1.35", 848 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 849 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 850 | "dev": true, 851 | "dependencies": { 852 | "mime-db": "1.52.0" 853 | }, 854 | "engines": { 855 | "node": ">= 0.6" 856 | } 857 | }, 858 | "node_modules/mimic-fn": { 859 | "version": "2.1.0", 860 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 861 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 862 | "dev": true, 863 | "engines": { 864 | "node": ">=6" 865 | } 866 | }, 867 | "node_modules/minimatch": { 868 | "version": "3.1.2", 869 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 870 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 871 | "dev": true, 872 | "dependencies": { 873 | "brace-expansion": "^1.1.7" 874 | }, 875 | "engines": { 876 | "node": "*" 877 | } 878 | }, 879 | "node_modules/minimist": { 880 | "version": "1.2.6", 881 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 882 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", 883 | "dev": true 884 | }, 885 | "node_modules/ms": { 886 | "version": "2.0.0", 887 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 888 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", 889 | "dev": true 890 | }, 891 | "node_modules/negotiator": { 892 | "version": "0.6.3", 893 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 894 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 895 | "dev": true, 896 | "engines": { 897 | "node": ">= 0.6" 898 | } 899 | }, 900 | "node_modules/npm-run-path": { 901 | "version": "4.0.1", 902 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 903 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 904 | "dev": true, 905 | "dependencies": { 906 | "path-key": "^3.0.0" 907 | }, 908 | "engines": { 909 | "node": ">=8" 910 | } 911 | }, 912 | "node_modules/object-assign": { 913 | "version": "4.1.1", 914 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 915 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 916 | "dev": true, 917 | "engines": { 918 | "node": ">=0.10.0" 919 | } 920 | }, 921 | "node_modules/on-headers": { 922 | "version": "1.0.2", 923 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", 924 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", 925 | "dev": true, 926 | "engines": { 927 | "node": ">= 0.8" 928 | } 929 | }, 930 | "node_modules/once": { 931 | "version": "1.4.0", 932 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 933 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 934 | "dev": true, 935 | "dependencies": { 936 | "wrappy": "1" 937 | } 938 | }, 939 | "node_modules/onetime": { 940 | "version": "5.1.2", 941 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 942 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 943 | "dev": true, 944 | "dependencies": { 945 | "mimic-fn": "^2.1.0" 946 | }, 947 | "engines": { 948 | "node": ">=6" 949 | }, 950 | "funding": { 951 | "url": "https://github.com/sponsors/sindresorhus" 952 | } 953 | }, 954 | "node_modules/p-limit": { 955 | "version": "2.3.0", 956 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 957 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 958 | "dev": true, 959 | "dependencies": { 960 | "p-try": "^2.0.0" 961 | }, 962 | "engines": { 963 | "node": ">=6" 964 | }, 965 | "funding": { 966 | "url": "https://github.com/sponsors/sindresorhus" 967 | } 968 | }, 969 | "node_modules/p-locate": { 970 | "version": "4.1.0", 971 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 972 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 973 | "dev": true, 974 | "dependencies": { 975 | "p-limit": "^2.2.0" 976 | }, 977 | "engines": { 978 | "node": ">=8" 979 | } 980 | }, 981 | "node_modules/p-try": { 982 | "version": "2.2.0", 983 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 984 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 985 | "dev": true, 986 | "engines": { 987 | "node": ">=6" 988 | } 989 | }, 990 | "node_modules/path-exists": { 991 | "version": "4.0.0", 992 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 993 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 994 | "dev": true, 995 | "engines": { 996 | "node": ">=8" 997 | } 998 | }, 999 | "node_modules/path-is-absolute": { 1000 | "version": "1.0.1", 1001 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1002 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1003 | "dev": true, 1004 | "engines": { 1005 | "node": ">=0.10.0" 1006 | } 1007 | }, 1008 | "node_modules/path-is-inside": { 1009 | "version": "1.0.2", 1010 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 1011 | "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", 1012 | "dev": true 1013 | }, 1014 | "node_modules/path-key": { 1015 | "version": "3.1.1", 1016 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1017 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1018 | "dev": true, 1019 | "engines": { 1020 | "node": ">=8" 1021 | } 1022 | }, 1023 | "node_modules/path-to-regexp": { 1024 | "version": "2.2.1", 1025 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", 1026 | "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==", 1027 | "dev": true 1028 | }, 1029 | "node_modules/pify": { 1030 | "version": "2.3.0", 1031 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1032 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 1033 | "dev": true, 1034 | "engines": { 1035 | "node": ">=0.10.0" 1036 | } 1037 | }, 1038 | "node_modules/pinkie": { 1039 | "version": "2.0.4", 1040 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 1041 | "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", 1042 | "dev": true, 1043 | "engines": { 1044 | "node": ">=0.10.0" 1045 | } 1046 | }, 1047 | "node_modules/pinkie-promise": { 1048 | "version": "2.0.1", 1049 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 1050 | "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", 1051 | "dev": true, 1052 | "dependencies": { 1053 | "pinkie": "^2.0.0" 1054 | }, 1055 | "engines": { 1056 | "node": ">=0.10.0" 1057 | } 1058 | }, 1059 | "node_modules/pkg-dir": { 1060 | "version": "4.2.0", 1061 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 1062 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 1063 | "dev": true, 1064 | "dependencies": { 1065 | "find-up": "^4.0.0" 1066 | }, 1067 | "engines": { 1068 | "node": ">=8" 1069 | } 1070 | }, 1071 | "node_modules/punycode": { 1072 | "version": "1.4.1", 1073 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 1074 | "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", 1075 | "dev": true 1076 | }, 1077 | "node_modules/range-parser": { 1078 | "version": "1.2.0", 1079 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 1080 | "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", 1081 | "dev": true, 1082 | "engines": { 1083 | "node": ">= 0.6" 1084 | } 1085 | }, 1086 | "node_modules/rc": { 1087 | "version": "1.2.8", 1088 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 1089 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 1090 | "dev": true, 1091 | "dependencies": { 1092 | "deep-extend": "^0.6.0", 1093 | "ini": "~1.3.0", 1094 | "minimist": "^1.2.0", 1095 | "strip-json-comments": "~2.0.1" 1096 | }, 1097 | "bin": { 1098 | "rc": "cli.js" 1099 | } 1100 | }, 1101 | "node_modules/rc4": { 1102 | "version": "0.1.5", 1103 | "resolved": "https://registry.npmjs.org/rc4/-/rc4-0.1.5.tgz", 1104 | "integrity": "sha512-xdDTNV90z5x5u25Oc871Xnvu7yAr4tV7Eluh0VSvrhUkry39q1k+zkz7xroqHbRq+8PiazySHJPArqifUvz9VA==", 1105 | "dev": true, 1106 | "engines": { 1107 | "node": ">=0.10.0" 1108 | } 1109 | }, 1110 | "node_modules/registry-auth-token": { 1111 | "version": "3.3.2", 1112 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", 1113 | "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", 1114 | "dev": true, 1115 | "dependencies": { 1116 | "rc": "^1.1.6", 1117 | "safe-buffer": "^5.0.1" 1118 | } 1119 | }, 1120 | "node_modules/registry-url": { 1121 | "version": "3.1.0", 1122 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", 1123 | "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", 1124 | "dev": true, 1125 | "dependencies": { 1126 | "rc": "^1.0.1" 1127 | }, 1128 | "engines": { 1129 | "node": ">=0.10.0" 1130 | } 1131 | }, 1132 | "node_modules/require-from-string": { 1133 | "version": "2.0.2", 1134 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 1135 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 1136 | "dev": true, 1137 | "engines": { 1138 | "node": ">=0.10.0" 1139 | } 1140 | }, 1141 | "node_modules/safe-buffer": { 1142 | "version": "5.1.2", 1143 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1144 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1145 | "dev": true 1146 | }, 1147 | "node_modules/semver": { 1148 | "version": "6.3.0", 1149 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1150 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1151 | "dev": true, 1152 | "bin": { 1153 | "semver": "bin/semver.js" 1154 | } 1155 | }, 1156 | "node_modules/serve": { 1157 | "version": "14.0.1", 1158 | "resolved": "https://registry.npmjs.org/serve/-/serve-14.0.1.tgz", 1159 | "integrity": "sha512-tNGwxl27FwA8TbmMQqN0jTaSx8/trL532qZsJHX1VdiEIjjtMJHCs7AFS6OvtC7cTHOvmjXqt5yczejU6CV2Xg==", 1160 | "dev": true, 1161 | "dependencies": { 1162 | "@zeit/schemas": "2.21.0", 1163 | "ajv": "8.11.0", 1164 | "arg": "5.0.2", 1165 | "boxen": "7.0.0", 1166 | "chalk": "5.0.1", 1167 | "chalk-template": "0.4.0", 1168 | "clipboardy": "3.0.0", 1169 | "compression": "1.7.4", 1170 | "is-port-reachable": "4.0.0", 1171 | "serve-handler": "6.1.3", 1172 | "update-check": "1.5.4" 1173 | }, 1174 | "bin": { 1175 | "serve": "build/main.js" 1176 | }, 1177 | "engines": { 1178 | "node": ">= 14" 1179 | } 1180 | }, 1181 | "node_modules/serve-handler": { 1182 | "version": "6.1.3", 1183 | "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", 1184 | "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", 1185 | "dev": true, 1186 | "dependencies": { 1187 | "bytes": "3.0.0", 1188 | "content-disposition": "0.5.2", 1189 | "fast-url-parser": "1.1.3", 1190 | "mime-types": "2.1.18", 1191 | "minimatch": "3.0.4", 1192 | "path-is-inside": "1.0.2", 1193 | "path-to-regexp": "2.2.1", 1194 | "range-parser": "1.2.0" 1195 | } 1196 | }, 1197 | "node_modules/serve-handler/node_modules/mime-db": { 1198 | "version": "1.33.0", 1199 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", 1200 | "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", 1201 | "dev": true, 1202 | "engines": { 1203 | "node": ">= 0.6" 1204 | } 1205 | }, 1206 | "node_modules/serve-handler/node_modules/mime-types": { 1207 | "version": "2.1.18", 1208 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", 1209 | "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", 1210 | "dev": true, 1211 | "dependencies": { 1212 | "mime-db": "~1.33.0" 1213 | }, 1214 | "engines": { 1215 | "node": ">= 0.6" 1216 | } 1217 | }, 1218 | "node_modules/serve-handler/node_modules/minimatch": { 1219 | "version": "3.0.4", 1220 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1221 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1222 | "dev": true, 1223 | "dependencies": { 1224 | "brace-expansion": "^1.1.7" 1225 | }, 1226 | "engines": { 1227 | "node": "*" 1228 | } 1229 | }, 1230 | "node_modules/shebang-command": { 1231 | "version": "2.0.0", 1232 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1233 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1234 | "dev": true, 1235 | "dependencies": { 1236 | "shebang-regex": "^3.0.0" 1237 | }, 1238 | "engines": { 1239 | "node": ">=8" 1240 | } 1241 | }, 1242 | "node_modules/shebang-regex": { 1243 | "version": "3.0.0", 1244 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1245 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1246 | "dev": true, 1247 | "engines": { 1248 | "node": ">=8" 1249 | } 1250 | }, 1251 | "node_modules/shuffle-array": { 1252 | "version": "1.0.1", 1253 | "resolved": "https://registry.npmjs.org/shuffle-array/-/shuffle-array-1.0.1.tgz", 1254 | "integrity": "sha512-0TFRU8zVQaLatWKr0/czo19VyPNgb/a3sBc1GAjVfivfzEGaS54vueNgtAu/8/pW7EM/VF5fwq9zgpLdGyRmVw==", 1255 | "dev": true 1256 | }, 1257 | "node_modules/signal-exit": { 1258 | "version": "3.0.7", 1259 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 1260 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 1261 | "dev": true 1262 | }, 1263 | "node_modules/string-width": { 1264 | "version": "5.1.2", 1265 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 1266 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 1267 | "dev": true, 1268 | "dependencies": { 1269 | "eastasianwidth": "^0.2.0", 1270 | "emoji-regex": "^9.2.2", 1271 | "strip-ansi": "^7.0.1" 1272 | }, 1273 | "engines": { 1274 | "node": ">=12" 1275 | }, 1276 | "funding": { 1277 | "url": "https://github.com/sponsors/sindresorhus" 1278 | } 1279 | }, 1280 | "node_modules/strip-ansi": { 1281 | "version": "7.0.1", 1282 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", 1283 | "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", 1284 | "dev": true, 1285 | "dependencies": { 1286 | "ansi-regex": "^6.0.1" 1287 | }, 1288 | "engines": { 1289 | "node": ">=12" 1290 | }, 1291 | "funding": { 1292 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 1293 | } 1294 | }, 1295 | "node_modules/strip-final-newline": { 1296 | "version": "2.0.0", 1297 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 1298 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 1299 | "dev": true, 1300 | "engines": { 1301 | "node": ">=6" 1302 | } 1303 | }, 1304 | "node_modules/strip-json-comments": { 1305 | "version": "2.0.1", 1306 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1307 | "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", 1308 | "dev": true, 1309 | "engines": { 1310 | "node": ">=0.10.0" 1311 | } 1312 | }, 1313 | "node_modules/strip-outer": { 1314 | "version": "1.0.1", 1315 | "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", 1316 | "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", 1317 | "dev": true, 1318 | "dependencies": { 1319 | "escape-string-regexp": "^1.0.2" 1320 | }, 1321 | "engines": { 1322 | "node": ">=0.10.0" 1323 | } 1324 | }, 1325 | "node_modules/supports-color": { 1326 | "version": "7.2.0", 1327 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1328 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1329 | "dev": true, 1330 | "dependencies": { 1331 | "has-flag": "^4.0.0" 1332 | }, 1333 | "engines": { 1334 | "node": ">=8" 1335 | } 1336 | }, 1337 | "node_modules/trampa": { 1338 | "version": "1.0.1", 1339 | "resolved": "https://registry.npmjs.org/trampa/-/trampa-1.0.1.tgz", 1340 | "integrity": "sha512-93WeyHNuRggPEsfCe+yHxCgM2s6H3Q8Wmlt6b6ObJL8qc7eZlRaFjQxwTrB+zbvGtlDRnAkMoYYo3+2uH/fEwA==", 1341 | "dev": true 1342 | }, 1343 | "node_modules/trim-repeated": { 1344 | "version": "1.0.0", 1345 | "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", 1346 | "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", 1347 | "dev": true, 1348 | "dependencies": { 1349 | "escape-string-regexp": "^1.0.2" 1350 | }, 1351 | "engines": { 1352 | "node": ">=0.10.0" 1353 | } 1354 | }, 1355 | "node_modules/type-fest": { 1356 | "version": "2.17.0", 1357 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.17.0.tgz", 1358 | "integrity": "sha512-U+g3/JVXnOki1kLSc+xZGPRll3Ah9u2VIG6Sn9iH9YX6UkPERmt6O/0fIyTgsd2/whV0+gAaHAg8fz6sG1QzMA==", 1359 | "dev": true, 1360 | "engines": { 1361 | "node": ">=12.20" 1362 | }, 1363 | "funding": { 1364 | "url": "https://github.com/sponsors/sindresorhus" 1365 | } 1366 | }, 1367 | "node_modules/typify-parser": { 1368 | "version": "1.1.0", 1369 | "resolved": "https://registry.npmjs.org/typify-parser/-/typify-parser-1.1.0.tgz", 1370 | "integrity": "sha512-p5+L1sc6Al3bcStMwiZNxDh4ii4JxL+famEbSIUuOUMVoNn9Nz27AT1jL3x7poMHxqKK0UQIUAp5lGkKbyKkFA==", 1371 | "dev": true, 1372 | "engines": { 1373 | "node": ">= 0.10.0" 1374 | } 1375 | }, 1376 | "node_modules/universalify": { 1377 | "version": "0.1.2", 1378 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 1379 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 1380 | "dev": true, 1381 | "engines": { 1382 | "node": ">= 4.0.0" 1383 | } 1384 | }, 1385 | "node_modules/update-check": { 1386 | "version": "1.5.4", 1387 | "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz", 1388 | "integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==", 1389 | "dev": true, 1390 | "dependencies": { 1391 | "registry-auth-token": "3.3.2", 1392 | "registry-url": "3.1.0" 1393 | } 1394 | }, 1395 | "node_modules/uri-js": { 1396 | "version": "4.4.1", 1397 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1398 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1399 | "dev": true, 1400 | "dependencies": { 1401 | "punycode": "^2.1.0" 1402 | } 1403 | }, 1404 | "node_modules/uri-js/node_modules/punycode": { 1405 | "version": "2.1.1", 1406 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1407 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1408 | "dev": true, 1409 | "engines": { 1410 | "node": ">=6" 1411 | } 1412 | }, 1413 | "node_modules/vary": { 1414 | "version": "1.1.2", 1415 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1416 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 1417 | "dev": true, 1418 | "engines": { 1419 | "node": ">= 0.8" 1420 | } 1421 | }, 1422 | "node_modules/which": { 1423 | "version": "2.0.2", 1424 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1425 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1426 | "dev": true, 1427 | "dependencies": { 1428 | "isexe": "^2.0.0" 1429 | }, 1430 | "bin": { 1431 | "node-which": "bin/node-which" 1432 | }, 1433 | "engines": { 1434 | "node": ">= 8" 1435 | } 1436 | }, 1437 | "node_modules/widest-line": { 1438 | "version": "4.0.1", 1439 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", 1440 | "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", 1441 | "dev": true, 1442 | "dependencies": { 1443 | "string-width": "^5.0.1" 1444 | }, 1445 | "engines": { 1446 | "node": ">=12" 1447 | }, 1448 | "funding": { 1449 | "url": "https://github.com/sponsors/sindresorhus" 1450 | } 1451 | }, 1452 | "node_modules/wrap-ansi": { 1453 | "version": "8.0.1", 1454 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", 1455 | "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", 1456 | "dev": true, 1457 | "dependencies": { 1458 | "ansi-styles": "^6.1.0", 1459 | "string-width": "^5.0.1", 1460 | "strip-ansi": "^7.0.1" 1461 | }, 1462 | "engines": { 1463 | "node": ">=12" 1464 | }, 1465 | "funding": { 1466 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1467 | } 1468 | }, 1469 | "node_modules/wrappy": { 1470 | "version": "1.0.2", 1471 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1472 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1473 | "dev": true 1474 | } 1475 | }, 1476 | "dependencies": { 1477 | "@zeit/schemas": { 1478 | "version": "2.21.0", 1479 | "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.21.0.tgz", 1480 | "integrity": "sha512-/J4WBTpWtQ4itN1rb3ao8LfClmVcmz2pO6oYb7Qd4h7VSqUhIbJIvrykz9Ew1WMg6eFWsKdsMHc5uPbFxqlCpg==", 1481 | "dev": true 1482 | }, 1483 | "accepts": { 1484 | "version": "1.3.8", 1485 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 1486 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 1487 | "dev": true, 1488 | "requires": { 1489 | "mime-types": "~2.1.34", 1490 | "negotiator": "0.6.3" 1491 | } 1492 | }, 1493 | "ajv": { 1494 | "version": "8.11.0", 1495 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", 1496 | "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", 1497 | "dev": true, 1498 | "requires": { 1499 | "fast-deep-equal": "^3.1.1", 1500 | "json-schema-traverse": "^1.0.0", 1501 | "require-from-string": "^2.0.2", 1502 | "uri-js": "^4.2.2" 1503 | } 1504 | }, 1505 | "ansi-align": { 1506 | "version": "3.0.1", 1507 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", 1508 | "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", 1509 | "dev": true, 1510 | "requires": { 1511 | "string-width": "^4.1.0" 1512 | }, 1513 | "dependencies": { 1514 | "ansi-regex": { 1515 | "version": "5.0.1", 1516 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1517 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1518 | "dev": true 1519 | }, 1520 | "emoji-regex": { 1521 | "version": "8.0.0", 1522 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1523 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1524 | "dev": true 1525 | }, 1526 | "string-width": { 1527 | "version": "4.2.3", 1528 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1529 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1530 | "dev": true, 1531 | "requires": { 1532 | "emoji-regex": "^8.0.0", 1533 | "is-fullwidth-code-point": "^3.0.0", 1534 | "strip-ansi": "^6.0.1" 1535 | } 1536 | }, 1537 | "strip-ansi": { 1538 | "version": "6.0.1", 1539 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1540 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1541 | "dev": true, 1542 | "requires": { 1543 | "ansi-regex": "^5.0.1" 1544 | } 1545 | } 1546 | } 1547 | }, 1548 | "ansi-regex": { 1549 | "version": "6.0.1", 1550 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 1551 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 1552 | "dev": true 1553 | }, 1554 | "ansi-styles": { 1555 | "version": "6.1.0", 1556 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", 1557 | "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", 1558 | "dev": true 1559 | }, 1560 | "arch": { 1561 | "version": "2.2.0", 1562 | "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", 1563 | "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", 1564 | "dev": true 1565 | }, 1566 | "arg": { 1567 | "version": "5.0.2", 1568 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 1569 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", 1570 | "dev": true 1571 | }, 1572 | "array-union": { 1573 | "version": "1.0.2", 1574 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", 1575 | "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", 1576 | "dev": true, 1577 | "requires": { 1578 | "array-uniq": "^1.0.1" 1579 | } 1580 | }, 1581 | "array-uniq": { 1582 | "version": "1.0.3", 1583 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", 1584 | "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", 1585 | "dev": true 1586 | }, 1587 | "async": { 1588 | "version": "2.6.4", 1589 | "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", 1590 | "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", 1591 | "dev": true, 1592 | "requires": { 1593 | "lodash": "^4.17.14" 1594 | } 1595 | }, 1596 | "balanced-match": { 1597 | "version": "1.0.2", 1598 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1599 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1600 | "dev": true 1601 | }, 1602 | "boxen": { 1603 | "version": "7.0.0", 1604 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz", 1605 | "integrity": "sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==", 1606 | "dev": true, 1607 | "requires": { 1608 | "ansi-align": "^3.0.1", 1609 | "camelcase": "^7.0.0", 1610 | "chalk": "^5.0.1", 1611 | "cli-boxes": "^3.0.0", 1612 | "string-width": "^5.1.2", 1613 | "type-fest": "^2.13.0", 1614 | "widest-line": "^4.0.1", 1615 | "wrap-ansi": "^8.0.1" 1616 | } 1617 | }, 1618 | "brace-expansion": { 1619 | "version": "1.1.11", 1620 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1621 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1622 | "dev": true, 1623 | "requires": { 1624 | "balanced-match": "^1.0.0", 1625 | "concat-map": "0.0.1" 1626 | } 1627 | }, 1628 | "bytes": { 1629 | "version": "3.0.0", 1630 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 1631 | "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", 1632 | "dev": true 1633 | }, 1634 | "camelcase": { 1635 | "version": "7.0.0", 1636 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.0.tgz", 1637 | "integrity": "sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ==", 1638 | "dev": true 1639 | }, 1640 | "chalk": { 1641 | "version": "5.0.1", 1642 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", 1643 | "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", 1644 | "dev": true 1645 | }, 1646 | "chalk-template": { 1647 | "version": "0.4.0", 1648 | "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", 1649 | "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", 1650 | "dev": true, 1651 | "requires": { 1652 | "chalk": "^4.1.2" 1653 | }, 1654 | "dependencies": { 1655 | "ansi-styles": { 1656 | "version": "4.3.0", 1657 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1658 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1659 | "dev": true, 1660 | "requires": { 1661 | "color-convert": "^2.0.1" 1662 | } 1663 | }, 1664 | "chalk": { 1665 | "version": "4.1.2", 1666 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1667 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1668 | "dev": true, 1669 | "requires": { 1670 | "ansi-styles": "^4.1.0", 1671 | "supports-color": "^7.1.0" 1672 | } 1673 | } 1674 | } 1675 | }, 1676 | "cli-boxes": { 1677 | "version": "3.0.0", 1678 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", 1679 | "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", 1680 | "dev": true 1681 | }, 1682 | "clipboardy": { 1683 | "version": "3.0.0", 1684 | "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz", 1685 | "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==", 1686 | "dev": true, 1687 | "requires": { 1688 | "arch": "^2.2.0", 1689 | "execa": "^5.1.1", 1690 | "is-wsl": "^2.2.0" 1691 | } 1692 | }, 1693 | "color-convert": { 1694 | "version": "2.0.1", 1695 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1696 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1697 | "dev": true, 1698 | "requires": { 1699 | "color-name": "~1.1.4" 1700 | } 1701 | }, 1702 | "color-name": { 1703 | "version": "1.1.4", 1704 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1705 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1706 | "dev": true 1707 | }, 1708 | "commander": { 1709 | "version": "2.20.3", 1710 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1711 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1712 | "dev": true 1713 | }, 1714 | "commondir": { 1715 | "version": "1.0.1", 1716 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 1717 | "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", 1718 | "dev": true 1719 | }, 1720 | "compressible": { 1721 | "version": "2.0.18", 1722 | "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", 1723 | "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", 1724 | "dev": true, 1725 | "requires": { 1726 | "mime-db": ">= 1.43.0 < 2" 1727 | } 1728 | }, 1729 | "compression": { 1730 | "version": "1.7.4", 1731 | "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", 1732 | "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", 1733 | "dev": true, 1734 | "requires": { 1735 | "accepts": "~1.3.5", 1736 | "bytes": "3.0.0", 1737 | "compressible": "~2.0.16", 1738 | "debug": "2.6.9", 1739 | "on-headers": "~1.0.2", 1740 | "safe-buffer": "5.1.2", 1741 | "vary": "~1.1.2" 1742 | } 1743 | }, 1744 | "concat-map": { 1745 | "version": "0.0.1", 1746 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1747 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1748 | "dev": true 1749 | }, 1750 | "content-disposition": { 1751 | "version": "0.5.2", 1752 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 1753 | "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", 1754 | "dev": true 1755 | }, 1756 | "cross-spawn": { 1757 | "version": "7.0.3", 1758 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1759 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1760 | "dev": true, 1761 | "requires": { 1762 | "path-key": "^3.1.0", 1763 | "shebang-command": "^2.0.0", 1764 | "which": "^2.0.1" 1765 | } 1766 | }, 1767 | "debug": { 1768 | "version": "2.6.9", 1769 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1770 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1771 | "dev": true, 1772 | "requires": { 1773 | "ms": "2.0.0" 1774 | } 1775 | }, 1776 | "deep-extend": { 1777 | "version": "0.6.0", 1778 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 1779 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 1780 | "dev": true 1781 | }, 1782 | "eastasianwidth": { 1783 | "version": "0.2.0", 1784 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 1785 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 1786 | "dev": true 1787 | }, 1788 | "email-addresses": { 1789 | "version": "3.1.0", 1790 | "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz", 1791 | "integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==", 1792 | "dev": true 1793 | }, 1794 | "emoji-regex": { 1795 | "version": "9.2.2", 1796 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 1797 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 1798 | "dev": true 1799 | }, 1800 | "escape-string-regexp": { 1801 | "version": "1.0.5", 1802 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1803 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 1804 | "dev": true 1805 | }, 1806 | "execa": { 1807 | "version": "5.1.1", 1808 | "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", 1809 | "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", 1810 | "dev": true, 1811 | "requires": { 1812 | "cross-spawn": "^7.0.3", 1813 | "get-stream": "^6.0.0", 1814 | "human-signals": "^2.1.0", 1815 | "is-stream": "^2.0.0", 1816 | "merge-stream": "^2.0.0", 1817 | "npm-run-path": "^4.0.1", 1818 | "onetime": "^5.1.2", 1819 | "signal-exit": "^3.0.3", 1820 | "strip-final-newline": "^2.0.0" 1821 | } 1822 | }, 1823 | "fast-deep-equal": { 1824 | "version": "3.1.3", 1825 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1826 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1827 | "dev": true 1828 | }, 1829 | "fast-url-parser": { 1830 | "version": "1.1.3", 1831 | "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", 1832 | "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", 1833 | "dev": true, 1834 | "requires": { 1835 | "punycode": "^1.3.2" 1836 | } 1837 | }, 1838 | "filename-reserved-regex": { 1839 | "version": "2.0.0", 1840 | "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", 1841 | "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", 1842 | "dev": true 1843 | }, 1844 | "filenamify": { 1845 | "version": "4.3.0", 1846 | "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", 1847 | "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", 1848 | "dev": true, 1849 | "requires": { 1850 | "filename-reserved-regex": "^2.0.0", 1851 | "strip-outer": "^1.0.1", 1852 | "trim-repeated": "^1.0.0" 1853 | } 1854 | }, 1855 | "find-cache-dir": { 1856 | "version": "3.3.2", 1857 | "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", 1858 | "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", 1859 | "dev": true, 1860 | "requires": { 1861 | "commondir": "^1.0.1", 1862 | "make-dir": "^3.0.2", 1863 | "pkg-dir": "^4.1.0" 1864 | } 1865 | }, 1866 | "find-up": { 1867 | "version": "4.1.0", 1868 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 1869 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 1870 | "dev": true, 1871 | "requires": { 1872 | "locate-path": "^5.0.0", 1873 | "path-exists": "^4.0.0" 1874 | } 1875 | }, 1876 | "fs-extra": { 1877 | "version": "8.1.0", 1878 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 1879 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 1880 | "dev": true, 1881 | "requires": { 1882 | "graceful-fs": "^4.2.0", 1883 | "jsonfile": "^4.0.0", 1884 | "universalify": "^0.1.0" 1885 | } 1886 | }, 1887 | "fs.realpath": { 1888 | "version": "1.0.0", 1889 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1890 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1891 | "dev": true 1892 | }, 1893 | "get-stream": { 1894 | "version": "6.0.1", 1895 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", 1896 | "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", 1897 | "dev": true 1898 | }, 1899 | "gh-pages": { 1900 | "version": "4.0.0", 1901 | "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-4.0.0.tgz", 1902 | "integrity": "sha512-p8S0T3aGJc68MtwOcZusul5qPSNZCalap3NWbhRUZYu1YOdp+EjZ+4kPmRM8h3NNRdqw00yuevRjlkuSzCn7iQ==", 1903 | "dev": true, 1904 | "requires": { 1905 | "async": "^2.6.1", 1906 | "commander": "^2.18.0", 1907 | "email-addresses": "^3.0.1", 1908 | "filenamify": "^4.3.0", 1909 | "find-cache-dir": "^3.3.1", 1910 | "fs-extra": "^8.1.0", 1911 | "globby": "^6.1.0" 1912 | } 1913 | }, 1914 | "glob": { 1915 | "version": "7.2.3", 1916 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1917 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1918 | "dev": true, 1919 | "requires": { 1920 | "fs.realpath": "^1.0.0", 1921 | "inflight": "^1.0.4", 1922 | "inherits": "2", 1923 | "minimatch": "^3.1.1", 1924 | "once": "^1.3.0", 1925 | "path-is-absolute": "^1.0.0" 1926 | } 1927 | }, 1928 | "globby": { 1929 | "version": "6.1.0", 1930 | "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", 1931 | "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", 1932 | "dev": true, 1933 | "requires": { 1934 | "array-union": "^1.0.1", 1935 | "glob": "^7.0.3", 1936 | "object-assign": "^4.0.1", 1937 | "pify": "^2.0.0", 1938 | "pinkie-promise": "^2.0.0" 1939 | } 1940 | }, 1941 | "graceful-fs": { 1942 | "version": "4.2.10", 1943 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 1944 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", 1945 | "dev": true 1946 | }, 1947 | "has-flag": { 1948 | "version": "4.0.0", 1949 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1950 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1951 | "dev": true 1952 | }, 1953 | "human-signals": { 1954 | "version": "2.1.0", 1955 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", 1956 | "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", 1957 | "dev": true 1958 | }, 1959 | "inflight": { 1960 | "version": "1.0.6", 1961 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1962 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1963 | "dev": true, 1964 | "requires": { 1965 | "once": "^1.3.0", 1966 | "wrappy": "1" 1967 | } 1968 | }, 1969 | "inherits": { 1970 | "version": "2.0.4", 1971 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1972 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1973 | "dev": true 1974 | }, 1975 | "ini": { 1976 | "version": "1.3.8", 1977 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 1978 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 1979 | "dev": true 1980 | }, 1981 | "is-docker": { 1982 | "version": "2.2.1", 1983 | "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", 1984 | "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", 1985 | "dev": true 1986 | }, 1987 | "is-fullwidth-code-point": { 1988 | "version": "3.0.0", 1989 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1990 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1991 | "dev": true 1992 | }, 1993 | "is-port-reachable": { 1994 | "version": "4.0.0", 1995 | "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-4.0.0.tgz", 1996 | "integrity": "sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==", 1997 | "dev": true 1998 | }, 1999 | "is-stream": { 2000 | "version": "2.0.1", 2001 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 2002 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 2003 | "dev": true 2004 | }, 2005 | "is-wsl": { 2006 | "version": "2.2.0", 2007 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", 2008 | "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", 2009 | "dev": true, 2010 | "requires": { 2011 | "is-docker": "^2.0.0" 2012 | } 2013 | }, 2014 | "isexe": { 2015 | "version": "2.0.0", 2016 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2017 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 2018 | "dev": true 2019 | }, 2020 | "json-schema-traverse": { 2021 | "version": "1.0.0", 2022 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 2023 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 2024 | "dev": true 2025 | }, 2026 | "jsonfile": { 2027 | "version": "4.0.0", 2028 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 2029 | "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", 2030 | "dev": true, 2031 | "requires": { 2032 | "graceful-fs": "^4.1.6" 2033 | } 2034 | }, 2035 | "jsverify": { 2036 | "version": "0.8.4", 2037 | "resolved": "https://registry.npmjs.org/jsverify/-/jsverify-0.8.4.tgz", 2038 | "integrity": "sha512-nUG73Sfi8L4eOkc7pv9sflgAm43v+z6XMuePGVdRoBUxBLJiVcMcf3Xgc4h19eHHF3JwsaagOkUu825UnPBLJw==", 2039 | "dev": true, 2040 | "requires": { 2041 | "lazy-seq": "^1.0.0", 2042 | "rc4": "~0.1.5", 2043 | "trampa": "^1.0.0", 2044 | "typify-parser": "^1.1.0" 2045 | } 2046 | }, 2047 | "lazy-seq": { 2048 | "version": "1.0.0", 2049 | "resolved": "https://registry.npmjs.org/lazy-seq/-/lazy-seq-1.0.0.tgz", 2050 | "integrity": "sha512-AQ4vRcnULa7FX6R6YTAjKQAE1MuEThidVQm0TEtTpedaBpnOwid5k6go16E5NDkafel1xAsZL73WkwdG03IzhA==", 2051 | "dev": true 2052 | }, 2053 | "locate-path": { 2054 | "version": "5.0.0", 2055 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 2056 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 2057 | "dev": true, 2058 | "requires": { 2059 | "p-locate": "^4.1.0" 2060 | } 2061 | }, 2062 | "lodash": { 2063 | "version": "4.17.21", 2064 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 2065 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 2066 | "dev": true 2067 | }, 2068 | "make-dir": { 2069 | "version": "3.1.0", 2070 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 2071 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 2072 | "dev": true, 2073 | "requires": { 2074 | "semver": "^6.0.0" 2075 | } 2076 | }, 2077 | "merge-stream": { 2078 | "version": "2.0.0", 2079 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 2080 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 2081 | "dev": true 2082 | }, 2083 | "mime-db": { 2084 | "version": "1.52.0", 2085 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 2086 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 2087 | "dev": true 2088 | }, 2089 | "mime-types": { 2090 | "version": "2.1.35", 2091 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 2092 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 2093 | "dev": true, 2094 | "requires": { 2095 | "mime-db": "1.52.0" 2096 | } 2097 | }, 2098 | "mimic-fn": { 2099 | "version": "2.1.0", 2100 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 2101 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 2102 | "dev": true 2103 | }, 2104 | "minimatch": { 2105 | "version": "3.1.2", 2106 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2107 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2108 | "dev": true, 2109 | "requires": { 2110 | "brace-expansion": "^1.1.7" 2111 | } 2112 | }, 2113 | "minimist": { 2114 | "version": "1.2.6", 2115 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 2116 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", 2117 | "dev": true 2118 | }, 2119 | "ms": { 2120 | "version": "2.0.0", 2121 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2122 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", 2123 | "dev": true 2124 | }, 2125 | "negotiator": { 2126 | "version": "0.6.3", 2127 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 2128 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 2129 | "dev": true 2130 | }, 2131 | "npm-run-path": { 2132 | "version": "4.0.1", 2133 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 2134 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 2135 | "dev": true, 2136 | "requires": { 2137 | "path-key": "^3.0.0" 2138 | } 2139 | }, 2140 | "object-assign": { 2141 | "version": "4.1.1", 2142 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2143 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 2144 | "dev": true 2145 | }, 2146 | "on-headers": { 2147 | "version": "1.0.2", 2148 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", 2149 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", 2150 | "dev": true 2151 | }, 2152 | "once": { 2153 | "version": "1.4.0", 2154 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2155 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2156 | "dev": true, 2157 | "requires": { 2158 | "wrappy": "1" 2159 | } 2160 | }, 2161 | "onetime": { 2162 | "version": "5.1.2", 2163 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 2164 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 2165 | "dev": true, 2166 | "requires": { 2167 | "mimic-fn": "^2.1.0" 2168 | } 2169 | }, 2170 | "p-limit": { 2171 | "version": "2.3.0", 2172 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 2173 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 2174 | "dev": true, 2175 | "requires": { 2176 | "p-try": "^2.0.0" 2177 | } 2178 | }, 2179 | "p-locate": { 2180 | "version": "4.1.0", 2181 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 2182 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 2183 | "dev": true, 2184 | "requires": { 2185 | "p-limit": "^2.2.0" 2186 | } 2187 | }, 2188 | "p-try": { 2189 | "version": "2.2.0", 2190 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 2191 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 2192 | "dev": true 2193 | }, 2194 | "path-exists": { 2195 | "version": "4.0.0", 2196 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2197 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2198 | "dev": true 2199 | }, 2200 | "path-is-absolute": { 2201 | "version": "1.0.1", 2202 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2203 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 2204 | "dev": true 2205 | }, 2206 | "path-is-inside": { 2207 | "version": "1.0.2", 2208 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 2209 | "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", 2210 | "dev": true 2211 | }, 2212 | "path-key": { 2213 | "version": "3.1.1", 2214 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2215 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2216 | "dev": true 2217 | }, 2218 | "path-to-regexp": { 2219 | "version": "2.2.1", 2220 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", 2221 | "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==", 2222 | "dev": true 2223 | }, 2224 | "pify": { 2225 | "version": "2.3.0", 2226 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 2227 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 2228 | "dev": true 2229 | }, 2230 | "pinkie": { 2231 | "version": "2.0.4", 2232 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 2233 | "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", 2234 | "dev": true 2235 | }, 2236 | "pinkie-promise": { 2237 | "version": "2.0.1", 2238 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 2239 | "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", 2240 | "dev": true, 2241 | "requires": { 2242 | "pinkie": "^2.0.0" 2243 | } 2244 | }, 2245 | "pkg-dir": { 2246 | "version": "4.2.0", 2247 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 2248 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 2249 | "dev": true, 2250 | "requires": { 2251 | "find-up": "^4.0.0" 2252 | } 2253 | }, 2254 | "punycode": { 2255 | "version": "1.4.1", 2256 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 2257 | "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", 2258 | "dev": true 2259 | }, 2260 | "range-parser": { 2261 | "version": "1.2.0", 2262 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 2263 | "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", 2264 | "dev": true 2265 | }, 2266 | "rc": { 2267 | "version": "1.2.8", 2268 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 2269 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 2270 | "dev": true, 2271 | "requires": { 2272 | "deep-extend": "^0.6.0", 2273 | "ini": "~1.3.0", 2274 | "minimist": "^1.2.0", 2275 | "strip-json-comments": "~2.0.1" 2276 | } 2277 | }, 2278 | "rc4": { 2279 | "version": "0.1.5", 2280 | "resolved": "https://registry.npmjs.org/rc4/-/rc4-0.1.5.tgz", 2281 | "integrity": "sha512-xdDTNV90z5x5u25Oc871Xnvu7yAr4tV7Eluh0VSvrhUkry39q1k+zkz7xroqHbRq+8PiazySHJPArqifUvz9VA==", 2282 | "dev": true 2283 | }, 2284 | "registry-auth-token": { 2285 | "version": "3.3.2", 2286 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", 2287 | "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", 2288 | "dev": true, 2289 | "requires": { 2290 | "rc": "^1.1.6", 2291 | "safe-buffer": "^5.0.1" 2292 | } 2293 | }, 2294 | "registry-url": { 2295 | "version": "3.1.0", 2296 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", 2297 | "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", 2298 | "dev": true, 2299 | "requires": { 2300 | "rc": "^1.0.1" 2301 | } 2302 | }, 2303 | "require-from-string": { 2304 | "version": "2.0.2", 2305 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 2306 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 2307 | "dev": true 2308 | }, 2309 | "safe-buffer": { 2310 | "version": "5.1.2", 2311 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2312 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 2313 | "dev": true 2314 | }, 2315 | "semver": { 2316 | "version": "6.3.0", 2317 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 2318 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 2319 | "dev": true 2320 | }, 2321 | "serve": { 2322 | "version": "14.0.1", 2323 | "resolved": "https://registry.npmjs.org/serve/-/serve-14.0.1.tgz", 2324 | "integrity": "sha512-tNGwxl27FwA8TbmMQqN0jTaSx8/trL532qZsJHX1VdiEIjjtMJHCs7AFS6OvtC7cTHOvmjXqt5yczejU6CV2Xg==", 2325 | "dev": true, 2326 | "requires": { 2327 | "@zeit/schemas": "2.21.0", 2328 | "ajv": "8.11.0", 2329 | "arg": "5.0.2", 2330 | "boxen": "7.0.0", 2331 | "chalk": "5.0.1", 2332 | "chalk-template": "0.4.0", 2333 | "clipboardy": "3.0.0", 2334 | "compression": "1.7.4", 2335 | "is-port-reachable": "4.0.0", 2336 | "serve-handler": "6.1.3", 2337 | "update-check": "1.5.4" 2338 | } 2339 | }, 2340 | "serve-handler": { 2341 | "version": "6.1.3", 2342 | "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", 2343 | "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", 2344 | "dev": true, 2345 | "requires": { 2346 | "bytes": "3.0.0", 2347 | "content-disposition": "0.5.2", 2348 | "fast-url-parser": "1.1.3", 2349 | "mime-types": "2.1.18", 2350 | "minimatch": "3.0.4", 2351 | "path-is-inside": "1.0.2", 2352 | "path-to-regexp": "2.2.1", 2353 | "range-parser": "1.2.0" 2354 | }, 2355 | "dependencies": { 2356 | "mime-db": { 2357 | "version": "1.33.0", 2358 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", 2359 | "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", 2360 | "dev": true 2361 | }, 2362 | "mime-types": { 2363 | "version": "2.1.18", 2364 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", 2365 | "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", 2366 | "dev": true, 2367 | "requires": { 2368 | "mime-db": "~1.33.0" 2369 | } 2370 | }, 2371 | "minimatch": { 2372 | "version": "3.0.4", 2373 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2374 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2375 | "dev": true, 2376 | "requires": { 2377 | "brace-expansion": "^1.1.7" 2378 | } 2379 | } 2380 | } 2381 | }, 2382 | "shebang-command": { 2383 | "version": "2.0.0", 2384 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2385 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2386 | "dev": true, 2387 | "requires": { 2388 | "shebang-regex": "^3.0.0" 2389 | } 2390 | }, 2391 | "shebang-regex": { 2392 | "version": "3.0.0", 2393 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2394 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2395 | "dev": true 2396 | }, 2397 | "shuffle-array": { 2398 | "version": "1.0.1", 2399 | "resolved": "https://registry.npmjs.org/shuffle-array/-/shuffle-array-1.0.1.tgz", 2400 | "integrity": "sha512-0TFRU8zVQaLatWKr0/czo19VyPNgb/a3sBc1GAjVfivfzEGaS54vueNgtAu/8/pW7EM/VF5fwq9zgpLdGyRmVw==", 2401 | "dev": true 2402 | }, 2403 | "signal-exit": { 2404 | "version": "3.0.7", 2405 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 2406 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 2407 | "dev": true 2408 | }, 2409 | "string-width": { 2410 | "version": "5.1.2", 2411 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 2412 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 2413 | "dev": true, 2414 | "requires": { 2415 | "eastasianwidth": "^0.2.0", 2416 | "emoji-regex": "^9.2.2", 2417 | "strip-ansi": "^7.0.1" 2418 | } 2419 | }, 2420 | "strip-ansi": { 2421 | "version": "7.0.1", 2422 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", 2423 | "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", 2424 | "dev": true, 2425 | "requires": { 2426 | "ansi-regex": "^6.0.1" 2427 | } 2428 | }, 2429 | "strip-final-newline": { 2430 | "version": "2.0.0", 2431 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 2432 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 2433 | "dev": true 2434 | }, 2435 | "strip-json-comments": { 2436 | "version": "2.0.1", 2437 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 2438 | "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", 2439 | "dev": true 2440 | }, 2441 | "strip-outer": { 2442 | "version": "1.0.1", 2443 | "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", 2444 | "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", 2445 | "dev": true, 2446 | "requires": { 2447 | "escape-string-regexp": "^1.0.2" 2448 | } 2449 | }, 2450 | "supports-color": { 2451 | "version": "7.2.0", 2452 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2453 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2454 | "dev": true, 2455 | "requires": { 2456 | "has-flag": "^4.0.0" 2457 | } 2458 | }, 2459 | "trampa": { 2460 | "version": "1.0.1", 2461 | "resolved": "https://registry.npmjs.org/trampa/-/trampa-1.0.1.tgz", 2462 | "integrity": "sha512-93WeyHNuRggPEsfCe+yHxCgM2s6H3Q8Wmlt6b6ObJL8qc7eZlRaFjQxwTrB+zbvGtlDRnAkMoYYo3+2uH/fEwA==", 2463 | "dev": true 2464 | }, 2465 | "trim-repeated": { 2466 | "version": "1.0.0", 2467 | "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", 2468 | "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", 2469 | "dev": true, 2470 | "requires": { 2471 | "escape-string-regexp": "^1.0.2" 2472 | } 2473 | }, 2474 | "type-fest": { 2475 | "version": "2.17.0", 2476 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.17.0.tgz", 2477 | "integrity": "sha512-U+g3/JVXnOki1kLSc+xZGPRll3Ah9u2VIG6Sn9iH9YX6UkPERmt6O/0fIyTgsd2/whV0+gAaHAg8fz6sG1QzMA==", 2478 | "dev": true 2479 | }, 2480 | "typify-parser": { 2481 | "version": "1.1.0", 2482 | "resolved": "https://registry.npmjs.org/typify-parser/-/typify-parser-1.1.0.tgz", 2483 | "integrity": "sha512-p5+L1sc6Al3bcStMwiZNxDh4ii4JxL+famEbSIUuOUMVoNn9Nz27AT1jL3x7poMHxqKK0UQIUAp5lGkKbyKkFA==", 2484 | "dev": true 2485 | }, 2486 | "universalify": { 2487 | "version": "0.1.2", 2488 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 2489 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 2490 | "dev": true 2491 | }, 2492 | "update-check": { 2493 | "version": "1.5.4", 2494 | "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz", 2495 | "integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==", 2496 | "dev": true, 2497 | "requires": { 2498 | "registry-auth-token": "3.3.2", 2499 | "registry-url": "3.1.0" 2500 | } 2501 | }, 2502 | "uri-js": { 2503 | "version": "4.4.1", 2504 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 2505 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 2506 | "dev": true, 2507 | "requires": { 2508 | "punycode": "^2.1.0" 2509 | }, 2510 | "dependencies": { 2511 | "punycode": { 2512 | "version": "2.1.1", 2513 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 2514 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 2515 | "dev": true 2516 | } 2517 | } 2518 | }, 2519 | "vary": { 2520 | "version": "1.1.2", 2521 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 2522 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 2523 | "dev": true 2524 | }, 2525 | "which": { 2526 | "version": "2.0.2", 2527 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2528 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2529 | "dev": true, 2530 | "requires": { 2531 | "isexe": "^2.0.0" 2532 | } 2533 | }, 2534 | "widest-line": { 2535 | "version": "4.0.1", 2536 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", 2537 | "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", 2538 | "dev": true, 2539 | "requires": { 2540 | "string-width": "^5.0.1" 2541 | } 2542 | }, 2543 | "wrap-ansi": { 2544 | "version": "8.0.1", 2545 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", 2546 | "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", 2547 | "dev": true, 2548 | "requires": { 2549 | "ansi-styles": "^6.1.0", 2550 | "string-width": "^5.0.1", 2551 | "strip-ansi": "^7.0.1" 2552 | } 2553 | }, 2554 | "wrappy": { 2555 | "version": "1.0.2", 2556 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2557 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 2558 | "dev": true 2559 | } 2560 | } 2561 | } 2562 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sss-wasm", 3 | "version": "0.4.0", 4 | "description": "wasm bindings for the sss secret sharing library", 5 | "author": "Bakaoh", 6 | "type": "module", 7 | "repository": "https://github.com/3box/sss-wasm.git", 8 | "license": "Apache-2.0", 9 | "main": "lib/node.js", 10 | "module": "lib/node.js", 11 | "browser": "lib/index.js", 12 | "types": "lib/index.d.ts", 13 | "exports": { 14 | "node": "./lib/node.js", 15 | "default": "./lib/index.js" 16 | }, 17 | "files": [ 18 | "lib/" 19 | ], 20 | "devDependencies": { 21 | "gh-pages": "^4.0.0", 22 | "jsverify": "^0.8.4", 23 | "serve": "^14.0.1", 24 | "shuffle-array": "1.0" 25 | }, 26 | "scripts": { 27 | "build": "emcc -O3 -s WASM=1 -s EXPORT_ES6=1 -s MODULARIZE=1 -s EXPORT_NAME=\"Wrapper\" -s EXTRA_EXPORTED_RUNTIME_METHODS='[\"cwrap\"]' -I sss lib/wrapper.c sss/hazmat.c sss/tweetnacl.c sss/sss.c lib/randombytes.c -o lib/gen/wrapper.js", 28 | "test": "node ./test/test.js", 29 | "deploy": "gh-pages -d example", 30 | "serve": "serve ." 31 | }, 32 | "homepage": "https://github.com/3box/sss-wasm#readme" 33 | } 34 | -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | import * as sss from '../lib/node.js' 2 | import jsc from 'jsverify' 3 | import shuffle from 'shuffle-array' 4 | 5 | const data = Buffer.alloc(64, 0x42); 6 | const key = data.slice(32); 7 | 8 | let standardOperation = jsc.forall(jsc.integer(1, 255), jsc.integer(1, 255), 9 | jsc.integer(1, 255), (n, k, k2) => { 10 | // We can't really test anything if not n is not larger than k and k2 11 | if (k > n || k2 > n) return true; 12 | let sharesP = sss.createShares(data, n, k); 13 | let restoredP = sharesP.then(shares => { 14 | let newShares = shuffle(shares).slice(0, k2); 15 | return sss.combineShares(newShares); 16 | }); 17 | return restoredP.then((restored) => { 18 | return (k2 >= k) && Buffer.from(restored).equals(data); 19 | }).catch((error) => { 20 | return k2 < k; 21 | }); 22 | }); 23 | 24 | let hazmatOperation = jsc.forall(jsc.integer(1, 255), jsc.integer(1, 255), 25 | jsc.integer(1, 255), (n, k, k2) => { 26 | // Unable to test if `k` or `k2` is larger than `n` 27 | if (k > n || k2 > n) return true; 28 | let keysharesP = sss.createKeyshares(key, n, k); 29 | let restoredP = keysharesP.then((keyshares) => { 30 | let newKeyshares = shuffle(keyshares).slice(0, k2); 31 | return sss.combineKeyshares(newKeyshares); 32 | }); 33 | return restoredP.then((restored) => { 34 | return (k2 >= k) === Buffer.from(restored).equals(key); 35 | }); 36 | }); 37 | 38 | jsc.check(standardOperation, { tests: 1000 }); 39 | jsc.check(hazmatOperation, { tests: 1000 }); 40 | --------------------------------------------------------------------------------