├── .editorconfig ├── .eslintignore ├── .eslintrc.json ├── .github └── workflows │ └── build.yml ├── .gitignore ├── .nycrc ├── LICENSE.md ├── README.md ├── lib └── index.js ├── package.json ├── test ├── .eslintrc.json ├── any.js ├── boolean.js ├── buffer-source.js ├── dom-time-stamp.js ├── double.js ├── helpers │ ├── assertThrows.js │ └── delete-sab.js ├── integer-types.js ├── object.js ├── string-types.js └── undefined.js └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | insert_final_newline = true 6 | trim_trailing_whitespace = true 7 | charset = utf-8 8 | indent_style = space 9 | indent_size = 2 10 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | coverage/ 2 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": "@domenic", 4 | "env": { 5 | "node": true 6 | }, 7 | "rules": { 8 | "new-cap": "off" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | on: 3 | pull_request: 4 | branches: 5 | - master 6 | push: 7 | branches: 8 | - master 9 | jobs: 10 | build: 11 | name: Lint and tests 12 | runs-on: ubuntu-latest 13 | strategy: 14 | fail-fast: false 15 | matrix: 16 | node-version: 17 | - 12 18 | - 14 19 | - 16 20 | architecture: 21 | - x64 22 | steps: 23 | - uses: actions/checkout@v2 24 | - uses: actions/setup-node@v2 25 | with: 26 | node-version: ${{ matrix.node-version }} 27 | architecture: ${{ matrix.architecture }} 28 | - run: yarn --frozen-lockfile 29 | - run: yarn lint 30 | - run: yarn test 31 | - run: yarn test-no-sab 32 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .nyc_output/ 3 | coverage/ 4 | package-lock.json 5 | -------------------------------------------------------------------------------- /.nycrc: -------------------------------------------------------------------------------- 1 | { 2 | "reporter": [ 3 | "lcov", 4 | "text" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # The BSD 2-Clause License 2 | 3 | Copyright (c) 2014, Domenic Denicola 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 9 | 10 | 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 11 | 12 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Web IDL Type Conversions on JavaScript Values 2 | 3 | This package implements, in JavaScript, the algorithms to convert a given JavaScript value according to a given [Web IDL](http://heycam.github.io/webidl/) [type](http://heycam.github.io/webidl/#idl-types). 4 | 5 | The goal is that you should be able to write code like 6 | 7 | ```js 8 | "use strict"; 9 | const conversions = require("webidl-conversions"); 10 | 11 | function doStuff(x, y) { 12 | x = conversions["boolean"](x); 13 | y = conversions["unsigned long"](y); 14 | // actual algorithm code here 15 | } 16 | ``` 17 | 18 | and your function `doStuff` will behave the same as a Web IDL operation declared as 19 | 20 | ```webidl 21 | undefined doStuff(boolean x, unsigned long y); 22 | ``` 23 | 24 | ## API 25 | 26 | This package's main module's default export is an object with a variety of methods, each corresponding to a different Web IDL type. Each method, when invoked on a JavaScript value, will give back the new JavaScript value that results after passing through the Web IDL conversion rules. (See below for more details on what that means.) Alternately, the method could throw an error, if the Web IDL algorithm is specified to do so: for example `conversions["float"](NaN)` [will throw a `TypeError`](http://heycam.github.io/webidl/#es-float). 27 | 28 | Each method also accepts a second, optional, parameter for miscellaneous options. For conversion methods that throw errors, a string option `{ context }` may be provided to provide more information in the error message. (For example, `conversions["float"](NaN, { context: "Argument 1 of Interface's operation" })` will throw an error with message `"Argument 1 of Interface's operation is not a finite floating-point value."`) 29 | 30 | If we are dealing with multiple JavaScript realms (such as those created using Node.js' [vm](https://nodejs.org/api/vm.html) module or the HTML `iframe` element), and exceptions from another realm need to be thrown, one can supply an object option `globals` containing the following properties: 31 | 32 | ```js 33 | { 34 | globals: { 35 | Number, 36 | String, 37 | TypeError 38 | } 39 | } 40 | ``` 41 | 42 | Those specific functions will be used when throwing exceptions. 43 | 44 | Specific conversions may also accept other options, the details of which can be found below. 45 | 46 | ## Conversions implemented 47 | 48 | Conversions for all of the basic types from the Web IDL specification are implemented: 49 | 50 | - [`any`](https://heycam.github.io/webidl/#es-any) 51 | - [`undefined`](https://heycam.github.io/webidl/#es-undefined) 52 | - [`boolean`](https://heycam.github.io/webidl/#es-boolean) 53 | - [Integer types](https://heycam.github.io/webidl/#es-integer-types), which can additionally be provided the boolean options `{ clamp, enforceRange }` as a second parameter 54 | - [`float`](https://heycam.github.io/webidl/#es-float), [`unrestricted float`](https://heycam.github.io/webidl/#es-unrestricted-float) 55 | - [`double`](https://heycam.github.io/webidl/#es-double), [`unrestricted double`](https://heycam.github.io/webidl/#es-unrestricted-double) 56 | - [`DOMString`](https://heycam.github.io/webidl/#es-DOMString), which can additionally be provided the boolean option `{ treatNullAsEmptyString }` as a second parameter 57 | - [`ByteString`](https://heycam.github.io/webidl/#es-ByteString), [`USVString`](https://heycam.github.io/webidl/#es-USVString) 58 | - [`object`](https://heycam.github.io/webidl/#es-object) 59 | - [Buffer source types](https://heycam.github.io/webidl/#es-buffer-source-types), which can additionally be provided with the boolean option `{ allowShared }` as a second parameter 60 | 61 | Additionally, for convenience, the following derived type definitions are implemented: 62 | 63 | - [`ArrayBufferView`](https://heycam.github.io/webidl/#ArrayBufferView), which can additionally be provided with the boolean option `{ allowShared }` as a second parameter 64 | - [`BufferSource`](https://heycam.github.io/webidl/#BufferSource) 65 | - [`DOMTimeStamp`](https://heycam.github.io/webidl/#DOMTimeStamp) 66 | 67 | Derived types, such as nullable types, promise types, sequences, records, etc. are not handled by this library. You may wish to investigate the [webidl2js](https://github.com/jsdom/webidl2js) project. 68 | 69 | ### A note on the `long long` types 70 | 71 | The `long long` and `unsigned long long` Web IDL types can hold values that cannot be stored in JavaScript numbers. Conversions are still accurate as we make use of BigInt in the conversion process, but in the case of `unsigned long long` we simply cannot represent some possible output values in JavaScript. For example, converting the JavaScript number `-1` to a Web IDL `unsigned long long` is supposed to produce the Web IDL value `18446744073709551615`. Since we are representing our Web IDL values in JavaScript, we can't represent `18446744073709551615`, so we instead the best we could do is `18446744073709551616` as the output. 72 | 73 | To mitigate this, we could return the raw BigInt value from the conversion function, but right now it is not implemented. If your use case requires such precision, [file an issue](https://github.com/jsdom/webidl-conversions/issues/new). 74 | 75 | On the other hand, `long long` conversion is always accurate, since the input value can never be more precise than the output value. 76 | 77 | ### A note on `BufferSource` types 78 | 79 | All of the `BufferSource` types will throw when the relevant `ArrayBuffer` has been detached. This technically is not part of the [specified conversion algorithm](https://heycam.github.io/webidl/#es-buffer-source-types), but instead part of the [getting a reference/getting a copy](https://heycam.github.io/webidl/#ref-for-dfn-get-buffer-source-reference%E2%91%A0) algorithms. We've consolidated them here for convenience and ease of implementation, but if there is a need to separate them in the future, please open an issue so we can investigate. 80 | 81 | ## Background 82 | 83 | What's actually going on here, conceptually, is pretty weird. Let's try to explain. 84 | 85 | Web IDL, as part of its madness-inducing design, has its own type system. When people write algorithms in web platform specs, they usually operate on Web IDL values, i.e. instances of Web IDL types. For example, if they were specifying the algorithm for our `doStuff` operation above, they would treat `x` as a Web IDL value of [Web IDL type `boolean`](http://heycam.github.io/webidl/#idl-boolean). Crucially, they would _not_ treat `x` as a JavaScript variable whose value is either the JavaScript `true` or `false`. They're instead working in a different type system altogether, with its own rules. 86 | 87 | Separately from its type system, Web IDL defines a ["binding"](http://heycam.github.io/webidl/#ecmascript-binding) of the type system into JavaScript. This contains rules like: when you pass a JavaScript value to the JavaScript method that manifests a given Web IDL operation, how does that get converted into a Web IDL value? For example, a JavaScript `true` passed in the position of a Web IDL `boolean` argument becomes a Web IDL `true`. But, a JavaScript `true` passed in the position of a [Web IDL `unsigned long`](http://heycam.github.io/webidl/#idl-unsigned-long) becomes a Web IDL `1`. And so on. 88 | 89 | Finally, we have the actual implementation code. This is usually C++, although these days [some smart people are using Rust](https://github.com/servo/servo). The implementation, of course, has its own type system. So when they implement the Web IDL algorithms, they don't actually use Web IDL values, since those aren't "real" outside of specs. Instead, implementations apply the Web IDL binding rules in such a way as to convert incoming JavaScript values into C++ values. For example, if code in the browser called `doStuff(true, true)`, then the implementation code would eventually receive a C++ `bool` containing `true` and a C++ `uint32_t` containing `1`. 90 | 91 | The upside of all this is that implementations can abstract all the conversion logic away, letting Web IDL handle it, and focus on implementing the relevant methods in C++ with values of the correct type already provided. That is payoff of Web IDL, in a nutshell. 92 | 93 | And getting to that payoff is the goal of _this_ project—but for JavaScript implementations, instead of C++ ones. That is, this library is designed to make it easier for JavaScript developers to write functions that behave like a given Web IDL operation. So conceptually, the conversion pipeline, which in its general form is JavaScript values ↦ Web IDL values ↦ implementation-language values, in this case becomes JavaScript values ↦ Web IDL values ↦ JavaScript values. And that intermediate step is where all the logic is performed: a JavaScript `true` becomes a Web IDL `1` in an unsigned long context, which then becomes a JavaScript `1`. 94 | 95 | ## Don't use this 96 | 97 | Seriously, why would you ever use this? You really shouldn't. Web IDL is … strange, and you shouldn't be emulating its semantics. If you're looking for a generic argument-processing library, you should find one with better rules than those from Web IDL. In general, your JavaScript should not be trying to become more like Web IDL; if anything, we should fix Web IDL to make it more like JavaScript. 98 | 99 | The _only_ people who should use this are those trying to create faithful implementations (or polyfills) of web platform interfaces defined in Web IDL. Its main consumer is the [jsdom](https://github.com/jsdom/jsdom) project. 100 | -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | function makeException(ErrorType, message, options) { 4 | if (options.globals) { 5 | ErrorType = options.globals[ErrorType.name]; 6 | } 7 | return new ErrorType(`${options.context ? options.context : "Value"} ${message}.`); 8 | } 9 | 10 | function toNumber(value, options) { 11 | if (typeof value === "bigint") { 12 | throw makeException(TypeError, "is a BigInt which cannot be converted to a number", options); 13 | } 14 | if (!options.globals) { 15 | return Number(value); 16 | } 17 | return options.globals.Number(value); 18 | } 19 | 20 | // Round x to the nearest integer, choosing the even integer if it lies halfway between two. 21 | function evenRound(x) { 22 | // There are four cases for numbers with fractional part being .5: 23 | // 24 | // case | x | floor(x) | round(x) | expected | x <> 0 | x % 1 | x & 1 | example 25 | // 1 | 2n + 0.5 | 2n | 2n + 1 | 2n | > | 0.5 | 0 | 0.5 -> 0 26 | // 2 | 2n + 1.5 | 2n + 1 | 2n + 2 | 2n + 2 | > | 0.5 | 1 | 1.5 -> 2 27 | // 3 | -2n - 0.5 | -2n - 1 | -2n | -2n | < | -0.5 | 0 | -0.5 -> 0 28 | // 4 | -2n - 1.5 | -2n - 2 | -2n - 1 | -2n - 2 | < | -0.5 | 1 | -1.5 -> -2 29 | // (where n is a non-negative integer) 30 | // 31 | // Branch here for cases 1 and 4 32 | if ((x > 0 && (x % 1) === +0.5 && (x & 1) === 0) || 33 | (x < 0 && (x % 1) === -0.5 && (x & 1) === 1)) { 34 | return censorNegativeZero(Math.floor(x)); 35 | } 36 | 37 | return censorNegativeZero(Math.round(x)); 38 | } 39 | 40 | function integerPart(n) { 41 | return censorNegativeZero(Math.trunc(n)); 42 | } 43 | 44 | function sign(x) { 45 | return x < 0 ? -1 : 1; 46 | } 47 | 48 | function modulo(x, y) { 49 | // https://tc39.github.io/ecma262/#eqn-modulo 50 | // Note that http://stackoverflow.com/a/4467559/3191 does NOT work for large modulos 51 | const signMightNotMatch = x % y; 52 | if (sign(y) !== sign(signMightNotMatch)) { 53 | return signMightNotMatch + y; 54 | } 55 | return signMightNotMatch; 56 | } 57 | 58 | function censorNegativeZero(x) { 59 | return x === 0 ? 0 : x; 60 | } 61 | 62 | function createIntegerConversion(bitLength, { unsigned }) { 63 | let lowerBound, upperBound; 64 | if (unsigned) { 65 | lowerBound = 0; 66 | upperBound = 2 ** bitLength - 1; 67 | } else { 68 | lowerBound = -(2 ** (bitLength - 1)); 69 | upperBound = 2 ** (bitLength - 1) - 1; 70 | } 71 | 72 | const twoToTheBitLength = 2 ** bitLength; 73 | const twoToOneLessThanTheBitLength = 2 ** (bitLength - 1); 74 | 75 | return (value, options = {}) => { 76 | let x = toNumber(value, options); 77 | x = censorNegativeZero(x); 78 | 79 | if (options.enforceRange) { 80 | if (!Number.isFinite(x)) { 81 | throw makeException(TypeError, "is not a finite number", options); 82 | } 83 | 84 | x = integerPart(x); 85 | 86 | if (x < lowerBound || x > upperBound) { 87 | throw makeException( 88 | TypeError, 89 | `is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`, 90 | options 91 | ); 92 | } 93 | 94 | return x; 95 | } 96 | 97 | if (!Number.isNaN(x) && options.clamp) { 98 | x = Math.min(Math.max(x, lowerBound), upperBound); 99 | x = evenRound(x); 100 | return x; 101 | } 102 | 103 | if (!Number.isFinite(x) || x === 0) { 104 | return 0; 105 | } 106 | x = integerPart(x); 107 | 108 | // Math.pow(2, 64) is not accurately representable in JavaScript, so try to avoid these per-spec operations if 109 | // possible. Hopefully it's an optimization for the non-64-bitLength cases too. 110 | if (x >= lowerBound && x <= upperBound) { 111 | return x; 112 | } 113 | 114 | // These will not work great for bitLength of 64, but oh well. See the README for more details. 115 | x = modulo(x, twoToTheBitLength); 116 | if (!unsigned && x >= twoToOneLessThanTheBitLength) { 117 | return x - twoToTheBitLength; 118 | } 119 | return x; 120 | }; 121 | } 122 | 123 | function createLongLongConversion(bitLength, { unsigned }) { 124 | const upperBound = Number.MAX_SAFE_INTEGER; 125 | const lowerBound = unsigned ? 0 : Number.MIN_SAFE_INTEGER; 126 | const asBigIntN = unsigned ? BigInt.asUintN : BigInt.asIntN; 127 | 128 | return (value, options = {}) => { 129 | let x = toNumber(value, options); 130 | x = censorNegativeZero(x); 131 | 132 | if (options.enforceRange) { 133 | if (!Number.isFinite(x)) { 134 | throw makeException(TypeError, "is not a finite number", options); 135 | } 136 | 137 | x = integerPart(x); 138 | 139 | if (x < lowerBound || x > upperBound) { 140 | throw makeException( 141 | TypeError, 142 | `is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`, 143 | options 144 | ); 145 | } 146 | 147 | return x; 148 | } 149 | 150 | if (!Number.isNaN(x) && options.clamp) { 151 | x = Math.min(Math.max(x, lowerBound), upperBound); 152 | x = evenRound(x); 153 | return x; 154 | } 155 | 156 | if (!Number.isFinite(x) || x === 0) { 157 | return 0; 158 | } 159 | 160 | let xBigInt = BigInt(integerPart(x)); 161 | xBigInt = asBigIntN(bitLength, xBigInt); 162 | return Number(xBigInt); 163 | }; 164 | } 165 | 166 | exports.any = value => { 167 | return value; 168 | }; 169 | 170 | exports.undefined = () => { 171 | return undefined; 172 | }; 173 | 174 | exports.boolean = value => { 175 | return Boolean(value); 176 | }; 177 | 178 | exports.byte = createIntegerConversion(8, { unsigned: false }); 179 | exports.octet = createIntegerConversion(8, { unsigned: true }); 180 | 181 | exports.short = createIntegerConversion(16, { unsigned: false }); 182 | exports["unsigned short"] = createIntegerConversion(16, { unsigned: true }); 183 | 184 | exports.long = createIntegerConversion(32, { unsigned: false }); 185 | exports["unsigned long"] = createIntegerConversion(32, { unsigned: true }); 186 | 187 | exports["long long"] = createLongLongConversion(64, { unsigned: false }); 188 | exports["unsigned long long"] = createLongLongConversion(64, { unsigned: true }); 189 | 190 | exports.double = (value, options = {}) => { 191 | const x = toNumber(value, options); 192 | 193 | if (!Number.isFinite(x)) { 194 | throw makeException(TypeError, "is not a finite floating-point value", options); 195 | } 196 | 197 | return x; 198 | }; 199 | 200 | exports["unrestricted double"] = (value, options = {}) => { 201 | const x = toNumber(value, options); 202 | 203 | return x; 204 | }; 205 | 206 | exports.float = (value, options = {}) => { 207 | const x = toNumber(value, options); 208 | 209 | if (!Number.isFinite(x)) { 210 | throw makeException(TypeError, "is not a finite floating-point value", options); 211 | } 212 | 213 | if (Object.is(x, -0)) { 214 | return x; 215 | } 216 | 217 | const y = Math.fround(x); 218 | 219 | if (!Number.isFinite(y)) { 220 | throw makeException(TypeError, "is outside the range of a single-precision floating-point value", options); 221 | } 222 | 223 | return y; 224 | }; 225 | 226 | exports["unrestricted float"] = (value, options = {}) => { 227 | const x = toNumber(value, options); 228 | 229 | if (isNaN(x)) { 230 | return x; 231 | } 232 | 233 | if (Object.is(x, -0)) { 234 | return x; 235 | } 236 | 237 | return Math.fround(x); 238 | }; 239 | 240 | exports.DOMString = (value, options = {}) => { 241 | if (options.treatNullAsEmptyString && value === null) { 242 | return ""; 243 | } 244 | 245 | if (typeof value === "symbol") { 246 | throw makeException(TypeError, "is a symbol, which cannot be converted to a string", options); 247 | } 248 | 249 | const StringCtor = options.globals ? options.globals.String : String; 250 | return StringCtor(value); 251 | }; 252 | 253 | exports.ByteString = (value, options = {}) => { 254 | const x = exports.DOMString(value, options); 255 | let c; 256 | for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) { 257 | if (c > 255) { 258 | throw makeException(TypeError, "is not a valid ByteString", options); 259 | } 260 | } 261 | 262 | return x; 263 | }; 264 | 265 | exports.USVString = (value, options = {}) => { 266 | const S = exports.DOMString(value, options); 267 | const n = S.length; 268 | const U = []; 269 | for (let i = 0; i < n; ++i) { 270 | const c = S.charCodeAt(i); 271 | if (c < 0xD800 || c > 0xDFFF) { 272 | U.push(String.fromCodePoint(c)); 273 | } else if (0xDC00 <= c && c <= 0xDFFF) { 274 | U.push(String.fromCodePoint(0xFFFD)); 275 | } else if (i === n - 1) { 276 | U.push(String.fromCodePoint(0xFFFD)); 277 | } else { 278 | const d = S.charCodeAt(i + 1); 279 | if (0xDC00 <= d && d <= 0xDFFF) { 280 | const a = c & 0x3FF; 281 | const b = d & 0x3FF; 282 | U.push(String.fromCodePoint((2 << 15) + ((2 << 9) * a) + b)); 283 | ++i; 284 | } else { 285 | U.push(String.fromCodePoint(0xFFFD)); 286 | } 287 | } 288 | } 289 | 290 | return U.join(""); 291 | }; 292 | 293 | exports.object = (value, options = {}) => { 294 | if (value === null || (typeof value !== "object" && typeof value !== "function")) { 295 | throw makeException(TypeError, "is not an object", options); 296 | } 297 | 298 | return value; 299 | }; 300 | 301 | const abByteLengthGetter = 302 | Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, "byteLength").get; 303 | const sabByteLengthGetter = 304 | typeof SharedArrayBuffer === "function" ? 305 | Object.getOwnPropertyDescriptor(SharedArrayBuffer.prototype, "byteLength").get : 306 | null; 307 | 308 | function isNonSharedArrayBuffer(value) { 309 | try { 310 | // This will throw on SharedArrayBuffers, but not detached ArrayBuffers. 311 | // (The spec says it should throw, but the spec conflicts with implementations: https://github.com/tc39/ecma262/issues/678) 312 | abByteLengthGetter.call(value); 313 | 314 | return true; 315 | } catch { 316 | return false; 317 | } 318 | } 319 | 320 | function isSharedArrayBuffer(value) { 321 | try { 322 | sabByteLengthGetter.call(value); 323 | return true; 324 | } catch { 325 | return false; 326 | } 327 | } 328 | 329 | function isArrayBufferDetached(value) { 330 | try { 331 | // eslint-disable-next-line no-new 332 | new Uint8Array(value); 333 | return false; 334 | } catch { 335 | return true; 336 | } 337 | } 338 | 339 | exports.ArrayBuffer = (value, options = {}) => { 340 | if (!isNonSharedArrayBuffer(value)) { 341 | if (options.allowShared && !isSharedArrayBuffer(value)) { 342 | throw makeException(TypeError, "is not an ArrayBuffer or SharedArrayBuffer", options); 343 | } 344 | throw makeException(TypeError, "is not an ArrayBuffer", options); 345 | } 346 | if (isArrayBufferDetached(value)) { 347 | throw makeException(TypeError, "is a detached ArrayBuffer", options); 348 | } 349 | 350 | return value; 351 | }; 352 | 353 | const dvByteLengthGetter = 354 | Object.getOwnPropertyDescriptor(DataView.prototype, "byteLength").get; 355 | exports.DataView = (value, options = {}) => { 356 | try { 357 | dvByteLengthGetter.call(value); 358 | } catch (e) { 359 | throw makeException(TypeError, "is not a DataView", options); 360 | } 361 | 362 | if (!options.allowShared && isSharedArrayBuffer(value.buffer)) { 363 | throw makeException(TypeError, "is backed by a SharedArrayBuffer, which is not allowed", options); 364 | } 365 | if (isArrayBufferDetached(value.buffer)) { 366 | throw makeException(TypeError, "is backed by a detached ArrayBuffer", options); 367 | } 368 | 369 | return value; 370 | }; 371 | 372 | // Returns the unforgeable `TypedArray` constructor name or `undefined`, 373 | // if the `this` value isn't a valid `TypedArray` object. 374 | // 375 | // https://tc39.es/ecma262/#sec-get-%typedarray%.prototype-@@tostringtag 376 | const typedArrayNameGetter = Object.getOwnPropertyDescriptor( 377 | Object.getPrototypeOf(Uint8Array).prototype, 378 | Symbol.toStringTag 379 | ).get; 380 | [ 381 | Int8Array, 382 | Int16Array, 383 | Int32Array, 384 | Uint8Array, 385 | Uint16Array, 386 | Uint32Array, 387 | Uint8ClampedArray, 388 | Float32Array, 389 | Float64Array 390 | ].forEach(func => { 391 | const { name } = func; 392 | const article = /^[AEIOU]/u.test(name) ? "an" : "a"; 393 | exports[name] = (value, options = {}) => { 394 | if (!ArrayBuffer.isView(value) || typedArrayNameGetter.call(value) !== name) { 395 | throw makeException(TypeError, `is not ${article} ${name} object`, options); 396 | } 397 | if (!options.allowShared && isSharedArrayBuffer(value.buffer)) { 398 | throw makeException(TypeError, "is a view on a SharedArrayBuffer, which is not allowed", options); 399 | } 400 | if (isArrayBufferDetached(value.buffer)) { 401 | throw makeException(TypeError, "is a view on a detached ArrayBuffer", options); 402 | } 403 | 404 | return value; 405 | }; 406 | }); 407 | 408 | // Common definitions 409 | 410 | exports.ArrayBufferView = (value, options = {}) => { 411 | if (!ArrayBuffer.isView(value)) { 412 | throw makeException(TypeError, "is not a view on an ArrayBuffer or SharedArrayBuffer", options); 413 | } 414 | 415 | if (!options.allowShared && isSharedArrayBuffer(value.buffer)) { 416 | throw makeException(TypeError, "is a view on a SharedArrayBuffer, which is not allowed", options); 417 | } 418 | 419 | if (isArrayBufferDetached(value.buffer)) { 420 | throw makeException(TypeError, "is a view on a detached ArrayBuffer", options); 421 | } 422 | return value; 423 | }; 424 | 425 | exports.BufferSource = (value, options = {}) => { 426 | if (ArrayBuffer.isView(value)) { 427 | if (!options.allowShared && isSharedArrayBuffer(value.buffer)) { 428 | throw makeException(TypeError, "is a view on a SharedArrayBuffer, which is not allowed", options); 429 | } 430 | 431 | if (isArrayBufferDetached(value.buffer)) { 432 | throw makeException(TypeError, "is a view on a detached ArrayBuffer", options); 433 | } 434 | return value; 435 | } 436 | 437 | if (!options.allowShared && !isNonSharedArrayBuffer(value)) { 438 | throw makeException(TypeError, "is not an ArrayBuffer or a view on one", options); 439 | } 440 | if (options.allowShared && !isSharedArrayBuffer(value) && !isNonSharedArrayBuffer(value)) { 441 | throw makeException(TypeError, "is not an ArrayBuffer, SharedArrayBuffer, or a view on one", options); 442 | } 443 | if (isArrayBufferDetached(value)) { 444 | throw makeException(TypeError, "is a detached ArrayBuffer", options); 445 | } 446 | 447 | return value; 448 | }; 449 | 450 | exports.DOMTimeStamp = exports["unsigned long long"]; 451 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "webidl-conversions", 3 | "version": "7.0.0", 4 | "description": "Implements the WebIDL algorithms for converting to and from JavaScript values", 5 | "main": "lib/index.js", 6 | "scripts": { 7 | "lint": "eslint .", 8 | "test": "mocha test/*.js", 9 | "test-no-sab": "mocha --parallel --jobs 2 --require test/helpers/delete-sab.js test/*.js", 10 | "coverage": "nyc mocha test/*.js" 11 | }, 12 | "_scripts_comments": { 13 | "test-no-sab": "Node.js internals are broken by deleting SharedArrayBuffer if you run tests on the main thread. Using Mocha's parallel mode avoids this." 14 | }, 15 | "repository": "jsdom/webidl-conversions", 16 | "keywords": [ 17 | "webidl", 18 | "web", 19 | "types" 20 | ], 21 | "files": [ 22 | "lib/" 23 | ], 24 | "author": "Domenic Denicola (https://domenic.me/)", 25 | "license": "BSD-2-Clause", 26 | "devDependencies": { 27 | "@domenic/eslint-config": "^1.3.0", 28 | "eslint": "^7.32.0", 29 | "mocha": "^9.1.1", 30 | "nyc": "^15.1.0" 31 | }, 32 | "engines": { 33 | "node": ">=12" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /test/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "mocha": true 4 | }, 5 | "rules": { 6 | "no-empty-function": "off", 7 | "func-style": "off" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /test/any.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | const assert = require("assert"); 3 | 4 | const conversions = require(".."); 5 | 6 | describe("WebIDL any type", () => { 7 | const sut = conversions.any; 8 | 9 | it("should return `undefined` for `undefined`", () => { 10 | assert.strictEqual(sut(undefined), undefined); 11 | }); 12 | 13 | it("should return `null` for `null`", () => { 14 | assert.strictEqual(sut(null), null); 15 | }); 16 | 17 | it("should return `true` for `true`", () => { 18 | assert.strictEqual(sut(true), true); 19 | }); 20 | 21 | it("should return `false` for `false`", () => { 22 | assert.strictEqual(sut(false), false); 23 | }); 24 | 25 | it("should return `Infinity` for `Infinity`", () => { 26 | assert.strictEqual(sut(Infinity), Infinity); 27 | }); 28 | 29 | it("should return `-Infinity` for `-Infinity`", () => { 30 | assert.strictEqual(sut(-Infinity), -Infinity); 31 | }); 32 | 33 | it("should return `NaN` for `NaN`", () => { 34 | assert(isNaN(sut(NaN))); 35 | }); 36 | 37 | it("should return `0` for `0`", () => { 38 | assert.strictEqual(sut(0), 0); 39 | }); 40 | 41 | it("should return `-0` for `-0`", () => { 42 | assert(Object.is(sut(-0), -0)); 43 | }); 44 | 45 | it("should return `1` for `1`", () => { 46 | assert.strictEqual(sut(1), 1); 47 | }); 48 | 49 | it("should return `-1` for `-1`", () => { 50 | assert.strictEqual(sut(-1), -1); 51 | }); 52 | 53 | it("should return `''` for `''`", () => { 54 | assert.strictEqual(sut(""), ""); 55 | }); 56 | 57 | it("should return `'a'` for `'a'`", () => { 58 | assert.strictEqual(sut("a"), "a"); 59 | }); 60 | 61 | it("should return `{}` for `{}`", () => { 62 | const obj = {}; 63 | assert.strictEqual(sut(obj), obj); 64 | }); 65 | 66 | it("should return `() => {}` for `() => {}`", () => { 67 | const func = () => {}; 68 | assert.strictEqual(sut(func), func); 69 | }); 70 | }); 71 | -------------------------------------------------------------------------------- /test/boolean.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | /* eslint-disable no-new-wrappers */ 3 | const assert = require("assert"); 4 | 5 | const conversions = require(".."); 6 | 7 | describe("WebIDL boolean type", () => { 8 | const sut = conversions.boolean; 9 | 10 | it("should return `false` for `undefined`", () => { 11 | assert.strictEqual(sut(undefined), false); 12 | }); 13 | 14 | it("should return `false` for `null`", () => { 15 | assert.strictEqual(sut(null), false); 16 | }); 17 | 18 | it("should return the input for a boolean", () => { 19 | assert.strictEqual(sut(true), true); 20 | assert.strictEqual(sut(false), false); 21 | }); 22 | 23 | it("should return `false` for `+0`, `-0`, and `NaN`, but `true` other numbers", () => { 24 | assert.strictEqual(sut(+0), false); 25 | assert.strictEqual(sut(-0), false); 26 | assert.strictEqual(sut(NaN), false); 27 | assert.strictEqual(sut(1), true); 28 | assert.strictEqual(sut(-1), true); 29 | assert.strictEqual(sut(-Infinity), true); 30 | }); 31 | 32 | it("should return `false` for empty strings, but `true` for other strings", () => { 33 | assert.strictEqual(sut(""), false); 34 | assert.strictEqual(sut(" "), true); 35 | assert.strictEqual(sut("false"), true); 36 | }); 37 | 38 | it("should return `true` for symbols", () => { 39 | assert.strictEqual(sut(Symbol("dummy description")), true); 40 | }); 41 | 42 | it("should return `true` for objects", () => { 43 | assert.strictEqual(sut({}), true); 44 | assert.strictEqual(sut(Object.create(null)), true); 45 | assert.strictEqual(sut(() => { }), true); 46 | assert.strictEqual(sut(new Boolean(false)), true); 47 | assert.strictEqual(sut(new Number(0)), true); 48 | }); 49 | }); 50 | -------------------------------------------------------------------------------- /test/buffer-source.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | const assert = require("assert"); 3 | const vm = require("vm"); 4 | const { MessageChannel } = require("worker_threads"); 5 | 6 | const assertThrows = require("./helpers/assertThrows"); 7 | const conversions = require(".."); 8 | 9 | function commonNotOk(sut) { 10 | it("should throw a TypeError for `undefined`", () => { 11 | assertThrows(sut, [undefined], TypeError); 12 | }); 13 | 14 | it("should throw a TypeError for `null`", () => { 15 | assertThrows(sut, [null], TypeError); 16 | }); 17 | 18 | it("should throw a TypeError for `true`", () => { 19 | assertThrows(sut, [true], TypeError); 20 | }); 21 | 22 | it("should throw a TypeError for `false`", () => { 23 | assertThrows(sut, [false], TypeError); 24 | }); 25 | 26 | it("should throw a TypeError for `Infinity`", () => { 27 | assertThrows(sut, [Infinity], TypeError); 28 | }); 29 | 30 | it("should throw a TypeError for `NaN`", () => { 31 | assertThrows(sut, [NaN], TypeError); 32 | }); 33 | 34 | it("should throw a TypeError for `0`", () => { 35 | assertThrows(sut, [0], TypeError); 36 | }); 37 | 38 | it("should throw a TypeError for `''`", () => { 39 | assertThrows(sut, [""], TypeError); 40 | }); 41 | 42 | it("should throw a TypeError for `Symbol.iterator`", () => { 43 | assertThrows(sut, [Symbol.iterator], TypeError); 44 | }); 45 | 46 | it("should throw a TypeError for `{}`", () => { 47 | assertThrows(sut, [{}], TypeError); 48 | }); 49 | 50 | it("should throw a TypeError for `() => {}`", () => { 51 | assertThrows(sut, [() => {}], TypeError); 52 | }); 53 | } 54 | 55 | function testOk(name, sut, create) { 56 | it(`should return input for ${name}`, () => { 57 | const obj = create(); 58 | assert.strictEqual(sut(obj), obj); 59 | }); 60 | } 61 | 62 | function testNotOk(name, sut, create) { 63 | it(`should throw a TypeError for ${name}`, () => { 64 | assertThrows(sut, [create()], TypeError); 65 | }); 66 | } 67 | 68 | const differentRealm = vm.createContext(); 69 | 70 | const bufferSourceConstructors = [ 71 | DataView, 72 | ArrayBuffer, 73 | Int8Array, 74 | Int16Array, 75 | Int32Array, 76 | Uint8Array, 77 | Uint16Array, 78 | Uint32Array, 79 | Uint8ClampedArray, 80 | Float32Array, 81 | Float64Array 82 | ]; 83 | 84 | const bufferSourceCreators = [ 85 | { 86 | typeName: "ArrayBuffer", 87 | isShared: false, 88 | isDetached: false, 89 | label: "ArrayBuffer same realm", 90 | creator: () => new ArrayBuffer(0) 91 | }, 92 | { 93 | typeName: "ArrayBuffer", 94 | isShared: false, 95 | isDetached: true, 96 | label: "detached ArrayBuffer", 97 | creator: () => { 98 | const value = new ArrayBuffer(0); 99 | const { port1 } = new MessageChannel(); 100 | port1.postMessage(undefined, [value]); 101 | return value; 102 | } 103 | } 104 | ]; 105 | 106 | if (typeof SharedArrayBuffer === "function") { 107 | bufferSourceCreators.push({ 108 | typeName: "SharedArrayBuffer", 109 | isShared: true, 110 | isDetached: false, 111 | label: "SharedArrayBuffer same realm", 112 | creator: () => new SharedArrayBuffer(0) 113 | }); 114 | } 115 | 116 | for (const constructor of bufferSourceConstructors) { 117 | if (constructor === ArrayBuffer) { 118 | continue; 119 | } 120 | 121 | const { name } = constructor; 122 | bufferSourceCreators.push( 123 | { 124 | typeName: name, 125 | isShared: false, 126 | isDetached: false, 127 | isForged: false, 128 | label: `${name} same realm`, 129 | creator: () => new constructor(new ArrayBuffer(0)) 130 | }, 131 | { 132 | typeName: name, 133 | isShared: false, 134 | isDetached: false, 135 | isForged: false, 136 | label: `${name} different realm`, 137 | creator: () => vm.runInContext(`new ${constructor.name}(new ArrayBuffer(0))`, differentRealm) 138 | }, 139 | { 140 | typeName: name, 141 | isShared: false, 142 | isDetached: false, 143 | isForged: true, 144 | label: `forged ${name}`, 145 | creator: () => Object.create(constructor.prototype, { [Symbol.toStringTag]: { value: name } }) 146 | }, 147 | { 148 | typeName: name, 149 | isShared: false, 150 | isDetached: true, 151 | isForged: false, 152 | label: `detached ${name}`, 153 | creator: () => { 154 | const value = new constructor(new ArrayBuffer(0)); 155 | const { port1 } = new MessageChannel(); 156 | port1.postMessage(undefined, [value.buffer]); 157 | return value; 158 | } 159 | } 160 | ); 161 | 162 | if (typeof SharedArrayBuffer === "function") { 163 | bufferSourceCreators.push( 164 | { 165 | typeName: name, 166 | isShared: true, 167 | isDetached: false, 168 | isForged: false, 169 | label: `${name} SharedArrayBuffer same realm`, 170 | creator: () => new constructor(new SharedArrayBuffer(0)) 171 | }, 172 | { 173 | typeName: name, 174 | isShared: true, 175 | isDetached: false, 176 | isForged: false, 177 | label: `${name} SharedArrayBuffer different realm`, 178 | creator: () => vm.runInContext(`new ${constructor.name}(new SharedArrayBuffer(0))`, differentRealm) 179 | } 180 | ); 181 | } 182 | } 183 | 184 | for (const type of bufferSourceConstructors) { 185 | const typeName = type.name; 186 | const sut = conversions[typeName]; 187 | 188 | describe(`WebIDL ${typeName} type`, () => { 189 | for (const innerType of bufferSourceCreators) { 190 | const testFunction = 191 | innerType.typeName === typeName && 192 | !innerType.isShared && 193 | !innerType.isDetached && 194 | !innerType.isForged ? 195 | testOk : 196 | testNotOk; 197 | 198 | testFunction(innerType.label, sut, innerType.creator); 199 | } 200 | 201 | commonNotOk(sut); 202 | 203 | describe("with [AllowShared]", () => { 204 | const allowSharedSUT = (v, opts) => conversions[typeName](v, { ...opts, allowShared: true }); 205 | 206 | for (const { label, creator, typeName: innerTypeName, isDetached, isForged } of bufferSourceCreators) { 207 | const testFunction = innerTypeName === typeName && !isDetached && !isForged ? testOk : testNotOk; 208 | testFunction(label, allowSharedSUT, creator); 209 | } 210 | 211 | commonNotOk(allowSharedSUT); 212 | }); 213 | }); 214 | } 215 | 216 | describe("WebIDL ArrayBufferView type", () => { 217 | const sut = conversions.ArrayBufferView; 218 | 219 | for (const { label, typeName, isShared, isDetached, isForged, creator } of bufferSourceCreators) { 220 | const testFunction = 221 | typeName !== "ArrayBuffer" && 222 | typeName !== "SharedArrayBuffer" && 223 | !isShared && 224 | !isDetached && 225 | !isForged ? 226 | testOk : 227 | testNotOk; 228 | 229 | testFunction(label, sut, creator); 230 | } 231 | 232 | commonNotOk(sut); 233 | 234 | describe("with [AllowShared]", () => { 235 | const allowSharedSUT = (v, opts) => conversions.ArrayBufferView(v, { ...opts, allowShared: true }); 236 | 237 | for (const { label, creator, typeName, isDetached, isForged } of bufferSourceCreators) { 238 | const testFunction = 239 | typeName !== "ArrayBuffer" && 240 | typeName !== "SharedArrayBuffer" && 241 | !isDetached && 242 | !isForged ? 243 | testOk : 244 | testNotOk; 245 | 246 | testFunction(label, allowSharedSUT, creator); 247 | } 248 | 249 | commonNotOk(allowSharedSUT); 250 | }); 251 | }); 252 | 253 | describe("WebIDL BufferSource type", () => { 254 | const sut = conversions.BufferSource; 255 | 256 | for (const { label, creator, isShared, isDetached, isForged } of bufferSourceCreators) { 257 | const testFunction = !isShared && !isDetached && !isForged ? testOk : testNotOk; 258 | testFunction(label, sut, creator); 259 | } 260 | 261 | commonNotOk(sut); 262 | 263 | describe("with [AllowShared]", () => { 264 | const allowSharedSUT = (v, opts) => conversions.BufferSource(v, { ...opts, allowShared: true }); 265 | 266 | for (const { label, creator, isDetached, isForged } of bufferSourceCreators) { 267 | const testFunction = !isDetached && !isForged ? testOk : testNotOk; 268 | testFunction(label, allowSharedSUT, creator); 269 | } 270 | 271 | commonNotOk(allowSharedSUT); 272 | }); 273 | }); 274 | -------------------------------------------------------------------------------- /test/dom-time-stamp.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | const assert = require("assert"); 3 | 4 | const conversions = require(".."); 5 | 6 | describe("WebIDL DOMTimeStamp type", () => { 7 | const sut = conversions.DOMTimeStamp; 8 | 9 | it("should have the same conversion routine as unsigned long long type", () => { 10 | assert.strictEqual(sut, conversions["unsigned long long"]); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /test/double.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | const assert = require("assert"); 3 | 4 | const conversions = require(".."); 5 | const assertThrows = require("./helpers/assertThrows"); 6 | 7 | function assertIs(actual, expected, message) { 8 | if (!Object.is(actual, expected)) { 9 | assert.fail(actual, expected, message, "is", assertIs); 10 | } 11 | } 12 | 13 | function commonTest(sut) { 14 | it("should return `0` for `0`", () => { 15 | assert.strictEqual(sut(0), 0); 16 | }); 17 | 18 | it("should return `-0` for `-0`", () => { 19 | assertIs(sut(-0), -0); 20 | }); 21 | 22 | it("should return `42` for `42`", () => { 23 | assert.strictEqual(sut(42), 42); 24 | }); 25 | 26 | it("should return `0` for `null`", () => { 27 | assert.strictEqual(sut(null), 0); 28 | }); 29 | 30 | it("should return `0` for `\"\"`", () => { 31 | assert.strictEqual(sut(""), 0); 32 | }); 33 | 34 | it("should return `0` for `false`", () => { 35 | assert.strictEqual(sut(0), 0); 36 | }); 37 | 38 | it("should return `1` for `true`", () => { 39 | assert.strictEqual(sut(null), 0); 40 | }); 41 | 42 | it("should return `0` for random whitespace", () => { 43 | assert.strictEqual(sut(" \t\n\t "), 0); 44 | }); 45 | 46 | it("should return `123` for `\" 123 \"`", () => { 47 | assert.strictEqual(sut(" 123 "), 123); 48 | }); 49 | 50 | it("should return `-123.5` for `\" -123.500 \"`", () => { 51 | assert.strictEqual(sut(" -123.500 "), -123.5); 52 | }); 53 | 54 | it("should throw a TypeError for `0n`", () => { 55 | assertThrows(sut, [0n], TypeError); 56 | }); 57 | } 58 | 59 | function commonRestricted(sut) { 60 | it("should throw a TypeError for no argument", () => { 61 | assertThrows(sut, [], TypeError); 62 | }); 63 | 64 | it("should throw a TypeError for `undefined`", () => { 65 | assertThrows(sut, [undefined], TypeError); 66 | }); 67 | 68 | it("should throw a TypeError for `NaN`", () => { 69 | assertThrows(sut, [NaN], TypeError); 70 | }); 71 | 72 | it("should throw a TypeError for `+Infinity`", () => { 73 | assertThrows(sut, [Infinity], TypeError); 74 | }); 75 | 76 | it("should throw a TypeError for `-Infinity`", () => { 77 | assertThrows(sut, [-Infinity], TypeError); 78 | }); 79 | 80 | it("should throw a TypeError for `\" 123,123 \"` (since it becomes `NaN`)", () => { 81 | assertThrows(sut, [" 123,123 "], TypeError); 82 | }); 83 | } 84 | 85 | function commonUnrestricted(sut) { 86 | it("should return `NaN` for no argument", () => { 87 | assert(isNaN(sut())); 88 | }); 89 | 90 | it("should return `NaN for `undefined`", () => { 91 | assert(isNaN(sut(undefined))); 92 | }); 93 | 94 | it("should return `NaN for `NaN`", () => { 95 | assert(isNaN(sut(NaN))); 96 | }); 97 | 98 | it("should return `+Infinity` for `+Infinity`", () => { 99 | assert.strictEqual(sut(Infinity), Infinity); 100 | }); 101 | 102 | it("should return `-Infinity` for `-Infinity`", () => { 103 | assert.strictEqual(sut(-Infinity), -Infinity); 104 | }); 105 | 106 | it("should return `NaN for `\" 123,123 \"` (since it becomes `NaN`)", () => { 107 | assert(isNaN(sut(" 123,123 "))); 108 | }); 109 | } 110 | 111 | function commonDouble(sut) { 112 | it("should return `3.5000000000000004` for `3.5000000000000004`", () => { 113 | assert.strictEqual(sut(3.5000000000000004), 3.5000000000000004); 114 | }); 115 | 116 | it("should return `-3.5000000000000004` for `-3.5000000000000004`", () => { 117 | assert.strictEqual(sut(-3.5000000000000004), -3.5000000000000004); 118 | }); 119 | } 120 | 121 | function commonFloat(sut) { 122 | it("should return `3.5` for `3.5000000000000004`", () => { 123 | assert.strictEqual(sut(3.5000000000000004), 3.5); 124 | }); 125 | 126 | it("should return `-3.5` for `-3.5000000000000004`", () => { 127 | assert.strictEqual(sut(-3.5000000000000004), -3.5); 128 | }); 129 | } 130 | 131 | describe("WebIDL double type", () => { 132 | const sut = conversions.double; 133 | 134 | commonTest(sut); 135 | commonRestricted(sut); 136 | commonDouble(sut); 137 | }); 138 | 139 | describe("WebIDL unrestricted double type", () => { 140 | const sut = conversions["unrestricted double"]; 141 | 142 | commonTest(sut); 143 | commonUnrestricted(sut); 144 | commonDouble(sut); 145 | }); 146 | 147 | describe("WebIDL float type", () => { 148 | const sut = conversions.float; 149 | 150 | commonTest(sut); 151 | commonRestricted(sut); 152 | commonFloat(sut); 153 | 154 | it("should throw a TypeError for `2 ** 128`", () => { 155 | assertThrows(sut, [2 ** 128], TypeError); 156 | }); 157 | 158 | it("should throw a TypeError for `-(2 ** 128)`", () => { 159 | assertThrows(sut, [-(2 ** 128)], TypeError); 160 | }); 161 | }); 162 | 163 | describe("WebIDL unrestricted float type", () => { 164 | const sut = conversions["unrestricted float"]; 165 | 166 | commonTest(sut); 167 | commonUnrestricted(sut); 168 | commonFloat(sut); 169 | 170 | it("should return `Infinity` for `2 ** 128`", () => { 171 | assert.strictEqual(sut(2 ** 128), Infinity); 172 | }); 173 | 174 | it("should return `-Infinity` for `-(2 ** 128)`", () => { 175 | assert.strictEqual(sut(-(2 ** 128)), -Infinity); 176 | }); 177 | }); 178 | -------------------------------------------------------------------------------- /test/helpers/assertThrows.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | const assert = require("assert"); 3 | const vm = require("vm"); 4 | 5 | const context = vm.createContext(); 6 | const otherGlobals = { 7 | Number: vm.runInContext("Number", context), 8 | String: vm.runInContext("String", context), 9 | TypeError: vm.runInContext("TypeError", context) 10 | }; 11 | 12 | module.exports = (converter, args, exceptionType) => { 13 | assert.throws(() => converter(...args), exceptionType); 14 | 15 | const exceptionFromOtherContext = vm.runInContext(exceptionType.name, context); 16 | const [value, options = {}] = args; 17 | assert.throws(() => { 18 | converter(value, { 19 | ...options, 20 | globals: otherGlobals 21 | }); 22 | }, exceptionFromOtherContext); 23 | }; 24 | -------------------------------------------------------------------------------- /test/helpers/delete-sab.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | // This file is meant to be used with the --require option to Mocha to run the test suite without SharedArrayBuffer 3 | // support. This ensures we continue to work in environments, like browsers without cross-origin isolation headers, 4 | // that lack SharedArrayBuffer. 5 | 6 | delete global.SharedArrayBuffer; 7 | -------------------------------------------------------------------------------- /test/integer-types.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | const assert = require("assert"); 3 | 4 | const conversions = require(".."); 5 | const assertThrows = require("./helpers/assertThrows"); 6 | 7 | // For extraordinarily large (in magnitude) numbers, we can't rely on toString() to give the most accurate output. See 8 | // the note at https://tc39.es/ecma262/#sec-number.prototype.tofixed: 9 | // 10 | // > The output of toFixed may be more precise than toString for some values because toString only prints enough 11 | // > significant digits to distinguish the number from adjacent number values. For example, 12 | // > 13 | // > (1000000000000000128).toString() returns "1000000000000000100", while 14 | // > (1000000000000000128).toFixed(0) returns "1000000000000000128". 15 | function stringifyNumber(num) { 16 | if (Number.isFinite(num) && Number.isInteger(num) && !Number.isSafeInteger(num)) { 17 | return num.toFixed(0); 18 | } 19 | return String(num); 20 | } 21 | 22 | function assertIs(actual, expected) { 23 | if (!Object.is(actual, expected)) { 24 | assert.fail(`Input ${stringifyNumber(actual)} expected to be ${stringifyNumber(expected)}`); 25 | } 26 | } 27 | 28 | function commonTest(sut) { 29 | it("should return 0 for 0", () => { 30 | assertIs(sut(0), 0); 31 | }); 32 | 33 | it("should return 0 for -0", () => { 34 | assertIs(sut(-0), 0); 35 | }); 36 | 37 | it("should return 0 for -0 with [EnforceRange]", () => { 38 | assertIs(sut(-0, { enforceRange: true }), 0); 39 | }); 40 | 41 | it("should return 0 for -0 with [Clamp]", () => { 42 | assertIs(sut(-0, { clamp: true }), 0); 43 | }); 44 | 45 | it("should return 42 for 42", () => { 46 | assertIs(sut(42), 42); 47 | }); 48 | 49 | it("should return 0 for null", () => { 50 | assertIs(sut(null), 0); 51 | }); 52 | 53 | it("should return 0 for \"\"", () => { 54 | assertIs(sut(""), 0); 55 | }); 56 | 57 | it("should return 0 for false", () => { 58 | assertIs(sut(0), 0); 59 | }); 60 | 61 | it("should return 1 for true", () => { 62 | assertIs(sut(null), 0); 63 | }); 64 | 65 | it("should return 0 for random whitespace", () => { 66 | assertIs(sut(" \t\n\t "), 0); 67 | }); 68 | 69 | it("should return 0 for \"123, 123\"", () => { 70 | assertIs(sut("123,123"), 0); 71 | }); 72 | it("should return 123 for \" 123 \"", () => { 73 | assertIs(sut(" 123 "), 123); 74 | }); 75 | 76 | it("should return 123 for \" 123.400 \"", () => { 77 | assertIs(sut(" 123.400 "), 123); 78 | }); 79 | 80 | it("should throw a TypeError for `0n`", () => { 81 | assertThrows(sut, [0n], TypeError); 82 | }); 83 | } 84 | 85 | function commonTestNonFinite(sut) { 86 | it("should return 0 for NaN", () => { 87 | assertIs(sut(NaN), 0); 88 | }); 89 | 90 | it("should return 0 for +Infinity", () => { 91 | assertIs(sut(Infinity), 0); 92 | }); 93 | 94 | it("should return 0 for -Infinity", () => { 95 | assertIs(sut(Infinity), 0); 96 | }); 97 | 98 | it("should throw for NaN with [EnforceRange]", () => { 99 | assertThrows(sut, [NaN, { enforceRange: true }], TypeError); 100 | }); 101 | 102 | it("should throw for +Infinity with [EnforceRange]", () => { 103 | assertThrows(sut, [Infinity, { enforceRange: true }], TypeError); 104 | }); 105 | 106 | it("should throw for -Infinity with [EnforceRange]", () => { 107 | assertThrows(sut, [-Infinity, { enforceRange: true }], TypeError); 108 | }); 109 | } 110 | 111 | function generateTests(sut, testCases, options, extraLabel) { 112 | extraLabel = extraLabel === undefined ? "" : ` ${extraLabel}`; 113 | 114 | for (const [input, expected] of testCases) { 115 | if (expected === TypeError) { 116 | it(`should throw for ${stringifyNumber(input)}${extraLabel}`, () => { 117 | assertThrows(sut, [input, options], TypeError); 118 | }); 119 | } else { 120 | it(`should return ${stringifyNumber(expected)} for ${stringifyNumber(input)}${extraLabel}`, () => { 121 | assertIs(sut(input, options), expected); 122 | }); 123 | } 124 | } 125 | } 126 | 127 | describe("WebIDL byte type", () => { 128 | const sut = conversions.byte; 129 | 130 | commonTest(sut); 131 | commonTestNonFinite(sut); 132 | 133 | generateTests(sut, [ 134 | [257, 1], 135 | [256, 0], 136 | [129, -127], 137 | [128, -128], 138 | [127.8, 127], 139 | [127.5, 127], 140 | [127.2, 127], 141 | [127, 127], 142 | [3.5, 3], 143 | [2.5, 2], 144 | [1.5, 1], 145 | [0.8, 0], 146 | [0.5, 0], 147 | [0.2, 0], 148 | [-0.2, 0], 149 | [-0.5, 0], 150 | [-0.8, 0], 151 | [-1, -1], 152 | [-1.5, -1], 153 | [-1.8, -1], 154 | [-2.5, -2], 155 | [-3.5, -3], 156 | [-128, -128], 157 | [-129, 127], 158 | [-130, 126] 159 | ]); 160 | 161 | generateTests(sut, [ 162 | [-128, -128], 163 | [-129, -128], 164 | [-10000, -128], 165 | [-Infinity, -128], 166 | [127, 127], 167 | [128, 127], 168 | [10000, 127], 169 | [Infinity, 127], 170 | [3.5, 4], 171 | [2.5, 2], 172 | [1.5, 2], 173 | [0.8, 1], 174 | [0.5, 0], 175 | [0.2, 0], 176 | [-0.2, 0], 177 | [-0.5, 0], 178 | [-0.8, -1], 179 | [-1.2, -1], 180 | [-1.5, -2], 181 | [-1.8, -2], 182 | [-2.5, -2], 183 | [-2.8, -3] 184 | ], { clamp: true }, "with [Clamp]"); 185 | 186 | generateTests(sut, [ 187 | [-128, -128], 188 | [-128.8, -128], 189 | [-129, TypeError], 190 | [-10000, TypeError], 191 | [127, 127], 192 | [127.8, 127], 193 | [128, TypeError], 194 | [10000, TypeError] 195 | ], { enforceRange: true }, "with [EnforceRange]"); 196 | }); 197 | 198 | describe("WebIDL octet type", () => { 199 | const sut = conversions.octet; 200 | 201 | commonTest(sut); 202 | commonTestNonFinite(sut); 203 | 204 | generateTests(sut, [ 205 | [512, 0], 206 | [257, 1], 207 | [256, 0], 208 | [255.8, 255], 209 | [255.5, 255], 210 | [255.2, 255], 211 | [255, 255], 212 | [129, 129], 213 | [128, 128], 214 | [127, 127], 215 | [3.5, 3], 216 | [2.5, 2], 217 | [1.5, 1], 218 | [0.8, 0], 219 | [0.5, 0], 220 | [0.2, 0], 221 | [-0.2, 0], 222 | [-0.5, 0], 223 | [-0.8, 0], 224 | [-1, 255], 225 | [-1.5, 255], 226 | [-1.8, 255], 227 | [-2, 254], 228 | [-2.5, 254], 229 | [-3.5, 253], 230 | [-128, 128] 231 | ]); 232 | 233 | generateTests(sut, [ 234 | [-1, 0], 235 | [-255, 0], 236 | [-256, 0], 237 | [-1000, 0], 238 | [-Infinity, 0], 239 | [127, 127], 240 | [128, 128], 241 | [255, 255], 242 | [256, 255], 243 | [10000, 255], 244 | [Infinity, 255], 245 | [3.5, 4], 246 | [2.5, 2], 247 | [1.5, 2], 248 | [0.8, 1], 249 | [0.5, 0], 250 | [0.2, 0], 251 | [-0.2, 0], 252 | [-0.5, 0], 253 | [-0.8, 0] 254 | ], { clamp: true }, "with [Clamp]"); 255 | 256 | generateTests(sut, [ 257 | [-256, TypeError], 258 | [-1, TypeError], 259 | [-0.8, 0], 260 | [0, 0], 261 | [255, 255], 262 | [255.8, 255], 263 | [256, TypeError], 264 | [10000, TypeError] 265 | ], { enforceRange: true }, "with [EnforceRange]"); 266 | }); 267 | 268 | describe("WebIDL short type", () => { 269 | const sut = conversions.short; 270 | 271 | commonTest(sut); 272 | commonTestNonFinite(sut); 273 | 274 | generateTests(sut, [ 275 | [-32768, -32768], 276 | [32767, 32767], 277 | [32768, -32768], 278 | [32769, -32767], 279 | [-32769, 32767], 280 | [-32770, 32766], 281 | [65536, 0], 282 | [65537, 1] 283 | ]); 284 | 285 | generateTests(sut, [ 286 | [-32768, -32768], 287 | [-32769, -32768], 288 | [-1000000, -32768], 289 | [-Infinity, -32768], 290 | [32767, 32767], 291 | [32768, 32767], 292 | [1000000, 32767], 293 | [Infinity, 32767] 294 | ], { clamp: true }, "with [Clamp]"); 295 | 296 | generateTests(sut, [ 297 | [-32768, -32768], 298 | [-32769, TypeError], 299 | [-100000, TypeError], 300 | [32767, 32767], 301 | [32768, TypeError], 302 | [100000, TypeError] 303 | ], { enforceRange: true }, "with [EnforceRange]"); 304 | }); 305 | 306 | describe("WebIDL unsigned short type", () => { 307 | const sut = conversions["unsigned short"]; 308 | 309 | commonTest(sut); 310 | commonTestNonFinite(sut); 311 | 312 | generateTests(sut, [ 313 | [-32768, 32768], 314 | [32767, 32767], 315 | [32768, 32768], 316 | [32769, 32769], 317 | [65535, 65535], 318 | [65536, 0], 319 | [65537, 1], 320 | [131072, 0], 321 | [-1, 65535], 322 | [-2, 65534] 323 | ]); 324 | 325 | generateTests(sut, [ 326 | [-1, 0], 327 | [-32767, 0], 328 | [-32768, 0], 329 | [-100000, 0], 330 | [-Infinity, 0], 331 | [32767, 32767], 332 | [32768, 32768], 333 | [65535, 65535], 334 | [65536, 65535], 335 | [100000, 65535], 336 | [Infinity, 65535] 337 | ], { clamp: true }, "with [Clamp]"); 338 | 339 | generateTests(sut, [ 340 | [-65536, TypeError], 341 | [-1, TypeError], 342 | [0, 0], 343 | [65535, 65535], 344 | [65536, TypeError], 345 | [100000, TypeError] 346 | ], { enforceRange: true }, "with [EnforceRange]"); 347 | }); 348 | 349 | describe("WebIDL long type", () => { 350 | const sut = conversions.long; 351 | 352 | commonTest(sut); 353 | commonTestNonFinite(sut); 354 | 355 | generateTests(sut, [ 356 | [-2147483648, -2147483648], 357 | [2147483647, 2147483647], 358 | [2147483648, -2147483648], 359 | [2147483649, -2147483647], 360 | [-2147483649, 2147483647], 361 | [-2147483650, 2147483646], 362 | [4294967296, 0], 363 | [4294967297, 1] 364 | ]); 365 | 366 | generateTests(sut, [ 367 | [-2147483648, -2147483648], 368 | [-2147483649, -2147483648], 369 | [-10000000000, -2147483648], 370 | [-Infinity, -2147483648], 371 | [2147483647, 2147483647], 372 | [2147483648, 2147483647], 373 | [10000000000, 2147483647], 374 | [Infinity, 2147483647] 375 | ], { clamp: true }, "with [Clamp]"); 376 | 377 | generateTests(sut, [ 378 | [-2147483648, -2147483648], 379 | [-2147483649, TypeError], 380 | [-10000000000, TypeError], 381 | [2147483647, 2147483647], 382 | [2147483648, TypeError], 383 | [10000000000, TypeError] 384 | ], { enforceRange: true }, "with [EnforceRange]"); 385 | }); 386 | 387 | describe("WebIDL unsigned long type", () => { 388 | const sut = conversions["unsigned long"]; 389 | 390 | commonTest(sut); 391 | commonTestNonFinite(sut); 392 | 393 | generateTests(sut, [ 394 | [-2147483648, 2147483648], 395 | [2147483647, 2147483647], 396 | [2147483648, 2147483648], 397 | [2147483649, 2147483649], 398 | [4294967295, 4294967295], 399 | [4294967296, 0], 400 | [4294967297, 1], 401 | [8589934592, 0], 402 | [-1, 4294967295], 403 | [-2, 4294967294] 404 | ]); 405 | 406 | generateTests(sut, [ 407 | [-1, 0], 408 | [-4294967295, 0], 409 | [-4294967296, 0], 410 | [-10000000000, 0], 411 | [-Infinity, 0], 412 | [2147483647, 2147483647], 413 | [2147483648, 2147483648], 414 | [4294967295, 4294967295], 415 | [4294967296, 4294967295], 416 | [10000000000, 4294967295], 417 | [Infinity, 4294967295] 418 | ], { clamp: true }, "with [Clamp]"); 419 | 420 | generateTests(sut, [ 421 | [-4294967296, TypeError], 422 | [-1, TypeError], 423 | [0, 0], 424 | [4294967295, 4294967295], 425 | [4294967296, TypeError], 426 | [10000000000, TypeError] 427 | ], { enforceRange: true }, "with [EnforceRange]"); 428 | }); 429 | 430 | describe("WebIDL long long type", () => { 431 | const sut = conversions["long long"]; 432 | 433 | commonTest(sut); 434 | commonTestNonFinite(sut); 435 | 436 | generateTests(sut, [ 437 | [4294967296, 4294967296], // 2**32 438 | [9007199254740991, 9007199254740991], // 2**53 - 1 = Number.MAX_SAFE_INTEGER 439 | [9007199254740992, 9007199254740992], // 2**53 440 | [9007199254740994, 9007199254740994], // 2**53 + 2 441 | [4611686018427387904, 4611686018427387904], // 2**62 442 | [9223372036854775808, -9223372036854775808], // 2**63 443 | [9223372036854777856, -9223372036854773760], // 2**63 + 2**11 444 | [18446744073709551616, 0], // 2**64 445 | [18446744073709555712, 4096], // 2**64 + 2**12 446 | [-4294967296, -4294967296], // -2**32 447 | [-9007199254740991, -9007199254740991], // -(2**53 - 1) = Number.MIN_SAFE_INTEGER 448 | [-9007199254740992, -9007199254740992], // -(2**53) 449 | [-18446744073709551616, 0], // -(2**64) 450 | [-18446744073709555712, -4096] // -(2**64 + 2**12) 451 | ]); 452 | 453 | describe("[Clamp]", () => { 454 | generateTests(sut, [ 455 | [4294967296, 4294967296], // 2**32 456 | [9007199254740991, Number.MAX_SAFE_INTEGER], // 2**53 - 1 = Number.MAX_SAFE_INTEGER 457 | [9007199254740992, Number.MAX_SAFE_INTEGER], // 2**53 458 | [9007199254740994, Number.MAX_SAFE_INTEGER], // 2**53 + 2 459 | [4611686018427387904, Number.MAX_SAFE_INTEGER], // 2**62 460 | [9223372036854775808, Number.MAX_SAFE_INTEGER], // 2**63 461 | [9223372036854777856, Number.MAX_SAFE_INTEGER], // 2**63 + 2**11 462 | [18446744073709551616, Number.MAX_SAFE_INTEGER], // 2**64 463 | [18446744073709555712, Number.MAX_SAFE_INTEGER], // 2**64 + 2**12 464 | [-4294967296, -4294967296], // -2**32 465 | [-9007199254740991, Number.MIN_SAFE_INTEGER], // -(2**53 - 1) = Number.MIN_SAFE_INTEGER 466 | [-9007199254740992, Number.MIN_SAFE_INTEGER], // -(2**53) 467 | [-18446744073709551616, Number.MIN_SAFE_INTEGER], // -(2**64) 468 | [-18446744073709555712, Number.MIN_SAFE_INTEGER] // -(2**64 + 2**12) 469 | ], { clamp: true }, "with [Clamp]"); 470 | }); 471 | 472 | describe("[EnforceRange]", () => { 473 | generateTests(sut, [ 474 | [4294967296, 4294967296], // 2**32 475 | [9007199254740991, Number.MAX_SAFE_INTEGER], // 2**53 - 1 = Number.MAX_SAFE_INTEGER 476 | [9007199254740992, TypeError], // 2**53 477 | [9007199254740994, TypeError], // 2**53 + 2 478 | [4611686018427387904, TypeError], // 2**62 479 | [9223372036854775808, TypeError], // 2**63 480 | [9223372036854777856, TypeError], // 2**63 + 2**11 481 | [18446744073709551616, TypeError], // 2**64 482 | [18446744073709555712, TypeError], // 2**64 + 2**12 483 | [-4294967296, -4294967296], // -2**32 484 | [-9007199254740991, Number.MIN_SAFE_INTEGER], // -(2**53 - 1) = Number.MIN_SAFE_INTEGER 485 | [-9007199254740992, TypeError], // -(2**53) 486 | [-18446744073709551616, TypeError], // -(2**64) 487 | [-18446744073709555712, TypeError] // -(2**64 + 2**12) 488 | ], { enforceRange: true }, "with [EnforceRange]"); 489 | }); 490 | }); 491 | 492 | describe("WebIDL unsigned long long type", () => { 493 | const sut = conversions["unsigned long long"]; 494 | 495 | commonTest(sut); 496 | commonTestNonFinite(sut); 497 | 498 | generateTests(sut, [ 499 | [4294967296, 4294967296], // 2**32 500 | [9007199254740991, 9007199254740991], // 2**53 - 1 = Number.MAX_SAFE_INTEGER 501 | [9007199254740992, 9007199254740992], // 2**53 502 | [9007199254740994, 9007199254740994], // 2**53 + 2 503 | [4611686018427387904, 4611686018427387904], // 2**62 504 | [9223372036854775808, 9223372036854775808], // 2**63 505 | [9223372036854777856, 9223372036854777856], // 2**63 + 2**11 506 | [18446744073709551616, 0], // 2**64 507 | [18446744073709555712, 4096], // 2**64 + 2**12 508 | [-4294967296, 18446744069414584320], // -2**32 509 | [-9007199254740991, 18437736874454810624], // -(2**53 - 1) = Number.MIN_SAFE_INTEGER 510 | [-9007199254740992, 18437736874454810624], // -(2**53) 511 | [-18446744073709551616, 0], // -(2**64) 512 | [-18446744073709555712, 18446744073709547520] // -(2**64 + 2**12) 513 | ]); 514 | 515 | describe("[Clamp]", () => { 516 | generateTests(sut, [ 517 | [4294967296, 4294967296], // 2**32 518 | [9007199254740991, Number.MAX_SAFE_INTEGER], // 2**53 - 1 = Number.MAX_SAFE_INTEGER 519 | [9007199254740992, Number.MAX_SAFE_INTEGER], // 2**53 520 | [9007199254740994, Number.MAX_SAFE_INTEGER], // 2**53 + 2 521 | [4611686018427387904, Number.MAX_SAFE_INTEGER], // 2**62 522 | [9223372036854775808, Number.MAX_SAFE_INTEGER], // 2**63 523 | [9223372036854777856, Number.MAX_SAFE_INTEGER], // 2**63 + 2**11 524 | [18446744073709551616, Number.MAX_SAFE_INTEGER], // 2**64 525 | [18446744073709555712, Number.MAX_SAFE_INTEGER], // 2**64 + 2**12 526 | [-4294967296, 0], // -2**32 527 | [-9007199254740991, 0], // -(2**53 - 1) = Number.MIN_SAFE_INTEGER 528 | [-9007199254740992, 0], // -(2**53) 529 | [-18446744073709551616, 0], // -(2**64) 530 | [-18446744073709555712, 0] // -(2**64 + 2**12) 531 | ], { clamp: true }, "with [Clamp]"); 532 | }); 533 | 534 | describe("[EnforceRange]", () => { 535 | generateTests(sut, [ 536 | [4294967296, 4294967296], // 2**32 537 | [9007199254740991, Number.MAX_SAFE_INTEGER], // 2**53 - 1 = Number.MAX_SAFE_INTEGER 538 | [9007199254740992, TypeError], // 2**53 539 | [9007199254740994, TypeError], // 2**53 + 2 540 | [4611686018427387904, TypeError], // 2**62 541 | [9223372036854775808, TypeError], // 2**63 542 | [9223372036854777856, TypeError], // 2**63 + 2**11 543 | [18446744073709551616, TypeError], // 2**64 544 | [18446744073709555712, TypeError], // 2**64 + 2**12 545 | [-4294967296, TypeError], // -2**32 546 | [-9007199254740991, TypeError], // -(2**53 - 1) = Number.MIN_SAFE_INTEGER 547 | [-9007199254740992, TypeError], // -(2**53) 548 | [-18446744073709551616, TypeError], // -(2**64) 549 | [-18446744073709555712, TypeError] // -(2**64 + 2**12) 550 | ], { enforceRange: true }, "with [EnforceRange]"); 551 | }); 552 | }); 553 | -------------------------------------------------------------------------------- /test/object.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | const assert = require("assert"); 3 | 4 | const conversions = require(".."); 5 | const assertThrows = require("./helpers/assertThrows"); 6 | 7 | describe("WebIDL object type", () => { 8 | const sut = conversions.object; 9 | 10 | it("should return `{}` for `{}`", () => { 11 | const obj = {}; 12 | assert.strictEqual(sut(obj), obj); 13 | }); 14 | 15 | it("should return `() => {}` for `() => {}`", () => { 16 | const func = () => {}; 17 | assert.strictEqual(sut(func), func); 18 | }); 19 | 20 | it("should throw a TypeError for `undefined`", () => { 21 | assertThrows(sut, [undefined], TypeError); 22 | }); 23 | 24 | it("should throw a TypeError for `null`", () => { 25 | assertThrows(sut, [null], TypeError); 26 | }); 27 | 28 | it("should throw a TypeError for `true`", () => { 29 | assertThrows(sut, [true], TypeError); 30 | }); 31 | 32 | it("should throw a TypeError for `false`", () => { 33 | assertThrows(sut, [false], TypeError); 34 | }); 35 | 36 | it("should throw a TypeError for `Infinity`", () => { 37 | assertThrows(sut, [Infinity], TypeError); 38 | }); 39 | 40 | it("should throw a TypeError for `NaN`", () => { 41 | assertThrows(sut, [NaN], TypeError); 42 | }); 43 | 44 | it("should throw a TypeError for `0`", () => { 45 | assertThrows(sut, [0], TypeError); 46 | }); 47 | 48 | it("should throw a TypeError for `''`", () => { 49 | assertThrows(sut, [""], TypeError); 50 | }); 51 | 52 | it("should throw a TypeError for `Symbol.iterator`", () => { 53 | assertThrows(sut, [Symbol.iterator], TypeError); 54 | }); 55 | 56 | it("should throw a TypeError for `0n`", () => { 57 | assertThrows(sut, [0n], TypeError); 58 | }); 59 | }); 60 | -------------------------------------------------------------------------------- /test/string-types.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | const assert = require("assert"); 3 | 4 | const conversions = require(".."); 5 | const assertThrows = require("./helpers/assertThrows"); 6 | 7 | function commonTest(sut) { 8 | it("should return `\"undefined\"` for `undefined`", () => { 9 | assert.strictEqual(sut(undefined), "undefined"); 10 | }); 11 | 12 | it("should return `\"null\"` for `null`", () => { 13 | assert.strictEqual(sut(null), "null"); 14 | }); 15 | 16 | it("should return `\"\"` for `null` with [TreatNullAsEmptyString]", () => { 17 | assert.strictEqual(sut(null, { treatNullAsEmptyString: true }), ""); 18 | }); 19 | 20 | it("should return `\"true\"` for `true`", () => { 21 | assert.strictEqual(sut(true), "true"); 22 | }); 23 | 24 | it("should return `\"false\"` for `false`", () => { 25 | assert.strictEqual(sut(false), "false"); 26 | }); 27 | 28 | it("should return the correct number formatting for numbers", () => { 29 | assert.strictEqual(sut(NaN), "NaN"); 30 | assert.strictEqual(sut(+0), "0"); 31 | assert.strictEqual(sut(-0), "0"); 32 | assert.strictEqual(sut(Infinity), "Infinity"); 33 | assert.strictEqual(sut(-Infinity), "-Infinity"); 34 | assert.strictEqual(sut(10), "10"); 35 | assert.strictEqual(sut(-10), "-10"); 36 | }); 37 | 38 | it("should return the input for a string", () => { 39 | assert.strictEqual(sut(""), ""); 40 | assert.strictEqual(sut("whee"), "whee"); 41 | }); 42 | 43 | it("should throw a TypeError for a symbol", () => { 44 | assertThrows(sut, [Symbol("dummy description")], TypeError); 45 | }); 46 | 47 | it("should prefer toString to valueOf on objects", () => { 48 | const o = { 49 | valueOf() { 50 | return 5; 51 | }, 52 | toString() { 53 | return "foo"; 54 | } 55 | }; 56 | assert.strictEqual(sut(o), "foo"); 57 | }); 58 | } 59 | 60 | describe("WebIDL DOMString type", () => { 61 | const sut = conversions.DOMString; 62 | 63 | commonTest(sut); 64 | 65 | it("should return the input for two-byte characters", () => { 66 | assert.strictEqual(sut("中文"), "中文"); 67 | }); 68 | 69 | it("should return the input for valid Unicode surrogates", () => { 70 | assert.strictEqual(sut("\uD83D\uDE00"), "\uD83D\uDE00"); 71 | }); 72 | 73 | it("should return the input for invalid Unicode surrogates", () => { 74 | assert.strictEqual(sut("\uD83D"), "\uD83D"); 75 | assert.strictEqual(sut("\uD83Da"), "\uD83Da"); 76 | assert.strictEqual(sut("a\uD83D"), "a\uD83D"); 77 | assert.strictEqual(sut("a\uD83Da"), "a\uD83Da"); 78 | assert.strictEqual(sut("\uDE00"), "\uDE00"); 79 | assert.strictEqual(sut("\uDE00a"), "\uDE00a"); 80 | assert.strictEqual(sut("a\uDE00"), "a\uDE00"); 81 | assert.strictEqual(sut("a\uDE00a"), "a\uDE00a"); 82 | assert.strictEqual(sut("\uDE00\uD830"), "\uDE00\uD830"); 83 | }); 84 | }); 85 | 86 | describe("WebIDL ByteString type", () => { 87 | const sut = conversions.ByteString; 88 | 89 | commonTest(sut); 90 | 91 | it("should throw a TypeError for two-byte characters", () => { 92 | assertThrows(sut, ["中文"], TypeError); 93 | }); 94 | 95 | it("should throw a TypeError for valid Unicode surrogates", () => { 96 | assertThrows(sut, ["\uD83D\uDE00"], TypeError); 97 | }); 98 | 99 | it("should throw a TypeError for invalid Unicode surrogates", () => { 100 | assertThrows(sut, ["\uD83D"], TypeError); 101 | assertThrows(sut, ["\uD83Da"], TypeError); 102 | assertThrows(sut, ["a\uD83D"], TypeError); 103 | assertThrows(sut, ["a\uD83Da"], TypeError); 104 | assertThrows(sut, ["\uDE00"], TypeError); 105 | assertThrows(sut, ["\uDE00a"], TypeError); 106 | assertThrows(sut, ["a\uDE00"], TypeError); 107 | assertThrows(sut, ["a\uDE00a"], TypeError); 108 | assertThrows(sut, ["\uDE00\uD830"], TypeError); 109 | }); 110 | }); 111 | 112 | describe("WebIDL USVString type", () => { 113 | const sut = conversions.USVString; 114 | 115 | commonTest(sut); 116 | 117 | it("should return the input for two-byte characters", () => { 118 | assert.strictEqual(sut("中文"), "中文"); 119 | }); 120 | 121 | it("should return the input for valid Unicode surrogates", () => { 122 | assert.strictEqual(sut("\uD83D\uDE00"), "\uD83D\uDE00"); 123 | }); 124 | 125 | it("should replace invalid Unicode surrogates with U+FFFD REPLACEMENT CHARACTER", () => { 126 | assert.strictEqual(sut("\uD83D"), "\uFFFD"); 127 | assert.strictEqual(sut("\uD83Da"), "\uFFFDa"); 128 | assert.strictEqual(sut("a\uD83D"), "a\uFFFD"); 129 | assert.strictEqual(sut("a\uD83Da"), "a\uFFFDa"); 130 | assert.strictEqual(sut("\uDE00"), "\uFFFD"); 131 | assert.strictEqual(sut("\uDE00a"), "\uFFFDa"); 132 | assert.strictEqual(sut("a\uDE00"), "a\uFFFD"); 133 | assert.strictEqual(sut("a\uDE00a"), "a\uFFFDa"); 134 | assert.strictEqual(sut("\uDE00\uD830"), "\uFFFD\uFFFD"); 135 | }); 136 | }); 137 | -------------------------------------------------------------------------------- /test/undefined.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | const assert = require("assert"); 3 | 4 | const conversions = require(".."); 5 | 6 | describe("WebIDL undefined type", () => { 7 | const sut = conversions.undefined; 8 | 9 | it("should return `undefined` for everything", () => { 10 | assert.strictEqual(sut(undefined), undefined); 11 | assert.strictEqual(sut(null), undefined); 12 | assert.strictEqual(sut(""), undefined); 13 | assert.strictEqual(sut(123), undefined); 14 | assert.strictEqual(sut("123"), undefined); 15 | assert.strictEqual(sut({}), undefined); 16 | assert.strictEqual(sut(Object.create(null)), undefined); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@7.12.11": 6 | version "7.12.11" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" 8 | integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== 9 | dependencies: 10 | "@babel/highlight" "^7.10.4" 11 | 12 | "@babel/code-frame@^7.14.5": 13 | version "7.14.5" 14 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" 15 | integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== 16 | dependencies: 17 | "@babel/highlight" "^7.14.5" 18 | 19 | "@babel/compat-data@^7.15.0": 20 | version "7.15.0" 21 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" 22 | integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== 23 | 24 | "@babel/core@^7.7.5": 25 | version "7.15.5" 26 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.5.tgz#f8ed9ace730722544609f90c9bb49162dc3bf5b9" 27 | integrity sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg== 28 | dependencies: 29 | "@babel/code-frame" "^7.14.5" 30 | "@babel/generator" "^7.15.4" 31 | "@babel/helper-compilation-targets" "^7.15.4" 32 | "@babel/helper-module-transforms" "^7.15.4" 33 | "@babel/helpers" "^7.15.4" 34 | "@babel/parser" "^7.15.5" 35 | "@babel/template" "^7.15.4" 36 | "@babel/traverse" "^7.15.4" 37 | "@babel/types" "^7.15.4" 38 | convert-source-map "^1.7.0" 39 | debug "^4.1.0" 40 | gensync "^1.0.0-beta.2" 41 | json5 "^2.1.2" 42 | semver "^6.3.0" 43 | source-map "^0.5.0" 44 | 45 | "@babel/generator@^7.15.4": 46 | version "7.15.4" 47 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.4.tgz#85acb159a267ca6324f9793986991ee2022a05b0" 48 | integrity sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw== 49 | dependencies: 50 | "@babel/types" "^7.15.4" 51 | jsesc "^2.5.1" 52 | source-map "^0.5.0" 53 | 54 | "@babel/helper-compilation-targets@^7.15.4": 55 | version "7.15.4" 56 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz#cf6d94f30fbefc139123e27dd6b02f65aeedb7b9" 57 | integrity sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ== 58 | dependencies: 59 | "@babel/compat-data" "^7.15.0" 60 | "@babel/helper-validator-option" "^7.14.5" 61 | browserslist "^4.16.6" 62 | semver "^6.3.0" 63 | 64 | "@babel/helper-function-name@^7.15.4": 65 | version "7.15.4" 66 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz#845744dafc4381a4a5fb6afa6c3d36f98a787ebc" 67 | integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw== 68 | dependencies: 69 | "@babel/helper-get-function-arity" "^7.15.4" 70 | "@babel/template" "^7.15.4" 71 | "@babel/types" "^7.15.4" 72 | 73 | "@babel/helper-get-function-arity@^7.15.4": 74 | version "7.15.4" 75 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz#098818934a137fce78b536a3e015864be1e2879b" 76 | integrity sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA== 77 | dependencies: 78 | "@babel/types" "^7.15.4" 79 | 80 | "@babel/helper-hoist-variables@^7.15.4": 81 | version "7.15.4" 82 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df" 83 | integrity sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA== 84 | dependencies: 85 | "@babel/types" "^7.15.4" 86 | 87 | "@babel/helper-member-expression-to-functions@^7.15.4": 88 | version "7.15.4" 89 | resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz#bfd34dc9bba9824a4658b0317ec2fd571a51e6ef" 90 | integrity sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA== 91 | dependencies: 92 | "@babel/types" "^7.15.4" 93 | 94 | "@babel/helper-module-imports@^7.15.4": 95 | version "7.15.4" 96 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f" 97 | integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA== 98 | dependencies: 99 | "@babel/types" "^7.15.4" 100 | 101 | "@babel/helper-module-transforms@^7.15.4": 102 | version "7.15.4" 103 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz#962cc629a7f7f9a082dd62d0307fa75fe8788d7c" 104 | integrity sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw== 105 | dependencies: 106 | "@babel/helper-module-imports" "^7.15.4" 107 | "@babel/helper-replace-supers" "^7.15.4" 108 | "@babel/helper-simple-access" "^7.15.4" 109 | "@babel/helper-split-export-declaration" "^7.15.4" 110 | "@babel/helper-validator-identifier" "^7.14.9" 111 | "@babel/template" "^7.15.4" 112 | "@babel/traverse" "^7.15.4" 113 | "@babel/types" "^7.15.4" 114 | 115 | "@babel/helper-optimise-call-expression@^7.15.4": 116 | version "7.15.4" 117 | resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz#f310a5121a3b9cc52d9ab19122bd729822dee171" 118 | integrity sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw== 119 | dependencies: 120 | "@babel/types" "^7.15.4" 121 | 122 | "@babel/helper-replace-supers@^7.15.4": 123 | version "7.15.4" 124 | resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz#52a8ab26ba918c7f6dee28628b07071ac7b7347a" 125 | integrity sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw== 126 | dependencies: 127 | "@babel/helper-member-expression-to-functions" "^7.15.4" 128 | "@babel/helper-optimise-call-expression" "^7.15.4" 129 | "@babel/traverse" "^7.15.4" 130 | "@babel/types" "^7.15.4" 131 | 132 | "@babel/helper-simple-access@^7.15.4": 133 | version "7.15.4" 134 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz#ac368905abf1de8e9781434b635d8f8674bcc13b" 135 | integrity sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg== 136 | dependencies: 137 | "@babel/types" "^7.15.4" 138 | 139 | "@babel/helper-split-export-declaration@^7.15.4": 140 | version "7.15.4" 141 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257" 142 | integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw== 143 | dependencies: 144 | "@babel/types" "^7.15.4" 145 | 146 | "@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9": 147 | version "7.14.9" 148 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" 149 | integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== 150 | 151 | "@babel/helper-validator-option@^7.14.5": 152 | version "7.14.5" 153 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" 154 | integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== 155 | 156 | "@babel/helpers@^7.15.4": 157 | version "7.15.4" 158 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz#5f40f02050a3027121a3cf48d497c05c555eaf43" 159 | integrity sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ== 160 | dependencies: 161 | "@babel/template" "^7.15.4" 162 | "@babel/traverse" "^7.15.4" 163 | "@babel/types" "^7.15.4" 164 | 165 | "@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5": 166 | version "7.14.5" 167 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" 168 | integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== 169 | dependencies: 170 | "@babel/helper-validator-identifier" "^7.14.5" 171 | chalk "^2.0.0" 172 | js-tokens "^4.0.0" 173 | 174 | "@babel/parser@^7.15.4", "@babel/parser@^7.15.5": 175 | version "7.15.6" 176 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.6.tgz#043b9aa3c303c0722e5377fef9197f4cf1796549" 177 | integrity sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q== 178 | 179 | "@babel/template@^7.15.4": 180 | version "7.15.4" 181 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194" 182 | integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg== 183 | dependencies: 184 | "@babel/code-frame" "^7.14.5" 185 | "@babel/parser" "^7.15.4" 186 | "@babel/types" "^7.15.4" 187 | 188 | "@babel/traverse@^7.15.4": 189 | version "7.15.4" 190 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d" 191 | integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA== 192 | dependencies: 193 | "@babel/code-frame" "^7.14.5" 194 | "@babel/generator" "^7.15.4" 195 | "@babel/helper-function-name" "^7.15.4" 196 | "@babel/helper-hoist-variables" "^7.15.4" 197 | "@babel/helper-split-export-declaration" "^7.15.4" 198 | "@babel/parser" "^7.15.4" 199 | "@babel/types" "^7.15.4" 200 | debug "^4.1.0" 201 | globals "^11.1.0" 202 | 203 | "@babel/types@^7.15.4": 204 | version "7.15.6" 205 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f" 206 | integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig== 207 | dependencies: 208 | "@babel/helper-validator-identifier" "^7.14.9" 209 | to-fast-properties "^2.0.0" 210 | 211 | "@domenic/eslint-config@^1.3.0": 212 | version "1.3.0" 213 | resolved "https://registry.yarnpkg.com/@domenic/eslint-config/-/eslint-config-1.3.0.tgz#32f8766417303369d543d7e7efb78c5dbd7a3bd3" 214 | integrity sha512-7xok6dsq+GzYjlM7gXcXpnzi/ty/iHE0MksT0PSbySYMeRjVqwWdUcB8zvFIRE6DnKDCmsvHVwOzGiqwcgrelA== 215 | 216 | "@eslint/eslintrc@^0.4.3": 217 | version "0.4.3" 218 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" 219 | integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== 220 | dependencies: 221 | ajv "^6.12.4" 222 | debug "^4.1.1" 223 | espree "^7.3.0" 224 | globals "^13.9.0" 225 | ignore "^4.0.6" 226 | import-fresh "^3.2.1" 227 | js-yaml "^3.13.1" 228 | minimatch "^3.0.4" 229 | strip-json-comments "^3.1.1" 230 | 231 | "@humanwhocodes/config-array@^0.5.0": 232 | version "0.5.0" 233 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" 234 | integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== 235 | dependencies: 236 | "@humanwhocodes/object-schema" "^1.2.0" 237 | debug "^4.1.1" 238 | minimatch "^3.0.4" 239 | 240 | "@humanwhocodes/object-schema@^1.2.0": 241 | version "1.2.0" 242 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" 243 | integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== 244 | 245 | "@istanbuljs/load-nyc-config@^1.0.0": 246 | version "1.1.0" 247 | resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" 248 | integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== 249 | dependencies: 250 | camelcase "^5.3.1" 251 | find-up "^4.1.0" 252 | get-package-type "^0.1.0" 253 | js-yaml "^3.13.1" 254 | resolve-from "^5.0.0" 255 | 256 | "@istanbuljs/schema@^0.1.2": 257 | version "0.1.3" 258 | resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" 259 | integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== 260 | 261 | "@ungap/promise-all-settled@1.1.2": 262 | version "1.1.2" 263 | resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" 264 | integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== 265 | 266 | acorn-jsx@^5.3.1: 267 | version "5.3.2" 268 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 269 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 270 | 271 | acorn@^7.4.0: 272 | version "7.4.1" 273 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" 274 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 275 | 276 | aggregate-error@^3.0.0: 277 | version "3.1.0" 278 | resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" 279 | integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== 280 | dependencies: 281 | clean-stack "^2.0.0" 282 | indent-string "^4.0.0" 283 | 284 | ajv@^6.10.0, ajv@^6.12.4: 285 | version "6.12.6" 286 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 287 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 288 | dependencies: 289 | fast-deep-equal "^3.1.1" 290 | fast-json-stable-stringify "^2.0.0" 291 | json-schema-traverse "^0.4.1" 292 | uri-js "^4.2.2" 293 | 294 | ajv@^8.0.1: 295 | version "8.6.2" 296 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.2.tgz#2fb45e0e5fcbc0813326c1c3da535d1881bb0571" 297 | integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== 298 | dependencies: 299 | fast-deep-equal "^3.1.1" 300 | json-schema-traverse "^1.0.0" 301 | require-from-string "^2.0.2" 302 | uri-js "^4.2.2" 303 | 304 | ansi-colors@4.1.1, ansi-colors@^4.1.1: 305 | version "4.1.1" 306 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 307 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 308 | 309 | ansi-regex@^3.0.0: 310 | version "3.0.0" 311 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 312 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 313 | 314 | ansi-regex@^5.0.0: 315 | version "5.0.0" 316 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 317 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 318 | 319 | ansi-styles@^3.2.1: 320 | version "3.2.1" 321 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 322 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 323 | dependencies: 324 | color-convert "^1.9.0" 325 | 326 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 327 | version "4.3.0" 328 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 329 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 330 | dependencies: 331 | color-convert "^2.0.1" 332 | 333 | anymatch@~3.1.2: 334 | version "3.1.2" 335 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 336 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 337 | dependencies: 338 | normalize-path "^3.0.0" 339 | picomatch "^2.0.4" 340 | 341 | append-transform@^2.0.0: 342 | version "2.0.0" 343 | resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" 344 | integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== 345 | dependencies: 346 | default-require-extensions "^3.0.0" 347 | 348 | archy@^1.0.0: 349 | version "1.0.0" 350 | resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" 351 | integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= 352 | 353 | argparse@^1.0.7: 354 | version "1.0.10" 355 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 356 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 357 | dependencies: 358 | sprintf-js "~1.0.2" 359 | 360 | argparse@^2.0.1: 361 | version "2.0.1" 362 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 363 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 364 | 365 | astral-regex@^2.0.0: 366 | version "2.0.0" 367 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" 368 | integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== 369 | 370 | balanced-match@^1.0.0: 371 | version "1.0.2" 372 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 373 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 374 | 375 | binary-extensions@^2.0.0: 376 | version "2.2.0" 377 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 378 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 379 | 380 | brace-expansion@^1.1.7: 381 | version "1.1.11" 382 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 383 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 384 | dependencies: 385 | balanced-match "^1.0.0" 386 | concat-map "0.0.1" 387 | 388 | braces@~3.0.2: 389 | version "3.0.2" 390 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 391 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 392 | dependencies: 393 | fill-range "^7.0.1" 394 | 395 | browser-stdout@1.3.1: 396 | version "1.3.1" 397 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 398 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 399 | 400 | browserslist@^4.16.6: 401 | version "4.17.0" 402 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.0.tgz#1fcd81ec75b41d6d4994fb0831b92ac18c01649c" 403 | integrity sha512-g2BJ2a0nEYvEFQC208q8mVAhfNwpZ5Mu8BwgtCdZKO3qx98HChmeg448fPdUzld8aFmfLgVh7yymqV+q1lJZ5g== 404 | dependencies: 405 | caniuse-lite "^1.0.30001254" 406 | colorette "^1.3.0" 407 | electron-to-chromium "^1.3.830" 408 | escalade "^3.1.1" 409 | node-releases "^1.1.75" 410 | 411 | caching-transform@^4.0.0: 412 | version "4.0.0" 413 | resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-4.0.0.tgz#00d297a4206d71e2163c39eaffa8157ac0651f0f" 414 | integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== 415 | dependencies: 416 | hasha "^5.0.0" 417 | make-dir "^3.0.0" 418 | package-hash "^4.0.0" 419 | write-file-atomic "^3.0.0" 420 | 421 | callsites@^3.0.0: 422 | version "3.1.0" 423 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 424 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 425 | 426 | camelcase@^5.0.0, camelcase@^5.3.1: 427 | version "5.3.1" 428 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 429 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 430 | 431 | camelcase@^6.0.0: 432 | version "6.2.0" 433 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" 434 | integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== 435 | 436 | caniuse-lite@^1.0.30001254: 437 | version "1.0.30001256" 438 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001256.tgz#182410b5f024e0ab99c72ec648f234a9986bd548" 439 | integrity sha512-QirrvMLmB4txNnxiaG/xbm6FSzv9LqOZ3Jp9VtCYb3oPIfCHpr/oGn38pFq0udwlkctvXQgPthaXqJ76DaYGnA== 440 | 441 | chalk@^2.0.0: 442 | version "2.4.2" 443 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 444 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 445 | dependencies: 446 | ansi-styles "^3.2.1" 447 | escape-string-regexp "^1.0.5" 448 | supports-color "^5.3.0" 449 | 450 | chalk@^4.0.0, chalk@^4.1.0: 451 | version "4.1.2" 452 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 453 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 454 | dependencies: 455 | ansi-styles "^4.1.0" 456 | supports-color "^7.1.0" 457 | 458 | chokidar@3.5.2: 459 | version "3.5.2" 460 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" 461 | integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== 462 | dependencies: 463 | anymatch "~3.1.2" 464 | braces "~3.0.2" 465 | glob-parent "~5.1.2" 466 | is-binary-path "~2.1.0" 467 | is-glob "~4.0.1" 468 | normalize-path "~3.0.0" 469 | readdirp "~3.6.0" 470 | optionalDependencies: 471 | fsevents "~2.3.2" 472 | 473 | clean-stack@^2.0.0: 474 | version "2.2.0" 475 | resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" 476 | integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== 477 | 478 | cliui@^6.0.0: 479 | version "6.0.0" 480 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" 481 | integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== 482 | dependencies: 483 | string-width "^4.2.0" 484 | strip-ansi "^6.0.0" 485 | wrap-ansi "^6.2.0" 486 | 487 | cliui@^7.0.2: 488 | version "7.0.4" 489 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 490 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 491 | dependencies: 492 | string-width "^4.2.0" 493 | strip-ansi "^6.0.0" 494 | wrap-ansi "^7.0.0" 495 | 496 | color-convert@^1.9.0: 497 | version "1.9.3" 498 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 499 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 500 | dependencies: 501 | color-name "1.1.3" 502 | 503 | color-convert@^2.0.1: 504 | version "2.0.1" 505 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 506 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 507 | dependencies: 508 | color-name "~1.1.4" 509 | 510 | color-name@1.1.3: 511 | version "1.1.3" 512 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 513 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 514 | 515 | color-name@~1.1.4: 516 | version "1.1.4" 517 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 518 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 519 | 520 | colorette@^1.3.0: 521 | version "1.4.0" 522 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" 523 | integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== 524 | 525 | commondir@^1.0.1: 526 | version "1.0.1" 527 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 528 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= 529 | 530 | concat-map@0.0.1: 531 | version "0.0.1" 532 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 533 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 534 | 535 | convert-source-map@^1.7.0: 536 | version "1.8.0" 537 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" 538 | integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== 539 | dependencies: 540 | safe-buffer "~5.1.1" 541 | 542 | cross-spawn@^7.0.0, cross-spawn@^7.0.2: 543 | version "7.0.3" 544 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 545 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 546 | dependencies: 547 | path-key "^3.1.0" 548 | shebang-command "^2.0.0" 549 | which "^2.0.1" 550 | 551 | debug@4.3.1: 552 | version "4.3.1" 553 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 554 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 555 | dependencies: 556 | ms "2.1.2" 557 | 558 | debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: 559 | version "4.3.2" 560 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" 561 | integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== 562 | dependencies: 563 | ms "2.1.2" 564 | 565 | decamelize@^1.2.0: 566 | version "1.2.0" 567 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 568 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 569 | 570 | decamelize@^4.0.0: 571 | version "4.0.0" 572 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" 573 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 574 | 575 | deep-is@^0.1.3: 576 | version "0.1.4" 577 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 578 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 579 | 580 | default-require-extensions@^3.0.0: 581 | version "3.0.0" 582 | resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.0.tgz#e03f93aac9b2b6443fc52e5e4a37b3ad9ad8df96" 583 | integrity sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg== 584 | dependencies: 585 | strip-bom "^4.0.0" 586 | 587 | diff@5.0.0: 588 | version "5.0.0" 589 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" 590 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== 591 | 592 | doctrine@^3.0.0: 593 | version "3.0.0" 594 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 595 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 596 | dependencies: 597 | esutils "^2.0.2" 598 | 599 | electron-to-chromium@^1.3.830: 600 | version "1.3.836" 601 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.836.tgz#823cb9c98f28c64c673920f1c90ea3826596eaf9" 602 | integrity sha512-Ney3pHOJBWkG/AqYjrW0hr2AUCsao+2uvq9HUlRP8OlpSdk/zOHOUJP7eu0icDvePC9DlgffuelP4TnOJmMRUg== 603 | 604 | emoji-regex@^8.0.0: 605 | version "8.0.0" 606 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 607 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 608 | 609 | enquirer@^2.3.5: 610 | version "2.3.6" 611 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" 612 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 613 | dependencies: 614 | ansi-colors "^4.1.1" 615 | 616 | es6-error@^4.0.1: 617 | version "4.1.1" 618 | resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" 619 | integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== 620 | 621 | escalade@^3.1.1: 622 | version "3.1.1" 623 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 624 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 625 | 626 | escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: 627 | version "4.0.0" 628 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 629 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 630 | 631 | escape-string-regexp@^1.0.5: 632 | version "1.0.5" 633 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 634 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 635 | 636 | eslint-scope@^5.1.1: 637 | version "5.1.1" 638 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 639 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 640 | dependencies: 641 | esrecurse "^4.3.0" 642 | estraverse "^4.1.1" 643 | 644 | eslint-utils@^2.1.0: 645 | version "2.1.0" 646 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" 647 | integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== 648 | dependencies: 649 | eslint-visitor-keys "^1.1.0" 650 | 651 | eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: 652 | version "1.3.0" 653 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" 654 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 655 | 656 | eslint-visitor-keys@^2.0.0: 657 | version "2.1.0" 658 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 659 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 660 | 661 | eslint@^7.32.0: 662 | version "7.32.0" 663 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" 664 | integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== 665 | dependencies: 666 | "@babel/code-frame" "7.12.11" 667 | "@eslint/eslintrc" "^0.4.3" 668 | "@humanwhocodes/config-array" "^0.5.0" 669 | ajv "^6.10.0" 670 | chalk "^4.0.0" 671 | cross-spawn "^7.0.2" 672 | debug "^4.0.1" 673 | doctrine "^3.0.0" 674 | enquirer "^2.3.5" 675 | escape-string-regexp "^4.0.0" 676 | eslint-scope "^5.1.1" 677 | eslint-utils "^2.1.0" 678 | eslint-visitor-keys "^2.0.0" 679 | espree "^7.3.1" 680 | esquery "^1.4.0" 681 | esutils "^2.0.2" 682 | fast-deep-equal "^3.1.3" 683 | file-entry-cache "^6.0.1" 684 | functional-red-black-tree "^1.0.1" 685 | glob-parent "^5.1.2" 686 | globals "^13.6.0" 687 | ignore "^4.0.6" 688 | import-fresh "^3.0.0" 689 | imurmurhash "^0.1.4" 690 | is-glob "^4.0.0" 691 | js-yaml "^3.13.1" 692 | json-stable-stringify-without-jsonify "^1.0.1" 693 | levn "^0.4.1" 694 | lodash.merge "^4.6.2" 695 | minimatch "^3.0.4" 696 | natural-compare "^1.4.0" 697 | optionator "^0.9.1" 698 | progress "^2.0.0" 699 | regexpp "^3.1.0" 700 | semver "^7.2.1" 701 | strip-ansi "^6.0.0" 702 | strip-json-comments "^3.1.0" 703 | table "^6.0.9" 704 | text-table "^0.2.0" 705 | v8-compile-cache "^2.0.3" 706 | 707 | espree@^7.3.0, espree@^7.3.1: 708 | version "7.3.1" 709 | resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" 710 | integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== 711 | dependencies: 712 | acorn "^7.4.0" 713 | acorn-jsx "^5.3.1" 714 | eslint-visitor-keys "^1.3.0" 715 | 716 | esprima@^4.0.0: 717 | version "4.0.1" 718 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 719 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 720 | 721 | esquery@^1.4.0: 722 | version "1.4.0" 723 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 724 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 725 | dependencies: 726 | estraverse "^5.1.0" 727 | 728 | esrecurse@^4.3.0: 729 | version "4.3.0" 730 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 731 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 732 | dependencies: 733 | estraverse "^5.2.0" 734 | 735 | estraverse@^4.1.1: 736 | version "4.3.0" 737 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 738 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 739 | 740 | estraverse@^5.1.0, estraverse@^5.2.0: 741 | version "5.2.0" 742 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" 743 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 744 | 745 | esutils@^2.0.2: 746 | version "2.0.3" 747 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 748 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 749 | 750 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 751 | version "3.1.3" 752 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 753 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 754 | 755 | fast-json-stable-stringify@^2.0.0: 756 | version "2.1.0" 757 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 758 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 759 | 760 | fast-levenshtein@^2.0.6: 761 | version "2.0.6" 762 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 763 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 764 | 765 | file-entry-cache@^6.0.1: 766 | version "6.0.1" 767 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 768 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 769 | dependencies: 770 | flat-cache "^3.0.4" 771 | 772 | fill-range@^7.0.1: 773 | version "7.0.1" 774 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 775 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 776 | dependencies: 777 | to-regex-range "^5.0.1" 778 | 779 | find-cache-dir@^3.2.0: 780 | version "3.3.2" 781 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" 782 | integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== 783 | dependencies: 784 | commondir "^1.0.1" 785 | make-dir "^3.0.2" 786 | pkg-dir "^4.1.0" 787 | 788 | find-up@5.0.0: 789 | version "5.0.0" 790 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 791 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 792 | dependencies: 793 | locate-path "^6.0.0" 794 | path-exists "^4.0.0" 795 | 796 | find-up@^4.0.0, find-up@^4.1.0: 797 | version "4.1.0" 798 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 799 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 800 | dependencies: 801 | locate-path "^5.0.0" 802 | path-exists "^4.0.0" 803 | 804 | flat-cache@^3.0.4: 805 | version "3.0.4" 806 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 807 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 808 | dependencies: 809 | flatted "^3.1.0" 810 | rimraf "^3.0.2" 811 | 812 | flat@^5.0.2: 813 | version "5.0.2" 814 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 815 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 816 | 817 | flatted@^3.1.0: 818 | version "3.2.2" 819 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561" 820 | integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== 821 | 822 | foreground-child@^2.0.0: 823 | version "2.0.0" 824 | resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" 825 | integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== 826 | dependencies: 827 | cross-spawn "^7.0.0" 828 | signal-exit "^3.0.2" 829 | 830 | fromentries@^1.2.0: 831 | version "1.3.2" 832 | resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" 833 | integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== 834 | 835 | fs.realpath@^1.0.0: 836 | version "1.0.0" 837 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 838 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 839 | 840 | fsevents@~2.3.2: 841 | version "2.3.2" 842 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 843 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 844 | 845 | functional-red-black-tree@^1.0.1: 846 | version "1.0.1" 847 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 848 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 849 | 850 | gensync@^1.0.0-beta.2: 851 | version "1.0.0-beta.2" 852 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 853 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 854 | 855 | get-caller-file@^2.0.1, get-caller-file@^2.0.5: 856 | version "2.0.5" 857 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 858 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 859 | 860 | get-package-type@^0.1.0: 861 | version "0.1.0" 862 | resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" 863 | integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== 864 | 865 | glob-parent@^5.1.2, glob-parent@~5.1.2: 866 | version "5.1.2" 867 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 868 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 869 | dependencies: 870 | is-glob "^4.0.1" 871 | 872 | glob@7.1.7, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: 873 | version "7.1.7" 874 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" 875 | integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== 876 | dependencies: 877 | fs.realpath "^1.0.0" 878 | inflight "^1.0.4" 879 | inherits "2" 880 | minimatch "^3.0.4" 881 | once "^1.3.0" 882 | path-is-absolute "^1.0.0" 883 | 884 | globals@^11.1.0: 885 | version "11.12.0" 886 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 887 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 888 | 889 | globals@^13.6.0, globals@^13.9.0: 890 | version "13.11.0" 891 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.11.0.tgz#40ef678da117fe7bd2e28f1fab24951bd0255be7" 892 | integrity sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g== 893 | dependencies: 894 | type-fest "^0.20.2" 895 | 896 | graceful-fs@^4.1.15: 897 | version "4.2.8" 898 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" 899 | integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== 900 | 901 | growl@1.10.5: 902 | version "1.10.5" 903 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 904 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 905 | 906 | has-flag@^3.0.0: 907 | version "3.0.0" 908 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 909 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 910 | 911 | has-flag@^4.0.0: 912 | version "4.0.0" 913 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 914 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 915 | 916 | hasha@^5.0.0: 917 | version "5.2.2" 918 | resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1" 919 | integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== 920 | dependencies: 921 | is-stream "^2.0.0" 922 | type-fest "^0.8.0" 923 | 924 | he@1.2.0: 925 | version "1.2.0" 926 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 927 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 928 | 929 | html-escaper@^2.0.0: 930 | version "2.0.2" 931 | resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" 932 | integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== 933 | 934 | ignore@^4.0.6: 935 | version "4.0.6" 936 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 937 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 938 | 939 | import-fresh@^3.0.0, import-fresh@^3.2.1: 940 | version "3.3.0" 941 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 942 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 943 | dependencies: 944 | parent-module "^1.0.0" 945 | resolve-from "^4.0.0" 946 | 947 | imurmurhash@^0.1.4: 948 | version "0.1.4" 949 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 950 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 951 | 952 | indent-string@^4.0.0: 953 | version "4.0.0" 954 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" 955 | integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== 956 | 957 | inflight@^1.0.4: 958 | version "1.0.6" 959 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 960 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 961 | dependencies: 962 | once "^1.3.0" 963 | wrappy "1" 964 | 965 | inherits@2: 966 | version "2.0.4" 967 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 968 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 969 | 970 | is-binary-path@~2.1.0: 971 | version "2.1.0" 972 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 973 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 974 | dependencies: 975 | binary-extensions "^2.0.0" 976 | 977 | is-extglob@^2.1.1: 978 | version "2.1.1" 979 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 980 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 981 | 982 | is-fullwidth-code-point@^2.0.0: 983 | version "2.0.0" 984 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 985 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 986 | 987 | is-fullwidth-code-point@^3.0.0: 988 | version "3.0.0" 989 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 990 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 991 | 992 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: 993 | version "4.0.1" 994 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 995 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 996 | dependencies: 997 | is-extglob "^2.1.1" 998 | 999 | is-number@^7.0.0: 1000 | version "7.0.0" 1001 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1002 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1003 | 1004 | is-plain-obj@^2.1.0: 1005 | version "2.1.0" 1006 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 1007 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 1008 | 1009 | is-stream@^2.0.0: 1010 | version "2.0.1" 1011 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" 1012 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== 1013 | 1014 | is-typedarray@^1.0.0: 1015 | version "1.0.0" 1016 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1017 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 1018 | 1019 | is-unicode-supported@^0.1.0: 1020 | version "0.1.0" 1021 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" 1022 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 1023 | 1024 | is-windows@^1.0.2: 1025 | version "1.0.2" 1026 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 1027 | integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== 1028 | 1029 | isexe@^2.0.0: 1030 | version "2.0.0" 1031 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1032 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1033 | 1034 | istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.0-alpha.1: 1035 | version "3.0.0" 1036 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" 1037 | integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== 1038 | 1039 | istanbul-lib-hook@^3.0.0: 1040 | version "3.0.0" 1041 | resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz#8f84c9434888cc6b1d0a9d7092a76d239ebf0cc6" 1042 | integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== 1043 | dependencies: 1044 | append-transform "^2.0.0" 1045 | 1046 | istanbul-lib-instrument@^4.0.0: 1047 | version "4.0.3" 1048 | resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" 1049 | integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== 1050 | dependencies: 1051 | "@babel/core" "^7.7.5" 1052 | "@istanbuljs/schema" "^0.1.2" 1053 | istanbul-lib-coverage "^3.0.0" 1054 | semver "^6.3.0" 1055 | 1056 | istanbul-lib-processinfo@^2.0.2: 1057 | version "2.0.2" 1058 | resolved "https://registry.yarnpkg.com/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz#e1426514662244b2f25df728e8fd1ba35fe53b9c" 1059 | integrity sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw== 1060 | dependencies: 1061 | archy "^1.0.0" 1062 | cross-spawn "^7.0.0" 1063 | istanbul-lib-coverage "^3.0.0-alpha.1" 1064 | make-dir "^3.0.0" 1065 | p-map "^3.0.0" 1066 | rimraf "^3.0.0" 1067 | uuid "^3.3.3" 1068 | 1069 | istanbul-lib-report@^3.0.0: 1070 | version "3.0.0" 1071 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" 1072 | integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== 1073 | dependencies: 1074 | istanbul-lib-coverage "^3.0.0" 1075 | make-dir "^3.0.0" 1076 | supports-color "^7.1.0" 1077 | 1078 | istanbul-lib-source-maps@^4.0.0: 1079 | version "4.0.0" 1080 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" 1081 | integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== 1082 | dependencies: 1083 | debug "^4.1.1" 1084 | istanbul-lib-coverage "^3.0.0" 1085 | source-map "^0.6.1" 1086 | 1087 | istanbul-reports@^3.0.2: 1088 | version "3.0.2" 1089 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" 1090 | integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== 1091 | dependencies: 1092 | html-escaper "^2.0.0" 1093 | istanbul-lib-report "^3.0.0" 1094 | 1095 | js-tokens@^4.0.0: 1096 | version "4.0.0" 1097 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1098 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1099 | 1100 | js-yaml@4.1.0: 1101 | version "4.1.0" 1102 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1103 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1104 | dependencies: 1105 | argparse "^2.0.1" 1106 | 1107 | js-yaml@^3.13.1: 1108 | version "3.14.1" 1109 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 1110 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 1111 | dependencies: 1112 | argparse "^1.0.7" 1113 | esprima "^4.0.0" 1114 | 1115 | jsesc@^2.5.1: 1116 | version "2.5.2" 1117 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 1118 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 1119 | 1120 | json-schema-traverse@^0.4.1: 1121 | version "0.4.1" 1122 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1123 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1124 | 1125 | json-schema-traverse@^1.0.0: 1126 | version "1.0.0" 1127 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" 1128 | integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== 1129 | 1130 | json-stable-stringify-without-jsonify@^1.0.1: 1131 | version "1.0.1" 1132 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1133 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 1134 | 1135 | json5@^2.1.2: 1136 | version "2.2.0" 1137 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" 1138 | integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== 1139 | dependencies: 1140 | minimist "^1.2.5" 1141 | 1142 | levn@^0.4.1: 1143 | version "0.4.1" 1144 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1145 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1146 | dependencies: 1147 | prelude-ls "^1.2.1" 1148 | type-check "~0.4.0" 1149 | 1150 | locate-path@^5.0.0: 1151 | version "5.0.0" 1152 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 1153 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 1154 | dependencies: 1155 | p-locate "^4.1.0" 1156 | 1157 | locate-path@^6.0.0: 1158 | version "6.0.0" 1159 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1160 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1161 | dependencies: 1162 | p-locate "^5.0.0" 1163 | 1164 | lodash.clonedeep@^4.5.0: 1165 | version "4.5.0" 1166 | resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" 1167 | integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= 1168 | 1169 | lodash.flattendeep@^4.4.0: 1170 | version "4.4.0" 1171 | resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" 1172 | integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= 1173 | 1174 | lodash.merge@^4.6.2: 1175 | version "4.6.2" 1176 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1177 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1178 | 1179 | lodash.truncate@^4.4.2: 1180 | version "4.4.2" 1181 | resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" 1182 | integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= 1183 | 1184 | log-symbols@4.1.0: 1185 | version "4.1.0" 1186 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" 1187 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 1188 | dependencies: 1189 | chalk "^4.1.0" 1190 | is-unicode-supported "^0.1.0" 1191 | 1192 | lru-cache@^6.0.0: 1193 | version "6.0.0" 1194 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1195 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1196 | dependencies: 1197 | yallist "^4.0.0" 1198 | 1199 | make-dir@^3.0.0, make-dir@^3.0.2: 1200 | version "3.1.0" 1201 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 1202 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 1203 | dependencies: 1204 | semver "^6.0.0" 1205 | 1206 | minimatch@3.0.4, minimatch@^3.0.4: 1207 | version "3.0.4" 1208 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1209 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1210 | dependencies: 1211 | brace-expansion "^1.1.7" 1212 | 1213 | minimist@^1.2.5: 1214 | version "1.2.5" 1215 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 1216 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 1217 | 1218 | mocha@^9.1.1: 1219 | version "9.1.1" 1220 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.1.1.tgz#33df2eb9c6262434630510c5f4283b36efda9b61" 1221 | integrity sha512-0wE74YMgOkCgBUj8VyIDwmLUjTsS13WV1Pg7l0SHea2qzZzlq7MDnfbPsHKcELBRk3+izEVkRofjmClpycudCA== 1222 | dependencies: 1223 | "@ungap/promise-all-settled" "1.1.2" 1224 | ansi-colors "4.1.1" 1225 | browser-stdout "1.3.1" 1226 | chokidar "3.5.2" 1227 | debug "4.3.1" 1228 | diff "5.0.0" 1229 | escape-string-regexp "4.0.0" 1230 | find-up "5.0.0" 1231 | glob "7.1.7" 1232 | growl "1.10.5" 1233 | he "1.2.0" 1234 | js-yaml "4.1.0" 1235 | log-symbols "4.1.0" 1236 | minimatch "3.0.4" 1237 | ms "2.1.3" 1238 | nanoid "3.1.23" 1239 | serialize-javascript "6.0.0" 1240 | strip-json-comments "3.1.1" 1241 | supports-color "8.1.1" 1242 | which "2.0.2" 1243 | wide-align "1.1.3" 1244 | workerpool "6.1.5" 1245 | yargs "16.2.0" 1246 | yargs-parser "20.2.4" 1247 | yargs-unparser "2.0.0" 1248 | 1249 | ms@2.1.2: 1250 | version "2.1.2" 1251 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1252 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1253 | 1254 | ms@2.1.3: 1255 | version "2.1.3" 1256 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1257 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1258 | 1259 | nanoid@3.1.23: 1260 | version "3.1.23" 1261 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" 1262 | integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== 1263 | 1264 | natural-compare@^1.4.0: 1265 | version "1.4.0" 1266 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1267 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1268 | 1269 | node-preload@^0.2.1: 1270 | version "0.2.1" 1271 | resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" 1272 | integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== 1273 | dependencies: 1274 | process-on-spawn "^1.0.0" 1275 | 1276 | node-releases@^1.1.75: 1277 | version "1.1.75" 1278 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.75.tgz#6dd8c876b9897a1b8e5a02de26afa79bb54ebbfe" 1279 | integrity sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw== 1280 | 1281 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1282 | version "3.0.0" 1283 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1284 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1285 | 1286 | nyc@^15.1.0: 1287 | version "15.1.0" 1288 | resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02" 1289 | integrity sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== 1290 | dependencies: 1291 | "@istanbuljs/load-nyc-config" "^1.0.0" 1292 | "@istanbuljs/schema" "^0.1.2" 1293 | caching-transform "^4.0.0" 1294 | convert-source-map "^1.7.0" 1295 | decamelize "^1.2.0" 1296 | find-cache-dir "^3.2.0" 1297 | find-up "^4.1.0" 1298 | foreground-child "^2.0.0" 1299 | get-package-type "^0.1.0" 1300 | glob "^7.1.6" 1301 | istanbul-lib-coverage "^3.0.0" 1302 | istanbul-lib-hook "^3.0.0" 1303 | istanbul-lib-instrument "^4.0.0" 1304 | istanbul-lib-processinfo "^2.0.2" 1305 | istanbul-lib-report "^3.0.0" 1306 | istanbul-lib-source-maps "^4.0.0" 1307 | istanbul-reports "^3.0.2" 1308 | make-dir "^3.0.0" 1309 | node-preload "^0.2.1" 1310 | p-map "^3.0.0" 1311 | process-on-spawn "^1.0.0" 1312 | resolve-from "^5.0.0" 1313 | rimraf "^3.0.0" 1314 | signal-exit "^3.0.2" 1315 | spawn-wrap "^2.0.0" 1316 | test-exclude "^6.0.0" 1317 | yargs "^15.0.2" 1318 | 1319 | once@^1.3.0: 1320 | version "1.4.0" 1321 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1322 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1323 | dependencies: 1324 | wrappy "1" 1325 | 1326 | optionator@^0.9.1: 1327 | version "0.9.1" 1328 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 1329 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 1330 | dependencies: 1331 | deep-is "^0.1.3" 1332 | fast-levenshtein "^2.0.6" 1333 | levn "^0.4.1" 1334 | prelude-ls "^1.2.1" 1335 | type-check "^0.4.0" 1336 | word-wrap "^1.2.3" 1337 | 1338 | p-limit@^2.2.0: 1339 | version "2.3.0" 1340 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1341 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1342 | dependencies: 1343 | p-try "^2.0.0" 1344 | 1345 | p-limit@^3.0.2: 1346 | version "3.1.0" 1347 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1348 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1349 | dependencies: 1350 | yocto-queue "^0.1.0" 1351 | 1352 | p-locate@^4.1.0: 1353 | version "4.1.0" 1354 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 1355 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 1356 | dependencies: 1357 | p-limit "^2.2.0" 1358 | 1359 | p-locate@^5.0.0: 1360 | version "5.0.0" 1361 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1362 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1363 | dependencies: 1364 | p-limit "^3.0.2" 1365 | 1366 | p-map@^3.0.0: 1367 | version "3.0.0" 1368 | resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" 1369 | integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== 1370 | dependencies: 1371 | aggregate-error "^3.0.0" 1372 | 1373 | p-try@^2.0.0: 1374 | version "2.2.0" 1375 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1376 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1377 | 1378 | package-hash@^4.0.0: 1379 | version "4.0.0" 1380 | resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-4.0.0.tgz#3537f654665ec3cc38827387fc904c163c54f506" 1381 | integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== 1382 | dependencies: 1383 | graceful-fs "^4.1.15" 1384 | hasha "^5.0.0" 1385 | lodash.flattendeep "^4.4.0" 1386 | release-zalgo "^1.0.0" 1387 | 1388 | parent-module@^1.0.0: 1389 | version "1.0.1" 1390 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1391 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1392 | dependencies: 1393 | callsites "^3.0.0" 1394 | 1395 | path-exists@^4.0.0: 1396 | version "4.0.0" 1397 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1398 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1399 | 1400 | path-is-absolute@^1.0.0: 1401 | version "1.0.1" 1402 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1403 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1404 | 1405 | path-key@^3.1.0: 1406 | version "3.1.1" 1407 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1408 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1409 | 1410 | picomatch@^2.0.4, picomatch@^2.2.1: 1411 | version "2.3.0" 1412 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" 1413 | integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== 1414 | 1415 | pkg-dir@^4.1.0: 1416 | version "4.2.0" 1417 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 1418 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 1419 | dependencies: 1420 | find-up "^4.0.0" 1421 | 1422 | prelude-ls@^1.2.1: 1423 | version "1.2.1" 1424 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1425 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1426 | 1427 | process-on-spawn@^1.0.0: 1428 | version "1.0.0" 1429 | resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.0.0.tgz#95b05a23073d30a17acfdc92a440efd2baefdc93" 1430 | integrity sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== 1431 | dependencies: 1432 | fromentries "^1.2.0" 1433 | 1434 | progress@^2.0.0: 1435 | version "2.0.3" 1436 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 1437 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 1438 | 1439 | punycode@^2.1.0: 1440 | version "2.1.1" 1441 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1442 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1443 | 1444 | randombytes@^2.1.0: 1445 | version "2.1.0" 1446 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 1447 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 1448 | dependencies: 1449 | safe-buffer "^5.1.0" 1450 | 1451 | readdirp@~3.6.0: 1452 | version "3.6.0" 1453 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 1454 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1455 | dependencies: 1456 | picomatch "^2.2.1" 1457 | 1458 | regexpp@^3.1.0: 1459 | version "3.2.0" 1460 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" 1461 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 1462 | 1463 | release-zalgo@^1.0.0: 1464 | version "1.0.0" 1465 | resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" 1466 | integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= 1467 | dependencies: 1468 | es6-error "^4.0.1" 1469 | 1470 | require-directory@^2.1.1: 1471 | version "2.1.1" 1472 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1473 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1474 | 1475 | require-from-string@^2.0.2: 1476 | version "2.0.2" 1477 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" 1478 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== 1479 | 1480 | require-main-filename@^2.0.0: 1481 | version "2.0.0" 1482 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 1483 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 1484 | 1485 | resolve-from@^4.0.0: 1486 | version "4.0.0" 1487 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1488 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1489 | 1490 | resolve-from@^5.0.0: 1491 | version "5.0.0" 1492 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" 1493 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== 1494 | 1495 | rimraf@^3.0.0, rimraf@^3.0.2: 1496 | version "3.0.2" 1497 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1498 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1499 | dependencies: 1500 | glob "^7.1.3" 1501 | 1502 | safe-buffer@^5.1.0: 1503 | version "5.2.1" 1504 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1505 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1506 | 1507 | safe-buffer@~5.1.1: 1508 | version "5.1.2" 1509 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1510 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1511 | 1512 | semver@^6.0.0, semver@^6.3.0: 1513 | version "6.3.0" 1514 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1515 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1516 | 1517 | semver@^7.2.1: 1518 | version "7.3.5" 1519 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" 1520 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== 1521 | dependencies: 1522 | lru-cache "^6.0.0" 1523 | 1524 | serialize-javascript@6.0.0: 1525 | version "6.0.0" 1526 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" 1527 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== 1528 | dependencies: 1529 | randombytes "^2.1.0" 1530 | 1531 | set-blocking@^2.0.0: 1532 | version "2.0.0" 1533 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1534 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 1535 | 1536 | shebang-command@^2.0.0: 1537 | version "2.0.0" 1538 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1539 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1540 | dependencies: 1541 | shebang-regex "^3.0.0" 1542 | 1543 | shebang-regex@^3.0.0: 1544 | version "3.0.0" 1545 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1546 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1547 | 1548 | signal-exit@^3.0.2: 1549 | version "3.0.3" 1550 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 1551 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 1552 | 1553 | slice-ansi@^4.0.0: 1554 | version "4.0.0" 1555 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" 1556 | integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== 1557 | dependencies: 1558 | ansi-styles "^4.0.0" 1559 | astral-regex "^2.0.0" 1560 | is-fullwidth-code-point "^3.0.0" 1561 | 1562 | source-map@^0.5.0: 1563 | version "0.5.7" 1564 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 1565 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 1566 | 1567 | source-map@^0.6.1: 1568 | version "0.6.1" 1569 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1570 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1571 | 1572 | spawn-wrap@^2.0.0: 1573 | version "2.0.0" 1574 | resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-2.0.0.tgz#103685b8b8f9b79771318827aa78650a610d457e" 1575 | integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== 1576 | dependencies: 1577 | foreground-child "^2.0.0" 1578 | is-windows "^1.0.2" 1579 | make-dir "^3.0.0" 1580 | rimraf "^3.0.0" 1581 | signal-exit "^3.0.2" 1582 | which "^2.0.1" 1583 | 1584 | sprintf-js@~1.0.2: 1585 | version "1.0.3" 1586 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1587 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1588 | 1589 | "string-width@^1.0.2 || 2": 1590 | version "2.1.1" 1591 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1592 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 1593 | dependencies: 1594 | is-fullwidth-code-point "^2.0.0" 1595 | strip-ansi "^4.0.0" 1596 | 1597 | string-width@^4.1.0, string-width@^4.2.0: 1598 | version "4.2.2" 1599 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" 1600 | integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== 1601 | dependencies: 1602 | emoji-regex "^8.0.0" 1603 | is-fullwidth-code-point "^3.0.0" 1604 | strip-ansi "^6.0.0" 1605 | 1606 | strip-ansi@^4.0.0: 1607 | version "4.0.0" 1608 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1609 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 1610 | dependencies: 1611 | ansi-regex "^3.0.0" 1612 | 1613 | strip-ansi@^6.0.0: 1614 | version "6.0.0" 1615 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 1616 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 1617 | dependencies: 1618 | ansi-regex "^5.0.0" 1619 | 1620 | strip-bom@^4.0.0: 1621 | version "4.0.0" 1622 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" 1623 | integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== 1624 | 1625 | strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1626 | version "3.1.1" 1627 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1628 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1629 | 1630 | supports-color@8.1.1: 1631 | version "8.1.1" 1632 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 1633 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 1634 | dependencies: 1635 | has-flag "^4.0.0" 1636 | 1637 | supports-color@^5.3.0: 1638 | version "5.5.0" 1639 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1640 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1641 | dependencies: 1642 | has-flag "^3.0.0" 1643 | 1644 | supports-color@^7.1.0: 1645 | version "7.2.0" 1646 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1647 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1648 | dependencies: 1649 | has-flag "^4.0.0" 1650 | 1651 | table@^6.0.9: 1652 | version "6.7.1" 1653 | resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" 1654 | integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== 1655 | dependencies: 1656 | ajv "^8.0.1" 1657 | lodash.clonedeep "^4.5.0" 1658 | lodash.truncate "^4.4.2" 1659 | slice-ansi "^4.0.0" 1660 | string-width "^4.2.0" 1661 | strip-ansi "^6.0.0" 1662 | 1663 | test-exclude@^6.0.0: 1664 | version "6.0.0" 1665 | resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" 1666 | integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== 1667 | dependencies: 1668 | "@istanbuljs/schema" "^0.1.2" 1669 | glob "^7.1.4" 1670 | minimatch "^3.0.4" 1671 | 1672 | text-table@^0.2.0: 1673 | version "0.2.0" 1674 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1675 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 1676 | 1677 | to-fast-properties@^2.0.0: 1678 | version "2.0.0" 1679 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 1680 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 1681 | 1682 | to-regex-range@^5.0.1: 1683 | version "5.0.1" 1684 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1685 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1686 | dependencies: 1687 | is-number "^7.0.0" 1688 | 1689 | type-check@^0.4.0, type-check@~0.4.0: 1690 | version "0.4.0" 1691 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1692 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1693 | dependencies: 1694 | prelude-ls "^1.2.1" 1695 | 1696 | type-fest@^0.20.2: 1697 | version "0.20.2" 1698 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 1699 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1700 | 1701 | type-fest@^0.8.0: 1702 | version "0.8.1" 1703 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" 1704 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== 1705 | 1706 | typedarray-to-buffer@^3.1.5: 1707 | version "3.1.5" 1708 | resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" 1709 | integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== 1710 | dependencies: 1711 | is-typedarray "^1.0.0" 1712 | 1713 | uri-js@^4.2.2: 1714 | version "4.4.1" 1715 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1716 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1717 | dependencies: 1718 | punycode "^2.1.0" 1719 | 1720 | uuid@^3.3.3: 1721 | version "3.4.0" 1722 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" 1723 | integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== 1724 | 1725 | v8-compile-cache@^2.0.3: 1726 | version "2.3.0" 1727 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" 1728 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== 1729 | 1730 | which-module@^2.0.0: 1731 | version "2.0.0" 1732 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 1733 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 1734 | 1735 | which@2.0.2, which@^2.0.1: 1736 | version "2.0.2" 1737 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1738 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1739 | dependencies: 1740 | isexe "^2.0.0" 1741 | 1742 | wide-align@1.1.3: 1743 | version "1.1.3" 1744 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 1745 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 1746 | dependencies: 1747 | string-width "^1.0.2 || 2" 1748 | 1749 | word-wrap@^1.2.3: 1750 | version "1.2.3" 1751 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 1752 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 1753 | 1754 | workerpool@6.1.5: 1755 | version "6.1.5" 1756 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.5.tgz#0f7cf076b6215fd7e1da903ff6f22ddd1886b581" 1757 | integrity sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw== 1758 | 1759 | wrap-ansi@^6.2.0: 1760 | version "6.2.0" 1761 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" 1762 | integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== 1763 | dependencies: 1764 | ansi-styles "^4.0.0" 1765 | string-width "^4.1.0" 1766 | strip-ansi "^6.0.0" 1767 | 1768 | wrap-ansi@^7.0.0: 1769 | version "7.0.0" 1770 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1771 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1772 | dependencies: 1773 | ansi-styles "^4.0.0" 1774 | string-width "^4.1.0" 1775 | strip-ansi "^6.0.0" 1776 | 1777 | wrappy@1: 1778 | version "1.0.2" 1779 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1780 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1781 | 1782 | write-file-atomic@^3.0.0: 1783 | version "3.0.3" 1784 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" 1785 | integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== 1786 | dependencies: 1787 | imurmurhash "^0.1.4" 1788 | is-typedarray "^1.0.0" 1789 | signal-exit "^3.0.2" 1790 | typedarray-to-buffer "^3.1.5" 1791 | 1792 | y18n@^4.0.0: 1793 | version "4.0.3" 1794 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" 1795 | integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== 1796 | 1797 | y18n@^5.0.5: 1798 | version "5.0.8" 1799 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 1800 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 1801 | 1802 | yallist@^4.0.0: 1803 | version "4.0.0" 1804 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1805 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1806 | 1807 | yargs-parser@20.2.4: 1808 | version "20.2.4" 1809 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" 1810 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== 1811 | 1812 | yargs-parser@^18.1.2: 1813 | version "18.1.3" 1814 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" 1815 | integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== 1816 | dependencies: 1817 | camelcase "^5.0.0" 1818 | decamelize "^1.2.0" 1819 | 1820 | yargs-parser@^20.2.2: 1821 | version "20.2.9" 1822 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 1823 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 1824 | 1825 | yargs-unparser@2.0.0: 1826 | version "2.0.0" 1827 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" 1828 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 1829 | dependencies: 1830 | camelcase "^6.0.0" 1831 | decamelize "^4.0.0" 1832 | flat "^5.0.2" 1833 | is-plain-obj "^2.1.0" 1834 | 1835 | yargs@16.2.0: 1836 | version "16.2.0" 1837 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 1838 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 1839 | dependencies: 1840 | cliui "^7.0.2" 1841 | escalade "^3.1.1" 1842 | get-caller-file "^2.0.5" 1843 | require-directory "^2.1.1" 1844 | string-width "^4.2.0" 1845 | y18n "^5.0.5" 1846 | yargs-parser "^20.2.2" 1847 | 1848 | yargs@^15.0.2: 1849 | version "15.4.1" 1850 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" 1851 | integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== 1852 | dependencies: 1853 | cliui "^6.0.0" 1854 | decamelize "^1.2.0" 1855 | find-up "^4.1.0" 1856 | get-caller-file "^2.0.1" 1857 | require-directory "^2.1.1" 1858 | require-main-filename "^2.0.0" 1859 | set-blocking "^2.0.0" 1860 | string-width "^4.2.0" 1861 | which-module "^2.0.0" 1862 | y18n "^4.0.0" 1863 | yargs-parser "^18.1.2" 1864 | 1865 | yocto-queue@^0.1.0: 1866 | version "0.1.0" 1867 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1868 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1869 | --------------------------------------------------------------------------------