├── .gitignore ├── .eslintignore ├── .prettierignore ├── dist ├── cli.d.ts ├── fetch-idl.d.ts ├── types.js ├── index.d.ts ├── fixes.d.ts ├── preprocess.d.ts ├── types.d.ts ├── parse-idl.d.ts ├── convert-idl.d.ts ├── print-ts.d.ts ├── index.js ├── fixes.js ├── preprocess.js ├── parse-idl.js ├── print-ts.js ├── fetch-idl.js ├── cli.js └── convert-idl.js ├── src ├── index.ts ├── types.ts ├── parse-idl.ts ├── fixes.ts ├── fetch-idl.ts ├── cli.ts ├── print-ts.ts └── convert-idl.ts ├── .prettierrc ├── .editorconfig ├── .eslintrc.json ├── tsconfig.json ├── LICENSE.md ├── package.json ├── Readme.md ├── input.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | tmp 3 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | tmp 4 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | tmp 4 | -------------------------------------------------------------------------------- /dist/cli.d.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | export {}; 3 | -------------------------------------------------------------------------------- /dist/fetch-idl.d.ts: -------------------------------------------------------------------------------- 1 | export declare function fetchIDL(uri: string): Promise; 2 | -------------------------------------------------------------------------------- /dist/types.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './convert-idl' 2 | export * from './print-ts' 3 | export * from './parse-idl' 4 | export * from './fetch-idl' 5 | -------------------------------------------------------------------------------- /dist/index.d.ts: -------------------------------------------------------------------------------- 1 | export * from './convert-idl'; 2 | export * from './print-ts'; 3 | export * from './parse-idl'; 4 | export * from './fetch-idl'; 5 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "all", 3 | "semi": false, 4 | "singleQuote": true, 5 | "arrowParens": "always", 6 | "printWidth": 140 7 | } 8 | -------------------------------------------------------------------------------- /dist/fixes.d.ts: -------------------------------------------------------------------------------- 1 | export declare const fixes: { 2 | inheritance: (idlString: string) => string; 3 | array: (idlString: string) => string; 4 | }; 5 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | export interface Options { 2 | emscripten: boolean 3 | defaultExport: boolean 4 | module: string 5 | output: string 6 | input: string 7 | } 8 | -------------------------------------------------------------------------------- /dist/preprocess.d.ts: -------------------------------------------------------------------------------- 1 | export declare const preprocess: { 2 | 'fix-inheritance': (idlString: string) => string; 3 | 'fix-array': (idlString: string) => string; 4 | }; 5 | -------------------------------------------------------------------------------- /dist/types.d.ts: -------------------------------------------------------------------------------- 1 | export interface Options { 2 | emscripten: boolean; 3 | defaultExport: boolean; 4 | module: string; 5 | output: string; 6 | input: string; 7 | } 8 | -------------------------------------------------------------------------------- /dist/parse-idl.d.ts: -------------------------------------------------------------------------------- 1 | import * as webidl2 from 'webidl2'; 2 | export declare function parseIDL(idlString: string, options?: { 3 | preprocess: (input: string) => string; 4 | }): Promise; 5 | -------------------------------------------------------------------------------- /dist/convert-idl.d.ts: -------------------------------------------------------------------------------- 1 | import * as webidl2 from 'webidl2'; 2 | import * as ts from 'typescript'; 3 | import { Options } from './types'; 4 | export declare function convertIDL(rootTypes: webidl2.IDLRootType[], options?: Options): ts.Statement[]; 5 | -------------------------------------------------------------------------------- /dist/print-ts.d.ts: -------------------------------------------------------------------------------- 1 | import * as ts from 'typescript'; 2 | export declare function printTs(nodes: ts.Statement[]): string; 3 | export declare function printEmscriptenModule(moduleName: string, nodes: ts.Statement[], defaultExport: boolean): string; 4 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: http://EditorConfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | end_of_line = lf 7 | insert_final_newline = true 8 | trim_trailing_whitespace = true 9 | charset = utf-8 10 | indent_style = space 11 | indent_size = 2 12 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "plugins": ["@typescript-eslint"], 5 | "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"], 6 | "rules": { 7 | "semi": ["error", "never"] 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/parse-idl.ts: -------------------------------------------------------------------------------- 1 | import * as webidl2 from 'webidl2' 2 | 3 | export async function parseIDL(idlString: string, options?: { preprocess: (input: string) => string }): Promise { 4 | if (options?.preprocess) { 5 | idlString = options.preprocess(idlString) 6 | } 7 | return webidl2.parse(idlString) 8 | } 9 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "outDir": "./dist", 4 | "moduleResolution": "node", 5 | "declaration": true, 6 | "target": "es5", 7 | "newLine": "LF", 8 | "baseUrl": ".", 9 | "typeRoots": ["node_modules/@types", "types"] 10 | }, 11 | "include": ["src/**/*.ts"], 12 | "exclude": ["dist", "node_modules", "snapshots"] 13 | } 14 | -------------------------------------------------------------------------------- /dist/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 3 | if (k2 === undefined) k2 = k; 4 | Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 5 | }) : (function(o, m, k, k2) { 6 | if (k2 === undefined) k2 = k; 7 | o[k2] = m[k]; 8 | })); 9 | var __exportStar = (this && this.__exportStar) || function(m, exports) { 10 | for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 11 | }; 12 | Object.defineProperty(exports, "__esModule", { value: true }); 13 | __exportStar(require("./convert-idl"), exports); 14 | __exportStar(require("./print-ts"), exports); 15 | __exportStar(require("./parse-idl"), exports); 16 | __exportStar(require("./fetch-idl"), exports); 17 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Alexander Gräfenstein 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "webidl2ts", 3 | "version": "1.0.4", 4 | "description": "Converts Web IDL to Typescript (.d.ts)", 5 | "main": "dist/index.js", 6 | "scripts": { 7 | "build": "tsc && chmod 755 dist/cli.js", 8 | "lint": "tsc --noEmit", 9 | "start": "yarn build && ./dist/cli.js", 10 | "format": "yarn prettier --write ." 11 | }, 12 | "repository": { 13 | "type": "git", 14 | "url": "https://github.com/giniedp/webidl2ts.git" 15 | }, 16 | "homepage": "https://github.com/giniedp/webidl2ts", 17 | "author": "Alexander Gräfenstein", 18 | "license": "MIT", 19 | "files": [ 20 | "dist", 21 | "Readme.md", 22 | "package.json", 23 | "LICENSE.md" 24 | ], 25 | "devDependencies": { 26 | "@types/node": "^14.14.6", 27 | "@types/webidl2": "^23.13.5", 28 | "@types/yargs": "^15.0.9", 29 | "@typescript-eslint/eslint-plugin": "^4.6.1", 30 | "@typescript-eslint/parser": "^4.6.1", 31 | "eslint": "^7.12.1", 32 | "prettier": "^2.1.2", 33 | "ts-node": "^9.0.0" 34 | }, 35 | "dependencies": { 36 | "jsdom": "^16.4.0", 37 | "typescript": "^4.0.5", 38 | "webidl2": "^23.13.0", 39 | "yargs": "^16.1.0" 40 | }, 41 | "bin": { 42 | "webidl2ts": "./dist/cli.js" 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/fixes.ts: -------------------------------------------------------------------------------- 1 | export const fixes = { 2 | inheritance: (idlString: string): string => { 3 | // need fix for error: 4 | // 5 | // WebIDLParseError: Syntax error at line 49, since `interface btVector4`: 6 | // btVector4 implements btVector3; 7 | // ^ Unrecognised tokens 8 | // 9 | // current solution: 10 | // find everything that match 11 | // 12 | // LEFT implements RIGHT; 13 | // 14 | // and comment them out 15 | // then replace all occurence 16 | // 17 | // interface LEFT { 18 | // 19 | // with 20 | // 21 | // interface LEFT: RIGHT { 22 | // 23 | const inheritance = [] 24 | idlString = idlString.replace(/([a-zA-Z0-9]+) implements ([a-zA-Z0-9]+);/gi, (line, left, right) => { 25 | inheritance.push({ left, right }) 26 | return `// ${line}` 27 | }) 28 | inheritance.forEach(({ left, right }) => { 29 | idlString = idlString.replace(new RegExp(`interface ${left} {`), `interface ${left}: ${right} {`) 30 | }) 31 | return idlString 32 | }, 33 | 34 | array: (idlString: string): string => { 35 | // need fix for error: 36 | // 37 | // WebIDLParseError: Syntax error at line 102, since `interface btTransform`: 38 | // void setFromOpenGLMatrix(float[] m) 39 | // ^ Unterminated operation 40 | // 41 | // current solution: use sequence type 42 | return idlString 43 | .replace(/attribute (\w+)\[\]/gi, (match, group) => { 44 | return `attribute FrozenArray<${group}>` 45 | }) 46 | .replace(/float\[\]/gi, 'FrozenArray') 47 | .replace(/long\[\]/gi, 'FrozenArray') 48 | }, 49 | } 50 | -------------------------------------------------------------------------------- /dist/fixes.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.fixes = void 0; 4 | exports.fixes = { 5 | inheritance: function (idlString) { 6 | // need fix for error: 7 | // 8 | // WebIDLParseError: Syntax error at line 49, since `interface btVector4`: 9 | // btVector4 implements btVector3; 10 | // ^ Unrecognised tokens 11 | // 12 | // current solution: 13 | // find everything that match 14 | // 15 | // LEFT implements RIGHT; 16 | // 17 | // and comment them out 18 | // then replace all occurence 19 | // 20 | // interface LEFT { 21 | // 22 | // with 23 | // 24 | // interface LEFT: RIGHT { 25 | // 26 | var inheritance = []; 27 | idlString = idlString.replace(/([a-zA-Z0-9]+) implements ([a-zA-Z0-9]+);/gi, function (line, left, right) { 28 | inheritance.push({ left: left, right: right }); 29 | return "// " + line; 30 | }); 31 | inheritance.forEach(function (_a) { 32 | var left = _a.left, right = _a.right; 33 | idlString = idlString.replace(new RegExp("interface " + left + " {"), "interface " + left + ": " + right + " {"); 34 | }); 35 | return idlString; 36 | }, 37 | array: function (idlString) { 38 | // need fix for error: 39 | // 40 | // WebIDLParseError: Syntax error at line 102, since `interface btTransform`: 41 | // void setFromOpenGLMatrix(float[] m) 42 | // ^ Unterminated operation 43 | // 44 | // current solution: use sequence type 45 | return idlString 46 | .replace(/attribute (\w+)\[\]/gi, function (match, group) { 47 | return "attribute FrozenArray<" + group + ">"; 48 | }) 49 | .replace(/float\[\]/gi, 'FrozenArray') 50 | .replace(/long\[\]/gi, 'FrozenArray'); 51 | }, 52 | }; 53 | -------------------------------------------------------------------------------- /dist/preprocess.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.preprocess = void 0; 4 | exports.preprocess = { 5 | 'fix-inheritance': function (idlString) { 6 | // need fix for error: 7 | // 8 | // WebIDLParseError: Syntax error at line 49, since `interface btVector4`: 9 | // btVector4 implements btVector3; 10 | // ^ Unrecognised tokens 11 | // 12 | // current solution: 13 | // find everything that match 14 | // 15 | // LEFT implements RIGHT; 16 | // 17 | // and comment them out 18 | // then replace all occurence 19 | // 20 | // interface LEFT { 21 | // 22 | // with 23 | // 24 | // interface LEFT: RIGHT { 25 | // 26 | var inheritance = []; 27 | idlString = idlString.replace(/([a-zA-Z0-9]+) implements ([a-zA-Z0-9]+);/gi, function (line, left, right) { 28 | inheritance.push({ left: left, right: right }); 29 | return "// " + line; 30 | }); 31 | inheritance.forEach(function (_a) { 32 | var left = _a.left, right = _a.right; 33 | idlString = idlString.replace(new RegExp("interface " + left + " {"), "interface " + left + ": " + right + " {"); 34 | }); 35 | return idlString; 36 | }, 37 | 'fix-array': function (idlString) { 38 | // need fix for error: 39 | // 40 | // WebIDLParseError: Syntax error at line 102, since `interface btTransform`: 41 | // void setFromOpenGLMatrix(float[] m) 42 | // ^ Unterminated operation 43 | // 44 | // current solution: use sequence type 45 | return idlString 46 | .replace(/attribute (\w+)\[\]/gi, function (match, group) { 47 | return "attribute FrozenArray<" + group + ">"; 48 | }) 49 | .replace(/float\[\]/gi, 'FrozenArray') 50 | .replace(/long\[\]/gi, 'FrozenArray'); 51 | }, 52 | }; 53 | -------------------------------------------------------------------------------- /src/fetch-idl.ts: -------------------------------------------------------------------------------- 1 | import * as https from 'https' 2 | import * as fs from 'fs' 3 | import { JSDOM } from 'jsdom' 4 | 5 | const idlSelector = [ 6 | 'pre.idl:not(.extract):not(.example)', // bikeshed and ReSpec 7 | 'pre.code code.idl-code', // Web Cryptography 8 | 'pre:not(.extract) code.idl', // HTML 9 | '#permission-registry + pre.highlight', // Permissions 10 | ].join(',') 11 | 12 | export async function fetchIDL(uri: string): Promise { 13 | let result: string 14 | if (fs.existsSync(uri)) { 15 | result = fs.readFileSync(uri).toString() 16 | } else { 17 | result = await getUrl(uri) 18 | } 19 | if (uri.match(/\.w?idl$/)) { 20 | return result 21 | } 22 | return extractIDL(JSDOM.fragment(result)) 23 | } 24 | 25 | function extractIDL(dom: DocumentFragment) { 26 | const elements = Array.from(dom.querySelectorAll(idlSelector)).filter((el) => { 27 | if (el.parentElement && el.parentElement.classList.contains('example')) { 28 | return false 29 | } 30 | const previous = el.previousElementSibling 31 | if (!previous) { 32 | return true 33 | } 34 | return !previous.classList.contains('atrisk') && !previous.textContent.includes('IDL Index') 35 | }) 36 | return elements.map((element) => trimCommonIndentation(element.textContent).trim()).join('\n\n') 37 | } 38 | 39 | /** 40 | * Remove common indentation: 41 | *
42 |  *       typedef Type = "type";
43 |  *
44 |  *       dictionary Dictionary {
45 |  *         "member"
46 |  *       };
47 |  *     
48 | * Here the textContent has 6 common preceding whitespaces that can be unindented. 49 | */ 50 | function trimCommonIndentation(text: string) { 51 | const lines = text.split('\n') 52 | if (!lines[0].trim()) { 53 | lines.shift() 54 | } 55 | if (!lines[lines.length - 1].trim()) { 56 | lines.pop() 57 | } 58 | const commonIndentation = Math.min(...lines.filter((line) => line.trim()).map(getIndentation)) 59 | return lines.map((line) => line.slice(commonIndentation)).join('\n') 60 | } 61 | 62 | /** 63 | * Count preceding whitespaces 64 | */ 65 | function getIndentation(line: string) { 66 | let count = 0 67 | for (const ch of line) { 68 | if (ch !== ' ') { 69 | break 70 | } 71 | count++ 72 | } 73 | return count 74 | } 75 | 76 | function getUrl(url: string): Promise { 77 | return new Promise((resolve, reject) => { 78 | https 79 | .get(url, (resp) => { 80 | let data = '' 81 | resp.on('data', (chunk) => (data += chunk)) 82 | resp.on('end', () => resolve(data)) 83 | }) 84 | .on('error', reject) 85 | }) 86 | } 87 | -------------------------------------------------------------------------------- /src/cli.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import * as yargs from 'yargs' 4 | import { parseIDL } from './parse-idl' 5 | import { convertIDL } from './convert-idl' 6 | import { printTs, printEmscriptenModule } from './print-ts' 7 | import * as fs from 'fs' 8 | import { fetchIDL } from './fetch-idl' 9 | import { Options } from './types' 10 | import { fixes } from './fixes' 11 | 12 | async function main() { 13 | const argv = yargs 14 | .wrap(null) 15 | .scriptName('webidl2ts') 16 | .usage('Usage: $0 [options]') 17 | .example('$0 -i https://www.w3.org/TR/webxr/ -o webxr.d.ts', 'Generate from online documentation') 18 | .example('$0 -i https://www.khronos.org/registry/webgl/specs/latest/2.0/webgl2.idl -o webgl.d.ts', 'Generate from online idl file') 19 | .example('$0 -i ./my.idl -o my.d.ts', 'Generate local idl file') 20 | .example('$0 -i ./ammo.idl -o ammo.d.ts -n Ammo -ed', 'Generate a d.ts with default export for Ammo') 21 | .example('$0 -i ./ammo.idl -o ammo.d.ts -n Ammo -e', 'Generate a d.ts with ambient declaration only for Ammo') 22 | 23 | .help('h') 24 | .alias('h', 'help') 25 | 26 | .option('i', { 27 | describe: 'Input file or url', 28 | alias: 'in', 29 | demand: true, 30 | }) 31 | .option('o', { 32 | describe: 'Output file path', 33 | alias: 'out', 34 | demand: true, 35 | }) 36 | .option('e', { 37 | describe: 'Enable Emscripten mode', 38 | alias: 'emscripten', 39 | default: false, 40 | boolean: true, 41 | }) 42 | .option('n', { 43 | describe: 'Name of the module (emscripten mode)', 44 | alias: 'name', 45 | default: 'Module', 46 | }) 47 | .option('d', { 48 | describe: 'Write default export (emscripten mode)', 49 | alias: 'default-export', 50 | default: false, 51 | boolean: true, 52 | }).argv 53 | 54 | const options: Options = { 55 | input: argv.i as string, 56 | output: argv.o as string, 57 | emscripten: argv.e, 58 | defaultExport: argv.d, 59 | module: argv.n, 60 | } 61 | 62 | if (!options.input) { 63 | process.exit(1) 64 | } 65 | 66 | convert(options) 67 | } 68 | 69 | async function convert(options: Options) { 70 | const idlString = await fetchIDL(options.input) 71 | const idl = await parseIDL(idlString, { 72 | preprocess: (idl: string) => { 73 | if (options.emscripten) { 74 | idl = fixes.inheritance(idl) 75 | idl = fixes.array(idl) 76 | } 77 | return idl 78 | }, 79 | }) 80 | const ts = convertIDL(idl, options) 81 | 82 | let tsString: string = null 83 | if (options.emscripten) { 84 | tsString = printEmscriptenModule(options.module, ts, options.defaultExport) 85 | } else { 86 | tsString = printTs(ts) 87 | } 88 | 89 | fs.writeFileSync(options.output, tsString) 90 | } 91 | 92 | main() 93 | -------------------------------------------------------------------------------- /dist/parse-idl.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 | return new (P || (P = Promise))(function (resolve, reject) { 5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 | }); 10 | }; 11 | var __generator = (this && this.__generator) || function (thisArg, body) { 12 | var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 13 | return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 14 | function verb(n) { return function (v) { return step([n, v]); }; } 15 | function step(op) { 16 | if (f) throw new TypeError("Generator is already executing."); 17 | while (_) try { 18 | if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 19 | if (y = 0, t) op = [op[0] & 2, t.value]; 20 | switch (op[0]) { 21 | case 0: case 1: t = op; break; 22 | case 4: _.label++; return { value: op[1], done: false }; 23 | case 5: _.label++; y = op[1]; op = [0]; continue; 24 | case 7: op = _.ops.pop(); _.trys.pop(); continue; 25 | default: 26 | if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 27 | if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 28 | if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 29 | if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 30 | if (t[2]) _.ops.pop(); 31 | _.trys.pop(); continue; 32 | } 33 | op = body.call(thisArg, _); 34 | } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 35 | if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 36 | } 37 | }; 38 | Object.defineProperty(exports, "__esModule", { value: true }); 39 | exports.parseIDL = void 0; 40 | var webidl2 = require("webidl2"); 41 | function parseIDL(idlString, options) { 42 | return __awaiter(this, void 0, void 0, function () { 43 | return __generator(this, function (_a) { 44 | if (options === null || options === void 0 ? void 0 : options.preprocess) { 45 | idlString = options.preprocess(idlString); 46 | } 47 | return [2 /*return*/, webidl2.parse(idlString)]; 48 | }); 49 | }); 50 | } 51 | exports.parseIDL = parseIDL; 52 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | # Web IDL to d.ts converter 2 | 3 | This tool generates a `.d.ts` file based on a WebIDL input file. 4 | 5 | # Installation 6 | 7 | use npm or yarn to install from npmjs 8 | 9 | ```shell 10 | npm install webidl2ts 11 | ``` 12 | 13 | or from github 14 | 15 | ```shell 16 | npm install github:giniedp/webidl2ts 17 | ``` 18 | 19 | # Usage 20 | 21 | ``` 22 | Usage: webidl2ts [options] 23 | 24 | Options: 25 | --version Show version number [boolean] 26 | -h, --help Show help [boolean] 27 | -i, --in Input file or url [required] 28 | -o, --out Output file path [required] 29 | -e, --emscripten Enable Emscripten mode [boolean] [default: false] 30 | -n, --name Name of the module (emscripten mode) [default: "Module"] 31 | -d, --default-export Write default export (emscripten mode) [boolean] [default: false] 32 | ``` 33 | 34 | ## Definitions for browser libs 35 | 36 | Generate type definitions from a local idl file: 37 | 38 | ``` 39 | webidl2ts -i my.idl -o index.d.ts 40 | ``` 41 | 42 | Use remote IDL files: 43 | 44 | ``` 45 | webidl2ts -i https://www.khronos.org/registry/webgl/specs/latest/2.0/webgl2.idl -o webgl.d.ts 46 | ``` 47 | 48 | Generate type definitions from online documentation: 49 | 50 | ``` 51 | webidl2ts -i https://www.w3.org/TR/webxr/ -o webxr.d.ts 52 | ``` 53 | 54 | ## Definitions for emscripten modules 55 | 56 | Use the `-e` option to enable emscripten mode 57 | 58 | ``` 59 | webidl2ts -e -i https://raw.githubusercontent.com/kripken/ammo.js/master/ammo.idl -o ammo.d.ts 60 | ``` 61 | 62 | # Usage in a project 63 | 64 | This is an excerpt of a `package.json` with scripts to generate type definitions for the Ammojs project. 65 | 66 | ```json 67 | { 68 | "scripts": { 69 | "generate": "yarn generate:module && yarn generate:ambient", 70 | "generate:module": "webidl2ts -i ./ammo.idl -n Ammo -ed -o ./builds/ammo.d.ts", 71 | "generate:ambient": "webidl2ts -i ./ammo.idl -n Ammo -e -o ./builds/ammo-ambient.d.ts" 72 | }, 73 | "devDependencies": { 74 | "webidl2ts": "github:giniedp/webidl2ts" 75 | } 76 | } 77 | ``` 78 | 79 | And an excerpt of the project structure in this scenario would be 80 | 81 | ``` 82 | ├── builds/ // build output folder 83 | │   ├── ammo.d.ts // The generated d.ts file with a default export 84 | │   ├── ammo-ambient.d.ts // The generated d.ts file with ambient declarations only 85 | ├── ammo.idl // The idl file 86 | ├── package.json // The package file 87 | ``` 88 | 89 | # Output and mode differences 90 | 91 | Without the emscripten mode the provided IDL file must be a valid WebIDL 2 file. Otherwise it can not be parsed an an error is thrown. The generated `d.ts` output is roughly the same as with [TSJS-lib-generator](https://github.com/microsoft/TSJS-lib-generator). 92 | 93 | Emscripten IDL files are not valid WebIDL 2 files. With emscripten mode enabled (`-e`) the IDL files are preprocessed so they can be parsed with the `webidl2` parser. 94 | 95 | 1. Inheritance statements are fixed: 96 | 97 | ```diff 98 | -interface btVector4 { 99 | +interface btVector4: btVector3 { 100 | }; 101 | -btVector4 implements btVector3; 102 | ``` 103 | 104 | 2. Array types (e.g. `float[]`) are converted to `FrozenArray` (e.g. `FrozenArray`) 105 | 106 | Please file an issue if you need further adjustments 107 | 108 | Some types are generated differently 109 | 110 | | | `-e=true` | `-e=false` | 111 | | ---------- | --------------------------------------- | ----------------------------------------- | 112 | | interfaces | generated as classes | generated as interfaces and declared vars | 113 | | attributes | generated with `get_` and `set_` prefix | generated as properties | 114 | 115 | The generated d.ts output includes the following Module definition with `-e` enabled 116 | 117 | ```ts 118 | declare function Module(target?: T): Promise 119 | declare module Module { 120 | function destroy(obj: any): void 121 | function _malloc(size: number): number 122 | function _free(ptr: number): void 123 | const HEAP8: Int8Array 124 | const HEAP16: Int16Array 125 | const HEAP32: Int32Array 126 | const HEAPU8: Uint8Array 127 | const HEAPU16: Uint16Array 128 | const HEAPU32: Uint32Array 129 | const HEAPF32: Float32Array 130 | const HEAPF32: Float64Array 131 | // ... generated from IDL 132 | } 133 | ``` 134 | 135 | The `-d` option adds a default export 136 | 137 | ```ts 138 | export default Module 139 | ``` 140 | 141 | # References 142 | 143 | - https://github.com/kripken/ammo.js/issues/233 144 | - https://github.com/microsoft/TSJS-lib-generator 145 | - https://github.com/osman-turan/ammo.js-typings 146 | - https://ts-ast-viewer.com 147 | -------------------------------------------------------------------------------- /dist/print-ts.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __spreadArrays = (this && this.__spreadArrays) || function () { 3 | for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; 4 | for (var r = Array(s), k = 0, i = 0; i < il; i++) 5 | for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) 6 | r[k] = a[j]; 7 | return r; 8 | }; 9 | Object.defineProperty(exports, "__esModule", { value: true }); 10 | exports.printEmscriptenModule = exports.printTs = void 0; 11 | var ts = require("typescript"); 12 | function printTs(nodes) { 13 | var file = ts.createSourceFile("index.d.ts", '', ts.ScriptTarget.Latest, false, ts.ScriptKind.TS); 14 | var printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed }); 15 | return nodes.map(function (it) { return printer.printNode(ts.EmitHint.Unspecified, it, file); }).join('\n'); 16 | } 17 | exports.printTs = printTs; 18 | function printEmscriptenModule(moduleName, nodes, defaultExport) { 19 | var result = []; 20 | if (defaultExport) { 21 | // adds default export 22 | // export default Module; 23 | result.push(ts.createExportAssignment( 24 | /* decorators */ [], 25 | /* modifiers */ [ts.createModifier(ts.SyntaxKind.DefaultKeyword)], 26 | /* isExportEquals */ false, 27 | /* expression */ ts.createIdentifier(moduleName))); 28 | } 29 | // adds module function 30 | // declare function Module(target?: T): Promise; 31 | result.push(ts.createFunctionDeclaration( 32 | /* decorators */ [], 33 | /* modifiers */ [ts.createModifier(ts.SyntaxKind.DeclareKeyword)], 34 | /* asteriskToken */ undefined, 35 | /* name */ moduleName, 36 | /* typeParameters */ [ts.createTypeParameterDeclaration('T')], 37 | /* parameters */ [ 38 | ts.createParameter([], [], undefined, 'target', ts.createToken(ts.SyntaxKind.QuestionToken), ts.createTypeReferenceNode('T', [])), 39 | ], 40 | /* type */ ts.createTypeReferenceNode('Promise', [ 41 | ts.createIntersectionTypeNode([ts.createTypeReferenceNode('T', []), ts.createTypeQueryNode(ts.createIdentifier(moduleName))]), 42 | ]), 43 | /* body */ undefined)); 44 | // adds module declaration with all types 45 | // export declare module Module { 46 | // ... 47 | // } 48 | result.push(ts.createModuleDeclaration( 49 | /* decorators */ [], 50 | /* modifiers */ [ts.createModifier(ts.SyntaxKind.DeclareKeyword)], 51 | /* name */ ts.createIdentifier(moduleName), 52 | /* body */ ts.createModuleBlock(__spreadArrays(emscriptenAdditions(), nodes)))); 53 | return printTs(result); 54 | } 55 | exports.printEmscriptenModule = printEmscriptenModule; 56 | function emscriptenAdditions() { 57 | var result = []; 58 | // adds emscripten specific types 59 | // 60 | // function destroy(obj: any): void; 61 | result.push(ts.createFunctionDeclaration( 62 | /* decorators */ [], 63 | /* modifiers */ [], 64 | /* asteriskToken */ undefined, 65 | /* name */ 'destroy', 66 | /* typeParameters */ [], 67 | /* parameters */ [ts.createParameter([], [], undefined, 'obj', undefined, ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword))], 68 | /* type */ ts.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword), 69 | /* body */ undefined)); 70 | // adds malloc function 71 | // 72 | // function _malloc(size: number): number; 73 | result.push(ts.createFunctionDeclaration(undefined, undefined, undefined, ts.createIdentifier('_malloc'), undefined, [ 74 | ts.createParameter(undefined, undefined, undefined, ts.createIdentifier('size'), undefined, ts.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword), undefined), 75 | ], ts.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword), undefined)); 76 | // adds free function 77 | // 78 | // function _free(size: number): number; 79 | result.push(ts.createFunctionDeclaration(undefined, undefined, undefined, ts.createIdentifier('_free'), undefined, [ 80 | ts.createParameter(undefined, undefined, undefined, ts.createIdentifier('ptr'), undefined, ts.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword), undefined), 81 | ], ts.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword), undefined)); 82 | // adds HEAP* properties 83 | var heaps = [ 84 | ['HEAP8', Int8Array.name], 85 | ['HEAP16', Int16Array.name], 86 | ['HEAP32', Int32Array.name], 87 | ['HEAPU8', Uint8Array.name], 88 | ['HEAPU16', Uint16Array.name], 89 | ['HEAPU32', Uint32Array.name], 90 | ['HEAPF32', Float32Array.name], 91 | ['HEAPF64', Float64Array.name], 92 | ]; 93 | for (var _i = 0, heaps_1 = heaps; _i < heaps_1.length; _i++) { 94 | var _a = heaps_1[_i], name_1 = _a[0], type = _a[1]; 95 | result.push(ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ 96 | ts.createVariableDeclaration(ts.createIdentifier(name_1), ts.createTypeReferenceNode(ts.createIdentifier(type), undefined), undefined), 97 | ], ts.NodeFlags.Const))); 98 | } 99 | return result; 100 | } 101 | -------------------------------------------------------------------------------- /src/print-ts.ts: -------------------------------------------------------------------------------- 1 | import * as ts from 'typescript' 2 | 3 | export function printTs(nodes: ts.Statement[]): string { 4 | const file = ts.createSourceFile(`index.d.ts`, '', ts.ScriptTarget.Latest, false, ts.ScriptKind.TS) 5 | const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed }) 6 | return nodes.map((it) => printer.printNode(ts.EmitHint.Unspecified, it, file)).join('\n') 7 | } 8 | 9 | export function printEmscriptenModule(moduleName: string, nodes: ts.Statement[], defaultExport: boolean): string { 10 | const result: ts.Statement[] = [] 11 | if (defaultExport) { 12 | // adds default export 13 | // export default Module; 14 | result.push( 15 | ts.createExportAssignment( 16 | /* decorators */ [], 17 | /* modifiers */ [ts.createModifier(ts.SyntaxKind.DefaultKeyword)], 18 | /* isExportEquals */ false, 19 | /* expression */ ts.createIdentifier(moduleName), 20 | ), 21 | ) 22 | } 23 | 24 | // adds module function 25 | // declare function Module(target?: T): Promise; 26 | result.push( 27 | ts.createFunctionDeclaration( 28 | /* decorators */ [], 29 | /* modifiers */ [ts.createModifier(ts.SyntaxKind.DeclareKeyword)], 30 | /* asteriskToken */ undefined, 31 | /* name */ moduleName, 32 | /* typeParameters */ [ts.createTypeParameterDeclaration('T')], 33 | /* parameters */ [ 34 | ts.createParameter([], [], undefined, 'target', ts.createToken(ts.SyntaxKind.QuestionToken), ts.createTypeReferenceNode('T', [])), 35 | ], 36 | /* type */ ts.createTypeReferenceNode('Promise', [ 37 | ts.createIntersectionTypeNode([ts.createTypeReferenceNode('T', []), ts.createTypeQueryNode(ts.createIdentifier(moduleName))]), 38 | ]), 39 | /* body */ undefined, 40 | ), 41 | ) 42 | 43 | // adds module declaration with all types 44 | // export declare module Module { 45 | // ... 46 | // } 47 | result.push( 48 | ts.createModuleDeclaration( 49 | /* decorators */ [], 50 | /* modifiers */ [ts.createModifier(ts.SyntaxKind.DeclareKeyword)], 51 | /* name */ ts.createIdentifier(moduleName), 52 | /* body */ ts.createModuleBlock([...emscriptenAdditions(), ...nodes]), 53 | ), 54 | ) 55 | 56 | return printTs(result) 57 | } 58 | 59 | function emscriptenAdditions() { 60 | const result: ts.Statement[] = [] 61 | 62 | // adds emscripten specific types 63 | // 64 | // function destroy(obj: any): void; 65 | result.push( 66 | ts.createFunctionDeclaration( 67 | /* decorators */ [], 68 | /* modifiers */ [], 69 | /* asteriskToken */ undefined, 70 | /* name */ 'destroy', 71 | /* typeParameters */ [], 72 | /* parameters */ [ts.createParameter([], [], undefined, 'obj', undefined, ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword))], 73 | /* type */ ts.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword), 74 | /* body */ undefined, 75 | ), 76 | ) 77 | 78 | // adds malloc function 79 | // 80 | // function _malloc(size: number): number; 81 | result.push( 82 | ts.createFunctionDeclaration( 83 | undefined, 84 | undefined, 85 | undefined, 86 | ts.createIdentifier('_malloc'), 87 | undefined, 88 | [ 89 | ts.createParameter( 90 | undefined, 91 | undefined, 92 | undefined, 93 | ts.createIdentifier('size'), 94 | undefined, 95 | ts.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword), 96 | undefined, 97 | ), 98 | ], 99 | ts.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword), 100 | undefined, 101 | ), 102 | ) 103 | 104 | // adds free function 105 | // 106 | // function _free(size: number): number; 107 | result.push( 108 | ts.createFunctionDeclaration( 109 | undefined, 110 | undefined, 111 | undefined, 112 | ts.createIdentifier('_free'), 113 | undefined, 114 | [ 115 | ts.createParameter( 116 | undefined, 117 | undefined, 118 | undefined, 119 | ts.createIdentifier('ptr'), 120 | undefined, 121 | ts.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword), 122 | undefined, 123 | ), 124 | ], 125 | ts.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword), 126 | undefined, 127 | ), 128 | ) 129 | // adds HEAP* properties 130 | const heaps = [ 131 | ['HEAP8', Int8Array.name], 132 | ['HEAP16', Int16Array.name], 133 | ['HEAP32', Int32Array.name], 134 | ['HEAPU8', Uint8Array.name], 135 | ['HEAPU16', Uint16Array.name], 136 | ['HEAPU32', Uint32Array.name], 137 | ['HEAPF32', Float32Array.name], 138 | ['HEAPF64', Float64Array.name], 139 | ] 140 | for (const [name, type] of heaps) { 141 | result.push( 142 | ts.createVariableStatement( 143 | undefined, 144 | ts.createVariableDeclarationList( 145 | [ 146 | ts.createVariableDeclaration( 147 | ts.createIdentifier(name), 148 | ts.createTypeReferenceNode(ts.createIdentifier(type), undefined), 149 | undefined, 150 | ), 151 | ], 152 | ts.NodeFlags.Const, 153 | ), 154 | ), 155 | ) 156 | } 157 | return result 158 | } 159 | -------------------------------------------------------------------------------- /dist/fetch-idl.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 | return new (P || (P = Promise))(function (resolve, reject) { 5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 | }); 10 | }; 11 | var __generator = (this && this.__generator) || function (thisArg, body) { 12 | var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 13 | return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 14 | function verb(n) { return function (v) { return step([n, v]); }; } 15 | function step(op) { 16 | if (f) throw new TypeError("Generator is already executing."); 17 | while (_) try { 18 | if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 19 | if (y = 0, t) op = [op[0] & 2, t.value]; 20 | switch (op[0]) { 21 | case 0: case 1: t = op; break; 22 | case 4: _.label++; return { value: op[1], done: false }; 23 | case 5: _.label++; y = op[1]; op = [0]; continue; 24 | case 7: op = _.ops.pop(); _.trys.pop(); continue; 25 | default: 26 | if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 27 | if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 28 | if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 29 | if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 30 | if (t[2]) _.ops.pop(); 31 | _.trys.pop(); continue; 32 | } 33 | op = body.call(thisArg, _); 34 | } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 35 | if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 36 | } 37 | }; 38 | Object.defineProperty(exports, "__esModule", { value: true }); 39 | exports.fetchIDL = void 0; 40 | var https = require("https"); 41 | var fs = require("fs"); 42 | var jsdom_1 = require("jsdom"); 43 | var idlSelector = [ 44 | 'pre.idl:not(.extract):not(.example)', 45 | 'pre.code code.idl-code', 46 | 'pre:not(.extract) code.idl', 47 | '#permission-registry + pre.highlight', 48 | ].join(','); 49 | function fetchIDL(uri) { 50 | return __awaiter(this, void 0, void 0, function () { 51 | var result; 52 | return __generator(this, function (_a) { 53 | switch (_a.label) { 54 | case 0: 55 | if (!fs.existsSync(uri)) return [3 /*break*/, 1]; 56 | result = fs.readFileSync(uri).toString(); 57 | return [3 /*break*/, 3]; 58 | case 1: return [4 /*yield*/, getUrl(uri)]; 59 | case 2: 60 | result = _a.sent(); 61 | _a.label = 3; 62 | case 3: 63 | if (uri.match(/\.w?idl$/)) { 64 | return [2 /*return*/, result]; 65 | } 66 | return [2 /*return*/, extractIDL(jsdom_1.JSDOM.fragment(result))]; 67 | } 68 | }); 69 | }); 70 | } 71 | exports.fetchIDL = fetchIDL; 72 | function extractIDL(dom) { 73 | var elements = Array.from(dom.querySelectorAll(idlSelector)).filter(function (el) { 74 | if (el.parentElement && el.parentElement.classList.contains('example')) { 75 | return false; 76 | } 77 | var previous = el.previousElementSibling; 78 | if (!previous) { 79 | return true; 80 | } 81 | return !previous.classList.contains('atrisk') && !previous.textContent.includes('IDL Index'); 82 | }); 83 | return elements.map(function (element) { return trimCommonIndentation(element.textContent).trim(); }).join('\n\n'); 84 | } 85 | /** 86 | * Remove common indentation: 87 | *
 88 |  *       typedef Type = "type";
 89 |  *
 90 |  *       dictionary Dictionary {
 91 |  *         "member"
 92 |  *       };
 93 |  *     
94 | * Here the textContent has 6 common preceding whitespaces that can be unindented. 95 | */ 96 | function trimCommonIndentation(text) { 97 | var lines = text.split('\n'); 98 | if (!lines[0].trim()) { 99 | lines.shift(); 100 | } 101 | if (!lines[lines.length - 1].trim()) { 102 | lines.pop(); 103 | } 104 | var commonIndentation = Math.min.apply(Math, lines.filter(function (line) { return line.trim(); }).map(getIndentation)); 105 | return lines.map(function (line) { return line.slice(commonIndentation); }).join('\n'); 106 | } 107 | /** 108 | * Count preceding whitespaces 109 | */ 110 | function getIndentation(line) { 111 | var count = 0; 112 | for (var _i = 0, line_1 = line; _i < line_1.length; _i++) { 113 | var ch = line_1[_i]; 114 | if (ch !== ' ') { 115 | break; 116 | } 117 | count++; 118 | } 119 | return count; 120 | } 121 | function getUrl(url) { 122 | return new Promise(function (resolve, reject) { 123 | https 124 | .get(url, function (resp) { 125 | var data = ''; 126 | resp.on('data', function (chunk) { return (data += chunk); }); 127 | resp.on('end', function () { return resolve(data); }); 128 | }) 129 | .on('error', reject); 130 | }); 131 | } 132 | -------------------------------------------------------------------------------- /dist/cli.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | "use strict"; 3 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 4 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 5 | return new (P || (P = Promise))(function (resolve, reject) { 6 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 7 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 8 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 9 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 10 | }); 11 | }; 12 | var __generator = (this && this.__generator) || function (thisArg, body) { 13 | var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 14 | return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 15 | function verb(n) { return function (v) { return step([n, v]); }; } 16 | function step(op) { 17 | if (f) throw new TypeError("Generator is already executing."); 18 | while (_) try { 19 | if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 20 | if (y = 0, t) op = [op[0] & 2, t.value]; 21 | switch (op[0]) { 22 | case 0: case 1: t = op; break; 23 | case 4: _.label++; return { value: op[1], done: false }; 24 | case 5: _.label++; y = op[1]; op = [0]; continue; 25 | case 7: op = _.ops.pop(); _.trys.pop(); continue; 26 | default: 27 | if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 28 | if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 29 | if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 30 | if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 31 | if (t[2]) _.ops.pop(); 32 | _.trys.pop(); continue; 33 | } 34 | op = body.call(thisArg, _); 35 | } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 36 | if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 37 | } 38 | }; 39 | Object.defineProperty(exports, "__esModule", { value: true }); 40 | var yargs = require("yargs"); 41 | var parse_idl_1 = require("./parse-idl"); 42 | var convert_idl_1 = require("./convert-idl"); 43 | var print_ts_1 = require("./print-ts"); 44 | var fs = require("fs"); 45 | var fetch_idl_1 = require("./fetch-idl"); 46 | var fixes_1 = require("./fixes"); 47 | function main() { 48 | return __awaiter(this, void 0, void 0, function () { 49 | var argv, options; 50 | return __generator(this, function (_a) { 51 | argv = yargs 52 | .wrap(null) 53 | .scriptName('webidl2ts') 54 | .usage('Usage: $0 [options]') 55 | .example('$0 -i https://www.w3.org/TR/webxr/ -o webxr.d.ts', 'Generate from online documentation') 56 | .example('$0 -i https://www.khronos.org/registry/webgl/specs/latest/2.0/webgl2.idl -o webgl.d.ts', 'Generate from online idl file') 57 | .example('$0 -i ./my.idl -o my.d.ts', 'Generate local idl file') 58 | .example('$0 -i ./ammo.idl -o ammo.d.ts -n Ammo -ed', 'Generate a d.ts with default export for Ammo') 59 | .example('$0 -i ./ammo.idl -o ammo.d.ts -n Ammo -e', 'Generate a d.ts with ambient declaration only for Ammo') 60 | .help('h') 61 | .alias('h', 'help') 62 | .option('i', { 63 | describe: 'Input file or url', 64 | alias: 'in', 65 | demand: true, 66 | }) 67 | .option('o', { 68 | describe: 'Output file path', 69 | alias: 'out', 70 | demand: true, 71 | }) 72 | .option('e', { 73 | describe: 'Enable Emscripten mode', 74 | alias: 'emscripten', 75 | default: false, 76 | boolean: true, 77 | }) 78 | .option('n', { 79 | describe: 'Name of the module (emscripten mode)', 80 | alias: 'name', 81 | default: 'Module', 82 | }) 83 | .option('d', { 84 | describe: 'Write default export (emscripten mode)', 85 | alias: 'default-export', 86 | default: false, 87 | boolean: true, 88 | }).argv; 89 | options = { 90 | input: argv.i, 91 | output: argv.o, 92 | emscripten: argv.e, 93 | defaultExport: argv.d, 94 | module: argv.n, 95 | }; 96 | if (!options.input) { 97 | process.exit(1); 98 | } 99 | convert(options); 100 | return [2 /*return*/]; 101 | }); 102 | }); 103 | } 104 | function convert(options) { 105 | return __awaiter(this, void 0, void 0, function () { 106 | var idlString, idl, ts, tsString; 107 | return __generator(this, function (_a) { 108 | switch (_a.label) { 109 | case 0: return [4 /*yield*/, fetch_idl_1.fetchIDL(options.input)]; 110 | case 1: 111 | idlString = _a.sent(); 112 | return [4 /*yield*/, parse_idl_1.parseIDL(idlString, { 113 | preprocess: function (idl) { 114 | if (options.emscripten) { 115 | idl = fixes_1.fixes.inheritance(idl); 116 | idl = fixes_1.fixes.array(idl); 117 | } 118 | return idl; 119 | }, 120 | })]; 121 | case 2: 122 | idl = _a.sent(); 123 | ts = convert_idl_1.convertIDL(idl, options); 124 | tsString = null; 125 | if (options.emscripten) { 126 | tsString = print_ts_1.printEmscriptenModule(options.module, ts, options.defaultExport); 127 | } 128 | else { 129 | tsString = print_ts_1.printTs(ts); 130 | } 131 | fs.writeFileSync(options.output, tsString); 132 | return [2 /*return*/]; 133 | } 134 | }); 135 | }); 136 | } 137 | main(); 138 | -------------------------------------------------------------------------------- /dist/convert-idl.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __spreadArrays = (this && this.__spreadArrays) || function () { 3 | for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; 4 | for (var r = Array(s), k = 0, i = 0; i < il; i++) 5 | for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) 6 | r[k] = a[j]; 7 | return r; 8 | }; 9 | Object.defineProperty(exports, "__esModule", { value: true }); 10 | exports.convertIDL = void 0; 11 | var ts = require("typescript"); 12 | var bufferSourceTypes = [ 13 | 'ArrayBuffer', 14 | 'ArrayBufferView', 15 | 'DataView', 16 | 'Int8Array', 17 | 'Uint8Array', 18 | 'Int16Array', 19 | 'Uint16Array', 20 | 'Uint8ClampedArray', 21 | 'Int32Array', 22 | 'Uint32Array', 23 | 'Float32Array', 24 | 'Float64Array', 25 | ]; 26 | var integerTypes = ['byte', 'octet', 'short', 'unsigned short', 'long', 'unsigned long', 'long long', 'unsigned long long']; 27 | var stringTypes = ['ByteString', 'DOMString', 'USVString', 'CSSOMString']; 28 | var floatTypes = ['float', 'unrestricted float', 'double', 'unrestricted double']; 29 | var sameTypes = ['any', 'boolean', 'Date', 'Function', 'Promise', 'void']; 30 | var baseTypeConversionMap = new Map(__spreadArrays(__spreadArrays(bufferSourceTypes).map(function (type) { return [type, type]; }), __spreadArrays(integerTypes).map(function (type) { return [type, 'number']; }), __spreadArrays(floatTypes).map(function (type) { return [type, 'number']; }), __spreadArrays(stringTypes).map(function (type) { return [type, 'string']; }), __spreadArrays(sameTypes).map(function (type) { return [type, type]; }), [ 31 | ['object', 'any'], 32 | ['sequence', 'Array'], 33 | ['record', 'Record'], 34 | ['FrozenArray', 'ReadonlyArray'], 35 | ['EventHandler', 'EventHandler'], 36 | ['VoidPtr', 'unknown'], 37 | ])); 38 | function convertIDL(rootTypes, options) { 39 | var _a; 40 | var nodes = []; 41 | for (var _i = 0, rootTypes_1 = rootTypes; _i < rootTypes_1.length; _i++) { 42 | var rootType = rootTypes_1[_i]; 43 | switch (rootType.type) { 44 | case 'interface': 45 | case 'interface mixin': 46 | case 'dictionary': 47 | nodes.push(convertInterface(rootType, options)); 48 | for (var _b = 0, _c = rootType.extAttrs; _b < _c.length; _b++) { 49 | var attr = _c[_b]; 50 | if (attr.name === 'Exposed' && ((_a = attr.rhs) === null || _a === void 0 ? void 0 : _a.value) === 'Window') { 51 | nodes.push(ts.createVariableStatement([ts.createModifier(ts.SyntaxKind.DeclareKeyword)], ts.createVariableDeclarationList([ 52 | ts.createVariableDeclaration(ts.createIdentifier(rootType.name), ts.createTypeReferenceNode(ts.createIdentifier(rootType.name), undefined), undefined), 53 | ], undefined))); 54 | } 55 | } 56 | break; 57 | case 'includes': 58 | nodes.push(convertInterfaceIncludes(rootType)); 59 | break; 60 | case 'enum': 61 | nodes.push(convertEnum(rootType)); 62 | break; 63 | case 'callback': 64 | nodes.push(convertCallback(rootType)); 65 | break; 66 | case 'typedef': 67 | nodes.push(convertTypedef(rootType)); 68 | break; 69 | default: 70 | console.log(newUnsupportedError('Unsupported IDL type', rootType)); 71 | break; 72 | } 73 | } 74 | return nodes; 75 | } 76 | exports.convertIDL = convertIDL; 77 | function convertTypedef(idl) { 78 | return ts.createTypeAliasDeclaration(undefined, undefined, ts.createIdentifier(idl.name), undefined, convertType(idl.idlType)); 79 | } 80 | function createIterableMethods(name, keyType, valueType, pair, async) { 81 | return [ 82 | ts.createMethodSignature([], [], ts.createExpressionWithTypeArguments(pair ? [ts.createTupleTypeNode([keyType, valueType])] : [valueType], ts.createIdentifier(async ? 'AsyncIterableIterator' : 'IterableIterator')), async ? '[Symbol.asyncIterator]' : '[Symbol.iterator]', undefined), 83 | ts.createMethodSignature([], [], ts.createExpressionWithTypeArguments([ts.createTupleTypeNode([keyType, valueType])], ts.createIdentifier(async ? 'AsyncIterableIterator' : 'IterableIterator')), 'entries', undefined), 84 | ts.createMethodSignature([], [], ts.createExpressionWithTypeArguments([keyType], ts.createIdentifier(async ? 'AsyncIterableIterator' : 'IterableIterator')), 'keys', undefined), 85 | ts.createMethodSignature([], [], ts.createExpressionWithTypeArguments([valueType], ts.createIdentifier(async ? 'AsyncIterableIterator' : 'IterableIterator')), 'values', undefined), 86 | ts.createMethodSignature([], [ 87 | ts.createParameter([], [], undefined, 'callbackfn', undefined, ts.createFunctionTypeNode([], [ 88 | ts.createParameter([], [], undefined, 'value', undefined, valueType), 89 | ts.createParameter([], [], undefined, pair ? 'key' : 'index', undefined, keyType), 90 | ts.createParameter([], [], undefined, pair ? 'iterable' : 'array', undefined, pair ? ts.createTypeReferenceNode(name, []) : ts.createArrayTypeNode(valueType)), 91 | ], ts.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword))), 92 | ts.createParameter([], [], undefined, 'thisArg', ts.createToken(ts.SyntaxKind.QuestionToken), ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword)), 93 | ], ts.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword), 'forEach', undefined), 94 | ]; 95 | } 96 | function convertInterface(idl, options) { 97 | var members = []; 98 | var inheritance = []; 99 | if ('inheritance' in idl && idl.inheritance) { 100 | inheritance.push(ts.createExpressionWithTypeArguments(undefined, ts.createIdentifier(idl.inheritance))); 101 | } 102 | idl.members.forEach(function (member) { 103 | switch (member.type) { 104 | case 'attribute': 105 | if (options === null || options === void 0 ? void 0 : options.emscripten) { 106 | members.push(createAttributeGetter(member)); 107 | members.push(createAttributeSetter(member)); 108 | } 109 | members.push(convertMemberAttribute(member)); 110 | break; 111 | case 'operation': 112 | if (member.name === idl.name) { 113 | members.push(convertMemberConstructor(member, options)); 114 | } 115 | else { 116 | members.push(convertMemberOperation(member)); 117 | } 118 | break; 119 | case 'constructor': 120 | members.push(convertMemberConstructor(member, options)); 121 | break; 122 | case 'field': 123 | members.push(convertMemberField(member)); 124 | break; 125 | case 'const': 126 | members.push(convertMemberConst(member)); 127 | break; 128 | case 'iterable': { 129 | var indexedPropertyGetter = idl.members.find(function (member) { 130 | return member.type === 'operation' && member.special === 'getter' && member.arguments[0].idlType.idlType === 'unsigned long'; 131 | }); 132 | if ((indexedPropertyGetter && member.idlType.length === 1) || member.idlType.length === 2) { 133 | var keyType = convertType(indexedPropertyGetter ? indexedPropertyGetter.arguments[0].idlType : member.idlType[0]); 134 | var valueType = convertType(member.idlType[member.idlType.length - 1]); 135 | members.push.apply(members, createIterableMethods(idl.name, keyType, valueType, member.idlType.length === 2, member.async)); 136 | } 137 | break; 138 | } 139 | default: 140 | console.log(newUnsupportedError('Unsupported IDL member', member)); 141 | break; 142 | } 143 | }); 144 | if (options === null || options === void 0 ? void 0 : options.emscripten) { 145 | return ts.createClassDeclaration(undefined, [], ts.createIdentifier(idl.name), undefined, !inheritance.length ? undefined : [ts.createHeritageClause(ts.SyntaxKind.ExtendsKeyword, inheritance)], members); 146 | } 147 | return ts.createInterfaceDeclaration(undefined, [], ts.createIdentifier(idl.name), undefined, !inheritance.length ? undefined : [ts.createHeritageClause(ts.SyntaxKind.ExtendsKeyword, inheritance)], members); 148 | } 149 | function convertInterfaceIncludes(idl) { 150 | return ts.createInterfaceDeclaration(undefined, [], ts.createIdentifier(idl.target), undefined, [ 151 | ts.createHeritageClause(ts.SyntaxKind.ExtendsKeyword, [ 152 | ts.createExpressionWithTypeArguments(undefined, ts.createIdentifier(idl.includes)), 153 | ]), 154 | ], []); 155 | } 156 | function createAttributeGetter(value) { 157 | return ts.createMethodSignature([], [], convertType(value.idlType), 'get_' + value.name, undefined); 158 | } 159 | function createAttributeSetter(value) { 160 | var parameter = ts.createParameter([], [], undefined, value.name, undefined, convertType(value.idlType)); 161 | return ts.createMethodSignature([], [parameter], ts.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword), 'set_' + value.name, undefined); 162 | } 163 | function convertMemberOperation(idl) { 164 | var args = idl.arguments.map(convertArgument); 165 | return ts.createMethodSignature([], args, convertType(idl.idlType), idl.name, undefined); 166 | } 167 | function convertMemberConstructor(idl, options) { 168 | var args = idl.arguments.map(convertArgument); 169 | if (options.emscripten) { 170 | return ts.createMethodSignature([], args, undefined, 'constructor', undefined); 171 | } 172 | return ts.createConstructSignature([], args, undefined); 173 | } 174 | function convertMemberField(idl) { 175 | var optional = !idl.required ? ts.createToken(ts.SyntaxKind.QuestionToken) : undefined; 176 | return ts.createPropertySignature(undefined, ts.createIdentifier(idl.name), optional, convertType(idl.idlType), undefined); 177 | } 178 | function convertMemberConst(idl) { 179 | return ts.createPropertySignature([ts.createModifier(ts.SyntaxKind.ReadonlyKeyword)], ts.createIdentifier(idl.name), undefined, convertType(idl.idlType), undefined); 180 | } 181 | function convertMemberAttribute(idl) { 182 | return ts.createPropertySignature([idl.readonly ? ts.createModifier(ts.SyntaxKind.ReadonlyKeyword) : null].filter(function (it) { return it != null; }), ts.createIdentifier(idl.name), undefined, convertType(idl.idlType), undefined); 183 | } 184 | function convertArgument(idl) { 185 | var optional = idl.optional ? ts.createToken(ts.SyntaxKind.QuestionToken) : undefined; 186 | return ts.createParameter([], [], undefined, idl.name, optional, convertType(idl.idlType)); 187 | } 188 | function convertType(idl) { 189 | if (typeof idl.idlType === 'string') { 190 | var type = baseTypeConversionMap.get(idl.idlType) || idl.idlType; 191 | switch (type) { 192 | case 'number': 193 | return ts.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword); 194 | case 'string': 195 | return ts.createKeywordTypeNode(ts.SyntaxKind.StringKeyword); 196 | case 'void': 197 | return ts.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword); 198 | default: 199 | return ts.createTypeReferenceNode(type, []); 200 | } 201 | } 202 | if (idl.generic) { 203 | var type = baseTypeConversionMap.get(idl.generic) || idl.generic; 204 | return ts.createTypeReferenceNode(ts.createIdentifier(type), idl.idlType.map(convertType)); 205 | } 206 | if (idl.union) { 207 | return ts.createUnionTypeNode(idl.idlType.map(convertType)); 208 | } 209 | console.log(newUnsupportedError('Unsupported IDL type', idl)); 210 | return ts.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword); 211 | } 212 | function convertEnum(idl) { 213 | return ts.createTypeAliasDeclaration(undefined, undefined, ts.createIdentifier(idl.name), undefined, ts.createUnionTypeNode(idl.values.map(function (it) { return ts.createLiteralTypeNode(ts.createStringLiteral(it.value)); }))); 214 | } 215 | function convertCallback(idl) { 216 | return ts.createTypeAliasDeclaration(undefined, undefined, ts.createIdentifier(idl.name), undefined, ts.createFunctionTypeNode(undefined, idl.arguments.map(convertArgument), convertType(idl.idlType))); 217 | } 218 | function newUnsupportedError(message, idl) { 219 | return new Error("\n " + message + "\n " + JSON.stringify(idl, null, 2) + "\n\n Please file an issue at https://github.com/giniedp/webidl2ts and provide the used idl file or example.\n"); 220 | } 221 | -------------------------------------------------------------------------------- /src/convert-idl.ts: -------------------------------------------------------------------------------- 1 | import * as webidl2 from 'webidl2' 2 | import * as ts from 'typescript' 3 | import { Options } from './types' 4 | 5 | const bufferSourceTypes = [ 6 | 'ArrayBuffer', 7 | 'ArrayBufferView', 8 | 'DataView', 9 | 'Int8Array', 10 | 'Uint8Array', 11 | 'Int16Array', 12 | 'Uint16Array', 13 | 'Uint8ClampedArray', 14 | 'Int32Array', 15 | 'Uint32Array', 16 | 'Float32Array', 17 | 'Float64Array', 18 | ] 19 | const integerTypes = ['byte', 'octet', 'short', 'unsigned short', 'long', 'unsigned long', 'long long', 'unsigned long long'] 20 | const stringTypes = ['ByteString', 'DOMString', 'USVString', 'CSSOMString'] 21 | const floatTypes = ['float', 'unrestricted float', 'double', 'unrestricted double'] 22 | const sameTypes = ['any', 'boolean', 'Date', 'Function', 'Promise', 'void'] 23 | const baseTypeConversionMap = new Map([ 24 | ...[...bufferSourceTypes].map((type) => [type, type] as [string, string]), 25 | ...[...integerTypes].map((type) => [type, 'number'] as [string, string]), 26 | ...[...floatTypes].map((type) => [type, 'number'] as [string, string]), 27 | ...[...stringTypes].map((type) => [type, 'string'] as [string, string]), 28 | ...[...sameTypes].map((type) => [type, type] as [string, string]), 29 | ['object', 'any'], 30 | ['sequence', 'Array'], 31 | ['record', 'Record'], 32 | ['FrozenArray', 'ReadonlyArray'], 33 | ['EventHandler', 'EventHandler'], 34 | ['VoidPtr', 'unknown'], 35 | ]) 36 | 37 | export function convertIDL(rootTypes: webidl2.IDLRootType[], options?: Options): ts.Statement[] { 38 | const nodes: ts.Statement[] = [] 39 | for (const rootType of rootTypes) { 40 | switch (rootType.type) { 41 | case 'interface': 42 | case 'interface mixin': 43 | case 'dictionary': 44 | nodes.push(convertInterface(rootType, options)) 45 | for (const attr of rootType.extAttrs) { 46 | if (attr.name === 'Exposed' && attr.rhs?.value === 'Window') { 47 | nodes.push( 48 | ts.createVariableStatement( 49 | [ts.createModifier(ts.SyntaxKind.DeclareKeyword)], 50 | ts.createVariableDeclarationList( 51 | [ 52 | ts.createVariableDeclaration( 53 | ts.createIdentifier(rootType.name), 54 | ts.createTypeReferenceNode(ts.createIdentifier(rootType.name), undefined), 55 | undefined, 56 | ), 57 | ], 58 | undefined, 59 | ), 60 | ), 61 | ) 62 | } 63 | } 64 | break 65 | case 'includes': 66 | nodes.push(convertInterfaceIncludes(rootType)) 67 | break 68 | case 'enum': 69 | nodes.push(convertEnum(rootType)) 70 | break 71 | case 'callback': 72 | nodes.push(convertCallback(rootType)) 73 | break 74 | case 'typedef': 75 | nodes.push(convertTypedef(rootType)) 76 | break 77 | default: 78 | console.log(newUnsupportedError('Unsupported IDL type', rootType)) 79 | break 80 | } 81 | } 82 | return nodes 83 | } 84 | 85 | function convertTypedef(idl: webidl2.TypedefType) { 86 | return ts.createTypeAliasDeclaration(undefined, undefined, ts.createIdentifier(idl.name), undefined, convertType(idl.idlType)) 87 | } 88 | 89 | function createIterableMethods(name: string, keyType: ts.TypeNode, valueType: ts.TypeNode, pair: boolean, async: boolean) { 90 | return [ 91 | ts.createMethodSignature( 92 | [], 93 | [], 94 | ts.createExpressionWithTypeArguments( 95 | pair ? [ts.createTupleTypeNode([keyType, valueType])] : [valueType], 96 | ts.createIdentifier(async ? 'AsyncIterableIterator' : 'IterableIterator'), 97 | ), 98 | async ? '[Symbol.asyncIterator]' : '[Symbol.iterator]', 99 | undefined, 100 | ), 101 | ts.createMethodSignature( 102 | [], 103 | [], 104 | ts.createExpressionWithTypeArguments( 105 | [ts.createTupleTypeNode([keyType, valueType])], 106 | ts.createIdentifier(async ? 'AsyncIterableIterator' : 'IterableIterator'), 107 | ), 108 | 'entries', 109 | undefined, 110 | ), 111 | ts.createMethodSignature( 112 | [], 113 | [], 114 | ts.createExpressionWithTypeArguments([keyType], ts.createIdentifier(async ? 'AsyncIterableIterator' : 'IterableIterator')), 115 | 'keys', 116 | undefined, 117 | ), 118 | ts.createMethodSignature( 119 | [], 120 | [], 121 | ts.createExpressionWithTypeArguments([valueType], ts.createIdentifier(async ? 'AsyncIterableIterator' : 'IterableIterator')), 122 | 'values', 123 | undefined, 124 | ), 125 | ts.createMethodSignature( 126 | [], 127 | [ 128 | ts.createParameter( 129 | [], 130 | [], 131 | undefined, 132 | 'callbackfn', 133 | undefined, 134 | ts.createFunctionTypeNode( 135 | [], 136 | [ 137 | ts.createParameter([], [], undefined, 'value', undefined, valueType), 138 | ts.createParameter([], [], undefined, pair ? 'key' : 'index', undefined, keyType), 139 | ts.createParameter( 140 | [], 141 | [], 142 | undefined, 143 | pair ? 'iterable' : 'array', 144 | undefined, 145 | pair ? ts.createTypeReferenceNode(name, []) : ts.createArrayTypeNode(valueType), 146 | ), 147 | ], 148 | ts.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword), 149 | ), 150 | ), 151 | ts.createParameter( 152 | [], 153 | [], 154 | undefined, 155 | 'thisArg', 156 | ts.createToken(ts.SyntaxKind.QuestionToken), 157 | ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword), 158 | ), 159 | ], 160 | ts.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword), 161 | 'forEach', 162 | undefined, 163 | ), 164 | ] 165 | } 166 | 167 | function convertInterface(idl: webidl2.InterfaceType | webidl2.DictionaryType | webidl2.InterfaceMixinType, options?: Options) { 168 | const members: ts.TypeElement[] = [] 169 | const inheritance = [] 170 | if ('inheritance' in idl && idl.inheritance) { 171 | inheritance.push(ts.createExpressionWithTypeArguments(undefined, ts.createIdentifier(idl.inheritance))) 172 | } 173 | 174 | idl.members.forEach((member: webidl2.IDLInterfaceMemberType | webidl2.FieldType) => { 175 | switch (member.type) { 176 | case 'attribute': 177 | if (options?.emscripten) { 178 | members.push(createAttributeGetter(member)) 179 | members.push(createAttributeSetter(member)) 180 | } 181 | members.push(convertMemberAttribute(member)) 182 | break 183 | case 'operation': 184 | if (member.name === idl.name) { 185 | members.push(convertMemberConstructor(member, options)) 186 | } else { 187 | members.push(convertMemberOperation(member)) 188 | } 189 | break 190 | case 'constructor': 191 | members.push(convertMemberConstructor(member, options)) 192 | break 193 | case 'field': 194 | members.push(convertMemberField(member)) 195 | break 196 | case 'const': 197 | members.push(convertMemberConst(member)) 198 | break 199 | case 'iterable': { 200 | type Members = Array 201 | const indexedPropertyGetter = (idl.members as Members).find( 202 | (member): member is webidl2.OperationMemberType => 203 | member.type === 'operation' && member.special === 'getter' && member.arguments[0].idlType.idlType === 'unsigned long', 204 | ) 205 | 206 | if ((indexedPropertyGetter && member.idlType.length === 1) || member.idlType.length === 2) { 207 | const keyType = convertType(indexedPropertyGetter ? indexedPropertyGetter.arguments[0].idlType : member.idlType[0]) 208 | const valueType = convertType(member.idlType[member.idlType.length - 1]) 209 | members.push(...createIterableMethods(idl.name, keyType, valueType, member.idlType.length === 2, member.async)) 210 | } 211 | break 212 | } 213 | default: 214 | console.log(newUnsupportedError('Unsupported IDL member', member)) 215 | break 216 | } 217 | }) 218 | 219 | if (options?.emscripten) { 220 | return ts.createClassDeclaration( 221 | undefined, 222 | [], 223 | ts.createIdentifier(idl.name), 224 | undefined, 225 | !inheritance.length ? undefined : [ts.createHeritageClause(ts.SyntaxKind.ExtendsKeyword, inheritance)], 226 | members as any, // TODO: 227 | ) 228 | } 229 | 230 | return ts.createInterfaceDeclaration( 231 | undefined, 232 | [], 233 | ts.createIdentifier(idl.name), 234 | undefined, 235 | !inheritance.length ? undefined : [ts.createHeritageClause(ts.SyntaxKind.ExtendsKeyword, inheritance)], 236 | members, 237 | ) 238 | } 239 | 240 | function convertInterfaceIncludes(idl: webidl2.IncludesType) { 241 | return ts.createInterfaceDeclaration( 242 | undefined, 243 | [], 244 | ts.createIdentifier(idl.target), 245 | undefined, 246 | [ 247 | ts.createHeritageClause(ts.SyntaxKind.ExtendsKeyword, [ 248 | ts.createExpressionWithTypeArguments(undefined, ts.createIdentifier(idl.includes)), 249 | ]), 250 | ], 251 | [], 252 | ) 253 | } 254 | 255 | function createAttributeGetter(value: webidl2.AttributeMemberType) { 256 | return ts.createMethodSignature([], [], convertType(value.idlType), 'get_' + value.name, undefined) 257 | } 258 | 259 | function createAttributeSetter(value: webidl2.AttributeMemberType) { 260 | const parameter = ts.createParameter([], [], undefined, value.name, undefined, convertType(value.idlType)) 261 | return ts.createMethodSignature([], [parameter], ts.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword), 'set_' + value.name, undefined) 262 | } 263 | 264 | function convertMemberOperation(idl: webidl2.OperationMemberType) { 265 | const args = idl.arguments.map(convertArgument) 266 | return ts.createMethodSignature([], args, convertType(idl.idlType), idl.name, undefined) 267 | } 268 | 269 | function convertMemberConstructor(idl: webidl2.ConstructorMemberType | webidl2.OperationMemberType, options?: Options) { 270 | const args = idl.arguments.map(convertArgument) 271 | if (options.emscripten) { 272 | return ts.createMethodSignature([], args, undefined, 'constructor', undefined) 273 | } 274 | return ts.createConstructSignature([], args, undefined) 275 | } 276 | 277 | function convertMemberField(idl: webidl2.FieldType) { 278 | const optional = !idl.required ? ts.createToken(ts.SyntaxKind.QuestionToken) : undefined 279 | return ts.createPropertySignature(undefined, ts.createIdentifier(idl.name), optional, convertType(idl.idlType), undefined) 280 | } 281 | 282 | function convertMemberConst(idl: webidl2.ConstantMemberType) { 283 | return ts.createPropertySignature( 284 | [ts.createModifier(ts.SyntaxKind.ReadonlyKeyword)], 285 | ts.createIdentifier(idl.name), 286 | undefined, 287 | convertType(idl.idlType), 288 | undefined, 289 | ) 290 | } 291 | 292 | function convertMemberAttribute(idl: webidl2.AttributeMemberType) { 293 | return ts.createPropertySignature( 294 | [idl.readonly ? ts.createModifier(ts.SyntaxKind.ReadonlyKeyword) : null].filter((it) => it != null), 295 | ts.createIdentifier(idl.name), 296 | undefined, 297 | convertType(idl.idlType), 298 | undefined, 299 | ) 300 | } 301 | 302 | function convertArgument(idl: webidl2.Argument) { 303 | const optional = idl.optional ? ts.createToken(ts.SyntaxKind.QuestionToken) : undefined 304 | return ts.createParameter([], [], undefined, idl.name, optional, convertType(idl.idlType)) 305 | } 306 | 307 | function convertType(idl: webidl2.IDLTypeDescription): ts.TypeNode { 308 | if (typeof idl.idlType === 'string') { 309 | const type = baseTypeConversionMap.get(idl.idlType) || idl.idlType 310 | switch (type) { 311 | case 'number': 312 | return ts.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword) 313 | case 'string': 314 | return ts.createKeywordTypeNode(ts.SyntaxKind.StringKeyword) 315 | case 'void': 316 | return ts.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword) 317 | default: 318 | return ts.createTypeReferenceNode(type, []) 319 | } 320 | } 321 | if (idl.generic) { 322 | const type = baseTypeConversionMap.get(idl.generic) || idl.generic 323 | return ts.createTypeReferenceNode(ts.createIdentifier(type), idl.idlType.map(convertType)) 324 | } 325 | if (idl.union) { 326 | return ts.createUnionTypeNode(idl.idlType.map(convertType)) 327 | } 328 | 329 | console.log(newUnsupportedError('Unsupported IDL type', idl)) 330 | return ts.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword) 331 | } 332 | 333 | function convertEnum(idl: webidl2.EnumType) { 334 | return ts.createTypeAliasDeclaration( 335 | undefined, 336 | undefined, 337 | ts.createIdentifier(idl.name), 338 | undefined, 339 | ts.createUnionTypeNode(idl.values.map((it) => ts.createLiteralTypeNode(ts.createStringLiteral(it.value)))), 340 | ) 341 | } 342 | 343 | function convertCallback(idl: webidl2.CallbackType) { 344 | return ts.createTypeAliasDeclaration( 345 | undefined, 346 | undefined, 347 | ts.createIdentifier(idl.name), 348 | undefined, 349 | ts.createFunctionTypeNode(undefined, idl.arguments.map(convertArgument), convertType(idl.idlType)), 350 | ) 351 | } 352 | 353 | function newUnsupportedError(message: string, idl: unknown) { 354 | return new Error(` 355 | ${message} 356 | ${JSON.stringify(idl, null, 2)} 357 | 358 | Please file an issue at https://github.com/giniedp/webidl2ts and provide the used idl file or example. 359 | `) 360 | } 361 | -------------------------------------------------------------------------------- /input.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "url": "https://www.w3.org/TR/webxr/", 4 | "title": "WebXR" 5 | }, 6 | { 7 | "url": "https://www.w3.org/TR/beacon/", 8 | "title": "Beacon" 9 | }, 10 | { 11 | "url": "https://www.w3.org/TR/clipboard-apis/", 12 | "title": "Clipboard" 13 | }, 14 | { 15 | "url": "https://compat.spec.whatwg.org/", 16 | "title": "Compatibility", 17 | "deprecated": true 18 | }, 19 | { 20 | "url": "https://console.spec.whatwg.org/", 21 | "title": "Console" 22 | }, 23 | { 24 | "url": "https://www.w3.org/TR/credential-management-1/", 25 | "title": "Credential Management" 26 | }, 27 | { 28 | "url": "https://www.w3.org/TR/css-animations-1/", 29 | "title": "CSS Animations" 30 | }, 31 | { 32 | "url": "https://www.w3.org/TR/css-backgrounds-3/", 33 | "title": "CSS Backgrounds and Borders" 34 | }, 35 | { 36 | "url": "https://drafts.csswg.org/css-backgrounds-4/", 37 | "title": "CSS Backgrounds and Borders Level 4" 38 | }, 39 | { 40 | "url": "https://www.w3.org/TR/css-ui-3/", 41 | "title": "CSS Basic User Interface" 42 | }, 43 | { 44 | "url": "https://www.w3.org/TR/css-align-3/", 45 | "title": "CSS Box Alignment" 46 | }, 47 | { 48 | "url": "https://www.w3.org/TR/css-cascade-3/", 49 | "title": "CSS Cascading and Inheritance" 50 | }, 51 | { 52 | "url": "https://www.w3.org/TR/css-color-3/", 53 | "title": "CSS Color" 54 | }, 55 | { 56 | "url": "https://drafts.csswg.org/css-conditional-3/", 57 | "title": "CSS Conditional Rules" 58 | }, 59 | { 60 | "url": "https://www.w3.org/TR/fill-stroke-3/", 61 | "title": "CSS Fill and Stroke" 62 | }, 63 | { 64 | "url": "https://www.w3.org/TR/css-flexbox-1/", 65 | "title": "CSS Flexible Box Layout" 66 | }, 67 | { 68 | "url": "https://www.w3.org/TR/css-fonts-3/", 69 | "title": "CSS Fonts" 70 | }, 71 | { 72 | "url": "https://www.w3.org/TR/css-break-3/", 73 | "title": "CSS Fragmentation" 74 | }, 75 | { 76 | "url": "https://www.w3.org/TR/css-grid-1/", 77 | "title": "CSS Grid Layout" 78 | }, 79 | { 80 | "url": "https://drafts.csswg.org/css-images-3/", 81 | "title": "CSS Images" 82 | }, 83 | { 84 | "url": "https://www.w3.org/TR/css-inline-3/", 85 | "title": "CSS Inline Layout" 86 | }, 87 | { 88 | "url": "https://www.w3.org/TR/css-logical-1/", 89 | "title": "CSS Logical Properties and Values" 90 | }, 91 | { 92 | "url": "https://drafts.fxtf.org/css-masking-1/", 93 | "title": "CSS Masking" 94 | }, 95 | { 96 | "url": "https://www.w3.org/TR/css-multicol-1/", 97 | "title": "CSS Multi-column Layout" 98 | }, 99 | { 100 | "url": "https://drafts.csswg.org/cssom/", 101 | "title": "CSS Object Model" 102 | }, 103 | { 104 | "url": "https://drafts.csswg.org/cssom-view/", 105 | "title": "CSSOM View" 106 | }, 107 | { 108 | "url": "https://www.w3.org/TR/css-overflow-3/", 109 | "title": "CSS Overflow" 110 | }, 111 | { 112 | "url": "https://www.w3.org/TR/css-overscroll-1/", 113 | "title": "CSS Overscroll Behavior" 114 | }, 115 | { 116 | "url": "https://www.w3.org/TR/css-ruby-1/", 117 | "title": "CSS Ruby Layout" 118 | }, 119 | { 120 | "url": "https://drafts.csswg.org/css-scroll-anchoring/", 121 | "title": "CSS Scroll Anchoring" 122 | }, 123 | { 124 | "url": "https://www.w3.org/TR/css-text-3/", 125 | "title": "CSS Text" 126 | }, 127 | { 128 | "url": "https://www.w3.org/TR/css-text-decor-3/", 129 | "title": "CSS Text Decoration" 130 | }, 131 | { 132 | "url": "https://www.w3.org/TR/css-transitions-1/", 133 | "title": "CSS Transitions" 134 | }, 135 | { 136 | "url": "https://www.w3.org/TR/css-transforms-1/", 137 | "title": "CSS Transforms" 138 | }, 139 | { 140 | "url": "https://drafts.csswg.org/css-transforms-2/", 141 | "title": "CSS Transforms Level 2" 142 | }, 143 | { 144 | "url": "https://www.w3.org/TR/css-will-change/", 145 | "title": "CSS Will Change" 146 | }, 147 | { 148 | "url": "https://www.w3.org/TR/css-writing-modes-3/", 149 | "title": "CSS Writing Modes" 150 | }, 151 | { 152 | "url": "https://www.w3.org/TR/CSS22/box.html", 153 | "title": "CSS2 Box" 154 | }, 155 | { 156 | "url": "https://www.w3.org/TR/CSS22/generate.html", 157 | "title": "CSS2 Generated content" 158 | }, 159 | { 160 | "url": "https://www.w3.org/TR/CSS22/page.html", 161 | "title": "CSS2 Paged media" 162 | }, 163 | { 164 | "url": "https://www.w3.org/TR/CSS22/tables.html", 165 | "title": "CSS2 Tables" 166 | }, 167 | { 168 | "url": "https://www.w3.org/TR/CSS22/text.html", 169 | "title": "CSS2 Text" 170 | }, 171 | { 172 | "url": "https://www.w3.org/TR/CSS22/visufx.html", 173 | "title": "CSS2 Visual effect" 174 | }, 175 | { 176 | "url": "https://www.w3.org/TR/CSS22/visuren.html", 177 | "title": "CSS2 Visual formatting" 178 | }, 179 | { 180 | "url": "https://www.w3.org/TR/CSS22/visudet.html", 181 | "title": "CSS2 Visual formatting details" 182 | }, 183 | { 184 | "url": "https://w3c.github.io/deviceorientation/", 185 | "title": "DeviceOrientation Event" 186 | }, 187 | { 188 | "url": "https://dom.spec.whatwg.org/", 189 | "title": "DOM" 190 | }, 191 | { 192 | "url": "https://w3c.github.io/DOM-Parsing/", 193 | "title": "DOM Parsing and Serialization" 194 | }, 195 | { 196 | "url": "https://encoding.spec.whatwg.org/", 197 | "title": "Encoding" 198 | }, 199 | { 200 | "url": "https://www.w3.org/TR/encrypted-media/", 201 | "title": "Encrypted Media Extensions" 202 | }, 203 | { 204 | "url": "https://fetch.spec.whatwg.org/", 205 | "title": "Fetch" 206 | }, 207 | { 208 | "url": "https://w3c.github.io/FileAPI/", 209 | "title": "File" 210 | }, 211 | { 212 | "url": "https://www.w3.org/TR/filter-effects-1/", 213 | "title": "Filter Effects" 214 | }, 215 | { 216 | "url": "https://fullscreen.spec.whatwg.org/", 217 | "title": "Fullscreen" 218 | }, 219 | { 220 | "url": "https://www.w3.org/TR/gamepad/", 221 | "title": "Gamepad" 222 | }, 223 | { 224 | "url": "https://w3c.github.io/gamepad/extensions.html", 225 | "title": "Gamepad Extensions" 226 | }, 227 | { 228 | "url": "https://www.w3.org/TR/geolocation-API/", 229 | "title": "Geolocation" 230 | }, 231 | { 232 | "url": "https://www.w3.org/TR/geometry-1/", 233 | "title": "Geometry Interfaces" 234 | }, 235 | { 236 | "url": "https://www.w3.org/TR/hr-time-2/", 237 | "title": "High Resolution Time" 238 | }, 239 | { 240 | "url": "https://html.spec.whatwg.org/multipage/browsing-the-web.html", 241 | "title": "HTML - Browsing the Web" 242 | }, 243 | { 244 | "url": "https://html.spec.whatwg.org/multipage/canvas.html", 245 | "title": "HTML - Canvas" 246 | }, 247 | { 248 | "url": "https://html.spec.whatwg.org/multipage/common-dom-interfaces.html", 249 | "title": "HTML - Common DOM interfaces" 250 | }, 251 | { 252 | "url": "https://html.spec.whatwg.org/multipage/comms.html", 253 | "title": "HTML - Communication" 254 | }, 255 | { 256 | "url": "https://html.spec.whatwg.org/multipage/custom-elements.html", 257 | "title": "HTML - Custom elements" 258 | }, 259 | { 260 | "url": "https://html.spec.whatwg.org/multipage/dom.html", 261 | "title": "HTML - DOM" 262 | }, 263 | { 264 | "url": "https://html.spec.whatwg.org/multipage/dnd.html", 265 | "title": "HTML - Drag and drop" 266 | }, 267 | { 268 | "url": "https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html", 269 | "title": "HTML - Dynamic markup insertion" 270 | }, 271 | { 272 | "url": "https://html.spec.whatwg.org/multipage/edits.html", 273 | "title": "HTML - Edits" 274 | }, 275 | { 276 | "url": "https://html.spec.whatwg.org/multipage/embedded-content.html", 277 | "title": "HTML - Embedded content" 278 | }, 279 | { 280 | "url": "https://html.spec.whatwg.org/multipage/form-control-infrastructure.html", 281 | "title": "HTML - Form control infrastructure" 282 | }, 283 | { 284 | "url": "https://html.spec.whatwg.org/multipage/form-elements.html", 285 | "title": "HTML - Form elements" 286 | }, 287 | { 288 | "url": "https://html.spec.whatwg.org/multipage/forms.html", 289 | "title": "HTML - Forms" 290 | }, 291 | { 292 | "url": "https://html.spec.whatwg.org/multipage/grouping-content.html", 293 | "title": "HTML - Grouping content" 294 | }, 295 | { 296 | "url": "https://html.spec.whatwg.org/multipage/interactive-elements.html", 297 | "title": "HTML - Interactive elements" 298 | }, 299 | { 300 | "url": "https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html", 301 | "title": "HTML - ImageBitmap and animations" 302 | }, 303 | { 304 | "url": "https://html.spec.whatwg.org/multipage/image-maps.html", 305 | "title": "HTML - Image maps" 306 | }, 307 | { 308 | "url": "https://html.spec.whatwg.org/multipage/links.html", 309 | "title": "HTML - Links" 310 | }, 311 | { 312 | "url": "https://html.spec.whatwg.org/multipage/media.html", 313 | "title": "HTML - Media" 314 | }, 315 | { 316 | "url": "https://html.spec.whatwg.org/multipage/obsolete.html", 317 | "title": "HTML - Obsolete features", 318 | "deprecated": true 319 | }, 320 | { 321 | "url": "https://html.spec.whatwg.org/multipage/offline.html", 322 | "title": "HTML - Offline Web applications", 323 | "deprecated": true 324 | }, 325 | { 326 | "url": "https://html.spec.whatwg.org/multipage/scripting.html", 327 | "title": "HTML - Scripting" 328 | }, 329 | { 330 | "url": "https://html.spec.whatwg.org/multipage/sections.html", 331 | "title": "HTML - Sections" 332 | }, 333 | { 334 | "url": "https://html.spec.whatwg.org/multipage/semantics.html", 335 | "title": "HTML - Semantics" 336 | }, 337 | { 338 | "url": "https://html.spec.whatwg.org/multipage/server-sent-events.html", 339 | "title": "HTML - Server-sent events" 340 | }, 341 | { 342 | "url": "https://html.spec.whatwg.org/multipage/history.html", 343 | "title": "HTML - Session history and navigation" 344 | }, 345 | { 346 | "url": "https://html.spec.whatwg.org/multipage/system-state.html", 347 | "title": "HTML - System state and capabilities" 348 | }, 349 | { 350 | "url": "https://html.spec.whatwg.org/multipage/tables.html", 351 | "title": "HTML - Tabular data" 352 | }, 353 | { 354 | "url": "https://html.spec.whatwg.org/multipage/text-level-semantics.html", 355 | "title": "HTML - Text level semantics" 356 | }, 357 | { 358 | "url": "https://html.spec.whatwg.org/multipage/input.html", 359 | "title": "HTML - The input element" 360 | }, 361 | { 362 | "url": "https://html.spec.whatwg.org/multipage/iframe-embed-object.html", 363 | "title": "HTML - The iframe, embed, and object elements" 364 | }, 365 | { 366 | "url": "https://html.spec.whatwg.org/multipage/webappapis.html", 367 | "title": "HTML - Web application APIs" 368 | }, 369 | { 370 | "url": "https://html.spec.whatwg.org/multipage/web-sockets.html", 371 | "title": "HTML - Web sockets" 372 | }, 373 | { 374 | "url": "https://html.spec.whatwg.org/multipage/webstorage.html", 375 | "title": "HTML - Web storage" 376 | }, 377 | { 378 | "url": "https://html.spec.whatwg.org/multipage/workers.html", 379 | "title": "HTML - Web workers" 380 | }, 381 | { 382 | "url": "https://html.spec.whatwg.org/multipage/interaction.html", 383 | "title": "HTML - User interaction" 384 | }, 385 | { 386 | "url": "https://w3c.github.io/webrtc-identity/", 387 | "title": "Identity for WebRTC" 388 | }, 389 | { 390 | "url": "https://www.w3.org/TR/IndexedDB-2/", 391 | "title": "Indexed Database" 392 | }, 393 | { 394 | "url": "https://www.w3.org/TR/intersection-observer/", 395 | "title": "Intersection Observer" 396 | }, 397 | { 398 | "url": "https://w3c.github.io/mediacapture-main/", 399 | "title": "Media Capture and Streams" 400 | }, 401 | { 402 | "url": "https://w3c.github.io/media-playback-quality/", 403 | "title": "Media Playback Quality" 404 | }, 405 | { 406 | "url": "https://www.w3.org/TR/media-source/", 407 | "title": "Media Source Extensions" 408 | }, 409 | { 410 | "url": "https://w3c.github.io/navigation-timing/", 411 | "title": "Navigation Timing" 412 | }, 413 | { 414 | "url": "https://notifications.spec.whatwg.org/", 415 | "title": "Notifications" 416 | }, 417 | { 418 | "url": "https://w3c.github.io/page-visibility/", 419 | "title": "Page Visibility" 420 | }, 421 | { 422 | "url": "https://w3c.github.io/performance-timeline/", 423 | "title": "Performance Timeline" 424 | }, 425 | { 426 | "url": "https://www.w3.org/TR/permissions/", 427 | "title": "Permissions" 428 | }, 429 | { 430 | "url": "https://www.w3.org/TR/pointerevents2/", 431 | "title": "Pointer Events" 432 | }, 433 | { 434 | "url": "https://www.w3.org/TR/pointerlock-2/", 435 | "title": "Pointer Lock" 436 | }, 437 | { 438 | "url": "https://www.w3.org/TR/push-api/", 439 | "title": "Push" 440 | }, 441 | { 442 | "url": "https://www.w3.org/TR/referrer-policy/", 443 | "title": "Referrer Policy" 444 | }, 445 | { 446 | "url": "https://w3c.github.io/resource-timing/", 447 | "title": "Resource Timing" 448 | }, 449 | { 450 | "url": "https://www.w3.org/TR/screen-orientation/", 451 | "title": "Screen Orientation" 452 | }, 453 | { 454 | "url": "https://www.w3.org/TR/secure-contexts/", 455 | "title": "Secure Contexts" 456 | }, 457 | { 458 | "url": "https://www.w3.org/TR/selection-api/", 459 | "title": "Selection" 460 | }, 461 | { 462 | "url": "https://w3c.github.io/ServiceWorker/", 463 | "title": "Service Workers" 464 | }, 465 | { 466 | "url": "https://storage.spec.whatwg.org/", 467 | "title": "Storage" 468 | }, 469 | { 470 | "url": "https://streams.spec.whatwg.org/", 471 | "title": "Streams", 472 | "local": true 473 | }, 474 | { 475 | "url": "https://www.w3.org/TR/SVG2/types.html", 476 | "title": "SVG - Basic Data Types and Interfaces" 477 | }, 478 | { 479 | "url": "https://www.w3.org/TR/SVG2/shapes.html", 480 | "title": "SVG - Basic Shapes" 481 | }, 482 | { 483 | "url": "https://www.w3.org/TR/SVG2/painting.html", 484 | "title": "SVG - Painting" 485 | }, 486 | { 487 | "url": "https://www.w3.org/TR/SVG2/pservers.html", 488 | "title": "SVG - Paint Servers" 489 | }, 490 | { 491 | "url": "https://www.w3.org/TR/SVG2/text.html", 492 | "title": "SVG - Text" 493 | }, 494 | { 495 | "url": "https://w3c.github.io/touch-events/", 496 | "title": "Touch Events" 497 | }, 498 | { 499 | "url": "https://www.w3.org/TR/uievents/", 500 | "title": "UI Events" 501 | }, 502 | { 503 | "url": "https://url.spec.whatwg.org/", 504 | "title": "URL" 505 | }, 506 | { 507 | "url": "https://www.w3.org/TR/user-timing-2/", 508 | "title": "User Timing" 509 | }, 510 | { 511 | "url": "https://www.w3.org/TR/vibration/", 512 | "title": "Vibration" 513 | }, 514 | { 515 | "url": "https://www.w3.org/TR/web-animations-1/", 516 | "title": "Web Animations" 517 | }, 518 | { 519 | "url": "https://www.w3.org/TR/wasm-js-api-1/", 520 | "title": "WebAssembly JavaScript Interface" 521 | }, 522 | { 523 | "url": "https://www.w3.org/TR/wasm-web-api-1/", 524 | "title": "WebAssembly Web API" 525 | }, 526 | { 527 | "url": "https://webaudio.github.io/web-audio-api/", 528 | "title": "Web Audio" 529 | }, 530 | { 531 | "url": "https://www.w3.org/TR/2019/REC-webauthn-1-20190304/", 532 | "title": "Web Authentication" 533 | }, 534 | { 535 | "url": "https://wicg.github.io/background-sync/spec/", 536 | "title": "Web Background Synchronization" 537 | }, 538 | { 539 | "url": "https://w3c.github.io/webcrypto/", 540 | "title": "Web Cryptography" 541 | }, 542 | { 543 | "url": "https://www.w3.org/TR/webdriver1/", 544 | "title": "WebDriver" 545 | }, 546 | { 547 | "url": "https://www.khronos.org/registry/webgl/specs/latest/1.0/webgl.idl", 548 | "title": "WebGL 1" 549 | }, 550 | { 551 | "url": "https://www.khronos.org/registry/webgl/specs/latest/2.0/webgl2.idl", 552 | "title": "WebGL 2" 553 | }, 554 | { 555 | "url": "https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/", 556 | "title": "WebGL ANGLE_instanced_arrays" 557 | }, 558 | { 559 | "url": "https://www.khronos.org/registry/webgl/extensions/EXT_blend_minmax/", 560 | "title": "WebGL EXT_blend_minmax" 561 | }, 562 | { 563 | "url": "https://www.khronos.org/registry/webgl/extensions/EXT_frag_depth/", 564 | "title": "WebGL EXT_frag_depth" 565 | }, 566 | { 567 | "url": "https://www.khronos.org/registry/webgl/extensions/EXT_shader_texture_lod/", 568 | "title": "WebGL EXT_shader_texture_lod" 569 | }, 570 | { 571 | "url": "https://www.khronos.org/registry/webgl/extensions/EXT_texture_filter_anisotropic/", 572 | "title": "WebGL EXT_texture_filter_anisotropic" 573 | }, 574 | { 575 | "url": "https://www.khronos.org/registry/webgl/extensions/EXT_sRGB/", 576 | "title": "WebGL EXT_sRGB" 577 | }, 578 | { 579 | "url": "https://www.khronos.org/registry/webgl/extensions/OES_element_index_uint/", 580 | "title": "WebGL OES_element_index_uint" 581 | }, 582 | { 583 | "url": "https://www.khronos.org/registry/webgl/extensions/OES_standard_derivatives/", 584 | "title": "WebGL OES_standard_derivatives" 585 | }, 586 | { 587 | "url": "https://www.khronos.org/registry/webgl/extensions/OES_texture_half_float/", 588 | "title": "WebGL OES_texture_half_float" 589 | }, 590 | { 591 | "url": "https://www.khronos.org/registry/webgl/extensions/OES_texture_half_float_linear/", 592 | "title": "WebGL OES_texture_half_float_linear" 593 | }, 594 | { 595 | "url": "https://www.khronos.org/registry/webgl/extensions/OES_texture_float/", 596 | "title": "WebGL OES_texture_float" 597 | }, 598 | { 599 | "url": "https://www.khronos.org/registry/webgl/extensions/OES_texture_float_linear/", 600 | "title": "WebGL OES_texture_float_linear" 601 | }, 602 | { 603 | "url": "https://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/", 604 | "title": "WebGL OES_vertex_array_object" 605 | }, 606 | { 607 | "url": "https://www.khronos.org/registry/webgl/extensions/WEBGL_color_buffer_float/", 608 | "title": "WebGL WEBGL_color_buffer_float" 609 | }, 610 | { 611 | "url": "https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/", 612 | "title": "WebGL WEBGL_compressed_texture_astc" 613 | }, 614 | { 615 | "url": "https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/", 616 | "title": "WebGL WEBGL_compressed_texture_s3tc" 617 | }, 618 | { 619 | "url": "https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc_srgb/", 620 | "title": "WebGL WEBGL_compressed_texture_s3tc_srgb" 621 | }, 622 | { 623 | "url": "https://www.khronos.org/registry/webgl/extensions/WEBGL_debug_renderer_info/", 624 | "title": "WebGL WEBGL_debug_renderer_info" 625 | }, 626 | { 627 | "url": "https://www.khronos.org/registry/webgl/extensions/WEBGL_debug_shaders/", 628 | "title": "WebGL WEBGL_debug_shaders" 629 | }, 630 | { 631 | "url": "https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/", 632 | "title": "WebGL WEBGL_depth_texture" 633 | }, 634 | { 635 | "url": "https://www.khronos.org/registry/webgl/extensions/WEBGL_draw_buffers/", 636 | "title": "WebGL WEBGL_draw_buffers" 637 | }, 638 | { 639 | "url": "https://www.khronos.org/registry/webgl/extensions/WEBGL_lose_context/", 640 | "title": "WebGL WEBGL_lose_context" 641 | }, 642 | { 643 | "url": "https://heycam.github.io/webidl/", 644 | "title": "Web IDL" 645 | }, 646 | { 647 | "url": "https://w3c.github.io/webrtc-pc/", 648 | "title": "WebRTC" 649 | }, 650 | { 651 | "url": "https://www.w3.org/TR/web-share/", 652 | "title": "Web Share" 653 | }, 654 | { 655 | "url": "https://wicg.github.io/speech-api/", 656 | "title": "Web Speech API" 657 | }, 658 | { 659 | "url": "https://wicg.github.io/visual-viewport/", 660 | "title": "Web VisualViewport API" 661 | }, 662 | { 663 | "url": "https://www.w3.org/TR/webvtt1/", 664 | "title": "WebVTT" 665 | }, 666 | { 667 | "url": "https://drafts.css-houdini.org/worklets/", 668 | "title": "Worklets" 669 | }, 670 | { 671 | "url": "https://xhr.spec.whatwg.org/", 672 | "title": "XMLHttpRequest" 673 | }, 674 | { 675 | "url": "https://html.spec.whatwg.org/multipage/web-messaging.html", 676 | "title": "Web Messaging" 677 | } 678 | ] 679 | -------------------------------------------------------------------------------- /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.0.0": 6 | version "7.10.4" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" 8 | integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== 9 | dependencies: 10 | "@babel/highlight" "^7.10.4" 11 | 12 | "@babel/helper-validator-identifier@^7.10.4": 13 | version "7.10.4" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" 15 | integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== 16 | 17 | "@babel/highlight@^7.10.4": 18 | version "7.10.4" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" 20 | integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.10.4" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@eslint/eslintrc@^0.2.1": 27 | version "0.2.1" 28 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.1.tgz#f72069c330461a06684d119384435e12a5d76e3c" 29 | integrity sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA== 30 | dependencies: 31 | ajv "^6.12.4" 32 | debug "^4.1.1" 33 | espree "^7.3.0" 34 | globals "^12.1.0" 35 | ignore "^4.0.6" 36 | import-fresh "^3.2.1" 37 | js-yaml "^3.13.1" 38 | lodash "^4.17.19" 39 | minimatch "^3.0.4" 40 | strip-json-comments "^3.1.1" 41 | 42 | "@nodelib/fs.scandir@2.1.3": 43 | version "2.1.3" 44 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" 45 | integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== 46 | dependencies: 47 | "@nodelib/fs.stat" "2.0.3" 48 | run-parallel "^1.1.9" 49 | 50 | "@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": 51 | version "2.0.3" 52 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" 53 | integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== 54 | 55 | "@nodelib/fs.walk@^1.2.3": 56 | version "1.2.4" 57 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" 58 | integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== 59 | dependencies: 60 | "@nodelib/fs.scandir" "2.1.3" 61 | fastq "^1.6.0" 62 | 63 | "@types/color-name@^1.1.1": 64 | version "1.1.1" 65 | resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" 66 | integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== 67 | 68 | "@types/json-schema@^7.0.3": 69 | version "7.0.6" 70 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" 71 | integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== 72 | 73 | "@types/node@^14.14.6": 74 | version "14.14.6" 75 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.6.tgz#146d3da57b3c636cc0d1769396ce1cfa8991147f" 76 | integrity sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw== 77 | 78 | "@types/webidl2@^23.13.5": 79 | version "23.13.5" 80 | resolved "https://registry.yarnpkg.com/@types/webidl2/-/webidl2-23.13.5.tgz#385a5ab204c7e606a6998bfffaa3bf8e5911fa52" 81 | integrity sha512-iWjoXoF6wclVaWKSqaGpB/lyDqQwwfGlnsPcSCtUE7w1MyytcDGBb1IWdQ1ixMdXjHfcQPlu43xcsD2nv85gyw== 82 | 83 | "@types/yargs-parser@*": 84 | version "15.0.0" 85 | resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" 86 | integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== 87 | 88 | "@types/yargs@^15.0.9": 89 | version "15.0.9" 90 | resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.9.tgz#524cd7998fe810cdb02f26101b699cccd156ff19" 91 | integrity sha512-HmU8SeIRhZCWcnRskCs36Q1Q00KBV6Cqh/ora8WN1+22dY07AZdn6Gel8QZ3t26XYPImtcL8WV/eqjhVmMEw4g== 92 | dependencies: 93 | "@types/yargs-parser" "*" 94 | 95 | "@typescript-eslint/eslint-plugin@^4.6.1": 96 | version "4.6.1" 97 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.6.1.tgz#99d77eb7a016fd5a5e749d2c44a7e4c317eb7da3" 98 | integrity sha512-SNZyflefTMK2JyrPfFFzzoy2asLmZvZJ6+/L5cIqg4HfKGiW2Gr1Go1OyEVqne/U4QwmoasuMwppoBHWBWF2nA== 99 | dependencies: 100 | "@typescript-eslint/experimental-utils" "4.6.1" 101 | "@typescript-eslint/scope-manager" "4.6.1" 102 | debug "^4.1.1" 103 | functional-red-black-tree "^1.0.1" 104 | regexpp "^3.0.0" 105 | semver "^7.3.2" 106 | tsutils "^3.17.1" 107 | 108 | "@typescript-eslint/experimental-utils@4.6.1": 109 | version "4.6.1" 110 | resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.6.1.tgz#a9c691dfd530a9570274fe68907c24c07a06c4aa" 111 | integrity sha512-qyPqCFWlHZXkEBoV56UxHSoXW2qnTr4JrWVXOh3soBP3q0o7p4pUEMfInDwIa0dB/ypdtm7gLOS0hg0a73ijfg== 112 | dependencies: 113 | "@types/json-schema" "^7.0.3" 114 | "@typescript-eslint/scope-manager" "4.6.1" 115 | "@typescript-eslint/types" "4.6.1" 116 | "@typescript-eslint/typescript-estree" "4.6.1" 117 | eslint-scope "^5.0.0" 118 | eslint-utils "^2.0.0" 119 | 120 | "@typescript-eslint/parser@^4.6.1": 121 | version "4.6.1" 122 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.6.1.tgz#b801bff67b536ecc4a840ac9289ba2be57e02428" 123 | integrity sha512-lScKRPt1wM9UwyKkGKyQDqf0bh6jm8DQ5iN37urRIXDm16GEv+HGEmum2Fc423xlk5NUOkOpfTnKZc/tqKZkDQ== 124 | dependencies: 125 | "@typescript-eslint/scope-manager" "4.6.1" 126 | "@typescript-eslint/types" "4.6.1" 127 | "@typescript-eslint/typescript-estree" "4.6.1" 128 | debug "^4.1.1" 129 | 130 | "@typescript-eslint/scope-manager@4.6.1": 131 | version "4.6.1" 132 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.6.1.tgz#21872b91cbf7adfc7083f17b8041149148baf992" 133 | integrity sha512-f95+80r6VdINYscJY1KDUEDcxZ3prAWHulL4qRDfNVD0I5QAVSGqFkwHERDoLYJJWmEAkUMdQVvx7/c2Hp+Bjg== 134 | dependencies: 135 | "@typescript-eslint/types" "4.6.1" 136 | "@typescript-eslint/visitor-keys" "4.6.1" 137 | 138 | "@typescript-eslint/types@4.6.1": 139 | version "4.6.1" 140 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.6.1.tgz#d3ad7478f53f22e7339dc006ab61aac131231552" 141 | integrity sha512-k2ZCHhJ96YZyPIsykickez+OMHkz06xppVLfJ+DY90i532/Cx2Z+HiRMH8YZQo7a4zVd/TwNBuRCdXlGK4yo8w== 142 | 143 | "@typescript-eslint/typescript-estree@4.6.1": 144 | version "4.6.1" 145 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.6.1.tgz#6025cce724329413f57e4959b2d676fceeca246f" 146 | integrity sha512-/J/kxiyjQQKqEr5kuKLNQ1Finpfb8gf/NpbwqFFYEBjxOsZ621r9AqwS9UDRA1Rrr/eneX/YsbPAIhU2rFLjXQ== 147 | dependencies: 148 | "@typescript-eslint/types" "4.6.1" 149 | "@typescript-eslint/visitor-keys" "4.6.1" 150 | debug "^4.1.1" 151 | globby "^11.0.1" 152 | is-glob "^4.0.1" 153 | lodash "^4.17.15" 154 | semver "^7.3.2" 155 | tsutils "^3.17.1" 156 | 157 | "@typescript-eslint/visitor-keys@4.6.1": 158 | version "4.6.1" 159 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.6.1.tgz#6b125883402d8939df7b54528d879e88f7ba3614" 160 | integrity sha512-owABze4toX7QXwOLT3/D5a8NecZEjEWU1srqxENTfqsY3bwVnl3YYbOh6s1rp2wQKO9RTHFGjKes08FgE7SVMw== 161 | dependencies: 162 | "@typescript-eslint/types" "4.6.1" 163 | eslint-visitor-keys "^2.0.0" 164 | 165 | abab@^2.0.3: 166 | version "2.0.3" 167 | resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" 168 | integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== 169 | 170 | acorn-globals@^6.0.0: 171 | version "6.0.0" 172 | resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" 173 | integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== 174 | dependencies: 175 | acorn "^7.1.1" 176 | acorn-walk "^7.1.1" 177 | 178 | acorn-jsx@^5.2.0: 179 | version "5.3.1" 180 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" 181 | integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== 182 | 183 | acorn-walk@^7.1.1: 184 | version "7.2.0" 185 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" 186 | integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== 187 | 188 | acorn@^7.1.1: 189 | version "7.3.1" 190 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd" 191 | integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA== 192 | 193 | acorn@^7.4.0: 194 | version "7.4.1" 195 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" 196 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 197 | 198 | ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4: 199 | version "6.12.6" 200 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 201 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 202 | dependencies: 203 | fast-deep-equal "^3.1.1" 204 | fast-json-stable-stringify "^2.0.0" 205 | json-schema-traverse "^0.4.1" 206 | uri-js "^4.2.2" 207 | 208 | ajv@^6.5.5: 209 | version "6.12.3" 210 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" 211 | integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== 212 | dependencies: 213 | fast-deep-equal "^3.1.1" 214 | fast-json-stable-stringify "^2.0.0" 215 | json-schema-traverse "^0.4.1" 216 | uri-js "^4.2.2" 217 | 218 | ansi-colors@^4.1.1: 219 | version "4.1.1" 220 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 221 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 222 | 223 | ansi-regex@^4.1.0: 224 | version "4.1.0" 225 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 226 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 227 | 228 | ansi-regex@^5.0.0: 229 | version "5.0.0" 230 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 231 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 232 | 233 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 234 | version "3.2.1" 235 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 236 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 237 | dependencies: 238 | color-convert "^1.9.0" 239 | 240 | ansi-styles@^4.0.0: 241 | version "4.2.1" 242 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" 243 | integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== 244 | dependencies: 245 | "@types/color-name" "^1.1.1" 246 | color-convert "^2.0.1" 247 | 248 | ansi-styles@^4.1.0: 249 | version "4.3.0" 250 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 251 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 252 | dependencies: 253 | color-convert "^2.0.1" 254 | 255 | arg@^4.1.0: 256 | version "4.1.3" 257 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 258 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 259 | 260 | argparse@^1.0.7: 261 | version "1.0.10" 262 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 263 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 264 | dependencies: 265 | sprintf-js "~1.0.2" 266 | 267 | array-union@^2.1.0: 268 | version "2.1.0" 269 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 270 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 271 | 272 | asn1@~0.2.3: 273 | version "0.2.4" 274 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" 275 | integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== 276 | dependencies: 277 | safer-buffer "~2.1.0" 278 | 279 | assert-plus@1.0.0, assert-plus@^1.0.0: 280 | version "1.0.0" 281 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 282 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= 283 | 284 | astral-regex@^1.0.0: 285 | version "1.0.0" 286 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" 287 | integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== 288 | 289 | asynckit@^0.4.0: 290 | version "0.4.0" 291 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 292 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 293 | 294 | aws-sign2@~0.7.0: 295 | version "0.7.0" 296 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 297 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= 298 | 299 | aws4@^1.8.0: 300 | version "1.10.0" 301 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" 302 | integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== 303 | 304 | balanced-match@^1.0.0: 305 | version "1.0.0" 306 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 307 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 308 | 309 | bcrypt-pbkdf@^1.0.0: 310 | version "1.0.2" 311 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 312 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= 313 | dependencies: 314 | tweetnacl "^0.14.3" 315 | 316 | brace-expansion@^1.1.7: 317 | version "1.1.11" 318 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 319 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 320 | dependencies: 321 | balanced-match "^1.0.0" 322 | concat-map "0.0.1" 323 | 324 | braces@^3.0.1: 325 | version "3.0.2" 326 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 327 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 328 | dependencies: 329 | fill-range "^7.0.1" 330 | 331 | browser-process-hrtime@^1.0.0: 332 | version "1.0.0" 333 | resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" 334 | integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== 335 | 336 | buffer-from@^1.0.0: 337 | version "1.1.1" 338 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 339 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 340 | 341 | callsites@^3.0.0: 342 | version "3.1.0" 343 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 344 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 345 | 346 | caseless@~0.12.0: 347 | version "0.12.0" 348 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 349 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= 350 | 351 | chalk@^2.0.0: 352 | version "2.4.2" 353 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 354 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 355 | dependencies: 356 | ansi-styles "^3.2.1" 357 | escape-string-regexp "^1.0.5" 358 | supports-color "^5.3.0" 359 | 360 | chalk@^4.0.0: 361 | version "4.1.0" 362 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" 363 | integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== 364 | dependencies: 365 | ansi-styles "^4.1.0" 366 | supports-color "^7.1.0" 367 | 368 | cliui@^7.0.2: 369 | version "7.0.3" 370 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.3.tgz#ef180f26c8d9bff3927ee52428bfec2090427981" 371 | integrity sha512-Gj3QHTkVMPKqwP3f7B4KPkBZRMR9r4rfi5bXFpg1a+Svvj8l7q5CnkBkVQzfxT5DFSsGk2+PascOgL0JYkL2kw== 372 | dependencies: 373 | string-width "^4.2.0" 374 | strip-ansi "^6.0.0" 375 | wrap-ansi "^7.0.0" 376 | 377 | color-convert@^1.9.0: 378 | version "1.9.3" 379 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 380 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 381 | dependencies: 382 | color-name "1.1.3" 383 | 384 | color-convert@^2.0.1: 385 | version "2.0.1" 386 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 387 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 388 | dependencies: 389 | color-name "~1.1.4" 390 | 391 | color-name@1.1.3: 392 | version "1.1.3" 393 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 394 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 395 | 396 | color-name@~1.1.4: 397 | version "1.1.4" 398 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 399 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 400 | 401 | combined-stream@^1.0.6, combined-stream@~1.0.6: 402 | version "1.0.8" 403 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 404 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 405 | dependencies: 406 | delayed-stream "~1.0.0" 407 | 408 | concat-map@0.0.1: 409 | version "0.0.1" 410 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 411 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 412 | 413 | core-util-is@1.0.2: 414 | version "1.0.2" 415 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 416 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 417 | 418 | cross-spawn@^7.0.2: 419 | version "7.0.3" 420 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 421 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 422 | dependencies: 423 | path-key "^3.1.0" 424 | shebang-command "^2.0.0" 425 | which "^2.0.1" 426 | 427 | cssom@^0.4.4: 428 | version "0.4.4" 429 | resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" 430 | integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== 431 | 432 | cssom@~0.3.6: 433 | version "0.3.8" 434 | resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" 435 | integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== 436 | 437 | cssstyle@^2.2.0: 438 | version "2.3.0" 439 | resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" 440 | integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== 441 | dependencies: 442 | cssom "~0.3.6" 443 | 444 | dashdash@^1.12.0: 445 | version "1.14.1" 446 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 447 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= 448 | dependencies: 449 | assert-plus "^1.0.0" 450 | 451 | data-urls@^2.0.0: 452 | version "2.0.0" 453 | resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" 454 | integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== 455 | dependencies: 456 | abab "^2.0.3" 457 | whatwg-mimetype "^2.3.0" 458 | whatwg-url "^8.0.0" 459 | 460 | debug@^4.0.1, debug@^4.1.1: 461 | version "4.2.0" 462 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" 463 | integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== 464 | dependencies: 465 | ms "2.1.2" 466 | 467 | decimal.js@^10.2.0: 468 | version "10.2.0" 469 | resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.0.tgz#39466113a9e036111d02f82489b5fd6b0b5ed231" 470 | integrity sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw== 471 | 472 | deep-is@^0.1.3, deep-is@~0.1.3: 473 | version "0.1.3" 474 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 475 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 476 | 477 | delayed-stream@~1.0.0: 478 | version "1.0.0" 479 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 480 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 481 | 482 | diff@^4.0.1: 483 | version "4.0.2" 484 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 485 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 486 | 487 | dir-glob@^3.0.1: 488 | version "3.0.1" 489 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 490 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 491 | dependencies: 492 | path-type "^4.0.0" 493 | 494 | doctrine@^3.0.0: 495 | version "3.0.0" 496 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 497 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 498 | dependencies: 499 | esutils "^2.0.2" 500 | 501 | domexception@^2.0.1: 502 | version "2.0.1" 503 | resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" 504 | integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== 505 | dependencies: 506 | webidl-conversions "^5.0.0" 507 | 508 | ecc-jsbn@~0.1.1: 509 | version "0.1.2" 510 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 511 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= 512 | dependencies: 513 | jsbn "~0.1.0" 514 | safer-buffer "^2.1.0" 515 | 516 | emoji-regex@^7.0.1: 517 | version "7.0.3" 518 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 519 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 520 | 521 | emoji-regex@^8.0.0: 522 | version "8.0.0" 523 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 524 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 525 | 526 | enquirer@^2.3.5: 527 | version "2.3.6" 528 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" 529 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 530 | dependencies: 531 | ansi-colors "^4.1.1" 532 | 533 | escalade@^3.1.1: 534 | version "3.1.1" 535 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 536 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 537 | 538 | escape-string-regexp@^1.0.5: 539 | version "1.0.5" 540 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 541 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 542 | 543 | escodegen@^1.14.1: 544 | version "1.14.3" 545 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" 546 | integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== 547 | dependencies: 548 | esprima "^4.0.1" 549 | estraverse "^4.2.0" 550 | esutils "^2.0.2" 551 | optionator "^0.8.1" 552 | optionalDependencies: 553 | source-map "~0.6.1" 554 | 555 | eslint-scope@^5.0.0, eslint-scope@^5.1.1: 556 | version "5.1.1" 557 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 558 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 559 | dependencies: 560 | esrecurse "^4.3.0" 561 | estraverse "^4.1.1" 562 | 563 | eslint-utils@^2.0.0, eslint-utils@^2.1.0: 564 | version "2.1.0" 565 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" 566 | integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== 567 | dependencies: 568 | eslint-visitor-keys "^1.1.0" 569 | 570 | eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: 571 | version "1.3.0" 572 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" 573 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 574 | 575 | eslint-visitor-keys@^2.0.0: 576 | version "2.0.0" 577 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" 578 | integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== 579 | 580 | eslint@^7.12.1: 581 | version "7.12.1" 582 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.12.1.tgz#bd9a81fa67a6cfd51656cdb88812ce49ccec5801" 583 | integrity sha512-HlMTEdr/LicJfN08LB3nM1rRYliDXOmfoO4vj39xN6BLpFzF00hbwBoqHk8UcJ2M/3nlARZWy/mslvGEuZFvsg== 584 | dependencies: 585 | "@babel/code-frame" "^7.0.0" 586 | "@eslint/eslintrc" "^0.2.1" 587 | ajv "^6.10.0" 588 | chalk "^4.0.0" 589 | cross-spawn "^7.0.2" 590 | debug "^4.0.1" 591 | doctrine "^3.0.0" 592 | enquirer "^2.3.5" 593 | eslint-scope "^5.1.1" 594 | eslint-utils "^2.1.0" 595 | eslint-visitor-keys "^2.0.0" 596 | espree "^7.3.0" 597 | esquery "^1.2.0" 598 | esutils "^2.0.2" 599 | file-entry-cache "^5.0.1" 600 | functional-red-black-tree "^1.0.1" 601 | glob-parent "^5.0.0" 602 | globals "^12.1.0" 603 | ignore "^4.0.6" 604 | import-fresh "^3.0.0" 605 | imurmurhash "^0.1.4" 606 | is-glob "^4.0.0" 607 | js-yaml "^3.13.1" 608 | json-stable-stringify-without-jsonify "^1.0.1" 609 | levn "^0.4.1" 610 | lodash "^4.17.19" 611 | minimatch "^3.0.4" 612 | natural-compare "^1.4.0" 613 | optionator "^0.9.1" 614 | progress "^2.0.0" 615 | regexpp "^3.1.0" 616 | semver "^7.2.1" 617 | strip-ansi "^6.0.0" 618 | strip-json-comments "^3.1.0" 619 | table "^5.2.3" 620 | text-table "^0.2.0" 621 | v8-compile-cache "^2.0.3" 622 | 623 | espree@^7.3.0: 624 | version "7.3.0" 625 | resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" 626 | integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== 627 | dependencies: 628 | acorn "^7.4.0" 629 | acorn-jsx "^5.2.0" 630 | eslint-visitor-keys "^1.3.0" 631 | 632 | esprima@^4.0.0, esprima@^4.0.1: 633 | version "4.0.1" 634 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 635 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 636 | 637 | esquery@^1.2.0: 638 | version "1.3.1" 639 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" 640 | integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== 641 | dependencies: 642 | estraverse "^5.1.0" 643 | 644 | esrecurse@^4.3.0: 645 | version "4.3.0" 646 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 647 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 648 | dependencies: 649 | estraverse "^5.2.0" 650 | 651 | estraverse@^4.1.1, estraverse@^4.2.0: 652 | version "4.3.0" 653 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 654 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 655 | 656 | estraverse@^5.1.0, estraverse@^5.2.0: 657 | version "5.2.0" 658 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" 659 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 660 | 661 | esutils@^2.0.2: 662 | version "2.0.3" 663 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 664 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 665 | 666 | extend@~3.0.2: 667 | version "3.0.2" 668 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 669 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 670 | 671 | extsprintf@1.3.0: 672 | version "1.3.0" 673 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 674 | integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= 675 | 676 | extsprintf@^1.2.0: 677 | version "1.4.0" 678 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 679 | integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= 680 | 681 | fast-deep-equal@^3.1.1: 682 | version "3.1.3" 683 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 684 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 685 | 686 | fast-glob@^3.1.1: 687 | version "3.2.4" 688 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" 689 | integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== 690 | dependencies: 691 | "@nodelib/fs.stat" "^2.0.2" 692 | "@nodelib/fs.walk" "^1.2.3" 693 | glob-parent "^5.1.0" 694 | merge2 "^1.3.0" 695 | micromatch "^4.0.2" 696 | picomatch "^2.2.1" 697 | 698 | fast-json-stable-stringify@^2.0.0: 699 | version "2.1.0" 700 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 701 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 702 | 703 | fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: 704 | version "2.0.6" 705 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 706 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 707 | 708 | fastq@^1.6.0: 709 | version "1.9.0" 710 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.9.0.tgz#e16a72f338eaca48e91b5c23593bcc2ef66b7947" 711 | integrity sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w== 712 | dependencies: 713 | reusify "^1.0.4" 714 | 715 | file-entry-cache@^5.0.1: 716 | version "5.0.1" 717 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" 718 | integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== 719 | dependencies: 720 | flat-cache "^2.0.1" 721 | 722 | fill-range@^7.0.1: 723 | version "7.0.1" 724 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 725 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 726 | dependencies: 727 | to-regex-range "^5.0.1" 728 | 729 | flat-cache@^2.0.1: 730 | version "2.0.1" 731 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" 732 | integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== 733 | dependencies: 734 | flatted "^2.0.0" 735 | rimraf "2.6.3" 736 | write "1.0.3" 737 | 738 | flatted@^2.0.0: 739 | version "2.0.2" 740 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" 741 | integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== 742 | 743 | forever-agent@~0.6.1: 744 | version "0.6.1" 745 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 746 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= 747 | 748 | form-data@~2.3.2: 749 | version "2.3.3" 750 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" 751 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== 752 | dependencies: 753 | asynckit "^0.4.0" 754 | combined-stream "^1.0.6" 755 | mime-types "^2.1.12" 756 | 757 | fs.realpath@^1.0.0: 758 | version "1.0.0" 759 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 760 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 761 | 762 | functional-red-black-tree@^1.0.1: 763 | version "1.0.1" 764 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 765 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 766 | 767 | get-caller-file@^2.0.5: 768 | version "2.0.5" 769 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 770 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 771 | 772 | getpass@^0.1.1: 773 | version "0.1.7" 774 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 775 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= 776 | dependencies: 777 | assert-plus "^1.0.0" 778 | 779 | glob-parent@^5.0.0, glob-parent@^5.1.0: 780 | version "5.1.1" 781 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" 782 | integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== 783 | dependencies: 784 | is-glob "^4.0.1" 785 | 786 | glob@^7.1.3: 787 | version "7.1.6" 788 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 789 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 790 | dependencies: 791 | fs.realpath "^1.0.0" 792 | inflight "^1.0.4" 793 | inherits "2" 794 | minimatch "^3.0.4" 795 | once "^1.3.0" 796 | path-is-absolute "^1.0.0" 797 | 798 | globals@^12.1.0: 799 | version "12.4.0" 800 | resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" 801 | integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== 802 | dependencies: 803 | type-fest "^0.8.1" 804 | 805 | globby@^11.0.1: 806 | version "11.0.1" 807 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" 808 | integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== 809 | dependencies: 810 | array-union "^2.1.0" 811 | dir-glob "^3.0.1" 812 | fast-glob "^3.1.1" 813 | ignore "^5.1.4" 814 | merge2 "^1.3.0" 815 | slash "^3.0.0" 816 | 817 | har-schema@^2.0.0: 818 | version "2.0.0" 819 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 820 | integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= 821 | 822 | har-validator@~5.1.3: 823 | version "5.1.3" 824 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" 825 | integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== 826 | dependencies: 827 | ajv "^6.5.5" 828 | har-schema "^2.0.0" 829 | 830 | has-flag@^3.0.0: 831 | version "3.0.0" 832 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 833 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 834 | 835 | has-flag@^4.0.0: 836 | version "4.0.0" 837 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 838 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 839 | 840 | html-encoding-sniffer@^2.0.1: 841 | version "2.0.1" 842 | resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" 843 | integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== 844 | dependencies: 845 | whatwg-encoding "^1.0.5" 846 | 847 | http-signature@~1.2.0: 848 | version "1.2.0" 849 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 850 | integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= 851 | dependencies: 852 | assert-plus "^1.0.0" 853 | jsprim "^1.2.2" 854 | sshpk "^1.7.0" 855 | 856 | iconv-lite@0.4.24: 857 | version "0.4.24" 858 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 859 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 860 | dependencies: 861 | safer-buffer ">= 2.1.2 < 3" 862 | 863 | ignore@^4.0.6: 864 | version "4.0.6" 865 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 866 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 867 | 868 | ignore@^5.1.4: 869 | version "5.1.8" 870 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" 871 | integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== 872 | 873 | import-fresh@^3.0.0, import-fresh@^3.2.1: 874 | version "3.2.1" 875 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" 876 | integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== 877 | dependencies: 878 | parent-module "^1.0.0" 879 | resolve-from "^4.0.0" 880 | 881 | imurmurhash@^0.1.4: 882 | version "0.1.4" 883 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 884 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 885 | 886 | inflight@^1.0.4: 887 | version "1.0.6" 888 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 889 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 890 | dependencies: 891 | once "^1.3.0" 892 | wrappy "1" 893 | 894 | inherits@2: 895 | version "2.0.4" 896 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 897 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 898 | 899 | ip-regex@^2.1.0: 900 | version "2.1.0" 901 | resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" 902 | integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= 903 | 904 | is-extglob@^2.1.1: 905 | version "2.1.1" 906 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 907 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 908 | 909 | is-fullwidth-code-point@^2.0.0: 910 | version "2.0.0" 911 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 912 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 913 | 914 | is-fullwidth-code-point@^3.0.0: 915 | version "3.0.0" 916 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 917 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 918 | 919 | is-glob@^4.0.0, is-glob@^4.0.1: 920 | version "4.0.1" 921 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 922 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 923 | dependencies: 924 | is-extglob "^2.1.1" 925 | 926 | is-number@^7.0.0: 927 | version "7.0.0" 928 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 929 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 930 | 931 | is-potential-custom-element-name@^1.0.0: 932 | version "1.0.0" 933 | resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" 934 | integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= 935 | 936 | is-typedarray@~1.0.0: 937 | version "1.0.0" 938 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 939 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 940 | 941 | isexe@^2.0.0: 942 | version "2.0.0" 943 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 944 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 945 | 946 | isstream@~0.1.2: 947 | version "0.1.2" 948 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 949 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= 950 | 951 | js-tokens@^4.0.0: 952 | version "4.0.0" 953 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 954 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 955 | 956 | js-yaml@^3.13.1: 957 | version "3.14.0" 958 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" 959 | integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== 960 | dependencies: 961 | argparse "^1.0.7" 962 | esprima "^4.0.0" 963 | 964 | jsbn@~0.1.0: 965 | version "0.1.1" 966 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 967 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= 968 | 969 | jsdom@^16.4.0: 970 | version "16.4.0" 971 | resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" 972 | integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== 973 | dependencies: 974 | abab "^2.0.3" 975 | acorn "^7.1.1" 976 | acorn-globals "^6.0.0" 977 | cssom "^0.4.4" 978 | cssstyle "^2.2.0" 979 | data-urls "^2.0.0" 980 | decimal.js "^10.2.0" 981 | domexception "^2.0.1" 982 | escodegen "^1.14.1" 983 | html-encoding-sniffer "^2.0.1" 984 | is-potential-custom-element-name "^1.0.0" 985 | nwsapi "^2.2.0" 986 | parse5 "5.1.1" 987 | request "^2.88.2" 988 | request-promise-native "^1.0.8" 989 | saxes "^5.0.0" 990 | symbol-tree "^3.2.4" 991 | tough-cookie "^3.0.1" 992 | w3c-hr-time "^1.0.2" 993 | w3c-xmlserializer "^2.0.0" 994 | webidl-conversions "^6.1.0" 995 | whatwg-encoding "^1.0.5" 996 | whatwg-mimetype "^2.3.0" 997 | whatwg-url "^8.0.0" 998 | ws "^7.2.3" 999 | xml-name-validator "^3.0.0" 1000 | 1001 | json-schema-traverse@^0.4.1: 1002 | version "0.4.1" 1003 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1004 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1005 | 1006 | json-schema@0.2.3: 1007 | version "0.2.3" 1008 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 1009 | integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= 1010 | 1011 | json-stable-stringify-without-jsonify@^1.0.1: 1012 | version "1.0.1" 1013 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1014 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 1015 | 1016 | json-stringify-safe@~5.0.1: 1017 | version "5.0.1" 1018 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1019 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= 1020 | 1021 | jsprim@^1.2.2: 1022 | version "1.4.1" 1023 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 1024 | integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= 1025 | dependencies: 1026 | assert-plus "1.0.0" 1027 | extsprintf "1.3.0" 1028 | json-schema "0.2.3" 1029 | verror "1.10.0" 1030 | 1031 | levn@^0.4.1: 1032 | version "0.4.1" 1033 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1034 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1035 | dependencies: 1036 | prelude-ls "^1.2.1" 1037 | type-check "~0.4.0" 1038 | 1039 | levn@~0.3.0: 1040 | version "0.3.0" 1041 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1042 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 1043 | dependencies: 1044 | prelude-ls "~1.1.2" 1045 | type-check "~0.3.2" 1046 | 1047 | lodash.sortby@^4.7.0: 1048 | version "4.7.0" 1049 | resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" 1050 | integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= 1051 | 1052 | lodash@^4.17.14, lodash@^4.17.19: 1053 | version "4.17.20" 1054 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" 1055 | integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== 1056 | 1057 | lodash@^4.17.15: 1058 | version "4.17.19" 1059 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" 1060 | integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== 1061 | 1062 | make-error@^1.1.1: 1063 | version "1.3.6" 1064 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 1065 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 1066 | 1067 | merge2@^1.3.0: 1068 | version "1.4.1" 1069 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1070 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1071 | 1072 | micromatch@^4.0.2: 1073 | version "4.0.2" 1074 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" 1075 | integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== 1076 | dependencies: 1077 | braces "^3.0.1" 1078 | picomatch "^2.0.5" 1079 | 1080 | mime-db@1.44.0: 1081 | version "1.44.0" 1082 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" 1083 | integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== 1084 | 1085 | mime-types@^2.1.12, mime-types@~2.1.19: 1086 | version "2.1.27" 1087 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" 1088 | integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== 1089 | dependencies: 1090 | mime-db "1.44.0" 1091 | 1092 | minimatch@^3.0.4: 1093 | version "3.0.4" 1094 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1095 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1096 | dependencies: 1097 | brace-expansion "^1.1.7" 1098 | 1099 | minimist@^1.2.5: 1100 | version "1.2.5" 1101 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 1102 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 1103 | 1104 | mkdirp@^0.5.1: 1105 | version "0.5.5" 1106 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 1107 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 1108 | dependencies: 1109 | minimist "^1.2.5" 1110 | 1111 | ms@2.1.2: 1112 | version "2.1.2" 1113 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1114 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1115 | 1116 | natural-compare@^1.4.0: 1117 | version "1.4.0" 1118 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1119 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1120 | 1121 | nwsapi@^2.2.0: 1122 | version "2.2.0" 1123 | resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" 1124 | integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== 1125 | 1126 | oauth-sign@~0.9.0: 1127 | version "0.9.0" 1128 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 1129 | integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== 1130 | 1131 | once@^1.3.0: 1132 | version "1.4.0" 1133 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1134 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1135 | dependencies: 1136 | wrappy "1" 1137 | 1138 | optionator@^0.8.1: 1139 | version "0.8.3" 1140 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" 1141 | integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== 1142 | dependencies: 1143 | deep-is "~0.1.3" 1144 | fast-levenshtein "~2.0.6" 1145 | levn "~0.3.0" 1146 | prelude-ls "~1.1.2" 1147 | type-check "~0.3.2" 1148 | word-wrap "~1.2.3" 1149 | 1150 | optionator@^0.9.1: 1151 | version "0.9.1" 1152 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 1153 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 1154 | dependencies: 1155 | deep-is "^0.1.3" 1156 | fast-levenshtein "^2.0.6" 1157 | levn "^0.4.1" 1158 | prelude-ls "^1.2.1" 1159 | type-check "^0.4.0" 1160 | word-wrap "^1.2.3" 1161 | 1162 | parent-module@^1.0.0: 1163 | version "1.0.1" 1164 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1165 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1166 | dependencies: 1167 | callsites "^3.0.0" 1168 | 1169 | parse5@5.1.1: 1170 | version "5.1.1" 1171 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" 1172 | integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== 1173 | 1174 | path-is-absolute@^1.0.0: 1175 | version "1.0.1" 1176 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1177 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1178 | 1179 | path-key@^3.1.0: 1180 | version "3.1.1" 1181 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1182 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1183 | 1184 | path-type@^4.0.0: 1185 | version "4.0.0" 1186 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1187 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1188 | 1189 | performance-now@^2.1.0: 1190 | version "2.1.0" 1191 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 1192 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= 1193 | 1194 | picomatch@^2.0.5, picomatch@^2.2.1: 1195 | version "2.2.2" 1196 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 1197 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 1198 | 1199 | prelude-ls@^1.2.1: 1200 | version "1.2.1" 1201 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1202 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1203 | 1204 | prelude-ls@~1.1.2: 1205 | version "1.1.2" 1206 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1207 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 1208 | 1209 | prettier@^2.1.2: 1210 | version "2.1.2" 1211 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5" 1212 | integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg== 1213 | 1214 | progress@^2.0.0: 1215 | version "2.0.3" 1216 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 1217 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 1218 | 1219 | psl@^1.1.28: 1220 | version "1.8.0" 1221 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" 1222 | integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== 1223 | 1224 | punycode@^2.1.0, punycode@^2.1.1: 1225 | version "2.1.1" 1226 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1227 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1228 | 1229 | qs@~6.5.2: 1230 | version "6.5.2" 1231 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 1232 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== 1233 | 1234 | regexpp@^3.0.0, regexpp@^3.1.0: 1235 | version "3.1.0" 1236 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" 1237 | integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== 1238 | 1239 | request-promise-core@1.1.3: 1240 | version "1.1.3" 1241 | resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" 1242 | integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== 1243 | dependencies: 1244 | lodash "^4.17.15" 1245 | 1246 | request-promise-native@^1.0.8: 1247 | version "1.0.8" 1248 | resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" 1249 | integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== 1250 | dependencies: 1251 | request-promise-core "1.1.3" 1252 | stealthy-require "^1.1.1" 1253 | tough-cookie "^2.3.3" 1254 | 1255 | request@^2.88.2: 1256 | version "2.88.2" 1257 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" 1258 | integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== 1259 | dependencies: 1260 | aws-sign2 "~0.7.0" 1261 | aws4 "^1.8.0" 1262 | caseless "~0.12.0" 1263 | combined-stream "~1.0.6" 1264 | extend "~3.0.2" 1265 | forever-agent "~0.6.1" 1266 | form-data "~2.3.2" 1267 | har-validator "~5.1.3" 1268 | http-signature "~1.2.0" 1269 | is-typedarray "~1.0.0" 1270 | isstream "~0.1.2" 1271 | json-stringify-safe "~5.0.1" 1272 | mime-types "~2.1.19" 1273 | oauth-sign "~0.9.0" 1274 | performance-now "^2.1.0" 1275 | qs "~6.5.2" 1276 | safe-buffer "^5.1.2" 1277 | tough-cookie "~2.5.0" 1278 | tunnel-agent "^0.6.0" 1279 | uuid "^3.3.2" 1280 | 1281 | require-directory@^2.1.1: 1282 | version "2.1.1" 1283 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1284 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1285 | 1286 | resolve-from@^4.0.0: 1287 | version "4.0.0" 1288 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1289 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1290 | 1291 | reusify@^1.0.4: 1292 | version "1.0.4" 1293 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1294 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1295 | 1296 | rimraf@2.6.3: 1297 | version "2.6.3" 1298 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 1299 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 1300 | dependencies: 1301 | glob "^7.1.3" 1302 | 1303 | run-parallel@^1.1.9: 1304 | version "1.1.10" 1305 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" 1306 | integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== 1307 | 1308 | safe-buffer@^5.0.1, safe-buffer@^5.1.2: 1309 | version "5.2.1" 1310 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1311 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1312 | 1313 | "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 1314 | version "2.1.2" 1315 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1316 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1317 | 1318 | saxes@^5.0.0: 1319 | version "5.0.1" 1320 | resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" 1321 | integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== 1322 | dependencies: 1323 | xmlchars "^2.2.0" 1324 | 1325 | semver@^7.2.1, semver@^7.3.2: 1326 | version "7.3.2" 1327 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" 1328 | integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== 1329 | 1330 | shebang-command@^2.0.0: 1331 | version "2.0.0" 1332 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1333 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1334 | dependencies: 1335 | shebang-regex "^3.0.0" 1336 | 1337 | shebang-regex@^3.0.0: 1338 | version "3.0.0" 1339 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1340 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1341 | 1342 | slash@^3.0.0: 1343 | version "3.0.0" 1344 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1345 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1346 | 1347 | slice-ansi@^2.1.0: 1348 | version "2.1.0" 1349 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" 1350 | integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== 1351 | dependencies: 1352 | ansi-styles "^3.2.0" 1353 | astral-regex "^1.0.0" 1354 | is-fullwidth-code-point "^2.0.0" 1355 | 1356 | source-map-support@^0.5.17: 1357 | version "0.5.19" 1358 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" 1359 | integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== 1360 | dependencies: 1361 | buffer-from "^1.0.0" 1362 | source-map "^0.6.0" 1363 | 1364 | source-map@^0.6.0, source-map@~0.6.1: 1365 | version "0.6.1" 1366 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1367 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1368 | 1369 | sprintf-js@~1.0.2: 1370 | version "1.0.3" 1371 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1372 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1373 | 1374 | sshpk@^1.7.0: 1375 | version "1.16.1" 1376 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" 1377 | integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== 1378 | dependencies: 1379 | asn1 "~0.2.3" 1380 | assert-plus "^1.0.0" 1381 | bcrypt-pbkdf "^1.0.0" 1382 | dashdash "^1.12.0" 1383 | ecc-jsbn "~0.1.1" 1384 | getpass "^0.1.1" 1385 | jsbn "~0.1.0" 1386 | safer-buffer "^2.0.2" 1387 | tweetnacl "~0.14.0" 1388 | 1389 | stealthy-require@^1.1.1: 1390 | version "1.1.1" 1391 | resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" 1392 | integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= 1393 | 1394 | string-width@^3.0.0: 1395 | version "3.1.0" 1396 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 1397 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 1398 | dependencies: 1399 | emoji-regex "^7.0.1" 1400 | is-fullwidth-code-point "^2.0.0" 1401 | strip-ansi "^5.1.0" 1402 | 1403 | string-width@^4.1.0, string-width@^4.2.0: 1404 | version "4.2.0" 1405 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" 1406 | integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== 1407 | dependencies: 1408 | emoji-regex "^8.0.0" 1409 | is-fullwidth-code-point "^3.0.0" 1410 | strip-ansi "^6.0.0" 1411 | 1412 | strip-ansi@^5.1.0: 1413 | version "5.2.0" 1414 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 1415 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 1416 | dependencies: 1417 | ansi-regex "^4.1.0" 1418 | 1419 | strip-ansi@^6.0.0: 1420 | version "6.0.0" 1421 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 1422 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 1423 | dependencies: 1424 | ansi-regex "^5.0.0" 1425 | 1426 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1427 | version "3.1.1" 1428 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1429 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1430 | 1431 | supports-color@^5.3.0: 1432 | version "5.5.0" 1433 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1434 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1435 | dependencies: 1436 | has-flag "^3.0.0" 1437 | 1438 | supports-color@^7.1.0: 1439 | version "7.2.0" 1440 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1441 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1442 | dependencies: 1443 | has-flag "^4.0.0" 1444 | 1445 | symbol-tree@^3.2.4: 1446 | version "3.2.4" 1447 | resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" 1448 | integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== 1449 | 1450 | table@^5.2.3: 1451 | version "5.4.6" 1452 | resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" 1453 | integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== 1454 | dependencies: 1455 | ajv "^6.10.2" 1456 | lodash "^4.17.14" 1457 | slice-ansi "^2.1.0" 1458 | string-width "^3.0.0" 1459 | 1460 | text-table@^0.2.0: 1461 | version "0.2.0" 1462 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1463 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 1464 | 1465 | to-regex-range@^5.0.1: 1466 | version "5.0.1" 1467 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1468 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1469 | dependencies: 1470 | is-number "^7.0.0" 1471 | 1472 | tough-cookie@^2.3.3, tough-cookie@~2.5.0: 1473 | version "2.5.0" 1474 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" 1475 | integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== 1476 | dependencies: 1477 | psl "^1.1.28" 1478 | punycode "^2.1.1" 1479 | 1480 | tough-cookie@^3.0.1: 1481 | version "3.0.1" 1482 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" 1483 | integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== 1484 | dependencies: 1485 | ip-regex "^2.1.0" 1486 | psl "^1.1.28" 1487 | punycode "^2.1.1" 1488 | 1489 | tr46@^2.0.2: 1490 | version "2.0.2" 1491 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" 1492 | integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== 1493 | dependencies: 1494 | punycode "^2.1.1" 1495 | 1496 | ts-node@^9.0.0: 1497 | version "9.0.0" 1498 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.0.0.tgz#e7699d2a110cc8c0d3b831715e417688683460b3" 1499 | integrity sha512-/TqB4SnererCDR/vb4S/QvSZvzQMJN8daAslg7MeaiHvD8rDZsSfXmNeNumyZZzMned72Xoq/isQljYSt8Ynfg== 1500 | dependencies: 1501 | arg "^4.1.0" 1502 | diff "^4.0.1" 1503 | make-error "^1.1.1" 1504 | source-map-support "^0.5.17" 1505 | yn "3.1.1" 1506 | 1507 | tslib@^1.8.1: 1508 | version "1.14.1" 1509 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 1510 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 1511 | 1512 | tsutils@^3.17.1: 1513 | version "3.17.1" 1514 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" 1515 | integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== 1516 | dependencies: 1517 | tslib "^1.8.1" 1518 | 1519 | tunnel-agent@^0.6.0: 1520 | version "0.6.0" 1521 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 1522 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 1523 | dependencies: 1524 | safe-buffer "^5.0.1" 1525 | 1526 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 1527 | version "0.14.5" 1528 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 1529 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= 1530 | 1531 | type-check@^0.4.0, type-check@~0.4.0: 1532 | version "0.4.0" 1533 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1534 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1535 | dependencies: 1536 | prelude-ls "^1.2.1" 1537 | 1538 | type-check@~0.3.2: 1539 | version "0.3.2" 1540 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 1541 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 1542 | dependencies: 1543 | prelude-ls "~1.1.2" 1544 | 1545 | type-fest@^0.8.1: 1546 | version "0.8.1" 1547 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" 1548 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== 1549 | 1550 | typescript@^4.0.5: 1551 | version "4.0.5" 1552 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.5.tgz#ae9dddfd1069f1cb5beb3ef3b2170dd7c1332389" 1553 | integrity sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ== 1554 | 1555 | uri-js@^4.2.2: 1556 | version "4.2.2" 1557 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 1558 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== 1559 | dependencies: 1560 | punycode "^2.1.0" 1561 | 1562 | uuid@^3.3.2: 1563 | version "3.4.0" 1564 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" 1565 | integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== 1566 | 1567 | v8-compile-cache@^2.0.3: 1568 | version "2.2.0" 1569 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" 1570 | integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== 1571 | 1572 | verror@1.10.0: 1573 | version "1.10.0" 1574 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 1575 | integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= 1576 | dependencies: 1577 | assert-plus "^1.0.0" 1578 | core-util-is "1.0.2" 1579 | extsprintf "^1.2.0" 1580 | 1581 | w3c-hr-time@^1.0.2: 1582 | version "1.0.2" 1583 | resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" 1584 | integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== 1585 | dependencies: 1586 | browser-process-hrtime "^1.0.0" 1587 | 1588 | w3c-xmlserializer@^2.0.0: 1589 | version "2.0.0" 1590 | resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" 1591 | integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== 1592 | dependencies: 1593 | xml-name-validator "^3.0.0" 1594 | 1595 | webidl-conversions@^5.0.0: 1596 | version "5.0.0" 1597 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" 1598 | integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== 1599 | 1600 | webidl-conversions@^6.1.0: 1601 | version "6.1.0" 1602 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" 1603 | integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== 1604 | 1605 | webidl2@^23.13.0: 1606 | version "23.13.0" 1607 | resolved "https://registry.yarnpkg.com/webidl2/-/webidl2-23.13.0.tgz#1f3766e52429a129d407867dd43ad2c9e6fa9040" 1608 | integrity sha512-YfBvnpujLVLZ1zKP/aZO1XOtFhMUMFSnXjp88Q4iTMC/i1MUiv7YWq45SN8DrPHCjmnXhzjBouG0tJKg/+o0lg== 1609 | 1610 | whatwg-encoding@^1.0.5: 1611 | version "1.0.5" 1612 | resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" 1613 | integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== 1614 | dependencies: 1615 | iconv-lite "0.4.24" 1616 | 1617 | whatwg-mimetype@^2.3.0: 1618 | version "2.3.0" 1619 | resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" 1620 | integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== 1621 | 1622 | whatwg-url@^8.0.0: 1623 | version "8.1.0" 1624 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.1.0.tgz#c628acdcf45b82274ce7281ee31dd3c839791771" 1625 | integrity sha512-vEIkwNi9Hqt4TV9RdnaBPNt+E2Sgmo3gePebCRgZ1R7g6d23+53zCTnuB0amKI4AXq6VM8jj2DUAa0S1vjJxkw== 1626 | dependencies: 1627 | lodash.sortby "^4.7.0" 1628 | tr46 "^2.0.2" 1629 | webidl-conversions "^5.0.0" 1630 | 1631 | which@^2.0.1: 1632 | version "2.0.2" 1633 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1634 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1635 | dependencies: 1636 | isexe "^2.0.0" 1637 | 1638 | word-wrap@^1.2.3, word-wrap@~1.2.3: 1639 | version "1.2.3" 1640 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 1641 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 1642 | 1643 | wrap-ansi@^7.0.0: 1644 | version "7.0.0" 1645 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1646 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1647 | dependencies: 1648 | ansi-styles "^4.0.0" 1649 | string-width "^4.1.0" 1650 | strip-ansi "^6.0.0" 1651 | 1652 | wrappy@1: 1653 | version "1.0.2" 1654 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1655 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1656 | 1657 | write@1.0.3: 1658 | version "1.0.3" 1659 | resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" 1660 | integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== 1661 | dependencies: 1662 | mkdirp "^0.5.1" 1663 | 1664 | ws@^7.2.3: 1665 | version "7.3.1" 1666 | resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" 1667 | integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== 1668 | 1669 | xml-name-validator@^3.0.0: 1670 | version "3.0.0" 1671 | resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" 1672 | integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== 1673 | 1674 | xmlchars@^2.2.0: 1675 | version "2.2.0" 1676 | resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" 1677 | integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== 1678 | 1679 | y18n@^5.0.2: 1680 | version "5.0.5" 1681 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" 1682 | integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== 1683 | 1684 | yargs-parser@^20.2.2: 1685 | version "20.2.3" 1686 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.3.tgz#92419ba867b858c868acf8bae9bf74af0dd0ce26" 1687 | integrity sha512-emOFRT9WVHw03QSvN5qor9QQT9+sw5vwxfYweivSMHTcAXPefwVae2FjO7JJjj8hCE4CzPOPeFM83VwT29HCww== 1688 | 1689 | yargs@^16.1.0: 1690 | version "16.1.0" 1691 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.1.0.tgz#fc333fe4791660eace5a894b39d42f851cd48f2a" 1692 | integrity sha512-upWFJOmDdHN0syLuESuvXDmrRcWd1QafJolHskzaw79uZa7/x53gxQKiR07W59GWY1tFhhU/Th9DrtSfpS782g== 1693 | dependencies: 1694 | cliui "^7.0.2" 1695 | escalade "^3.1.1" 1696 | get-caller-file "^2.0.5" 1697 | require-directory "^2.1.1" 1698 | string-width "^4.2.0" 1699 | y18n "^5.0.2" 1700 | yargs-parser "^20.2.2" 1701 | 1702 | yn@3.1.1: 1703 | version "3.1.1" 1704 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 1705 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 1706 | --------------------------------------------------------------------------------