├── .gitignore ├── src ├── sites │ └── ptt │ │ ├── parser.ts │ │ ├── model │ │ ├── index.ts │ │ ├── mail.ts │ │ ├── article.ts │ │ └── board.ts │ │ ├── index.ts │ │ ├── config.ts │ │ └── bot.ts ├── common │ ├── Line.ts │ └── ObjectLiteral.ts ├── utils │ ├── query-builder │ │ ├── QueryBuilder.ts │ │ └── SelectQueryBuilder.ts │ ├── index.ts │ ├── keymap.ts │ ├── escapeAnsi.ts │ ├── encode.ts │ ├── decode.ts │ └── char.ts ├── index.ts ├── config.ts └── socket.ts ├── .npmignore ├── test ├── config.example.js ├── mocha.opts ├── global.ts ├── index.ts ├── common.ts ├── mail.ts ├── board.ts ├── connection.ts └── article.ts ├── tsconfig.test.json ├── tsconfig.json ├── babel.config.js ├── LICENSE ├── package.json ├── tslint.json ├── README.md └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | test/config.js 4 | -------------------------------------------------------------------------------- /src/sites/ptt/parser.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 3 | }; 4 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | test 3 | package-lock.json 4 | yarn.lock 5 | -------------------------------------------------------------------------------- /src/common/Line.ts: -------------------------------------------------------------------------------- 1 | export interface Line { 2 | str: string; 3 | attr: Object; 4 | }; 5 | -------------------------------------------------------------------------------- /src/common/ObjectLiteral.ts: -------------------------------------------------------------------------------- 1 | export interface ObjectLiteral { 2 | [key: string]: any; 3 | } 4 | -------------------------------------------------------------------------------- /test/config.example.js: -------------------------------------------------------------------------------- 1 | export const username = 'username'; 2 | export const password = 'password'; 3 | -------------------------------------------------------------------------------- /src/utils/query-builder/QueryBuilder.ts: -------------------------------------------------------------------------------- 1 | export abstract class QueryBuilder { 2 | constructor(...args) { } 3 | } 4 | -------------------------------------------------------------------------------- /src/sites/ptt/model/index.ts: -------------------------------------------------------------------------------- 1 | export {Article} from './article'; 2 | export {Board} from './board'; 3 | export {Mail} from './mail'; 4 | -------------------------------------------------------------------------------- /test/mocha.opts: -------------------------------------------------------------------------------- 1 | --require ts-node/register 2 | --require @babel/register 3 | --reporter spec 4 | --timeout 30000 5 | --bail 6 | --exit 7 | -------------------------------------------------------------------------------- /src/sites/ptt/index.ts: -------------------------------------------------------------------------------- 1 | export { default as default } from './bot'; 2 | export { default as bot } from './bot'; 3 | export { default as config } from './config'; 4 | -------------------------------------------------------------------------------- /test/global.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | 3 | declare global { 4 | namespace NodeJS { 5 | interface Global { 6 | WebSocket: any; 7 | } 8 | } 9 | } 10 | 11 | -------------------------------------------------------------------------------- /src/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * as char from './char'; 2 | export { default as decode } from './decode'; 3 | export { default as encode } from './encode'; 4 | export { default as keymap } from './keymap'; 5 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export { default as default } from './sites/ptt'; 2 | export { default as ptt } from './sites/ptt'; 3 | export { default as Config } from './config'; 4 | export { default as Socket } from './socket'; 5 | -------------------------------------------------------------------------------- /test/index.ts: -------------------------------------------------------------------------------- 1 | import './global'; 2 | 3 | global.WebSocket = require('ws'); 4 | 5 | const tests = [ 6 | './connection.ts', 7 | './article.ts', 8 | './board.ts', 9 | './mail.ts', 10 | ]; 11 | 12 | tests.forEach(test => { 13 | require(test); 14 | }); 15 | -------------------------------------------------------------------------------- /tsconfig.test.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "moduleResolution": "node", 5 | "module": "commonjs", 6 | "esModuleInterop": true, 7 | "experimentalDecorators": true, 8 | "noEmit": true 9 | }, 10 | "include": [ 11 | "test/*.ts" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /src/config.ts: -------------------------------------------------------------------------------- 1 | export default interface Config { 2 | name: string; 3 | url: string; 4 | charset: string; 5 | origin: string; 6 | protocol: string; 7 | timeout: number; 8 | blobSize: number; 9 | preventIdleTimeout: number; 10 | terminal: { 11 | columns: number; 12 | rows: number; 13 | }; 14 | [key: string]: any; 15 | } 16 | -------------------------------------------------------------------------------- /test/common.ts: -------------------------------------------------------------------------------- 1 | import pttbot from '../src'; 2 | 3 | export async function newbot(username, password) { 4 | const ptt = new pttbot(); 5 | await (() => new Promise(resolve => { 6 | ptt.once('connect', resolve); 7 | }))(); 8 | const ret = await ptt.login(username, password) 9 | if (!ret) { 10 | throw 'login failed'; 11 | } 12 | return ptt; 13 | } 14 | -------------------------------------------------------------------------------- /src/utils/keymap.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | Enter: '\r', 3 | ArrowLeft: '\x1b[D', 4 | ArrowRight: '\x1b[C', 5 | ArrowUp: '\x1b[A', 6 | ArrowDown: '\x1b[B', 7 | PgUp: '\x1b[5~', 8 | PgDown: '\x1b[6~', 9 | Home: '\x1b[1~', 10 | End: '\x1b[4~', 11 | Backspace: '\b', 12 | CtrlC: '\x03', 13 | CtrlP: '\x10', 14 | CtrlU: '\x15', 15 | CtrlZ: '\x1a', 16 | }; 17 | -------------------------------------------------------------------------------- /src/utils/query-builder/SelectQueryBuilder.ts: -------------------------------------------------------------------------------- 1 | import {QueryBuilder} from './QueryBuilder'; 2 | export abstract class SelectQueryBuilder extends QueryBuilder { 3 | constructor(...args) { 4 | super(...args); 5 | } 6 | 7 | abstract where(type: string, condition: any): this; 8 | 9 | abstract get(): Promise; 10 | 11 | abstract getOne(): Promise; 12 | } 13 | -------------------------------------------------------------------------------- /src/sites/ptt/config.ts: -------------------------------------------------------------------------------- 1 | import Config from '../../config'; 2 | 3 | const config: Config = { 4 | name: 'PTT', 5 | url: 'wss://ws.ptt.cc/bbs', 6 | charset: 'utf8', 7 | origin: 'app://pcman', 8 | protocol: 'websocket', 9 | timeout: 200, 10 | blobSize: 1024, 11 | preventIdleTimeout: 30, 12 | terminal: { 13 | columns: 80, 14 | rows: 24, 15 | }, 16 | }; 17 | 18 | export default config; 19 | -------------------------------------------------------------------------------- /src/utils/escapeAnsi.ts: -------------------------------------------------------------------------------- 1 | export function EscapeAnsi(msg: string): string { 2 | const arr = [...msg]; 3 | return arr.map(c => { 4 | const code = c.charCodeAt(0); 5 | if (code >= 0x20 || code === 0x0a || code === 0x0d) { 6 | return c; 7 | } else if (code < 0x10) { 8 | return `\\x0${code}`; 9 | } else { 10 | return `\\x1${code % 16}`; 11 | } 12 | }).join(''); 13 | }; 14 | 15 | -------------------------------------------------------------------------------- /src/utils/encode.ts: -------------------------------------------------------------------------------- 1 | import { encodeSync } from 'uao-js'; 2 | 3 | const encode = (str, charset) => { 4 | let buffer; 5 | switch (charset) { 6 | case 'utf8': 7 | case 'utf-8': 8 | buffer = Buffer.from(str, 'utf8'); 9 | break; 10 | case 'big5': 11 | buffer = Buffer.from(encodeSync(str), 'binary'); 12 | break; 13 | default: 14 | throw new TypeError(`Unknown charset: ${charset}`); 15 | } 16 | return buffer; 17 | }; 18 | 19 | export default encode; 20 | -------------------------------------------------------------------------------- /src/utils/decode.ts: -------------------------------------------------------------------------------- 1 | import { decodeSync } from 'uao-js'; 2 | 3 | const decode = (data, charset) => { 4 | let str = ''; 5 | switch (charset) { 6 | case 'utf8': 7 | case 'utf-8': 8 | str = Buffer.from(data).toString('utf8'); 9 | break; 10 | case 'big5': 11 | str = decodeSync(String.fromCharCode(...data)); 12 | break; 13 | default: 14 | throw new TypeError(`Unknown charset: ${charset}`); 15 | } 16 | return str; 17 | }; 18 | 19 | export default decode; 20 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "moduleResolution": "node", 5 | "module": "commonjs", 6 | "esModuleInterop": true, 7 | "experimentalDecorators": true, 8 | "noEmit": true 9 | }, 10 | "include": [ 11 | "src" 12 | ], 13 | "exclude": [ 14 | "node_modules" 15 | ], 16 | "typedocOptions": { 17 | "mode": "modules", 18 | "module": "commonjs", 19 | "target": "ES6", 20 | "out": "docs", 21 | "exclude": [ 22 | "src/**/index.ts" 23 | ] 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | module.exports = function(api) { 4 | api.cache(true); 5 | const config = { 6 | presets: [ 7 | "@babel/env", 8 | "@babel/preset-typescript" 9 | ], 10 | plugins: [ 11 | "@babel/plugin-proposal-export-default-from", 12 | ["@babel/plugin-proposal-class-properties", { loose: false }], 13 | "@babel/plugin-proposal-object-rest-spread", 14 | ["@babel/plugin-transform-runtime", { regenerator: true }], 15 | "@babel/plugin-transform-named-capturing-groups-regex", 16 | ] 17 | } 18 | return config; 19 | } 20 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Kevin Lin 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 | -------------------------------------------------------------------------------- /src/socket.ts: -------------------------------------------------------------------------------- 1 | import EventEmitter from 'eventemitter3'; 2 | import Config from './config'; 3 | 4 | class Socket extends EventEmitter { 5 | private _config: Config; 6 | private _socket: WebSocket; 7 | 8 | constructor(config) { 9 | super(); 10 | this._config = config; 11 | } 12 | 13 | connect(): void { 14 | let socket; 15 | if (typeof WebSocket === 'undefined') { 16 | throw new Error(`'WebSocket' is undefined. Do you include any websocket polyfill?`); 17 | } else if (WebSocket.length === 1) { 18 | socket = new WebSocket(this._config.url); 19 | } else { 20 | const options: any = {}; 21 | if (this._config.origin) { 22 | options.origin = this._config.origin; 23 | } 24 | socket = new WebSocket(this._config.url, options); 25 | } 26 | socket.addEventListener('open', this.emit.bind(this, 'connect')); 27 | socket.addEventListener('close', this.emit.bind(this, 'disconnect')); 28 | socket.addEventListener('error', this.emit.bind(this, 'error')); 29 | 30 | let data = []; 31 | let timeoutHandler; 32 | socket.binaryType = 'arraybuffer'; 33 | socket.addEventListener('message', ({ data: currData }) => { 34 | clearTimeout(timeoutHandler); 35 | data.push(...new Uint8Array(currData)); 36 | timeoutHandler = setTimeout(() => { 37 | this.emit('message', data); 38 | data = []; 39 | }, this._config.timeout); 40 | if (currData.byteLength > this._config.blobSize) { 41 | throw new Error(`Receive message length(${currData.byteLength}) greater than buffer size(${this._config.blobSize})`); 42 | } 43 | }); 44 | 45 | this._socket = socket; 46 | } 47 | 48 | disconnect(): void { 49 | const socket = this._socket; 50 | socket.close(); 51 | } 52 | 53 | send(str: string): void { 54 | const socket = this._socket; 55 | if (socket.readyState === 1 /* OPEN */) { 56 | socket.send(str); 57 | } 58 | } 59 | } 60 | 61 | export default Socket; 62 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ptt-client", 3 | "version": "0.9.0", 4 | "description": "A Node client for fetching data from ptt.cc.", 5 | "main": "./dist/index.js", 6 | "types": "./dist/index.d.js", 7 | "scripts": { 8 | "type:check": "tsc", 9 | "type:declaration": "tsc --noEmit false --emitDeclarationOnly --declaration --declarationDir ./dist", 10 | "test": "cross-env TS_NODE_PROJECT=tsconfig.test.json mocha ./test/index.ts", 11 | "build": "$npm_execpath run build:babel && $npm_execpath run type:declaration", 12 | "build:babel": "cross-env NODE_ENV=production babel ./src --out-dir ./dist --extensions '.ts'" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/kevinptt0323/ptt-client.git" 17 | }, 18 | "keywords": [ 19 | "bbs", 20 | "ptt", 21 | "websocket" 22 | ], 23 | "author": "Kevin Lin", 24 | "license": "MIT", 25 | "bugs": { 26 | "url": "https://github.com/kevinptt0323/ptt-client/issues" 27 | }, 28 | "homepage": "https://github.com/kevinptt0323/ptt-client#readme", 29 | "dependencies": { 30 | "@babel/runtime": "^7.4.2", 31 | "eventemitter3": "^4.0.0", 32 | "sleep-promise": "^8.0.1", 33 | "terminal.js": "github:kevinptt0323/terminal.js", 34 | "uao-js": "^1.0.1", 35 | "wcwidth": "^1.0.1", 36 | "ws": "^7.1.1" 37 | }, 38 | "devDependencies": { 39 | "@babel/cli": "^7.2.3", 40 | "@babel/core": "^7.4.0", 41 | "@babel/node": "^7.2.2", 42 | "@babel/plugin-proposal-class-properties": "^7.4.0", 43 | "@babel/plugin-proposal-export-default-from": "^7.2.0", 44 | "@babel/plugin-proposal-object-rest-spread": "^7.5.5", 45 | "@babel/plugin-transform-named-capturing-groups-regex": "^7.6.3", 46 | "@babel/plugin-transform-runtime": "^7.4.0", 47 | "@babel/preset-env": "^7.4.2", 48 | "@babel/preset-typescript": "^7.3.3", 49 | "@babel/register": "^7.4.0", 50 | "@types/mocha": "^5.2.7", 51 | "@types/node": "^12.7.1", 52 | "cross-env": "^5.2.0", 53 | "mocha": "^6.1.4", 54 | "ts-node": "^8.3.0", 55 | "tslint": "^6.0.0-beta0", 56 | "typescript": "^3.5.3" 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /test/mail.ts: -------------------------------------------------------------------------------- 1 | import assert from 'assert'; 2 | import { Mail } from '../src/sites/ptt/model'; 3 | 4 | import { newbot } from './common'; 5 | import { username, password } from './config'; 6 | 7 | const getMailInfo = (mail: Mail) => { 8 | return `${mail.id} ${mail.author} ${mail.title}`; 9 | }; 10 | 11 | describe('Mail', () => { 12 | let ptt; 13 | before('login', async () => { 14 | ptt = await newbot(username, password); 15 | }); 16 | after('logout', async () => { 17 | await ptt.logout(); 18 | }); 19 | 20 | describe('get', () => { 21 | let mails: Mail[]; 22 | it('should get correct mail list from mailbox', async () => { 23 | mails = await ptt.select(Mail).get(); 24 | assert(mails.length > 0); 25 | }); 26 | it('should get correct mail list with "id" argument', async function () { 27 | let searchId = mails[mails.length-1].id - 1; 28 | if (searchId <= 0) { 29 | this.skip(); 30 | return; 31 | } 32 | let mails2: Mail[] = 33 | await ptt.select(Mail) 34 | .where('id', searchId) 35 | .get(); 36 | 37 | const mail1Info = getMailInfo(mails[mails.length-1]); 38 | const mail2Info = getMailInfo(mails2[0]); 39 | assert.strictEqual(mails2[0].id, mails[mails.length-1].id-1, `${mail1Info}\n${mail2Info}`); 40 | }); 41 | }); 42 | 43 | describe('getOne', () => { 44 | it('should get correct mail', async () => { 45 | const mail: Mail = 46 | await ptt.select(Mail) 47 | .where('id', 1) 48 | .getOne(); 49 | 50 | assert.strictEqual(mail.id, 1); 51 | assert(mail.content.length > 0); 52 | }); 53 | }); 54 | 55 | describe('where', () => { 56 | let title = '問卦'; 57 | let author = '[備.忘.錄]'; 58 | 59 | it('should get correct mails with specified author name', async () => { 60 | const mails: Mail[] = 61 | await ptt.select(Mail) 62 | .where('author', author) 63 | .get(); 64 | 65 | assert(mails.length > 0); 66 | 67 | mails.forEach(mail => { 68 | let mailInfo = getMailInfo(mail); 69 | assert(mail.author.toLowerCase().includes(author.toLowerCase()), mailInfo); 70 | }); 71 | }); 72 | }); 73 | }); 74 | -------------------------------------------------------------------------------- /test/board.ts: -------------------------------------------------------------------------------- 1 | import assert from 'assert'; 2 | import { Board } from '../src/sites/ptt/model'; 3 | 4 | import { newbot } from './common'; 5 | import { username, password } from './config'; 6 | 7 | describe('Board', () => { 8 | let ptt; 9 | 10 | describe('get', () => { 11 | before('login', async () => { 12 | ptt = await newbot(username, password); 13 | }); 14 | after('logout', async () => { 15 | await ptt.logout(); 16 | }); 17 | describe('get by entry', () => { 18 | it('should get class list', async () => { 19 | let boards: Board[] = 20 | await ptt.select(Board) 21 | .where('entry', 'class') 22 | .get(); 23 | assert(boards.length > 0); 24 | }); 25 | it('should get hot list', async () => { 26 | let boards: Board[] = 27 | await ptt.select(Board) 28 | .where('entry', 'hot') 29 | .get(); 30 | assert(boards.length > 0); 31 | }); 32 | it('should get favorite list', async () => { 33 | let boards: Board[] = 34 | await ptt.select(Board) 35 | .where('entry', 'favorite') 36 | .get(); 37 | assert(boards.length > 0); 38 | }); 39 | }); 40 | describe('get by prefix', () => { 41 | it('should get a board list (c_cha)', async () => { 42 | const prefix = 'c_cha'; 43 | let boards: Board[] = 44 | await ptt.select(Board) 45 | .where('prefix', prefix) 46 | .get(); 47 | assert(boards.length > 0); 48 | boards.forEach(board => { 49 | const index = board.name.toLowerCase().indexOf(prefix.toLowerCase()); 50 | assert.strictEqual(index, 0); 51 | }); 52 | }); 53 | it('should get a board list with single item (gossipi)', async () => { 54 | const prefix = 'gossipi'; 55 | let boards: Board[] = 56 | await ptt.select(Board) 57 | .where('prefix', prefix) 58 | .get(); 59 | assert.strictEqual(boards.length, 1); 60 | assert.strictEqual(boards[0].name, 'Gossiping'); 61 | }); 62 | it('should get an empty list (c_chaa)', async () => { 63 | const prefix = 'c_chaa'; 64 | let boards: Board[] = 65 | await ptt.select(Board) 66 | .where('prefix', prefix) 67 | .get(); 68 | assert.strictEqual(boards.length, 0); 69 | }); 70 | }); 71 | }); 72 | }); 73 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "arrow-return-shorthand": true, 4 | "callable-types": true, 5 | "class-name": true, 6 | "comment-format": [true, "check-space"], 7 | "curly": true, 8 | "deprecation": { "severity": "warn" }, 9 | "eofline": true, 10 | "forin": true, 11 | "import-blacklist": [true, "rxjs/Rx"], 12 | "import-spacing": true, 13 | "indent": [true, "spaces"], 14 | "interface-over-type-literal": true, 15 | "label-position": true, 16 | "max-line-length": [true, 140], 17 | "member-access": false, 18 | "member-ordering": [ 19 | true, 20 | { 21 | "order": [ 22 | "static-field", 23 | "instance-field", 24 | "static-method", 25 | "instance-method" 26 | ] 27 | } 28 | ], 29 | "no-arg": true, 30 | "no-bitwise": true, 31 | "no-console": [true, "debug", "info", "time", "timeEnd", "trace"], 32 | "no-construct": true, 33 | "no-debugger": true, 34 | "no-duplicate-super": true, 35 | "no-empty": false, 36 | "no-empty-interface": true, 37 | "no-eval": true, 38 | "no-inferrable-types": [true, "ignore-params"], 39 | "no-misused-new": true, 40 | "no-non-null-assertion": true, 41 | "no-shadowed-variable": true, 42 | "no-string-literal": false, 43 | "no-string-throw": true, 44 | "no-switch-case-fall-through": true, 45 | "no-trailing-whitespace": true, 46 | "no-unnecessary-initializer": true, 47 | "no-unused-expression": true, 48 | "no-var-keyword": true, 49 | "object-literal-sort-keys": false, 50 | "one-line": [ 51 | true, 52 | "check-open-brace", 53 | "check-catch", 54 | "check-else", 55 | "check-whitespace" 56 | ], 57 | "prefer-const": true, 58 | "quotemark": [true, "single"], 59 | "radix": true, 60 | "semicolon": [true, "always"], 61 | "triple-equals": [true, "allow-null-check"], 62 | "typedef-whitespace": [ 63 | true, 64 | { 65 | "call-signature": "nospace", 66 | "index-signature": "nospace", 67 | "parameter": "nospace", 68 | "property-declaration": "nospace", 69 | "variable-declaration": "nospace" 70 | } 71 | ], 72 | "unified-signatures": true, 73 | "variable-name": false, 74 | "whitespace": [ 75 | true, 76 | "check-branch", 77 | "check-decl", 78 | "check-operator", 79 | "check-separator", 80 | "check-type" 81 | ] 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /test/connection.ts: -------------------------------------------------------------------------------- 1 | import assert from 'assert'; 2 | import pttbot from '../src'; 3 | import { username, password } from './config'; 4 | 5 | describe('Connection', () => { 6 | describe('connect', () => { 7 | it('should connect to server', () => { 8 | const ptt = new pttbot(); 9 | return new Promise((resolve, reject) => { 10 | ptt.once('connect', resolve); 11 | }); 12 | }); 13 | }); 14 | describe('login', () => { 15 | it('should login success with correct username and password', () => { 16 | const ptt = new pttbot(); 17 | return new Promise((resolve, reject) => { 18 | ptt.once('connect', async () => { 19 | try { 20 | const ret = await ptt.login(username, password); 21 | assert.strictEqual(ret, true); 22 | assert.strictEqual(ptt.state.login, true); 23 | } catch (e) { 24 | reject(e); 25 | } 26 | resolve(); 27 | }); 28 | }); 29 | }); 30 | it('should login failed with wrong username and password', () => { 31 | const ptt = new pttbot(); 32 | return new Promise((resolve, reject) => { 33 | ptt.once('connect', async () => { 34 | try { 35 | const ret = await ptt.login('wronguser', 'wrongpass'); 36 | assert.strictEqual(ret, false); 37 | assert.strictEqual(ptt.state.login, false); 38 | } catch (e) { 39 | reject(e); 40 | } 41 | resolve(); 42 | }); 43 | }); 44 | }); 45 | it('should login success with correct username (w/ trailing comma) and password', () => { 46 | const ptt = new pttbot(); 47 | return new Promise((resolve, reject) => { 48 | ptt.once('connect', async () => { 49 | try { 50 | const ret = await ptt.login(username + ',', password); 51 | assert.strictEqual(ret, true); 52 | assert.strictEqual(ptt.state.login, true); 53 | } catch (e) { 54 | reject(e); 55 | } 56 | resolve(); 57 | }); 58 | }); 59 | }); 60 | }); 61 | describe('logout', () => { 62 | it('should logout successfully if user is login', () => { 63 | const ptt = new pttbot(); 64 | return new Promise((resolve, reject) => { 65 | ptt.once('connect', async () => { 66 | if (!await ptt.login(username, password)) { 67 | reject(); 68 | } 69 | try { 70 | const ret = await ptt.logout(); 71 | assert.strictEqual(ret, true); 72 | assert.strictEqual(ptt.state.login, false); 73 | } catch (e) { 74 | reject(e); 75 | } 76 | resolve(); 77 | }); 78 | }); 79 | }) 80 | }); 81 | }); 82 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ptt-client 2 | **ptt-client** is an unofficial client to fetch data from PTT ([ptt.cc]), the 3 | famous BBS in Taiwan, over WebSocket. This module works in browser and Node.js. 4 | 5 | PTT supports connection with WebSocket by [official]. 6 | 7 | [ptt.cc]: https://www.ptt.cc 8 | [official]: https://www.ptt.cc/bbs/SYSOP/M.1496571808.A.608.html 9 | 10 | ## Installation 11 | ``` 12 | npm install ptt-client 13 | ``` 14 | 15 | ## Example 16 | ```js 17 | import Ptt from 'ptt-client'; 18 | import {Article, Board, Mail} from 'ptt-client/sites/ptt/model'; 19 | 20 | // if you are using this module in node.js, 'ws' is required as WebSocket polyfill. 21 | // you don't need this in modern browsers 22 | global.WebSocket = require('ws'); 23 | 24 | (async function() { 25 | const ptt = new Ptt(); 26 | 27 | ptt.once('connect', () => { 28 | 29 | const kickOther = true; 30 | if (!await ptt.login('username', 'password', kickOther)) 31 | return; 32 | 33 | // get last 20 articles from specific board. the first one is the latest 34 | let query = ptt.select(Article).where('boardname', 'C_Chat'); 35 | let article = await query.get(); 36 | 37 | // get articles with offset 38 | let offset = articles[article.length-1].id - 1; 39 | query.where('id', offset); 40 | let articles2 = await query.get(); 41 | 42 | // get articles with search filter (type: 'push', 'author', 'title') 43 | query = ptt.select(Article) 44 | .where('boardname', 'C_Chat') 45 | .where('title', '閒聊') 46 | .where('title', '京阿尼') 47 | .where('push', '20'); 48 | articles = await query.get(); 49 | 50 | // get the content of specific article 51 | query.where('id', articles[articles.length-1].id); 52 | let article = await query.getOne(); 53 | 54 | // get board list 55 | query = ptt.select(Board).where('entry', 'class'); 56 | let classBoards = await query.get(); 57 | 58 | // get hot board list 59 | query = ptt.select(Board).where('entry', 'hot'); 60 | let hotBoards = await query.get(); 61 | 62 | // get your favorite list 63 | query = ptt.select(Board).where('entry', 'favorite'); 64 | let favorites = await query.get(); 65 | 66 | // search board by prefix 67 | query = ptt.select(Board).where('prefix', 'c_cha'); 68 | let boards = await query.get(); 69 | 70 | // get favorite list in a folder 71 | if (favorites[0].folder) { 72 | query.where('offsets', [favorites[0].id]); 73 | let favorites2 = await query.get(); 74 | } 75 | 76 | // get mails 77 | query = ptt.select(Mail); 78 | let mails = await query.get(); 79 | 80 | // get mail 81 | query.where('id', mails[0].sn); 82 | let mail = await query.getOne(); 83 | 84 | await ptt.logout(); 85 | 86 | }); 87 | })(); 88 | ``` 89 | 90 | ## Development 91 | ``` 92 | npm run test 93 | npm run build 94 | ``` 95 | 96 | ## License 97 | MIT 98 | -------------------------------------------------------------------------------- /src/utils/char.ts: -------------------------------------------------------------------------------- 1 | import wcwidth from 'wcwidth'; 2 | 3 | export function dbcswidth(str: string): number { 4 | return str.split('').reduce(function(sum, c) { 5 | return sum + (c.charCodeAt(0) > 255 ? 2 : 1); 6 | }, 0); 7 | } 8 | /** 9 | * calculate width of string. 10 | * @params {string} widthType - calculate width by wcwidth or String.length 11 | * @params {string} str - string to calculate 12 | */ 13 | export function getWidth(widthType: string, str: string): number { 14 | switch (widthType) { 15 | case 'length': 16 | return str.length; 17 | case 'wcwidth': 18 | return wcwidth(str); 19 | case 'dbcs': 20 | return dbcswidth(str); 21 | default: 22 | throw new Error(`Invalid widthType "${widthType}"`); 23 | } 24 | } 25 | 26 | /** 27 | * calculate the position that the prefix of string is a specific width 28 | * @params {string} widthType - calculate width by wcwidth or String.length 29 | * @params {string} str - string to calculate 30 | * @params {number} width - the width of target string 31 | */ 32 | export function indexOfWidth(widthType: string, str: string, width: number): number { 33 | if (widthType === 'length') { 34 | return Math.min(width, str.length); 35 | } 36 | for (let i = 0; i <= str.length; i++) { 37 | if (getWidth(widthType, str.substr(0, i)) > width) { 38 | return i - 1; 39 | } 40 | } 41 | return str.length; 42 | } 43 | 44 | /** 45 | * extract parts of string, beginning at the character at the specified position, 46 | * and returns the specified width of characters. if the character is incomplete, 47 | * it will be replaced by space. 48 | * @params {string} widthType - calculate width by wcwidth or String.length 49 | * @params {string} str - string to calculate 50 | * @params {number} startWidth - the beginning position of string 51 | * @params {number} width - the width of target string 52 | */ 53 | export function substrWidth(widthType: string, str: string, startWidth: number, width?: number): string { 54 | const ignoreWidth = typeof width === 'undefined'; 55 | let length = width; 56 | let start = startWidth; 57 | let prefixSpace = 0, suffixSpace = 0; 58 | if (widthType !== 'length') { 59 | start = indexOfWidth(widthType, str, startWidth); 60 | if (getWidth(widthType, str.substr(0, start)) < startWidth) { 61 | start += 1; 62 | prefixSpace = Math.max(getWidth(widthType, str.substr(0, start)) - startWidth, 0); 63 | } 64 | if (!ignoreWidth) { 65 | length = indexOfWidth(widthType, str.substr(start), width - prefixSpace); 66 | suffixSpace = Math.min(width, getWidth(widthType, str.substr(start))) - 67 | (prefixSpace + getWidth(widthType, str.substr(start, length))); 68 | } 69 | } 70 | const substr = ignoreWidth ? str.substr(start) : str.substr(start, length); 71 | return ' '.repeat(prefixSpace) + substr + ' '.repeat(suffixSpace); 72 | } 73 | -------------------------------------------------------------------------------- /src/sites/ptt/model/mail.ts: -------------------------------------------------------------------------------- 1 | import {Line} from '../../../common/Line'; 2 | import {ObjectLiteral} from '../../../common/ObjectLiteral'; 3 | import {SelectQueryBuilder} from '../../../utils/query-builder/SelectQueryBuilder'; 4 | import {keymap as key} from '../../../utils'; 5 | import {substrWidth} from '../../../utils/char'; 6 | 7 | export class Mail { 8 | id: number; 9 | date: string; 10 | timestamp: string; 11 | author: string; 12 | status: string; 13 | title: string; 14 | private _content: Line[] = []; 15 | 16 | get content(): ReadonlyArray { 17 | return this._content; 18 | } 19 | 20 | set content(content: ReadonlyArray) { 21 | this._content = content.slice(); 22 | } 23 | 24 | get data(): ReadonlyArray { 25 | return this._content.map(content => content.str); 26 | } 27 | 28 | /** 29 | * @deprecated 30 | */ 31 | set data(data: ReadonlyArray) { 32 | console.warn("Should not set Mail.data/Mail.lines directly. " + 33 | "Use Mail.content instead"); 34 | } 35 | 36 | constructor() { 37 | } 38 | 39 | static fromLine(line: Line): Mail { 40 | const mail = new Mail(); 41 | const {str} = line; 42 | mail.id = +substrWidth('dbcs', str, 1, 5).trim(); 43 | mail.date = substrWidth('dbcs', str, 9, 5).trim(); 44 | mail.author = substrWidth('dbcs', str, 15, 12).trim(); 45 | mail.status = substrWidth('dbcs', str, 30, 2).trim(); 46 | mail.title = substrWidth('dbcs', str, 33 ).trim(); 47 | return mail; 48 | } 49 | 50 | static select(bot): SelectQueryBuilder { 51 | return new MailSelectQueryBuilder(bot); 52 | } 53 | 54 | hasHeader(): boolean { 55 | if (this.content.length === 0) { 56 | return false; 57 | } 58 | const authorArea = substrWidth('dbcs', this.content[0].str, 0, 6).trim(); 59 | return authorArea === '作者'; 60 | } 61 | } 62 | 63 | export enum WhereType { 64 | Id = 'id', 65 | Author = 'author', 66 | Title = 'title', 67 | } 68 | 69 | export class MailSelectQueryBuilder extends SelectQueryBuilder { 70 | private bot; 71 | private wheres: ObjectLiteral[] = []; 72 | private id = 0; 73 | 74 | constructor(bot) { 75 | super(); 76 | this.bot = bot; 77 | } 78 | 79 | where(type: WhereType, condition: any): this { 80 | switch (type) { 81 | case WhereType.Id: 82 | this.id = +condition; 83 | break; 84 | case WhereType.Author: 85 | this.wheres.push({ type: 'a', condition }); 86 | break; 87 | case WhereType.Title: 88 | this.wheres.push({ type: '/', condition }); 89 | break; 90 | default: 91 | throw new Error(`Invalid type: ${type}`); 92 | } 93 | return this; 94 | } 95 | 96 | getQuery(): string { 97 | return this.wheres.map(({ type, condition }) => `${type}${condition}${key.Enter}`).join(); 98 | } 99 | 100 | async get(): Promise { 101 | await this.bot.enterMail(); 102 | const found = await this.bot.send(this.getQuery()); 103 | if (!found) { 104 | return []; 105 | } 106 | if (this.id > 0) { 107 | const id = Math.max(this.id - 9, 1); 108 | await this.bot.send(`${key.End}${key.End}${id}${key.Enter}`); 109 | } 110 | 111 | const mails: Mail[] = []; 112 | for (let i = 3; i <= 22; i++) { 113 | const line = this.bot.line[i]; 114 | if (line.str.trim() === '') { 115 | break; 116 | } 117 | const mail = Mail.fromLine(line); 118 | mails.push(mail); 119 | } 120 | 121 | await this.bot.enterIndex(); 122 | return mails.reverse(); 123 | } 124 | 125 | async getOne(): Promise { 126 | await this.bot.enterMail(); 127 | const found = await this.bot.send(this.getQuery()); 128 | if (!found) { 129 | return void 0; 130 | } 131 | await this.bot.send(`${this.id}${key.Enter}${key.Enter}`); 132 | 133 | const mail = new Mail(); 134 | mail.id = this.id; 135 | mail.content = await this.bot.getContent(); 136 | 137 | if (mail.hasHeader()) { 138 | mail.author = substrWidth('dbcs', this.bot.line[0].str, 7, 50).trim(); 139 | mail.title = substrWidth('dbcs', this.bot.line[1].str, 7 ).trim(); 140 | mail.timestamp = substrWidth('dbcs', this.bot.line[2].str, 7 ).trim(); 141 | } 142 | 143 | await this.bot.enterIndex(); 144 | return mail; 145 | } 146 | } 147 | 148 | export default Mail; 149 | -------------------------------------------------------------------------------- /test/article.ts: -------------------------------------------------------------------------------- 1 | import assert from 'assert'; 2 | import { Article } from '../src/sites/ptt/model'; 3 | 4 | import { newbot } from './common'; 5 | import { username, password } from './config'; 6 | 7 | const getArticleInfo = (article: Article) => { 8 | return `${article.id} ${article.author} ${article.title}`; 9 | }; 10 | 11 | describe('Article', () => { 12 | let ptt; 13 | before('login', async () => { 14 | ptt = await newbot(username, password); 15 | }); 16 | after('logout', async () => { 17 | await ptt.logout(); 18 | }); 19 | 20 | describe('get', () => { 21 | let articles: Article[]; 22 | const boardname = 'Gossiping'; 23 | it('should get correct article list from board', async () => { 24 | articles = 25 | await ptt.select(Article) 26 | .where('boardname', boardname) 27 | .get(); 28 | assert(articles.length > 0); 29 | }); 30 | it('should get correct article list with "id" argument', async () => { 31 | let articles2: Article[] = 32 | await ptt.select(Article) 33 | .where('boardname', boardname) 34 | .where('id', articles[articles.length-1].id-1) 35 | .get(); 36 | 37 | const article1Info = getArticleInfo(articles[articles.length-1]); 38 | const article2Info = getArticleInfo(articles2[0]); 39 | assert.strictEqual(articles2[0].id, articles[articles.length-1].id-1, `${article1Info}\n${article2Info}`); 40 | }); 41 | }); 42 | 43 | describe('getOne', () => { 44 | const boardname = 'Gossiping'; 45 | it('should get correct article from board', async () => { 46 | const article: Article = 47 | await ptt.select(Article) 48 | .where('boardname', boardname) 49 | .where('id', 100000) 50 | .getOne(); 51 | 52 | assert.strictEqual(article.boardname, boardname); 53 | assert.strictEqual(article.id, 100000); 54 | }); 55 | }); 56 | 57 | describe('where', () => { 58 | let board = 'Gossiping'; 59 | let push = '50'; 60 | let title = '問卦'; 61 | let author = 'kevin'; 62 | 63 | it('should get correct articles with specified push number from board', async () => { 64 | const articles: Article[] = 65 | await ptt.select(Article) 66 | .where('boardname', board) 67 | .where('push', push) 68 | .get(); 69 | assert(articles.length > 0); 70 | 71 | articles.forEach(article => { 72 | let pushCheck = false; 73 | let articleInfo = getArticleInfo(article); 74 | let pushNumber = (article.push === '爆') ? '100' : article.push; 75 | assert(Number(pushNumber) >= Number(push), articleInfo); 76 | }); 77 | }); 78 | 79 | it('should get correct articles with specified author name from board', async () => { 80 | const articles: Article[] = 81 | await ptt.select(Article) 82 | .where('boardname', board) 83 | .where('author', author) 84 | .get(); 85 | assert(articles.length > 0); 86 | 87 | articles.forEach(article => { 88 | let articleInfo = getArticleInfo(article); 89 | assert(article.author.toLowerCase().includes(author.toLowerCase()), articleInfo); 90 | }); 91 | }); 92 | 93 | it('should get correct articles contain specified title word from board', async () => { 94 | const articles: Article[] = 95 | await ptt.select(Article) 96 | .where('boardname', board) 97 | .where('title', title) 98 | .get(); 99 | assert(articles.length > 0); 100 | 101 | articles.forEach(article => { 102 | let articleInfo = getArticleInfo(article); 103 | assert(article.title.toLowerCase().includes(title), articleInfo); 104 | }); 105 | }); 106 | 107 | it('should get correct articles contain specified title word AND push number from board', async () => { 108 | const articles: Article[] = 109 | await ptt.select(Article) 110 | .where('boardname', board) 111 | .where('title', title) 112 | .where('push', push) 113 | .get(); 114 | assert(articles.length > 0); 115 | 116 | articles.forEach(article => { 117 | let articleInfo = getArticleInfo(article); 118 | let pushNumber = (article.push === '爆') ? '100' : article.push; 119 | assert(article.title.toLowerCase().includes(title), articleInfo); 120 | assert(Number(pushNumber) >= Number(push), articleInfo); 121 | }); 122 | }); 123 | }) 124 | }); 125 | -------------------------------------------------------------------------------- /src/sites/ptt/model/article.ts: -------------------------------------------------------------------------------- 1 | import {Line} from '../../../common/Line'; 2 | import {ObjectLiteral} from '../../../common/ObjectLiteral'; 3 | import {SelectQueryBuilder} from '../../../utils/query-builder/SelectQueryBuilder'; 4 | import {keymap as key} from '../../../utils'; 5 | import {substrWidth} from '../../../utils/char'; 6 | 7 | export class Article { 8 | boardname: string; 9 | id: number; 10 | push: string; 11 | date: string; 12 | timestamp: string; 13 | author: string; 14 | status: string; 15 | title: string; 16 | fixed: boolean; 17 | private _content: Line[] = []; 18 | 19 | get content(): ReadonlyArray { 20 | return this._content; 21 | } 22 | 23 | set content(content: ReadonlyArray) { 24 | this._content = content.slice(); 25 | } 26 | 27 | get data(): ReadonlyArray { 28 | return this._content.map(content => content.str); 29 | } 30 | 31 | /** 32 | * @deprecated 33 | */ 34 | set data(data: ReadonlyArray) { 35 | console.warn("Should not set Mail.data/Mail.lines directly. " + 36 | "Use Mail.content instead"); 37 | } 38 | 39 | constructor() { 40 | } 41 | 42 | static fromLine(line: Line): Article { 43 | const article = new Article(); 44 | const {str} = line; 45 | article.id = +substrWidth('dbcs', str, 1, 7).trim(); 46 | article.push = substrWidth('dbcs', str, 9, 2).trim(); 47 | article.date = substrWidth('dbcs', str, 11, 5).trim(); 48 | article.author = substrWidth('dbcs', str, 17, 12).trim(); 49 | article.status = substrWidth('dbcs', str, 30, 2).trim(); 50 | article.title = substrWidth('dbcs', str, 32 ).trim(); 51 | article.fixed = substrWidth('dbcs', str, 1, 7).trim().includes('★'); 52 | return article; 53 | } 54 | 55 | static select(bot): SelectQueryBuilder
{ 56 | return new ArticleSelectQueryBuilder(bot); 57 | } 58 | 59 | hasHeader(): boolean { 60 | if (this.content.length === 0) { 61 | return false; 62 | } 63 | const authorArea = substrWidth('dbcs', this.content[0].str, 0, 6).trim(); 64 | return authorArea === '作者'; 65 | } 66 | } 67 | 68 | export enum WhereType { 69 | Boardname = 'boardname', 70 | Id = 'id', 71 | Push = 'push', 72 | Author = 'author', 73 | Title = 'title', 74 | } 75 | 76 | export class ArticleSelectQueryBuilder extends SelectQueryBuilder
{ 77 | private bot; 78 | private boardname = ''; 79 | private wheres: ObjectLiteral[] = []; 80 | private id = 0; 81 | 82 | constructor(bot) { 83 | super(); 84 | this.bot = bot; 85 | } 86 | 87 | where(type: WhereType, condition: any): this { 88 | switch (type) { 89 | case WhereType.Boardname: 90 | if (this.boardname !== '') { 91 | console.warn(`Cannot call where with type "${type}" multiple times`); 92 | } else { 93 | this.boardname = condition; 94 | } 95 | break; 96 | case WhereType.Id: 97 | this.id = +condition; 98 | break; 99 | case WhereType.Push: 100 | this.wheres.push({ type: 'Z', condition }); 101 | break; 102 | case WhereType.Author: 103 | this.wheres.push({ type: 'a', condition }); 104 | break; 105 | case WhereType.Title: 106 | this.wheres.push({ type: '/', condition }); 107 | break; 108 | default: 109 | throw new Error(`Invalid type: ${type}`); 110 | } 111 | return this; 112 | } 113 | 114 | getQuery(): string { 115 | return this.wheres.map(({ type, condition }) => `${type}${condition}${key.Enter}`).join(); 116 | } 117 | 118 | async get(): Promise { 119 | await this.bot.enterBoardByName(this.boardname); 120 | const found = await this.bot.send(this.getQuery()); 121 | if (!found) { 122 | return []; 123 | } 124 | if (this.id > 0) { 125 | const id = Math.max(this.id - 9, 1); 126 | await this.bot.send(`${key.End}${key.End}${id}${key.Enter}`); 127 | } 128 | 129 | const articles: Article[] = []; 130 | for (let i = 3; i <= 22; i++) { 131 | const line = this.bot.line[i]; 132 | if (line.str.trim() === '') { 133 | break; 134 | } 135 | const article = Article.fromLine(line); 136 | article.boardname = this.boardname; 137 | articles.push(article); 138 | } 139 | // fix id 140 | if (articles.length >= 2 && articles[0].id === 0) { 141 | for (let i = 1; i < articles.length; i++) { 142 | if (articles[i].id !== 0) { 143 | articles[0].id = articles[i].id - i; 144 | break; 145 | } 146 | } 147 | } 148 | for (let i = 1; i < articles.length; i++) { 149 | articles[i].id = articles[i - 1].id + 1; 150 | } 151 | 152 | await this.bot.enterIndex(); 153 | return articles.reverse(); 154 | } 155 | 156 | async getOne(): Promise { 157 | await this.bot.enterBoardByName(this.boardname); 158 | const found = await this.bot.send(this.getQuery()); 159 | if (!found) { 160 | return void 0; 161 | } 162 | /* TODO: validate id */ 163 | await this.bot.send(`${this.id}${key.Enter}${key.Enter}`); 164 | 165 | const article = new Article(); 166 | article.id = this.id; 167 | article.boardname = this.boardname; 168 | article.content = await this.bot.getContent(); 169 | 170 | if (article.hasHeader()) { 171 | article.author = substrWidth('dbcs', this.bot.line[0].str, 7, 50).trim(); 172 | article.title = substrWidth('dbcs', this.bot.line[1].str, 7 ).trim(); 173 | article.timestamp = substrWidth('dbcs', this.bot.line[2].str, 7 ).trim(); 174 | } 175 | 176 | await this.bot.enterIndex(); 177 | return article; 178 | } 179 | } 180 | 181 | export default Article; 182 | -------------------------------------------------------------------------------- /src/sites/ptt/model/board.ts: -------------------------------------------------------------------------------- 1 | import {Line} from '../../../common/Line'; 2 | import {SelectQueryBuilder} from '../../../utils/query-builder/SelectQueryBuilder'; 3 | import {keymap as key} from '../../../utils'; 4 | import {substrWidth} from '../../../utils/char'; 5 | 6 | export class Board { 7 | name = ''; 8 | id = 0; 9 | unread = false; 10 | category = ''; 11 | flag = ''; 12 | title = ''; 13 | users = ''; 14 | admin = ''; 15 | folder = false; 16 | divider = false; 17 | 18 | constructor(name: string = '') { 19 | this.name = name; 20 | } 21 | 22 | static fromLine(line: Line): Board { 23 | const board = new Board(); 24 | const {str} = line; 25 | board.id = +substrWidth('dbcs', str, 3, 4).trim(); 26 | board.unread = substrWidth('dbcs', str, 8, 2).trim() === 'ˇ'; 27 | board.name = substrWidth('dbcs', str, 10, 12).trim(); 28 | board.category = substrWidth('dbcs', str, 23, 4).trim(); 29 | board.flag = substrWidth('dbcs', str, 28, 2).trim(); 30 | switch (board.flag) { 31 | case '□': 32 | board.title = substrWidth('dbcs', str, 30).replace(/\s+$/, ''); 33 | board.folder = true; 34 | break; 35 | case '--': 36 | board.divider = true; 37 | break; 38 | case 'Σ': 39 | board.title = substrWidth('dbcs', str, 30, 31).replace(/\s+$/, ''); 40 | board.users = substrWidth('dbcs', str, 62, 5).trim(); 41 | board.admin = substrWidth('dbcs', str, 67 ).trim(); 42 | board.folder = true; 43 | break; 44 | case '◎': 45 | board.title = substrWidth('dbcs', str, 30, 31).replace(/\s+$/, ''); 46 | board.users = substrWidth('dbcs', str, 62, 5).trim(); 47 | board.admin = substrWidth('dbcs', str, 67 ).trim(); 48 | break; 49 | default: 50 | console.warn(`Unknown board flag. line.str: "${str}"`); 51 | } 52 | return board; 53 | } 54 | 55 | static fromClassLine(line: Line): Board { 56 | const board = new Board(); 57 | const {str} = line; 58 | board.id = +substrWidth('dbcs', str, 15, 2); 59 | board.title = substrWidth('dbcs', str, 20, 29).replace(/\s+$/, ''); 60 | board.admin = substrWidth('dbcs', str, 61).trim(); 61 | board.folder = true; 62 | return board; 63 | } 64 | 65 | static select(bot): SelectQueryBuilder { 66 | return new BoardSelectQueryBuilder(bot); 67 | } 68 | } 69 | 70 | export enum WhereType { 71 | Entry = 'entry', 72 | Prefix = 'prefix', 73 | Offset = 'offset', 74 | Offsets = 'offsets', 75 | } 76 | 77 | export enum Entry { 78 | Class = 'class', 79 | Favorite = 'favorite', 80 | Hot = 'hot' 81 | } 82 | 83 | export class BoardSelectQueryBuilder extends SelectQueryBuilder { 84 | private bot; 85 | private entry: Entry = Entry.Class; 86 | private prefix: string = ''; 87 | private offsets: number[] = []; 88 | 89 | constructor(bot) { 90 | super(); 91 | this.bot = bot; 92 | } 93 | 94 | where(type: WhereType, condition: any): this { 95 | switch (type.toLowerCase()) { 96 | case WhereType.Entry: 97 | this.entry = condition.toLowerCase(); 98 | break; 99 | case WhereType.Prefix: 100 | this.prefix = condition; 101 | break; 102 | case WhereType.Offset: 103 | this.offsets.push(condition); 104 | break; 105 | case WhereType.Offsets: 106 | this.offsets = condition.slice(); 107 | break; 108 | default: 109 | throw new Error(`Invalid type: ${type}`); 110 | break; 111 | } 112 | return this; 113 | } 114 | 115 | async get(): Promise { 116 | if (this.prefix !== '') { 117 | return await this.getByPrefix(this.prefix); 118 | } 119 | let found; 120 | switch (this.entry) { 121 | case Entry.Class: 122 | found = await this.bot.enterBoardByOffset(this.offsets); 123 | break; 124 | case Entry.Favorite: 125 | found = await this.bot.enterFavorite(this.offsets); 126 | break; 127 | case Entry.Hot: 128 | found = await this.bot.enterBoardByOffset([-1, ...this.offsets]); 129 | break; 130 | } 131 | 132 | const boards: Board[] = []; 133 | if (found) { 134 | if (this.entry === Entry.Class && this.offsets.length === 0) { 135 | for (let i = 7; i < 23; i++) { 136 | const line = this.bot.line[i]; 137 | if (line.str.trim() === '') { 138 | break; 139 | } 140 | const board = Board.fromClassLine(line); 141 | boards.push(board); 142 | } 143 | } else { 144 | while (true) { 145 | let stopLoop = false; 146 | for (let i = 3; i < 23; i++) { 147 | const line = this.bot.line[i]; 148 | if (line.str.trim() === '') { 149 | stopLoop = true; 150 | break; 151 | } 152 | const board = Board.fromLine(line); 153 | if (board.id !== boards.length + 1) { 154 | stopLoop = true; 155 | break; 156 | } 157 | boards.push(board); 158 | } 159 | if (stopLoop) { 160 | break; 161 | } 162 | await this.bot.send(key.PgDown); 163 | } 164 | } 165 | } 166 | 167 | await this.bot.enterIndex(); 168 | return boards; 169 | } 170 | 171 | async getOne(): Promise { 172 | const res = await this.get(); 173 | return res.length ? res[0] : void 0; 174 | } 175 | 176 | private async getByPrefix(prefix: string): Promise { 177 | await this.bot.send(`s${prefix} `); 178 | const boards: Board[] = []; 179 | const resultLine0 = this.bot.line[3].str; 180 | if (resultLine0.toLowerCase().indexOf(prefix.toLowerCase()) === 0) { 181 | let col = 0, row = 0; 182 | /* TODO: Use other way instead of the constant 15. */ 183 | let width = 15; 184 | while (width < resultLine0.length && resultLine0[width] !== ' ') { 185 | width += 1; 186 | } 187 | while (width < resultLine0.length && resultLine0[width] === ' ') { 188 | width += 1; 189 | } 190 | while (true) { 191 | const line = this.bot.line[row + 3]; 192 | const boardname = substrWidth('dbcs', line.str, col * width, width).trim(); 193 | if (boardname !== '') { 194 | boards.push(new Board(boardname)); 195 | } else { 196 | break; 197 | } 198 | row += 1; 199 | if (row == 20) { 200 | col += 1; 201 | row = 0; 202 | /* TODO: Use other way instead of the constant 80. */ 203 | if ((col + 1) * width > 80) { 204 | if (this.bot.line[23].str.includes('按任意鍵繼續')) { 205 | col = row = 0; 206 | await this.bot.send(' '); 207 | } else { 208 | break; 209 | } 210 | } 211 | } 212 | } 213 | } else { 214 | const searchStr = this.bot.line[1].str; 215 | const searchInput = substrWidth('dbcs', searchStr, 34, 15).trim(); 216 | if (searchInput.toLowerCase().indexOf(prefix.toLowerCase()) === 0) { 217 | boards.push(new Board(searchInput)); 218 | } 219 | } 220 | await this.bot.send(key.CtrlC); 221 | return boards; 222 | } 223 | } 224 | 225 | export default Board; 226 | -------------------------------------------------------------------------------- /src/sites/ptt/bot.ts: -------------------------------------------------------------------------------- 1 | import EventEmitter from 'eventemitter3'; 2 | import sleep from 'sleep-promise'; 3 | import Terminal from 'terminal.js'; 4 | 5 | import {Line} from '../../common/Line'; 6 | import Config from '../../config'; 7 | import Socket from '../../socket'; 8 | import { 9 | decode, 10 | encode, 11 | keymap as key, 12 | } from '../../utils'; 13 | import { 14 | getWidth, 15 | indexOfWidth, 16 | substrWidth, 17 | } from '../../utils/char'; 18 | 19 | import defaultConfig from './config'; 20 | import {Article, Board} from './model'; 21 | 22 | class Bot extends EventEmitter { 23 | static initialState = { 24 | connect: false, 25 | login: false, 26 | }; 27 | static forwardEvents = [ 28 | 'message', 29 | 'error', 30 | ]; 31 | 32 | private config: Config; 33 | private term: Terminal; 34 | private _state: any; 35 | private currentCharset: string; 36 | private socket: Socket; 37 | private preventIdleHandler: ReturnType; 38 | 39 | get line(): Line[] { 40 | const lines = []; 41 | for(let i = 0; i < this.term.state.rows; i++) { 42 | const { str, attr } = this.term.state.getLine(i); 43 | lines.push({ str, attr: Object.assign({}, attr) }); 44 | } 45 | return lines; 46 | } 47 | 48 | get screen(): string { 49 | return this.line.map(line => line.str).join('\n'); 50 | } 51 | 52 | constructor(config?: Config) { 53 | super(); 54 | this.config = {...defaultConfig, ...config}; 55 | this.init(); 56 | } 57 | 58 | async init(): Promise { 59 | const { config } = this; 60 | this.term = new Terminal(config.terminal); 61 | this._state = { ...Bot.initialState }; 62 | this.term.state.setMode('stringWidth', 'dbcs'); 63 | this.currentCharset = 'big5'; 64 | 65 | switch (config.protocol.toLowerCase()) { 66 | case 'websocket': 67 | case 'ws': 68 | case 'wss': 69 | break; 70 | case 'telnet': 71 | case 'ssh': 72 | default: 73 | throw new Error(`Invalid protocol: ${config.protocol}`); 74 | break; 75 | } 76 | 77 | const socket = new Socket(config); 78 | socket.connect(); 79 | 80 | Bot.forwardEvents.forEach(e => { 81 | socket.on(e, this.emit.bind(this, e)); 82 | }); 83 | socket 84 | .on('connect', (...args) => { 85 | this._state.connect = true; 86 | this.emit('connect', ...args); 87 | this.emit('stateChange', this.state); 88 | }) 89 | .on('disconnect', (closeEvent, ...args) => { 90 | this._state.connect = false; 91 | this.emit('disconnect', closeEvent, ...args); 92 | this.emit('stateChange', this.state); 93 | }) 94 | .on('message', (data) => { 95 | if (this.currentCharset !== this.config.charset && !this.state.login && 96 | decode(data, 'utf8').includes('登入中,請稍候...')) { 97 | this.currentCharset = this.config.charset; 98 | } 99 | const msg = decode(data, this.currentCharset); 100 | this.term.write(msg); 101 | this.emit('redraw', this.term.toString()); 102 | }) 103 | .on('error', (err) => { 104 | }); 105 | this.socket = socket; 106 | } 107 | 108 | get state(): any { 109 | return {...this._state}; 110 | } 111 | 112 | getLine = (n) => { 113 | return this.term.state.getLine(n); 114 | } 115 | 116 | async getContent(): Promise { 117 | const lines = []; 118 | 119 | lines.push(this.line[0]); 120 | 121 | let sentPgDown = false; 122 | while (!this.line[23].str.includes('100%') 123 | && !this.line[23].str.includes('此文章無內容')) { 124 | for (let i = 1; i < 23; i++) { 125 | lines.push(this.line[i]); 126 | } 127 | await this.send(key.PgDown); 128 | sentPgDown = true; 129 | } 130 | 131 | const lastLine = lines[lines.length - 1]; 132 | for (let i = 0; i < 23; i++) { 133 | if (this.line[i].str === lastLine.str) { 134 | for (let j = i + 1; j < 23; j++) { 135 | lines.push(this.line[j]); 136 | } 137 | break; 138 | } 139 | } 140 | 141 | while (lines.length > 0 && lines[lines.length - 1].str === '') { 142 | lines.pop(); 143 | } 144 | 145 | if (sentPgDown) { 146 | await this.send(key.Home); 147 | } 148 | return lines; 149 | } 150 | 151 | /** 152 | * @deprecated 153 | */ 154 | async getLines() { 155 | const lines = await this.getContent(); 156 | return lines.map(line => line.str); 157 | } 158 | 159 | send(msg: string): Promise { 160 | if (this.config.preventIdleTimeout) { 161 | this.preventIdle(this.config.preventIdleTimeout); 162 | } 163 | return new Promise((resolve, reject) => { 164 | let autoResolveHandler; 165 | const cb = message => { 166 | clearTimeout(autoResolveHandler); 167 | resolve(true); 168 | }; 169 | if (this.state.connect) { 170 | if (msg.length > 0) { 171 | this.socket.send(encode(msg, this.currentCharset)); 172 | this.once('message', cb); 173 | autoResolveHandler = setTimeout(() => { 174 | this.removeListener('message', cb); 175 | resolve(false); 176 | }, this.config.timeout * 10); 177 | } else { 178 | console.info(`Sending message with 0-length. Skipped.`); 179 | resolve(true); 180 | } 181 | } else { 182 | reject(); 183 | } 184 | }); 185 | } 186 | 187 | preventIdle(timeout: number): void { 188 | clearTimeout(this.preventIdleHandler); 189 | if (this.state.login) { 190 | this.preventIdleHandler = setTimeout(async () => { 191 | await this.send(key.CtrlU); 192 | await this.send(key.ArrowLeft); 193 | }, timeout * 1000); 194 | } 195 | } 196 | 197 | async login(username: string, password: string, kick: boolean= true): Promise { 198 | if (this.state.login) { return; } 199 | username = username.replace(/,/g, ''); 200 | if (this.config.charset === 'utf8') { 201 | username += ','; 202 | } 203 | await this.send(`${username}${key.Enter}${password}${key.Enter}`); 204 | let ret = await this.checkLogin(kick); 205 | if (ret) { 206 | const { _state: state } = this; 207 | state.login = true; 208 | state.position = { 209 | boardname: '', 210 | }; 211 | this.emit('stateChange', this.state); 212 | } 213 | return ret; 214 | } 215 | 216 | async logout(): Promise { 217 | if (!this.state.login) { return; } 218 | await this.send(`G${key.Enter}Y${key.Enter}`); 219 | this._state.login = false; 220 | this.emit('stateChange', this.state); 221 | this.send(key.Enter); 222 | return true; 223 | } 224 | 225 | private async checkLogin(kick: boolean): Promise { 226 | 227 | if (this.line[21].str.includes('密碼不對或無此帳號')) { 228 | this.emit('login.failed'); 229 | return false; 230 | } else if (this.line[23].str.includes('請稍後再試')) { 231 | this.emit('login.failed'); 232 | return false; 233 | } else { 234 | let state = 0; 235 | while (true) { 236 | await sleep(400); 237 | const lines = this.line; 238 | if (lines[22].str.includes('登入中,請稍候...')) { 239 | /* no-op */ 240 | } else if (lines[22].str.includes('您想刪除其他重複登入的連線嗎')) { 241 | if (state === 1) continue; 242 | await this.send(`${kick ? 'y' : 'n'}${key.Enter}`); 243 | state = 1; 244 | continue; 245 | } else if (lines[23].str.includes('請勿頻繁登入以免造成系統過度負荷')) { 246 | if (state === 2) continue; 247 | await this.send(`${key.Enter}`); 248 | state = 2; 249 | } else if (lines[23].str.includes('您要刪除以上錯誤嘗試的記錄嗎')) { 250 | if (state === 3) continue; 251 | await this.send(`y${key.Enter}`); 252 | state = 3; 253 | } else if (lines[23].str.includes('按任意鍵繼續')) { 254 | await this.send(`${key.Enter}`); 255 | } else if ((lines[22].str + lines[23].str).toLowerCase().includes('y/n')) { 256 | console.info(`Unknown login state: \n${this.screen}`); 257 | await this.send(`y${key.Enter}`); 258 | } else if (lines[23].str.includes('我是')) { 259 | break; 260 | } else { 261 | console.info(`Unknown login state: \n${this.screen}`); 262 | } 263 | } 264 | this.emit('login.success'); 265 | return true; 266 | } 267 | } 268 | 269 | /** 270 | * @deprecated 271 | */ 272 | private checkArticleWithHeader(): boolean { 273 | const authorArea = substrWidth('dbcs', this.line[0].str, 0, 6).trim(); 274 | return authorArea === '作者'; 275 | } 276 | 277 | select(model) { 278 | return model.select(this); 279 | } 280 | 281 | /** 282 | * @deprecated 283 | */ 284 | async getMails(offset: number= 0) { 285 | await this.enterMail(); 286 | if (offset > 0) { 287 | offset = Math.max(offset - 9, 1); 288 | await this.send(`${key.End}${key.End}${offset}${key.Enter}`); 289 | } 290 | 291 | const { getLine } = this; 292 | 293 | const mails = []; 294 | for (let i = 3; i <= 22; i++) { 295 | const line = getLine(i).str; 296 | const mail = { 297 | sn: +substrWidth('dbcs', line, 1, 5).trim(), 298 | date: substrWidth('dbcs', line, 9, 5).trim(), 299 | author: substrWidth('dbcs', line, 15, 12).trim(), 300 | status: substrWidth('dbcs', line, 30, 2).trim(), 301 | title: substrWidth('dbcs', line, 33 ).trim(), 302 | }; 303 | mails.push(mail); 304 | } 305 | 306 | await this.enterIndex(); 307 | return mails.reverse(); 308 | } 309 | 310 | /** 311 | * @deprecated 312 | */ 313 | async getMail(sn: number) { 314 | await this.enterMail(); 315 | const { getLine } = this; 316 | 317 | await this.send(`${sn}${key.Enter}${key.Enter}`); 318 | 319 | const hasHeader = this.checkArticleWithHeader(); 320 | 321 | const mail = { 322 | sn, 323 | author: '', 324 | title: '', 325 | timestamp: '', 326 | lines: [], 327 | }; 328 | 329 | if (this.checkArticleWithHeader()) { 330 | mail.author = substrWidth('dbcs', getLine(0).str, 7, 50).trim(); 331 | mail.title = substrWidth('dbcs', getLine(1).str, 7 ).trim(); 332 | mail.timestamp = substrWidth('dbcs', getLine(2).str, 7 ).trim(); 333 | } 334 | 335 | mail.lines = await this.getLines(); 336 | 337 | await this.enterIndex(); 338 | return mail; 339 | } 340 | 341 | async enterIndex(): Promise { 342 | await this.send(`${key.ArrowLeft.repeat(10)}`); 343 | return true; 344 | } 345 | 346 | get currentBoardname(): string|undefined { 347 | const boardRe = /【(?!看板列表).*】.*《(?.*)》/; 348 | const match = boardRe.exec(this.line[0].str); 349 | if (match) { 350 | return match.groups.boardname; 351 | } else { 352 | return void 0; 353 | } 354 | } 355 | 356 | async enterBoardByName(boardname: string): Promise { 357 | await this.send(`s${boardname}${key.Enter} ${key.Home}${key.End}`); 358 | 359 | if (this.currentBoardname.toLowerCase() === boardname.toLowerCase()) { 360 | this._state.position.boardname = this.currentBoardname; 361 | this.emit('stateChange', this.state); 362 | return true; 363 | } else { 364 | await this.enterIndex(); 365 | return false; 366 | } 367 | } 368 | 369 | async enterByOffset(offsets: number[]= []): Promise { 370 | let result = true; 371 | offsets.forEach(async offset => { 372 | if (offset === 0) { 373 | result = false; 374 | } 375 | if (offset < 0) { 376 | for (let i = 22; i >= 3; i--) { 377 | let lastOffset = substrWidth('dbcs', this.line[i].str, 3, 4).trim(); 378 | if (lastOffset.length > 0) { 379 | offset += +lastOffset + 1; 380 | break; 381 | } 382 | lastOffset = substrWidth('dbcs', this.line[i].str, 15, 2).trim(); 383 | if (lastOffset.length > 0) { 384 | offset += +lastOffset + 1; 385 | break; 386 | } 387 | } 388 | } 389 | if (offset < 0) { 390 | result = false; 391 | } 392 | if (!result) { 393 | return; 394 | } 395 | await this.send(`${offset}${key.Enter.repeat(2)} ${key.Home}${key.End}`); 396 | }); 397 | 398 | if (result) { 399 | this._state.position.boardname = this.currentBoardname; 400 | this.emit('stateChange', this.state); 401 | await this.send(key.Home); 402 | return true; 403 | } else { 404 | await this.enterIndex(); 405 | return false; 406 | } 407 | } 408 | 409 | async enterBoardByOffset(offsets: number[]= []): Promise { 410 | await this.send(`C${key.Enter}`); 411 | return await this.enterByOffset(offsets); 412 | } 413 | 414 | async enterFavorite(offsets: number[]= []): Promise { 415 | await this.send(`F${key.Enter}`); 416 | return await this.enterByOffset(offsets); 417 | } 418 | 419 | async enterMail(): Promise { 420 | await this.send(`M${key.Enter}R${key.Enter}${key.Home}${key.End}`); 421 | return true; 422 | } 423 | } 424 | 425 | export default Bot; 426 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/cli@^7.2.3": 6 | version "7.10.1" 7 | resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.1.tgz#b6e5cd43a17b8f639442ab027976408ebe6d79a0" 8 | integrity sha512-cVB+dXeGhMOqViIaZs3A9OUAe4pKw4SBNdMw6yHJMYR7s4TB+Cei7ThquV/84O19PdIFWuwe03vxxES0BHUm5g== 9 | dependencies: 10 | commander "^4.0.1" 11 | convert-source-map "^1.1.0" 12 | fs-readdir-recursive "^1.1.0" 13 | glob "^7.0.0" 14 | lodash "^4.17.13" 15 | make-dir "^2.1.0" 16 | slash "^2.0.0" 17 | source-map "^0.5.0" 18 | optionalDependencies: 19 | chokidar "^2.1.8" 20 | 21 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.1": 22 | version "7.10.1" 23 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.1.tgz#d5481c5095daa1c57e16e54c6f9198443afb49ff" 24 | integrity sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw== 25 | dependencies: 26 | "@babel/highlight" "^7.10.1" 27 | 28 | "@babel/compat-data@^7.10.1": 29 | version "7.10.1" 30 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.1.tgz#b1085ffe72cd17bf2c0ee790fc09f9626011b2db" 31 | integrity sha512-CHvCj7So7iCkGKPRFUfryXIkU2gSBw7VSZFYLsqVhrS47269VK2Hfi9S/YcublPMW8k1u2bQBlbDruoQEm4fgw== 32 | dependencies: 33 | browserslist "^4.12.0" 34 | invariant "^2.2.4" 35 | semver "^5.5.0" 36 | 37 | "@babel/core@^7.4.0": 38 | version "7.10.2" 39 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.2.tgz#bd6786046668a925ac2bd2fd95b579b92a23b36a" 40 | integrity sha512-KQmV9yguEjQsXqyOUGKjS4+3K8/DlOCE2pZcq4augdQmtTy5iv5EHtmMSJ7V4c1BIPjuwtZYqYLCq9Ga+hGBRQ== 41 | dependencies: 42 | "@babel/code-frame" "^7.10.1" 43 | "@babel/generator" "^7.10.2" 44 | "@babel/helper-module-transforms" "^7.10.1" 45 | "@babel/helpers" "^7.10.1" 46 | "@babel/parser" "^7.10.2" 47 | "@babel/template" "^7.10.1" 48 | "@babel/traverse" "^7.10.1" 49 | "@babel/types" "^7.10.2" 50 | convert-source-map "^1.7.0" 51 | debug "^4.1.0" 52 | gensync "^1.0.0-beta.1" 53 | json5 "^2.1.2" 54 | lodash "^4.17.13" 55 | resolve "^1.3.2" 56 | semver "^5.4.1" 57 | source-map "^0.5.0" 58 | 59 | "@babel/generator@^7.10.1", "@babel/generator@^7.10.2": 60 | version "7.10.2" 61 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.2.tgz#0fa5b5b2389db8bfdfcc3492b551ee20f5dd69a9" 62 | integrity sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA== 63 | dependencies: 64 | "@babel/types" "^7.10.2" 65 | jsesc "^2.5.1" 66 | lodash "^4.17.13" 67 | source-map "^0.5.0" 68 | 69 | "@babel/helper-annotate-as-pure@^7.10.1": 70 | version "7.10.1" 71 | resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz#f6d08acc6f70bbd59b436262553fb2e259a1a268" 72 | integrity sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw== 73 | dependencies: 74 | "@babel/types" "^7.10.1" 75 | 76 | "@babel/helper-builder-binary-assignment-operator-visitor@^7.10.1": 77 | version "7.10.1" 78 | resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.1.tgz#0ec7d9be8174934532661f87783eb18d72290059" 79 | integrity sha512-cQpVq48EkYxUU0xozpGCLla3wlkdRRqLWu1ksFMXA9CM5KQmyyRpSEsYXbao7JUkOw/tAaYKCaYyZq6HOFYtyw== 80 | dependencies: 81 | "@babel/helper-explode-assignable-expression" "^7.10.1" 82 | "@babel/types" "^7.10.1" 83 | 84 | "@babel/helper-compilation-targets@^7.10.2": 85 | version "7.10.2" 86 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz#a17d9723b6e2c750299d2a14d4637c76936d8285" 87 | integrity sha512-hYgOhF4To2UTB4LTaZepN/4Pl9LD4gfbJx8A34mqoluT8TLbof1mhUlYuNWTEebONa8+UlCC4X0TEXu7AOUyGA== 88 | dependencies: 89 | "@babel/compat-data" "^7.10.1" 90 | browserslist "^4.12.0" 91 | invariant "^2.2.4" 92 | levenary "^1.1.1" 93 | semver "^5.5.0" 94 | 95 | "@babel/helper-create-class-features-plugin@^7.10.1": 96 | version "7.10.2" 97 | resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.2.tgz#7474295770f217dbcf288bf7572eb213db46ee67" 98 | integrity sha512-5C/QhkGFh1vqcziq1vAL6SI9ymzUp8BCYjFpvYVhWP4DlATIb3u5q3iUd35mvlyGs8fO7hckkW7i0tmH+5+bvQ== 99 | dependencies: 100 | "@babel/helper-function-name" "^7.10.1" 101 | "@babel/helper-member-expression-to-functions" "^7.10.1" 102 | "@babel/helper-optimise-call-expression" "^7.10.1" 103 | "@babel/helper-plugin-utils" "^7.10.1" 104 | "@babel/helper-replace-supers" "^7.10.1" 105 | "@babel/helper-split-export-declaration" "^7.10.1" 106 | 107 | "@babel/helper-create-regexp-features-plugin@^7.10.1", "@babel/helper-create-regexp-features-plugin@^7.8.3": 108 | version "7.10.1" 109 | resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz#1b8feeab1594cbcfbf3ab5a3bbcabac0468efdbd" 110 | integrity sha512-Rx4rHS0pVuJn5pJOqaqcZR4XSgeF9G/pO/79t+4r7380tXFJdzImFnxMU19f83wjSrmKHq6myrM10pFHTGzkUA== 111 | dependencies: 112 | "@babel/helper-annotate-as-pure" "^7.10.1" 113 | "@babel/helper-regex" "^7.10.1" 114 | regexpu-core "^4.7.0" 115 | 116 | "@babel/helper-define-map@^7.10.1": 117 | version "7.10.1" 118 | resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.1.tgz#5e69ee8308648470dd7900d159c044c10285221d" 119 | integrity sha512-+5odWpX+OnvkD0Zmq7panrMuAGQBu6aPUgvMzuMGo4R+jUOvealEj2hiqI6WhxgKrTpFoFj0+VdsuA8KDxHBDg== 120 | dependencies: 121 | "@babel/helper-function-name" "^7.10.1" 122 | "@babel/types" "^7.10.1" 123 | lodash "^4.17.13" 124 | 125 | "@babel/helper-explode-assignable-expression@^7.10.1": 126 | version "7.10.1" 127 | resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.1.tgz#e9d76305ee1162ca467357ae25df94f179af2b7e" 128 | integrity sha512-vcUJ3cDjLjvkKzt6rHrl767FeE7pMEYfPanq5L16GRtrXIoznc0HykNW2aEYkcnP76P0isoqJ34dDMFZwzEpJg== 129 | dependencies: 130 | "@babel/traverse" "^7.10.1" 131 | "@babel/types" "^7.10.1" 132 | 133 | "@babel/helper-function-name@^7.10.1": 134 | version "7.10.1" 135 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz#92bd63829bfc9215aca9d9defa85f56b539454f4" 136 | integrity sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ== 137 | dependencies: 138 | "@babel/helper-get-function-arity" "^7.10.1" 139 | "@babel/template" "^7.10.1" 140 | "@babel/types" "^7.10.1" 141 | 142 | "@babel/helper-get-function-arity@^7.10.1": 143 | version "7.10.1" 144 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz#7303390a81ba7cb59613895a192b93850e373f7d" 145 | integrity sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw== 146 | dependencies: 147 | "@babel/types" "^7.10.1" 148 | 149 | "@babel/helper-hoist-variables@^7.10.1": 150 | version "7.10.1" 151 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.1.tgz#7e77c82e5dcae1ebf123174c385aaadbf787d077" 152 | integrity sha512-vLm5srkU8rI6X3+aQ1rQJyfjvCBLXP8cAGeuw04zeAM2ItKb1e7pmVmLyHb4sDaAYnLL13RHOZPLEtcGZ5xvjg== 153 | dependencies: 154 | "@babel/types" "^7.10.1" 155 | 156 | "@babel/helper-member-expression-to-functions@^7.10.1": 157 | version "7.10.1" 158 | resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz#432967fd7e12a4afef66c4687d4ca22bc0456f15" 159 | integrity sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g== 160 | dependencies: 161 | "@babel/types" "^7.10.1" 162 | 163 | "@babel/helper-module-imports@^7.10.1": 164 | version "7.10.1" 165 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz#dd331bd45bccc566ce77004e9d05fe17add13876" 166 | integrity sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg== 167 | dependencies: 168 | "@babel/types" "^7.10.1" 169 | 170 | "@babel/helper-module-transforms@^7.10.1": 171 | version "7.10.1" 172 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz#24e2f08ee6832c60b157bb0936c86bef7210c622" 173 | integrity sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg== 174 | dependencies: 175 | "@babel/helper-module-imports" "^7.10.1" 176 | "@babel/helper-replace-supers" "^7.10.1" 177 | "@babel/helper-simple-access" "^7.10.1" 178 | "@babel/helper-split-export-declaration" "^7.10.1" 179 | "@babel/template" "^7.10.1" 180 | "@babel/types" "^7.10.1" 181 | lodash "^4.17.13" 182 | 183 | "@babel/helper-optimise-call-expression@^7.10.1": 184 | version "7.10.1" 185 | resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz#b4a1f2561870ce1247ceddb02a3860fa96d72543" 186 | integrity sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg== 187 | dependencies: 188 | "@babel/types" "^7.10.1" 189 | 190 | "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.1", "@babel/helper-plugin-utils@^7.8.0": 191 | version "7.10.1" 192 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz#ec5a5cf0eec925b66c60580328b122c01230a127" 193 | integrity sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA== 194 | 195 | "@babel/helper-regex@^7.10.1": 196 | version "7.10.1" 197 | resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.1.tgz#021cf1a7ba99822f993222a001cc3fec83255b96" 198 | integrity sha512-7isHr19RsIJWWLLFn21ubFt223PjQyg1HY7CZEMRr820HttHPpVvrsIN3bUOo44DEfFV4kBXO7Abbn9KTUZV7g== 199 | dependencies: 200 | lodash "^4.17.13" 201 | 202 | "@babel/helper-remap-async-to-generator@^7.10.1": 203 | version "7.10.1" 204 | resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.1.tgz#bad6aaa4ff39ce8d4b82ccaae0bfe0f7dbb5f432" 205 | integrity sha512-RfX1P8HqsfgmJ6CwaXGKMAqbYdlleqglvVtht0HGPMSsy2V6MqLlOJVF/0Qyb/m2ZCi2z3q3+s6Pv7R/dQuZ6A== 206 | dependencies: 207 | "@babel/helper-annotate-as-pure" "^7.10.1" 208 | "@babel/helper-wrap-function" "^7.10.1" 209 | "@babel/template" "^7.10.1" 210 | "@babel/traverse" "^7.10.1" 211 | "@babel/types" "^7.10.1" 212 | 213 | "@babel/helper-replace-supers@^7.10.1": 214 | version "7.10.1" 215 | resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz#ec6859d20c5d8087f6a2dc4e014db7228975f13d" 216 | integrity sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A== 217 | dependencies: 218 | "@babel/helper-member-expression-to-functions" "^7.10.1" 219 | "@babel/helper-optimise-call-expression" "^7.10.1" 220 | "@babel/traverse" "^7.10.1" 221 | "@babel/types" "^7.10.1" 222 | 223 | "@babel/helper-simple-access@^7.10.1": 224 | version "7.10.1" 225 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz#08fb7e22ace9eb8326f7e3920a1c2052f13d851e" 226 | integrity sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw== 227 | dependencies: 228 | "@babel/template" "^7.10.1" 229 | "@babel/types" "^7.10.1" 230 | 231 | "@babel/helper-split-export-declaration@^7.10.1": 232 | version "7.10.1" 233 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz#c6f4be1cbc15e3a868e4c64a17d5d31d754da35f" 234 | integrity sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g== 235 | dependencies: 236 | "@babel/types" "^7.10.1" 237 | 238 | "@babel/helper-validator-identifier@^7.10.1": 239 | version "7.10.1" 240 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz#5770b0c1a826c4f53f5ede5e153163e0318e94b5" 241 | integrity sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw== 242 | 243 | "@babel/helper-wrap-function@^7.10.1": 244 | version "7.10.1" 245 | resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz#956d1310d6696257a7afd47e4c42dfda5dfcedc9" 246 | integrity sha512-C0MzRGteVDn+H32/ZgbAv5r56f2o1fZSA/rj/TYo8JEJNHg+9BdSmKBUND0shxWRztWhjlT2cvHYuynpPsVJwQ== 247 | dependencies: 248 | "@babel/helper-function-name" "^7.10.1" 249 | "@babel/template" "^7.10.1" 250 | "@babel/traverse" "^7.10.1" 251 | "@babel/types" "^7.10.1" 252 | 253 | "@babel/helpers@^7.10.1": 254 | version "7.10.1" 255 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.1.tgz#a6827b7cb975c9d9cef5fd61d919f60d8844a973" 256 | integrity sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw== 257 | dependencies: 258 | "@babel/template" "^7.10.1" 259 | "@babel/traverse" "^7.10.1" 260 | "@babel/types" "^7.10.1" 261 | 262 | "@babel/highlight@^7.10.1": 263 | version "7.10.1" 264 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.1.tgz#841d098ba613ba1a427a2b383d79e35552c38ae0" 265 | integrity sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg== 266 | dependencies: 267 | "@babel/helper-validator-identifier" "^7.10.1" 268 | chalk "^2.0.0" 269 | js-tokens "^4.0.0" 270 | 271 | "@babel/node@^7.2.2": 272 | version "7.10.1" 273 | resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.10.1.tgz#34d3405c7c3d5139c48cbce2c80226f46e36ab25" 274 | integrity sha512-HoLxelFIekiipykhN0d3cTSLZVxnl0aZiwv6oW4mxjeQEMOt1J/YGnBaIDyYWQ5tIHkUL1cqqn8LOvmWhFoCyw== 275 | dependencies: 276 | "@babel/register" "^7.10.1" 277 | commander "^4.0.1" 278 | core-js "^3.2.1" 279 | lodash "^4.17.13" 280 | node-environment-flags "^1.0.5" 281 | regenerator-runtime "^0.13.4" 282 | resolve "^1.13.1" 283 | v8flags "^3.1.1" 284 | 285 | "@babel/parser@^7.10.1", "@babel/parser@^7.10.2": 286 | version "7.10.2" 287 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.2.tgz#871807f10442b92ff97e4783b9b54f6a0ca812d0" 288 | integrity sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ== 289 | 290 | "@babel/plugin-proposal-async-generator-functions@^7.10.1": 291 | version "7.10.1" 292 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.1.tgz#6911af5ba2e615c4ff3c497fe2f47b35bf6d7e55" 293 | integrity sha512-vzZE12ZTdB336POZjmpblWfNNRpMSua45EYnRigE2XsZxcXcIyly2ixnTJasJE4Zq3U7t2d8rRF7XRUuzHxbOw== 294 | dependencies: 295 | "@babel/helper-plugin-utils" "^7.10.1" 296 | "@babel/helper-remap-async-to-generator" "^7.10.1" 297 | "@babel/plugin-syntax-async-generators" "^7.8.0" 298 | 299 | "@babel/plugin-proposal-class-properties@^7.10.1", "@babel/plugin-proposal-class-properties@^7.4.0": 300 | version "7.10.1" 301 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz#046bc7f6550bb08d9bd1d4f060f5f5a4f1087e01" 302 | integrity sha512-sqdGWgoXlnOdgMXU+9MbhzwFRgxVLeiGBqTrnuS7LC2IBU31wSsESbTUreT2O418obpfPdGUR2GbEufZF1bpqw== 303 | dependencies: 304 | "@babel/helper-create-class-features-plugin" "^7.10.1" 305 | "@babel/helper-plugin-utils" "^7.10.1" 306 | 307 | "@babel/plugin-proposal-dynamic-import@^7.10.1": 308 | version "7.10.1" 309 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz#e36979dc1dc3b73f6d6816fc4951da2363488ef0" 310 | integrity sha512-Cpc2yUVHTEGPlmiQzXj026kqwjEQAD9I4ZC16uzdbgWgitg/UHKHLffKNCQZ5+y8jpIZPJcKcwsr2HwPh+w3XA== 311 | dependencies: 312 | "@babel/helper-plugin-utils" "^7.10.1" 313 | "@babel/plugin-syntax-dynamic-import" "^7.8.0" 314 | 315 | "@babel/plugin-proposal-export-default-from@^7.2.0": 316 | version "7.10.1" 317 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.10.1.tgz#59ea2a4f09dbb0358c73dab27def3d21a27bd370" 318 | integrity sha512-Xfc1CfHapIkwZ/+AI+j4Ha3g233ol0EEdy6SmnUuQQiZX78SfQXHd8tmntc5zqCkwPnIHoiZa6l6p0OAvxYXHw== 319 | dependencies: 320 | "@babel/helper-plugin-utils" "^7.10.1" 321 | "@babel/plugin-syntax-export-default-from" "^7.10.1" 322 | 323 | "@babel/plugin-proposal-json-strings@^7.10.1": 324 | version "7.10.1" 325 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz#b1e691ee24c651b5a5e32213222b2379734aff09" 326 | integrity sha512-m8r5BmV+ZLpWPtMY2mOKN7wre6HIO4gfIiV+eOmsnZABNenrt/kzYBwrh+KOfgumSWpnlGs5F70J8afYMSJMBg== 327 | dependencies: 328 | "@babel/helper-plugin-utils" "^7.10.1" 329 | "@babel/plugin-syntax-json-strings" "^7.8.0" 330 | 331 | "@babel/plugin-proposal-nullish-coalescing-operator@^7.10.1": 332 | version "7.10.1" 333 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz#02dca21673842ff2fe763ac253777f235e9bbf78" 334 | integrity sha512-56cI/uHYgL2C8HVuHOuvVowihhX0sxb3nnfVRzUeVHTWmRHTZrKuAh/OBIMggGU/S1g/1D2CRCXqP+3u7vX7iA== 335 | dependencies: 336 | "@babel/helper-plugin-utils" "^7.10.1" 337 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" 338 | 339 | "@babel/plugin-proposal-numeric-separator@^7.10.1": 340 | version "7.10.1" 341 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz#a9a38bc34f78bdfd981e791c27c6fdcec478c123" 342 | integrity sha512-jjfym4N9HtCiNfyyLAVD8WqPYeHUrw4ihxuAynWj6zzp2gf9Ey2f7ImhFm6ikB3CLf5Z/zmcJDri6B4+9j9RsA== 343 | dependencies: 344 | "@babel/helper-plugin-utils" "^7.10.1" 345 | "@babel/plugin-syntax-numeric-separator" "^7.10.1" 346 | 347 | "@babel/plugin-proposal-object-rest-spread@^7.10.1", "@babel/plugin-proposal-object-rest-spread@^7.5.5": 348 | version "7.10.1" 349 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.1.tgz#cba44908ac9f142650b4a65b8aa06bf3478d5fb6" 350 | integrity sha512-Z+Qri55KiQkHh7Fc4BW6o+QBuTagbOp9txE+4U1i79u9oWlf2npkiDx+Rf3iK3lbcHBuNy9UOkwuR5wOMH3LIQ== 351 | dependencies: 352 | "@babel/helper-plugin-utils" "^7.10.1" 353 | "@babel/plugin-syntax-object-rest-spread" "^7.8.0" 354 | "@babel/plugin-transform-parameters" "^7.10.1" 355 | 356 | "@babel/plugin-proposal-optional-catch-binding@^7.10.1": 357 | version "7.10.1" 358 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz#c9f86d99305f9fa531b568ff5ab8c964b8b223d2" 359 | integrity sha512-VqExgeE62YBqI3ogkGoOJp1R6u12DFZjqwJhqtKc2o5m1YTUuUWnos7bZQFBhwkxIFpWYJ7uB75U7VAPPiKETA== 360 | dependencies: 361 | "@babel/helper-plugin-utils" "^7.10.1" 362 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" 363 | 364 | "@babel/plugin-proposal-optional-chaining@^7.10.1": 365 | version "7.10.1" 366 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.1.tgz#15f5d6d22708629451a91be28f8facc55b0e818c" 367 | integrity sha512-dqQj475q8+/avvok72CF3AOSV/SGEcH29zT5hhohqqvvZ2+boQoOr7iGldBG5YXTO2qgCgc2B3WvVLUdbeMlGA== 368 | dependencies: 369 | "@babel/helper-plugin-utils" "^7.10.1" 370 | "@babel/plugin-syntax-optional-chaining" "^7.8.0" 371 | 372 | "@babel/plugin-proposal-private-methods@^7.10.1": 373 | version "7.10.1" 374 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz#ed85e8058ab0fe309c3f448e5e1b73ca89cdb598" 375 | integrity sha512-RZecFFJjDiQ2z6maFprLgrdnm0OzoC23Mx89xf1CcEsxmHuzuXOdniEuI+S3v7vjQG4F5sa6YtUp+19sZuSxHg== 376 | dependencies: 377 | "@babel/helper-create-class-features-plugin" "^7.10.1" 378 | "@babel/helper-plugin-utils" "^7.10.1" 379 | 380 | "@babel/plugin-proposal-unicode-property-regex@^7.10.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": 381 | version "7.10.1" 382 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz#dc04feb25e2dd70c12b05d680190e138fa2c0c6f" 383 | integrity sha512-JjfngYRvwmPwmnbRZyNiPFI8zxCZb8euzbCG/LxyKdeTb59tVciKo9GK9bi6JYKInk1H11Dq9j/zRqIH4KigfQ== 384 | dependencies: 385 | "@babel/helper-create-regexp-features-plugin" "^7.10.1" 386 | "@babel/helper-plugin-utils" "^7.10.1" 387 | 388 | "@babel/plugin-syntax-async-generators@^7.8.0": 389 | version "7.8.4" 390 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" 391 | integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== 392 | dependencies: 393 | "@babel/helper-plugin-utils" "^7.8.0" 394 | 395 | "@babel/plugin-syntax-class-properties@^7.10.1": 396 | version "7.10.1" 397 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz#d5bc0645913df5b17ad7eda0fa2308330bde34c5" 398 | integrity sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ== 399 | dependencies: 400 | "@babel/helper-plugin-utils" "^7.10.1" 401 | 402 | "@babel/plugin-syntax-dynamic-import@^7.8.0": 403 | version "7.8.3" 404 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" 405 | integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== 406 | dependencies: 407 | "@babel/helper-plugin-utils" "^7.8.0" 408 | 409 | "@babel/plugin-syntax-export-default-from@^7.10.1": 410 | version "7.10.1" 411 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.10.1.tgz#634f58f36b5d6320d80f75441fdc61e1c05c33b0" 412 | integrity sha512-+rcL4S/mN1Ss4zhSCbxzv1Wsf12eauvgTjWi0krXEeX1zd6qSxYnJoniE5Ssr5w2WPt61oUCJyXIFQIqO/29zw== 413 | dependencies: 414 | "@babel/helper-plugin-utils" "^7.10.1" 415 | 416 | "@babel/plugin-syntax-json-strings@^7.8.0": 417 | version "7.8.3" 418 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" 419 | integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== 420 | dependencies: 421 | "@babel/helper-plugin-utils" "^7.8.0" 422 | 423 | "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": 424 | version "7.8.3" 425 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" 426 | integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== 427 | dependencies: 428 | "@babel/helper-plugin-utils" "^7.8.0" 429 | 430 | "@babel/plugin-syntax-numeric-separator@^7.10.1": 431 | version "7.10.1" 432 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz#25761ee7410bc8cf97327ba741ee94e4a61b7d99" 433 | integrity sha512-uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg== 434 | dependencies: 435 | "@babel/helper-plugin-utils" "^7.10.1" 436 | 437 | "@babel/plugin-syntax-object-rest-spread@^7.8.0": 438 | version "7.8.3" 439 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" 440 | integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== 441 | dependencies: 442 | "@babel/helper-plugin-utils" "^7.8.0" 443 | 444 | "@babel/plugin-syntax-optional-catch-binding@^7.8.0": 445 | version "7.8.3" 446 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" 447 | integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== 448 | dependencies: 449 | "@babel/helper-plugin-utils" "^7.8.0" 450 | 451 | "@babel/plugin-syntax-optional-chaining@^7.8.0": 452 | version "7.8.3" 453 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" 454 | integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== 455 | dependencies: 456 | "@babel/helper-plugin-utils" "^7.8.0" 457 | 458 | "@babel/plugin-syntax-top-level-await@^7.10.1": 459 | version "7.10.1" 460 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz#8b8733f8c57397b3eaa47ddba8841586dcaef362" 461 | integrity sha512-hgA5RYkmZm8FTFT3yu2N9Bx7yVVOKYT6yEdXXo6j2JTm0wNxgqaGeQVaSHRjhfnQbX91DtjFB6McRFSlcJH3xQ== 462 | dependencies: 463 | "@babel/helper-plugin-utils" "^7.10.1" 464 | 465 | "@babel/plugin-syntax-typescript@^7.10.1": 466 | version "7.10.1" 467 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.1.tgz#5e82bc27bb4202b93b949b029e699db536733810" 468 | integrity sha512-X/d8glkrAtra7CaQGMiGs/OGa6XgUzqPcBXCIGFCpCqnfGlT0Wfbzo/B89xHhnInTaItPK8LALblVXcUOEh95Q== 469 | dependencies: 470 | "@babel/helper-plugin-utils" "^7.10.1" 471 | 472 | "@babel/plugin-transform-arrow-functions@^7.10.1": 473 | version "7.10.1" 474 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz#cb5ee3a36f0863c06ead0b409b4cc43a889b295b" 475 | integrity sha512-6AZHgFJKP3DJX0eCNJj01RpytUa3SOGawIxweHkNX2L6PYikOZmoh5B0d7hIHaIgveMjX990IAa/xK7jRTN8OA== 476 | dependencies: 477 | "@babel/helper-plugin-utils" "^7.10.1" 478 | 479 | "@babel/plugin-transform-async-to-generator@^7.10.1": 480 | version "7.10.1" 481 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz#e5153eb1a3e028f79194ed8a7a4bf55f862b2062" 482 | integrity sha512-XCgYjJ8TY2slj6SReBUyamJn3k2JLUIiiR5b6t1mNCMSvv7yx+jJpaewakikp0uWFQSF7ChPPoe3dHmXLpISkg== 483 | dependencies: 484 | "@babel/helper-module-imports" "^7.10.1" 485 | "@babel/helper-plugin-utils" "^7.10.1" 486 | "@babel/helper-remap-async-to-generator" "^7.10.1" 487 | 488 | "@babel/plugin-transform-block-scoped-functions@^7.10.1": 489 | version "7.10.1" 490 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz#146856e756d54b20fff14b819456b3e01820b85d" 491 | integrity sha512-B7K15Xp8lv0sOJrdVAoukKlxP9N59HS48V1J3U/JGj+Ad+MHq+am6xJVs85AgXrQn4LV8vaYFOB+pr/yIuzW8Q== 492 | dependencies: 493 | "@babel/helper-plugin-utils" "^7.10.1" 494 | 495 | "@babel/plugin-transform-block-scoping@^7.10.1": 496 | version "7.10.1" 497 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz#47092d89ca345811451cd0dc5d91605982705d5e" 498 | integrity sha512-8bpWG6TtF5akdhIm/uWTyjHqENpy13Fx8chg7pFH875aNLwX8JxIxqm08gmAT+Whe6AOmaTeLPe7dpLbXt+xUw== 499 | dependencies: 500 | "@babel/helper-plugin-utils" "^7.10.1" 501 | lodash "^4.17.13" 502 | 503 | "@babel/plugin-transform-classes@^7.10.1": 504 | version "7.10.1" 505 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.1.tgz#6e11dd6c4dfae70f540480a4702477ed766d733f" 506 | integrity sha512-P9V0YIh+ln/B3RStPoXpEQ/CoAxQIhRSUn7aXqQ+FZJ2u8+oCtjIXR3+X0vsSD8zv+mb56K7wZW1XiDTDGiDRQ== 507 | dependencies: 508 | "@babel/helper-annotate-as-pure" "^7.10.1" 509 | "@babel/helper-define-map" "^7.10.1" 510 | "@babel/helper-function-name" "^7.10.1" 511 | "@babel/helper-optimise-call-expression" "^7.10.1" 512 | "@babel/helper-plugin-utils" "^7.10.1" 513 | "@babel/helper-replace-supers" "^7.10.1" 514 | "@babel/helper-split-export-declaration" "^7.10.1" 515 | globals "^11.1.0" 516 | 517 | "@babel/plugin-transform-computed-properties@^7.10.1": 518 | version "7.10.1" 519 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.1.tgz#59aa399064429d64dce5cf76ef9b90b7245ebd07" 520 | integrity sha512-mqSrGjp3IefMsXIenBfGcPXxJxweQe2hEIwMQvjtiDQ9b1IBvDUjkAtV/HMXX47/vXf14qDNedXsIiNd1FmkaQ== 521 | dependencies: 522 | "@babel/helper-plugin-utils" "^7.10.1" 523 | 524 | "@babel/plugin-transform-destructuring@^7.10.1": 525 | version "7.10.1" 526 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz#abd58e51337815ca3a22a336b85f62b998e71907" 527 | integrity sha512-V/nUc4yGWG71OhaTH705pU8ZSdM6c1KmmLP8ys59oOYbT7RpMYAR3MsVOt6OHL0WzG7BlTU076va9fjJyYzJMA== 528 | dependencies: 529 | "@babel/helper-plugin-utils" "^7.10.1" 530 | 531 | "@babel/plugin-transform-dotall-regex@^7.10.1", "@babel/plugin-transform-dotall-regex@^7.4.4": 532 | version "7.10.1" 533 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz#920b9fec2d78bb57ebb64a644d5c2ba67cc104ee" 534 | integrity sha512-19VIMsD1dp02RvduFUmfzj8uknaO3uiHHF0s3E1OHnVsNj8oge8EQ5RzHRbJjGSetRnkEuBYO7TG1M5kKjGLOA== 535 | dependencies: 536 | "@babel/helper-create-regexp-features-plugin" "^7.10.1" 537 | "@babel/helper-plugin-utils" "^7.10.1" 538 | 539 | "@babel/plugin-transform-duplicate-keys@^7.10.1": 540 | version "7.10.1" 541 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz#c900a793beb096bc9d4d0a9d0cde19518ffc83b9" 542 | integrity sha512-wIEpkX4QvX8Mo9W6XF3EdGttrIPZWozHfEaDTU0WJD/TDnXMvdDh30mzUl/9qWhnf7naicYartcEfUghTCSNpA== 543 | dependencies: 544 | "@babel/helper-plugin-utils" "^7.10.1" 545 | 546 | "@babel/plugin-transform-exponentiation-operator@^7.10.1": 547 | version "7.10.1" 548 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz#279c3116756a60dd6e6f5e488ba7957db9c59eb3" 549 | integrity sha512-lr/przdAbpEA2BUzRvjXdEDLrArGRRPwbaF9rvayuHRvdQ7lUTTkZnhZrJ4LE2jvgMRFF4f0YuPQ20vhiPYxtA== 550 | dependencies: 551 | "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.1" 552 | "@babel/helper-plugin-utils" "^7.10.1" 553 | 554 | "@babel/plugin-transform-for-of@^7.10.1": 555 | version "7.10.1" 556 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz#ff01119784eb0ee32258e8646157ba2501fcfda5" 557 | integrity sha512-US8KCuxfQcn0LwSCMWMma8M2R5mAjJGsmoCBVwlMygvmDUMkTCykc84IqN1M7t+agSfOmLYTInLCHJM+RUoz+w== 558 | dependencies: 559 | "@babel/helper-plugin-utils" "^7.10.1" 560 | 561 | "@babel/plugin-transform-function-name@^7.10.1": 562 | version "7.10.1" 563 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz#4ed46fd6e1d8fde2a2ec7b03c66d853d2c92427d" 564 | integrity sha512-//bsKsKFBJfGd65qSNNh1exBy5Y9gD9ZN+DvrJ8f7HXr4avE5POW6zB7Rj6VnqHV33+0vXWUwJT0wSHubiAQkw== 565 | dependencies: 566 | "@babel/helper-function-name" "^7.10.1" 567 | "@babel/helper-plugin-utils" "^7.10.1" 568 | 569 | "@babel/plugin-transform-literals@^7.10.1": 570 | version "7.10.1" 571 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz#5794f8da82846b22e4e6631ea1658bce708eb46a" 572 | integrity sha512-qi0+5qgevz1NHLZroObRm5A+8JJtibb7vdcPQF1KQE12+Y/xxl8coJ+TpPW9iRq+Mhw/NKLjm+5SHtAHCC7lAw== 573 | dependencies: 574 | "@babel/helper-plugin-utils" "^7.10.1" 575 | 576 | "@babel/plugin-transform-member-expression-literals@^7.10.1": 577 | version "7.10.1" 578 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz#90347cba31bca6f394b3f7bd95d2bbfd9fce2f39" 579 | integrity sha512-UmaWhDokOFT2GcgU6MkHC11i0NQcL63iqeufXWfRy6pUOGYeCGEKhvfFO6Vz70UfYJYHwveg62GS83Rvpxn+NA== 580 | dependencies: 581 | "@babel/helper-plugin-utils" "^7.10.1" 582 | 583 | "@babel/plugin-transform-modules-amd@^7.10.1": 584 | version "7.10.1" 585 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz#65950e8e05797ebd2fe532b96e19fc5482a1d52a" 586 | integrity sha512-31+hnWSFRI4/ACFr1qkboBbrTxoBIzj7qA69qlq8HY8p7+YCzkCT6/TvQ1a4B0z27VeWtAeJd6pr5G04dc1iHw== 587 | dependencies: 588 | "@babel/helper-module-transforms" "^7.10.1" 589 | "@babel/helper-plugin-utils" "^7.10.1" 590 | babel-plugin-dynamic-import-node "^2.3.3" 591 | 592 | "@babel/plugin-transform-modules-commonjs@^7.10.1": 593 | version "7.10.1" 594 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz#d5ff4b4413ed97ffded99961056e1fb980fb9301" 595 | integrity sha512-AQG4fc3KOah0vdITwt7Gi6hD9BtQP/8bhem7OjbaMoRNCH5Djx42O2vYMfau7QnAzQCa+RJnhJBmFFMGpQEzrg== 596 | dependencies: 597 | "@babel/helper-module-transforms" "^7.10.1" 598 | "@babel/helper-plugin-utils" "^7.10.1" 599 | "@babel/helper-simple-access" "^7.10.1" 600 | babel-plugin-dynamic-import-node "^2.3.3" 601 | 602 | "@babel/plugin-transform-modules-systemjs@^7.10.1": 603 | version "7.10.1" 604 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.1.tgz#9962e4b0ac6aaf2e20431ada3d8ec72082cbffb6" 605 | integrity sha512-ewNKcj1TQZDL3YnO85qh9zo1YF1CHgmSTlRQgHqe63oTrMI85cthKtZjAiZSsSNjPQ5NCaYo5QkbYqEw1ZBgZA== 606 | dependencies: 607 | "@babel/helper-hoist-variables" "^7.10.1" 608 | "@babel/helper-module-transforms" "^7.10.1" 609 | "@babel/helper-plugin-utils" "^7.10.1" 610 | babel-plugin-dynamic-import-node "^2.3.3" 611 | 612 | "@babel/plugin-transform-modules-umd@^7.10.1": 613 | version "7.10.1" 614 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz#ea080911ffc6eb21840a5197a39ede4ee67b1595" 615 | integrity sha512-EIuiRNMd6GB6ulcYlETnYYfgv4AxqrswghmBRQbWLHZxN4s7mupxzglnHqk9ZiUpDI4eRWewedJJNj67PWOXKA== 616 | dependencies: 617 | "@babel/helper-module-transforms" "^7.10.1" 618 | "@babel/helper-plugin-utils" "^7.10.1" 619 | 620 | "@babel/plugin-transform-named-capturing-groups-regex@^7.6.3", "@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": 621 | version "7.8.3" 622 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" 623 | integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== 624 | dependencies: 625 | "@babel/helper-create-regexp-features-plugin" "^7.8.3" 626 | 627 | "@babel/plugin-transform-new-target@^7.10.1": 628 | version "7.10.1" 629 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz#6ee41a5e648da7632e22b6fb54012e87f612f324" 630 | integrity sha512-MBlzPc1nJvbmO9rPr1fQwXOM2iGut+JC92ku6PbiJMMK7SnQc1rytgpopveE3Evn47gzvGYeCdgfCDbZo0ecUw== 631 | dependencies: 632 | "@babel/helper-plugin-utils" "^7.10.1" 633 | 634 | "@babel/plugin-transform-object-super@^7.10.1": 635 | version "7.10.1" 636 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz#2e3016b0adbf262983bf0d5121d676a5ed9c4fde" 637 | integrity sha512-WnnStUDN5GL+wGQrJylrnnVlFhFmeArINIR9gjhSeYyvroGhBrSAXYg/RHsnfzmsa+onJrTJrEClPzgNmmQ4Gw== 638 | dependencies: 639 | "@babel/helper-plugin-utils" "^7.10.1" 640 | "@babel/helper-replace-supers" "^7.10.1" 641 | 642 | "@babel/plugin-transform-parameters@^7.10.1": 643 | version "7.10.1" 644 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz#b25938a3c5fae0354144a720b07b32766f683ddd" 645 | integrity sha512-tJ1T0n6g4dXMsL45YsSzzSDZCxiHXAQp/qHrucOq5gEHncTA3xDxnd5+sZcoQp+N1ZbieAaB8r/VUCG0gqseOg== 646 | dependencies: 647 | "@babel/helper-get-function-arity" "^7.10.1" 648 | "@babel/helper-plugin-utils" "^7.10.1" 649 | 650 | "@babel/plugin-transform-property-literals@^7.10.1": 651 | version "7.10.1" 652 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz#cffc7315219230ed81dc53e4625bf86815b6050d" 653 | integrity sha512-Kr6+mgag8auNrgEpbfIWzdXYOvqDHZOF0+Bx2xh4H2EDNwcbRb9lY6nkZg8oSjsX+DH9Ebxm9hOqtKW+gRDeNA== 654 | dependencies: 655 | "@babel/helper-plugin-utils" "^7.10.1" 656 | 657 | "@babel/plugin-transform-regenerator@^7.10.1": 658 | version "7.10.1" 659 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.1.tgz#10e175cbe7bdb63cc9b39f9b3f823c5c7c5c5490" 660 | integrity sha512-B3+Y2prScgJ2Bh/2l9LJxKbb8C8kRfsG4AdPT+n7ixBHIxJaIG8bi8tgjxUMege1+WqSJ+7gu1YeoMVO3gPWzw== 661 | dependencies: 662 | regenerator-transform "^0.14.2" 663 | 664 | "@babel/plugin-transform-reserved-words@^7.10.1": 665 | version "7.10.1" 666 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz#0fc1027312b4d1c3276a57890c8ae3bcc0b64a86" 667 | integrity sha512-qN1OMoE2nuqSPmpTqEM7OvJ1FkMEV+BjVeZZm9V9mq/x1JLKQ4pcv8riZJMNN3u2AUGl0ouOMjRr2siecvHqUQ== 668 | dependencies: 669 | "@babel/helper-plugin-utils" "^7.10.1" 670 | 671 | "@babel/plugin-transform-runtime@^7.4.0": 672 | version "7.10.1" 673 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.1.tgz#fd1887f749637fb2ed86dc278e79eb41df37f4b1" 674 | integrity sha512-4w2tcglDVEwXJ5qxsY++DgWQdNJcCCsPxfT34wCUwIf2E7dI7pMpH8JczkMBbgBTNzBX62SZlNJ9H+De6Zebaw== 675 | dependencies: 676 | "@babel/helper-module-imports" "^7.10.1" 677 | "@babel/helper-plugin-utils" "^7.10.1" 678 | resolve "^1.8.1" 679 | semver "^5.5.1" 680 | 681 | "@babel/plugin-transform-shorthand-properties@^7.10.1": 682 | version "7.10.1" 683 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz#e8b54f238a1ccbae482c4dce946180ae7b3143f3" 684 | integrity sha512-AR0E/lZMfLstScFwztApGeyTHJ5u3JUKMjneqRItWeEqDdHWZwAOKycvQNCasCK/3r5YXsuNG25funcJDu7Y2g== 685 | dependencies: 686 | "@babel/helper-plugin-utils" "^7.10.1" 687 | 688 | "@babel/plugin-transform-spread@^7.10.1": 689 | version "7.10.1" 690 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz#0c6d618a0c4461a274418460a28c9ccf5239a7c8" 691 | integrity sha512-8wTPym6edIrClW8FI2IoaePB91ETOtg36dOkj3bYcNe7aDMN2FXEoUa+WrmPc4xa1u2PQK46fUX2aCb+zo9rfw== 692 | dependencies: 693 | "@babel/helper-plugin-utils" "^7.10.1" 694 | 695 | "@babel/plugin-transform-sticky-regex@^7.10.1": 696 | version "7.10.1" 697 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz#90fc89b7526228bed9842cff3588270a7a393b00" 698 | integrity sha512-j17ojftKjrL7ufX8ajKvwRilwqTok4q+BjkknmQw9VNHnItTyMP5anPFzxFJdCQs7clLcWpCV3ma+6qZWLnGMA== 699 | dependencies: 700 | "@babel/helper-plugin-utils" "^7.10.1" 701 | "@babel/helper-regex" "^7.10.1" 702 | 703 | "@babel/plugin-transform-template-literals@^7.10.1": 704 | version "7.10.1" 705 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.1.tgz#914c7b7f4752c570ea00553b4284dad8070e8628" 706 | integrity sha512-t7B/3MQf5M1T9hPCRG28DNGZUuxAuDqLYS03rJrIk2prj/UV7Z6FOneijhQhnv/Xa039vidXeVbvjK2SK5f7Gg== 707 | dependencies: 708 | "@babel/helper-annotate-as-pure" "^7.10.1" 709 | "@babel/helper-plugin-utils" "^7.10.1" 710 | 711 | "@babel/plugin-transform-typeof-symbol@^7.10.1": 712 | version "7.10.1" 713 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz#60c0239b69965d166b80a84de7315c1bc7e0bb0e" 714 | integrity sha512-qX8KZcmbvA23zDi+lk9s6hC1FM7jgLHYIjuLgULgc8QtYnmB3tAVIYkNoKRQ75qWBeyzcoMoK8ZQmogGtC/w0g== 715 | dependencies: 716 | "@babel/helper-plugin-utils" "^7.10.1" 717 | 718 | "@babel/plugin-transform-typescript@^7.10.1": 719 | version "7.10.1" 720 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.10.1.tgz#2c54daea231f602468686d9faa76f182a94507a6" 721 | integrity sha512-v+QWKlmCnsaimLeqq9vyCsVRMViZG1k2SZTlcZvB+TqyH570Zsij8nvVUZzOASCRiQFUxkLrn9Wg/kH0zgy5OQ== 722 | dependencies: 723 | "@babel/helper-create-class-features-plugin" "^7.10.1" 724 | "@babel/helper-plugin-utils" "^7.10.1" 725 | "@babel/plugin-syntax-typescript" "^7.10.1" 726 | 727 | "@babel/plugin-transform-unicode-escapes@^7.10.1": 728 | version "7.10.1" 729 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz#add0f8483dab60570d9e03cecef6c023aa8c9940" 730 | integrity sha512-zZ0Poh/yy1d4jeDWpx/mNwbKJVwUYJX73q+gyh4bwtG0/iUlzdEu0sLMda8yuDFS6LBQlT/ST1SJAR6zYwXWgw== 731 | dependencies: 732 | "@babel/helper-plugin-utils" "^7.10.1" 733 | 734 | "@babel/plugin-transform-unicode-regex@^7.10.1": 735 | version "7.10.1" 736 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz#6b58f2aea7b68df37ac5025d9c88752443a6b43f" 737 | integrity sha512-Y/2a2W299k0VIUdbqYm9X2qS6fE0CUBhhiPpimK6byy7OJ/kORLlIX+J6UrjgNu5awvs62k+6RSslxhcvVw2Tw== 738 | dependencies: 739 | "@babel/helper-create-regexp-features-plugin" "^7.10.1" 740 | "@babel/helper-plugin-utils" "^7.10.1" 741 | 742 | "@babel/preset-env@^7.4.2": 743 | version "7.10.2" 744 | resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.2.tgz#715930f2cf8573b0928005ee562bed52fb65fdfb" 745 | integrity sha512-MjqhX0RZaEgK/KueRzh+3yPSk30oqDKJ5HP5tqTSB1e2gzGS3PLy7K0BIpnp78+0anFuSwOeuCf1zZO7RzRvEA== 746 | dependencies: 747 | "@babel/compat-data" "^7.10.1" 748 | "@babel/helper-compilation-targets" "^7.10.2" 749 | "@babel/helper-module-imports" "^7.10.1" 750 | "@babel/helper-plugin-utils" "^7.10.1" 751 | "@babel/plugin-proposal-async-generator-functions" "^7.10.1" 752 | "@babel/plugin-proposal-class-properties" "^7.10.1" 753 | "@babel/plugin-proposal-dynamic-import" "^7.10.1" 754 | "@babel/plugin-proposal-json-strings" "^7.10.1" 755 | "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1" 756 | "@babel/plugin-proposal-numeric-separator" "^7.10.1" 757 | "@babel/plugin-proposal-object-rest-spread" "^7.10.1" 758 | "@babel/plugin-proposal-optional-catch-binding" "^7.10.1" 759 | "@babel/plugin-proposal-optional-chaining" "^7.10.1" 760 | "@babel/plugin-proposal-private-methods" "^7.10.1" 761 | "@babel/plugin-proposal-unicode-property-regex" "^7.10.1" 762 | "@babel/plugin-syntax-async-generators" "^7.8.0" 763 | "@babel/plugin-syntax-class-properties" "^7.10.1" 764 | "@babel/plugin-syntax-dynamic-import" "^7.8.0" 765 | "@babel/plugin-syntax-json-strings" "^7.8.0" 766 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" 767 | "@babel/plugin-syntax-numeric-separator" "^7.10.1" 768 | "@babel/plugin-syntax-object-rest-spread" "^7.8.0" 769 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" 770 | "@babel/plugin-syntax-optional-chaining" "^7.8.0" 771 | "@babel/plugin-syntax-top-level-await" "^7.10.1" 772 | "@babel/plugin-transform-arrow-functions" "^7.10.1" 773 | "@babel/plugin-transform-async-to-generator" "^7.10.1" 774 | "@babel/plugin-transform-block-scoped-functions" "^7.10.1" 775 | "@babel/plugin-transform-block-scoping" "^7.10.1" 776 | "@babel/plugin-transform-classes" "^7.10.1" 777 | "@babel/plugin-transform-computed-properties" "^7.10.1" 778 | "@babel/plugin-transform-destructuring" "^7.10.1" 779 | "@babel/plugin-transform-dotall-regex" "^7.10.1" 780 | "@babel/plugin-transform-duplicate-keys" "^7.10.1" 781 | "@babel/plugin-transform-exponentiation-operator" "^7.10.1" 782 | "@babel/plugin-transform-for-of" "^7.10.1" 783 | "@babel/plugin-transform-function-name" "^7.10.1" 784 | "@babel/plugin-transform-literals" "^7.10.1" 785 | "@babel/plugin-transform-member-expression-literals" "^7.10.1" 786 | "@babel/plugin-transform-modules-amd" "^7.10.1" 787 | "@babel/plugin-transform-modules-commonjs" "^7.10.1" 788 | "@babel/plugin-transform-modules-systemjs" "^7.10.1" 789 | "@babel/plugin-transform-modules-umd" "^7.10.1" 790 | "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" 791 | "@babel/plugin-transform-new-target" "^7.10.1" 792 | "@babel/plugin-transform-object-super" "^7.10.1" 793 | "@babel/plugin-transform-parameters" "^7.10.1" 794 | "@babel/plugin-transform-property-literals" "^7.10.1" 795 | "@babel/plugin-transform-regenerator" "^7.10.1" 796 | "@babel/plugin-transform-reserved-words" "^7.10.1" 797 | "@babel/plugin-transform-shorthand-properties" "^7.10.1" 798 | "@babel/plugin-transform-spread" "^7.10.1" 799 | "@babel/plugin-transform-sticky-regex" "^7.10.1" 800 | "@babel/plugin-transform-template-literals" "^7.10.1" 801 | "@babel/plugin-transform-typeof-symbol" "^7.10.1" 802 | "@babel/plugin-transform-unicode-escapes" "^7.10.1" 803 | "@babel/plugin-transform-unicode-regex" "^7.10.1" 804 | "@babel/preset-modules" "^0.1.3" 805 | "@babel/types" "^7.10.2" 806 | browserslist "^4.12.0" 807 | core-js-compat "^3.6.2" 808 | invariant "^2.2.2" 809 | levenary "^1.1.1" 810 | semver "^5.5.0" 811 | 812 | "@babel/preset-modules@^0.1.3": 813 | version "0.1.3" 814 | resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" 815 | integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== 816 | dependencies: 817 | "@babel/helper-plugin-utils" "^7.0.0" 818 | "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" 819 | "@babel/plugin-transform-dotall-regex" "^7.4.4" 820 | "@babel/types" "^7.4.4" 821 | esutils "^2.0.2" 822 | 823 | "@babel/preset-typescript@^7.3.3": 824 | version "7.10.1" 825 | resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.10.1.tgz#a8d8d9035f55b7d99a2461a0bdc506582914d07e" 826 | integrity sha512-m6GV3y1ShiqxnyQj10600ZVOFrSSAa8HQ3qIUk2r+gcGtHTIRw0dJnFLt1WNXpKjtVw7yw1DAPU/6ma2ZvgJuA== 827 | dependencies: 828 | "@babel/helper-plugin-utils" "^7.10.1" 829 | "@babel/plugin-transform-typescript" "^7.10.1" 830 | 831 | "@babel/register@^7.10.1", "@babel/register@^7.4.0": 832 | version "7.10.1" 833 | resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.10.1.tgz#b6567c5cb5049f44bbf8c35d6ff68ca3c43238ed" 834 | integrity sha512-sl96+kB3IA2B9EzpwwBmYadOT14vw3KaXOknGDbJaZCOj52GDA4Tivudq9doCJcB+bEIKCEARZYwRgBBsCGXyg== 835 | dependencies: 836 | find-cache-dir "^2.0.0" 837 | lodash "^4.17.13" 838 | make-dir "^2.1.0" 839 | pirates "^4.0.0" 840 | source-map-support "^0.5.16" 841 | 842 | "@babel/runtime@^7.4.2", "@babel/runtime@^7.8.4": 843 | version "7.10.2" 844 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.2.tgz#d103f21f2602497d38348a32e008637d506db839" 845 | integrity sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg== 846 | dependencies: 847 | regenerator-runtime "^0.13.4" 848 | 849 | "@babel/template@^7.10.1": 850 | version "7.10.1" 851 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.1.tgz#e167154a94cb5f14b28dc58f5356d2162f539811" 852 | integrity sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig== 853 | dependencies: 854 | "@babel/code-frame" "^7.10.1" 855 | "@babel/parser" "^7.10.1" 856 | "@babel/types" "^7.10.1" 857 | 858 | "@babel/traverse@^7.10.1": 859 | version "7.10.1" 860 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.1.tgz#bbcef3031e4152a6c0b50147f4958df54ca0dd27" 861 | integrity sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ== 862 | dependencies: 863 | "@babel/code-frame" "^7.10.1" 864 | "@babel/generator" "^7.10.1" 865 | "@babel/helper-function-name" "^7.10.1" 866 | "@babel/helper-split-export-declaration" "^7.10.1" 867 | "@babel/parser" "^7.10.1" 868 | "@babel/types" "^7.10.1" 869 | debug "^4.1.0" 870 | globals "^11.1.0" 871 | lodash "^4.17.13" 872 | 873 | "@babel/types@^7.10.1", "@babel/types@^7.10.2", "@babel/types@^7.4.4": 874 | version "7.10.2" 875 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.2.tgz#30283be31cad0dbf6fb00bd40641ca0ea675172d" 876 | integrity sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng== 877 | dependencies: 878 | "@babel/helper-validator-identifier" "^7.10.1" 879 | lodash "^4.17.13" 880 | to-fast-properties "^2.0.0" 881 | 882 | "@types/mocha@^5.2.7": 883 | version "5.2.7" 884 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.7.tgz#315d570ccb56c53452ff8638738df60726d5b6ea" 885 | integrity sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ== 886 | 887 | "@types/node@^12.7.1": 888 | version "12.12.47" 889 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.47.tgz#5007b8866a2f9150de82335ca7e24dd1d59bdfb5" 890 | integrity sha512-yzBInQFhdY8kaZmqoL2+3U5dSTMrKaYcb561VU+lDzAYvqt+2lojvBEy+hmpSNuXnPTx7m9+04CzWYOUqWME2A== 891 | 892 | ansi-colors@3.2.3: 893 | version "3.2.3" 894 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" 895 | integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== 896 | 897 | ansi-regex@^3.0.0: 898 | version "3.0.0" 899 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 900 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 901 | 902 | ansi-regex@^4.1.0: 903 | version "4.1.0" 904 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 905 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 906 | 907 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 908 | version "3.2.1" 909 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 910 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 911 | dependencies: 912 | color-convert "^1.9.0" 913 | 914 | anymatch@^2.0.0: 915 | version "2.0.0" 916 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" 917 | integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== 918 | dependencies: 919 | micromatch "^3.1.4" 920 | normalize-path "^2.1.1" 921 | 922 | arg@^4.1.0: 923 | version "4.1.3" 924 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 925 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 926 | 927 | argparse@^1.0.7: 928 | version "1.0.10" 929 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 930 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 931 | dependencies: 932 | sprintf-js "~1.0.2" 933 | 934 | arr-diff@^4.0.0: 935 | version "4.0.0" 936 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" 937 | integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= 938 | 939 | arr-flatten@^1.1.0: 940 | version "1.1.0" 941 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 942 | integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== 943 | 944 | arr-union@^3.1.0: 945 | version "3.1.0" 946 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" 947 | integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= 948 | 949 | array-unique@^0.3.2: 950 | version "0.3.2" 951 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" 952 | integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= 953 | 954 | assign-symbols@^1.0.0: 955 | version "1.0.0" 956 | resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" 957 | integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= 958 | 959 | async-each@^1.0.1: 960 | version "1.0.3" 961 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" 962 | integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== 963 | 964 | atob@^2.1.2: 965 | version "2.1.2" 966 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" 967 | integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== 968 | 969 | babel-plugin-dynamic-import-node@^2.3.3: 970 | version "2.3.3" 971 | resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" 972 | integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== 973 | dependencies: 974 | object.assign "^4.1.0" 975 | 976 | balanced-match@^1.0.0: 977 | version "1.0.0" 978 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 979 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 980 | 981 | base@^0.11.1: 982 | version "0.11.2" 983 | resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" 984 | integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== 985 | dependencies: 986 | cache-base "^1.0.1" 987 | class-utils "^0.3.5" 988 | component-emitter "^1.2.1" 989 | define-property "^1.0.0" 990 | isobject "^3.0.1" 991 | mixin-deep "^1.2.0" 992 | pascalcase "^0.1.1" 993 | 994 | binary-extensions@^1.0.0: 995 | version "1.13.1" 996 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" 997 | integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== 998 | 999 | bindings@^1.5.0: 1000 | version "1.5.0" 1001 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" 1002 | integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== 1003 | dependencies: 1004 | file-uri-to-path "1.0.0" 1005 | 1006 | brace-expansion@^1.1.7: 1007 | version "1.1.11" 1008 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 1009 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 1010 | dependencies: 1011 | balanced-match "^1.0.0" 1012 | concat-map "0.0.1" 1013 | 1014 | braces@^2.3.1, braces@^2.3.2: 1015 | version "2.3.2" 1016 | resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" 1017 | integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== 1018 | dependencies: 1019 | arr-flatten "^1.1.0" 1020 | array-unique "^0.3.2" 1021 | extend-shallow "^2.0.1" 1022 | fill-range "^4.0.0" 1023 | isobject "^3.0.1" 1024 | repeat-element "^1.1.2" 1025 | snapdragon "^0.8.1" 1026 | snapdragon-node "^2.0.1" 1027 | split-string "^3.0.2" 1028 | to-regex "^3.0.1" 1029 | 1030 | browser-stdout@1.3.1: 1031 | version "1.3.1" 1032 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 1033 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 1034 | 1035 | browserslist@^4.12.0, browserslist@^4.8.5: 1036 | version "4.12.0" 1037 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.12.0.tgz#06c6d5715a1ede6c51fc39ff67fd647f740b656d" 1038 | integrity sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg== 1039 | dependencies: 1040 | caniuse-lite "^1.0.30001043" 1041 | electron-to-chromium "^1.3.413" 1042 | node-releases "^1.1.53" 1043 | pkg-up "^2.0.0" 1044 | 1045 | buffer-from@^1.0.0: 1046 | version "1.1.1" 1047 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 1048 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 1049 | 1050 | builtin-modules@^1.1.1: 1051 | version "1.1.1" 1052 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 1053 | integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= 1054 | 1055 | cache-base@^1.0.1: 1056 | version "1.0.1" 1057 | resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" 1058 | integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== 1059 | dependencies: 1060 | collection-visit "^1.0.0" 1061 | component-emitter "^1.2.1" 1062 | get-value "^2.0.6" 1063 | has-value "^1.0.0" 1064 | isobject "^3.0.1" 1065 | set-value "^2.0.0" 1066 | to-object-path "^0.3.0" 1067 | union-value "^1.0.0" 1068 | unset-value "^1.0.0" 1069 | 1070 | camelcase@^5.0.0: 1071 | version "5.3.1" 1072 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 1073 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 1074 | 1075 | caniuse-lite@^1.0.30001043: 1076 | version "1.0.30001083" 1077 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001083.tgz#52410c20c6f029f604f0d45eca0439a82e712442" 1078 | integrity sha512-CnYJ27awX4h7yj5glfK7r1TOI13LBytpLzEgfj0s4mY75/F8pnQcYjL+oVpmS38FB59+vU0gscQ9D8tc+lIXvA== 1079 | 1080 | chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0: 1081 | version "2.4.2" 1082 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 1083 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 1084 | dependencies: 1085 | ansi-styles "^3.2.1" 1086 | escape-string-regexp "^1.0.5" 1087 | supports-color "^5.3.0" 1088 | 1089 | chokidar@^2.1.8: 1090 | version "2.1.8" 1091 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" 1092 | integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== 1093 | dependencies: 1094 | anymatch "^2.0.0" 1095 | async-each "^1.0.1" 1096 | braces "^2.3.2" 1097 | glob-parent "^3.1.0" 1098 | inherits "^2.0.3" 1099 | is-binary-path "^1.0.0" 1100 | is-glob "^4.0.0" 1101 | normalize-path "^3.0.0" 1102 | path-is-absolute "^1.0.0" 1103 | readdirp "^2.2.1" 1104 | upath "^1.1.1" 1105 | optionalDependencies: 1106 | fsevents "^1.2.7" 1107 | 1108 | class-utils@^0.3.5: 1109 | version "0.3.6" 1110 | resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" 1111 | integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== 1112 | dependencies: 1113 | arr-union "^3.1.0" 1114 | define-property "^0.2.5" 1115 | isobject "^3.0.0" 1116 | static-extend "^0.1.1" 1117 | 1118 | cliui@^5.0.0: 1119 | version "5.0.0" 1120 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" 1121 | integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== 1122 | dependencies: 1123 | string-width "^3.1.0" 1124 | strip-ansi "^5.2.0" 1125 | wrap-ansi "^5.1.0" 1126 | 1127 | clone@^1.0.2: 1128 | version "1.0.4" 1129 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" 1130 | integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= 1131 | 1132 | collection-visit@^1.0.0: 1133 | version "1.0.0" 1134 | resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" 1135 | integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= 1136 | dependencies: 1137 | map-visit "^1.0.0" 1138 | object-visit "^1.0.0" 1139 | 1140 | color-convert@^1.9.0: 1141 | version "1.9.3" 1142 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 1143 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 1144 | dependencies: 1145 | color-name "1.1.3" 1146 | 1147 | color-name@1.1.3: 1148 | version "1.1.3" 1149 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 1150 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 1151 | 1152 | commander@^2.12.1: 1153 | version "2.20.3" 1154 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 1155 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 1156 | 1157 | commander@^4.0.1: 1158 | version "4.1.1" 1159 | resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" 1160 | integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== 1161 | 1162 | commondir@^1.0.1: 1163 | version "1.0.1" 1164 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 1165 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= 1166 | 1167 | component-emitter@^1.2.1: 1168 | version "1.3.0" 1169 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" 1170 | integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== 1171 | 1172 | concat-map@0.0.1: 1173 | version "0.0.1" 1174 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 1175 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 1176 | 1177 | convert-source-map@^1.1.0, convert-source-map@^1.7.0: 1178 | version "1.7.0" 1179 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" 1180 | integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== 1181 | dependencies: 1182 | safe-buffer "~5.1.1" 1183 | 1184 | copy-descriptor@^0.1.0: 1185 | version "0.1.1" 1186 | resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" 1187 | integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= 1188 | 1189 | core-js-compat@^3.6.2: 1190 | version "3.6.5" 1191 | resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" 1192 | integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== 1193 | dependencies: 1194 | browserslist "^4.8.5" 1195 | semver "7.0.0" 1196 | 1197 | core-js@^3.2.1: 1198 | version "3.6.5" 1199 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" 1200 | integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== 1201 | 1202 | core-util-is@~1.0.0: 1203 | version "1.0.2" 1204 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 1205 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 1206 | 1207 | cross-env@^5.2.0: 1208 | version "5.2.1" 1209 | resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.1.tgz#b2c76c1ca7add66dc874d11798466094f551b34d" 1210 | integrity sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ== 1211 | dependencies: 1212 | cross-spawn "^6.0.5" 1213 | 1214 | cross-spawn@^6.0.5: 1215 | version "6.0.5" 1216 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 1217 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 1218 | dependencies: 1219 | nice-try "^1.0.4" 1220 | path-key "^2.0.1" 1221 | semver "^5.5.0" 1222 | shebang-command "^1.2.0" 1223 | which "^1.2.9" 1224 | 1225 | debug@3.2.6: 1226 | version "3.2.6" 1227 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 1228 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 1229 | dependencies: 1230 | ms "^2.1.1" 1231 | 1232 | debug@^2.2.0, debug@^2.3.3: 1233 | version "2.6.9" 1234 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 1235 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 1236 | dependencies: 1237 | ms "2.0.0" 1238 | 1239 | debug@^4.1.0: 1240 | version "4.1.1" 1241 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" 1242 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== 1243 | dependencies: 1244 | ms "^2.1.1" 1245 | 1246 | decamelize@^1.2.0: 1247 | version "1.2.0" 1248 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 1249 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 1250 | 1251 | decode-uri-component@^0.2.0: 1252 | version "0.2.0" 1253 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 1254 | integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= 1255 | 1256 | defaults@^1.0.3: 1257 | version "1.0.3" 1258 | resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" 1259 | integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= 1260 | dependencies: 1261 | clone "^1.0.2" 1262 | 1263 | define-properties@^1.1.2, define-properties@^1.1.3: 1264 | version "1.1.3" 1265 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 1266 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 1267 | dependencies: 1268 | object-keys "^1.0.12" 1269 | 1270 | define-property@^0.2.5: 1271 | version "0.2.5" 1272 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" 1273 | integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= 1274 | dependencies: 1275 | is-descriptor "^0.1.0" 1276 | 1277 | define-property@^1.0.0: 1278 | version "1.0.0" 1279 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" 1280 | integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= 1281 | dependencies: 1282 | is-descriptor "^1.0.0" 1283 | 1284 | define-property@^2.0.2: 1285 | version "2.0.2" 1286 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" 1287 | integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== 1288 | dependencies: 1289 | is-descriptor "^1.0.2" 1290 | isobject "^3.0.1" 1291 | 1292 | diff@3.5.0: 1293 | version "3.5.0" 1294 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 1295 | integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== 1296 | 1297 | diff@^4.0.1: 1298 | version "4.0.2" 1299 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 1300 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 1301 | 1302 | electron-to-chromium@^1.3.413: 1303 | version "1.3.473" 1304 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.473.tgz#d0cd5fe391046fb70674ec98149f0f97609d29b8" 1305 | integrity sha512-smevlzzMNz3vMz6OLeeCq5HRWEj2AcgccNPYnAx4Usx0IOciq9DU36RJcICcS09hXoY7t7deRfVYKD14IrGb9A== 1306 | 1307 | emoji-regex@^7.0.1: 1308 | version "7.0.3" 1309 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 1310 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 1311 | 1312 | es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: 1313 | version "1.17.6" 1314 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" 1315 | integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== 1316 | dependencies: 1317 | es-to-primitive "^1.2.1" 1318 | function-bind "^1.1.1" 1319 | has "^1.0.3" 1320 | has-symbols "^1.0.1" 1321 | is-callable "^1.2.0" 1322 | is-regex "^1.1.0" 1323 | object-inspect "^1.7.0" 1324 | object-keys "^1.1.1" 1325 | object.assign "^4.1.0" 1326 | string.prototype.trimend "^1.0.1" 1327 | string.prototype.trimstart "^1.0.1" 1328 | 1329 | es-to-primitive@^1.2.1: 1330 | version "1.2.1" 1331 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 1332 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 1333 | dependencies: 1334 | is-callable "^1.1.4" 1335 | is-date-object "^1.0.1" 1336 | is-symbol "^1.0.2" 1337 | 1338 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: 1339 | version "1.0.5" 1340 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1341 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 1342 | 1343 | esprima@^4.0.0: 1344 | version "4.0.1" 1345 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 1346 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 1347 | 1348 | esutils@^2.0.2: 1349 | version "2.0.3" 1350 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 1351 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 1352 | 1353 | eventemitter3@^4.0.0: 1354 | version "4.0.4" 1355 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" 1356 | integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== 1357 | 1358 | expand-brackets@^2.1.4: 1359 | version "2.1.4" 1360 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" 1361 | integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= 1362 | dependencies: 1363 | debug "^2.3.3" 1364 | define-property "^0.2.5" 1365 | extend-shallow "^2.0.1" 1366 | posix-character-classes "^0.1.0" 1367 | regex-not "^1.0.0" 1368 | snapdragon "^0.8.1" 1369 | to-regex "^3.0.1" 1370 | 1371 | extend-shallow@^2.0.1: 1372 | version "2.0.1" 1373 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 1374 | integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= 1375 | dependencies: 1376 | is-extendable "^0.1.0" 1377 | 1378 | extend-shallow@^3.0.0, extend-shallow@^3.0.2: 1379 | version "3.0.2" 1380 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" 1381 | integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= 1382 | dependencies: 1383 | assign-symbols "^1.0.0" 1384 | is-extendable "^1.0.1" 1385 | 1386 | extglob@^2.0.4: 1387 | version "2.0.4" 1388 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" 1389 | integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== 1390 | dependencies: 1391 | array-unique "^0.3.2" 1392 | define-property "^1.0.0" 1393 | expand-brackets "^2.1.4" 1394 | extend-shallow "^2.0.1" 1395 | fragment-cache "^0.2.1" 1396 | regex-not "^1.0.0" 1397 | snapdragon "^0.8.1" 1398 | to-regex "^3.0.1" 1399 | 1400 | file-uri-to-path@1.0.0: 1401 | version "1.0.0" 1402 | resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" 1403 | integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== 1404 | 1405 | fill-range@^4.0.0: 1406 | version "4.0.0" 1407 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" 1408 | integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= 1409 | dependencies: 1410 | extend-shallow "^2.0.1" 1411 | is-number "^3.0.0" 1412 | repeat-string "^1.6.1" 1413 | to-regex-range "^2.1.0" 1414 | 1415 | find-cache-dir@^2.0.0: 1416 | version "2.1.0" 1417 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" 1418 | integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== 1419 | dependencies: 1420 | commondir "^1.0.1" 1421 | make-dir "^2.0.0" 1422 | pkg-dir "^3.0.0" 1423 | 1424 | find-up@3.0.0, find-up@^3.0.0: 1425 | version "3.0.0" 1426 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 1427 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 1428 | dependencies: 1429 | locate-path "^3.0.0" 1430 | 1431 | find-up@^2.1.0: 1432 | version "2.1.0" 1433 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 1434 | integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= 1435 | dependencies: 1436 | locate-path "^2.0.0" 1437 | 1438 | flat@^4.1.0: 1439 | version "4.1.0" 1440 | resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" 1441 | integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== 1442 | dependencies: 1443 | is-buffer "~2.0.3" 1444 | 1445 | for-in@^1.0.2: 1446 | version "1.0.2" 1447 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 1448 | integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= 1449 | 1450 | fragment-cache@^0.2.1: 1451 | version "0.2.1" 1452 | resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" 1453 | integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= 1454 | dependencies: 1455 | map-cache "^0.2.2" 1456 | 1457 | fs-readdir-recursive@^1.1.0: 1458 | version "1.1.0" 1459 | resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" 1460 | integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== 1461 | 1462 | fs.realpath@^1.0.0: 1463 | version "1.0.0" 1464 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1465 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 1466 | 1467 | fsevents@^1.2.7: 1468 | version "1.2.13" 1469 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" 1470 | integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== 1471 | dependencies: 1472 | bindings "^1.5.0" 1473 | nan "^2.12.1" 1474 | 1475 | function-bind@^1.1.1: 1476 | version "1.1.1" 1477 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1478 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1479 | 1480 | gensync@^1.0.0-beta.1: 1481 | version "1.0.0-beta.1" 1482 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" 1483 | integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== 1484 | 1485 | get-caller-file@^2.0.1: 1486 | version "2.0.5" 1487 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1488 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1489 | 1490 | get-value@^2.0.3, get-value@^2.0.6: 1491 | version "2.0.6" 1492 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" 1493 | integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= 1494 | 1495 | glob-parent@^3.1.0: 1496 | version "3.1.0" 1497 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" 1498 | integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= 1499 | dependencies: 1500 | is-glob "^3.1.0" 1501 | path-dirname "^1.0.0" 1502 | 1503 | glob@7.1.3: 1504 | version "7.1.3" 1505 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 1506 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== 1507 | dependencies: 1508 | fs.realpath "^1.0.0" 1509 | inflight "^1.0.4" 1510 | inherits "2" 1511 | minimatch "^3.0.4" 1512 | once "^1.3.0" 1513 | path-is-absolute "^1.0.0" 1514 | 1515 | glob@^7.0.0, glob@^7.1.1: 1516 | version "7.1.6" 1517 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 1518 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 1519 | dependencies: 1520 | fs.realpath "^1.0.0" 1521 | inflight "^1.0.4" 1522 | inherits "2" 1523 | minimatch "^3.0.4" 1524 | once "^1.3.0" 1525 | path-is-absolute "^1.0.0" 1526 | 1527 | globals@^11.1.0: 1528 | version "11.12.0" 1529 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1530 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1531 | 1532 | graceful-fs@^4.1.11: 1533 | version "4.2.4" 1534 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" 1535 | integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== 1536 | 1537 | growl@1.10.5: 1538 | version "1.10.5" 1539 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 1540 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 1541 | 1542 | has-flag@^3.0.0: 1543 | version "3.0.0" 1544 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1545 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1546 | 1547 | has-symbols@^1.0.0, has-symbols@^1.0.1: 1548 | version "1.0.1" 1549 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" 1550 | integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== 1551 | 1552 | has-value@^0.3.1: 1553 | version "0.3.1" 1554 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" 1555 | integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= 1556 | dependencies: 1557 | get-value "^2.0.3" 1558 | has-values "^0.1.4" 1559 | isobject "^2.0.0" 1560 | 1561 | has-value@^1.0.0: 1562 | version "1.0.0" 1563 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" 1564 | integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= 1565 | dependencies: 1566 | get-value "^2.0.6" 1567 | has-values "^1.0.0" 1568 | isobject "^3.0.0" 1569 | 1570 | has-values@^0.1.4: 1571 | version "0.1.4" 1572 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" 1573 | integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= 1574 | 1575 | has-values@^1.0.0: 1576 | version "1.0.0" 1577 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" 1578 | integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= 1579 | dependencies: 1580 | is-number "^3.0.0" 1581 | kind-of "^4.0.0" 1582 | 1583 | has@^1.0.3: 1584 | version "1.0.3" 1585 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1586 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1587 | dependencies: 1588 | function-bind "^1.1.1" 1589 | 1590 | he@1.2.0: 1591 | version "1.2.0" 1592 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 1593 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 1594 | 1595 | homedir-polyfill@^1.0.1: 1596 | version "1.0.3" 1597 | resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" 1598 | integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== 1599 | dependencies: 1600 | parse-passwd "^1.0.0" 1601 | 1602 | inflight@^1.0.4: 1603 | version "1.0.6" 1604 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1605 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1606 | dependencies: 1607 | once "^1.3.0" 1608 | wrappy "1" 1609 | 1610 | inherits@2, inherits@^2.0.3, inherits@~2.0.3: 1611 | version "2.0.4" 1612 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1613 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1614 | 1615 | invariant@^2.2.2, invariant@^2.2.4: 1616 | version "2.2.4" 1617 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" 1618 | integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== 1619 | dependencies: 1620 | loose-envify "^1.0.0" 1621 | 1622 | is-accessor-descriptor@^0.1.6: 1623 | version "0.1.6" 1624 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" 1625 | integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= 1626 | dependencies: 1627 | kind-of "^3.0.2" 1628 | 1629 | is-accessor-descriptor@^1.0.0: 1630 | version "1.0.0" 1631 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" 1632 | integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== 1633 | dependencies: 1634 | kind-of "^6.0.0" 1635 | 1636 | is-binary-path@^1.0.0: 1637 | version "1.0.1" 1638 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 1639 | integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= 1640 | dependencies: 1641 | binary-extensions "^1.0.0" 1642 | 1643 | is-buffer@^1.1.5: 1644 | version "1.1.6" 1645 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 1646 | integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== 1647 | 1648 | is-buffer@~2.0.3: 1649 | version "2.0.4" 1650 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" 1651 | integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== 1652 | 1653 | is-callable@^1.1.4, is-callable@^1.2.0: 1654 | version "1.2.0" 1655 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" 1656 | integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== 1657 | 1658 | is-data-descriptor@^0.1.4: 1659 | version "0.1.4" 1660 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" 1661 | integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= 1662 | dependencies: 1663 | kind-of "^3.0.2" 1664 | 1665 | is-data-descriptor@^1.0.0: 1666 | version "1.0.0" 1667 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" 1668 | integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== 1669 | dependencies: 1670 | kind-of "^6.0.0" 1671 | 1672 | is-date-object@^1.0.1: 1673 | version "1.0.2" 1674 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" 1675 | integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== 1676 | 1677 | is-descriptor@^0.1.0: 1678 | version "0.1.6" 1679 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" 1680 | integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== 1681 | dependencies: 1682 | is-accessor-descriptor "^0.1.6" 1683 | is-data-descriptor "^0.1.4" 1684 | kind-of "^5.0.0" 1685 | 1686 | is-descriptor@^1.0.0, is-descriptor@^1.0.2: 1687 | version "1.0.2" 1688 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" 1689 | integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== 1690 | dependencies: 1691 | is-accessor-descriptor "^1.0.0" 1692 | is-data-descriptor "^1.0.0" 1693 | kind-of "^6.0.2" 1694 | 1695 | is-extendable@^0.1.0, is-extendable@^0.1.1: 1696 | version "0.1.1" 1697 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1698 | integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= 1699 | 1700 | is-extendable@^1.0.1: 1701 | version "1.0.1" 1702 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" 1703 | integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== 1704 | dependencies: 1705 | is-plain-object "^2.0.4" 1706 | 1707 | is-extglob@^2.1.0, is-extglob@^2.1.1: 1708 | version "2.1.1" 1709 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1710 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1711 | 1712 | is-fullwidth-code-point@^2.0.0: 1713 | version "2.0.0" 1714 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1715 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 1716 | 1717 | is-glob@^3.1.0: 1718 | version "3.1.0" 1719 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" 1720 | integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= 1721 | dependencies: 1722 | is-extglob "^2.1.0" 1723 | 1724 | is-glob@^4.0.0: 1725 | version "4.0.1" 1726 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 1727 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 1728 | dependencies: 1729 | is-extglob "^2.1.1" 1730 | 1731 | is-number@^3.0.0: 1732 | version "3.0.0" 1733 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 1734 | integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= 1735 | dependencies: 1736 | kind-of "^3.0.2" 1737 | 1738 | is-plain-object@^2.0.3, is-plain-object@^2.0.4: 1739 | version "2.0.4" 1740 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 1741 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== 1742 | dependencies: 1743 | isobject "^3.0.1" 1744 | 1745 | is-regex@^1.1.0: 1746 | version "1.1.0" 1747 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" 1748 | integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== 1749 | dependencies: 1750 | has-symbols "^1.0.1" 1751 | 1752 | is-symbol@^1.0.2: 1753 | version "1.0.3" 1754 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" 1755 | integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== 1756 | dependencies: 1757 | has-symbols "^1.0.1" 1758 | 1759 | is-windows@^1.0.2: 1760 | version "1.0.2" 1761 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 1762 | integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== 1763 | 1764 | isarray@1.0.0, isarray@~1.0.0: 1765 | version "1.0.0" 1766 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1767 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 1768 | 1769 | isexe@^2.0.0: 1770 | version "2.0.0" 1771 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1772 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1773 | 1774 | isobject@^2.0.0: 1775 | version "2.1.0" 1776 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1777 | integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= 1778 | dependencies: 1779 | isarray "1.0.0" 1780 | 1781 | isobject@^3.0.0, isobject@^3.0.1: 1782 | version "3.0.1" 1783 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 1784 | integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= 1785 | 1786 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 1787 | version "4.0.0" 1788 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1789 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1790 | 1791 | js-yaml@3.13.1: 1792 | version "3.13.1" 1793 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 1794 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 1795 | dependencies: 1796 | argparse "^1.0.7" 1797 | esprima "^4.0.0" 1798 | 1799 | js-yaml@^3.13.1: 1800 | version "3.14.0" 1801 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" 1802 | integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== 1803 | dependencies: 1804 | argparse "^1.0.7" 1805 | esprima "^4.0.0" 1806 | 1807 | jsesc@^2.5.1: 1808 | version "2.5.2" 1809 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 1810 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 1811 | 1812 | jsesc@~0.5.0: 1813 | version "0.5.0" 1814 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" 1815 | integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= 1816 | 1817 | json5@^2.1.2: 1818 | version "2.1.3" 1819 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" 1820 | integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== 1821 | dependencies: 1822 | minimist "^1.2.5" 1823 | 1824 | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: 1825 | version "3.2.2" 1826 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 1827 | integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= 1828 | dependencies: 1829 | is-buffer "^1.1.5" 1830 | 1831 | kind-of@^4.0.0: 1832 | version "4.0.0" 1833 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" 1834 | integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= 1835 | dependencies: 1836 | is-buffer "^1.1.5" 1837 | 1838 | kind-of@^5.0.0: 1839 | version "5.1.0" 1840 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" 1841 | integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== 1842 | 1843 | kind-of@^6.0.0, kind-of@^6.0.2: 1844 | version "6.0.3" 1845 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" 1846 | integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== 1847 | 1848 | leven@^3.1.0: 1849 | version "3.1.0" 1850 | resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" 1851 | integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== 1852 | 1853 | levenary@^1.1.1: 1854 | version "1.1.1" 1855 | resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" 1856 | integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== 1857 | dependencies: 1858 | leven "^3.1.0" 1859 | 1860 | locate-path@^2.0.0: 1861 | version "2.0.0" 1862 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 1863 | integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= 1864 | dependencies: 1865 | p-locate "^2.0.0" 1866 | path-exists "^3.0.0" 1867 | 1868 | locate-path@^3.0.0: 1869 | version "3.0.0" 1870 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 1871 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 1872 | dependencies: 1873 | p-locate "^3.0.0" 1874 | path-exists "^3.0.0" 1875 | 1876 | lodash@^4.17.13, lodash@^4.17.15: 1877 | version "4.17.19" 1878 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" 1879 | integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== 1880 | 1881 | log-symbols@2.2.0: 1882 | version "2.2.0" 1883 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" 1884 | integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== 1885 | dependencies: 1886 | chalk "^2.0.1" 1887 | 1888 | loose-envify@^1.0.0: 1889 | version "1.4.0" 1890 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 1891 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 1892 | dependencies: 1893 | js-tokens "^3.0.0 || ^4.0.0" 1894 | 1895 | make-dir@^2.0.0, make-dir@^2.1.0: 1896 | version "2.1.0" 1897 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" 1898 | integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== 1899 | dependencies: 1900 | pify "^4.0.1" 1901 | semver "^5.6.0" 1902 | 1903 | make-error@^1.1.1: 1904 | version "1.3.6" 1905 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 1906 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 1907 | 1908 | map-cache@^0.2.2: 1909 | version "0.2.2" 1910 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" 1911 | integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= 1912 | 1913 | map-visit@^1.0.0: 1914 | version "1.0.0" 1915 | resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" 1916 | integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= 1917 | dependencies: 1918 | object-visit "^1.0.0" 1919 | 1920 | micromatch@^3.1.10, micromatch@^3.1.4: 1921 | version "3.1.10" 1922 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" 1923 | integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== 1924 | dependencies: 1925 | arr-diff "^4.0.0" 1926 | array-unique "^0.3.2" 1927 | braces "^2.3.1" 1928 | define-property "^2.0.2" 1929 | extend-shallow "^3.0.2" 1930 | extglob "^2.0.4" 1931 | fragment-cache "^0.2.1" 1932 | kind-of "^6.0.2" 1933 | nanomatch "^1.2.9" 1934 | object.pick "^1.3.0" 1935 | regex-not "^1.0.0" 1936 | snapdragon "^0.8.1" 1937 | to-regex "^3.0.2" 1938 | 1939 | minimatch@3.0.4, minimatch@^3.0.4: 1940 | version "3.0.4" 1941 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1942 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1943 | dependencies: 1944 | brace-expansion "^1.1.7" 1945 | 1946 | minimist@^1.2.5: 1947 | version "1.2.5" 1948 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 1949 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 1950 | 1951 | mixin-deep@^1.2.0: 1952 | version "1.3.2" 1953 | resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" 1954 | integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== 1955 | dependencies: 1956 | for-in "^1.0.2" 1957 | is-extendable "^1.0.1" 1958 | 1959 | mkdirp@0.5.4: 1960 | version "0.5.4" 1961 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" 1962 | integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw== 1963 | dependencies: 1964 | minimist "^1.2.5" 1965 | 1966 | mkdirp@^0.5.3: 1967 | version "0.5.5" 1968 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 1969 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 1970 | dependencies: 1971 | minimist "^1.2.5" 1972 | 1973 | mocha@^6.1.4: 1974 | version "6.2.3" 1975 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.2.3.tgz#e648432181d8b99393410212664450a4c1e31912" 1976 | integrity sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg== 1977 | dependencies: 1978 | ansi-colors "3.2.3" 1979 | browser-stdout "1.3.1" 1980 | debug "3.2.6" 1981 | diff "3.5.0" 1982 | escape-string-regexp "1.0.5" 1983 | find-up "3.0.0" 1984 | glob "7.1.3" 1985 | growl "1.10.5" 1986 | he "1.2.0" 1987 | js-yaml "3.13.1" 1988 | log-symbols "2.2.0" 1989 | minimatch "3.0.4" 1990 | mkdirp "0.5.4" 1991 | ms "2.1.1" 1992 | node-environment-flags "1.0.5" 1993 | object.assign "4.1.0" 1994 | strip-json-comments "2.0.1" 1995 | supports-color "6.0.0" 1996 | which "1.3.1" 1997 | wide-align "1.1.3" 1998 | yargs "13.3.2" 1999 | yargs-parser "13.1.2" 2000 | yargs-unparser "1.6.0" 2001 | 2002 | ms@2.0.0: 2003 | version "2.0.0" 2004 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 2005 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 2006 | 2007 | ms@2.1.1: 2008 | version "2.1.1" 2009 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 2010 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 2011 | 2012 | ms@^2.1.1: 2013 | version "2.1.2" 2014 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 2015 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 2016 | 2017 | nan@^2.12.1: 2018 | version "2.14.1" 2019 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" 2020 | integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== 2021 | 2022 | nanomatch@^1.2.9: 2023 | version "1.2.13" 2024 | resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" 2025 | integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== 2026 | dependencies: 2027 | arr-diff "^4.0.0" 2028 | array-unique "^0.3.2" 2029 | define-property "^2.0.2" 2030 | extend-shallow "^3.0.2" 2031 | fragment-cache "^0.2.1" 2032 | is-windows "^1.0.2" 2033 | kind-of "^6.0.2" 2034 | object.pick "^1.3.0" 2035 | regex-not "^1.0.0" 2036 | snapdragon "^0.8.1" 2037 | to-regex "^3.0.1" 2038 | 2039 | nice-try@^1.0.4: 2040 | version "1.0.5" 2041 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 2042 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 2043 | 2044 | node-environment-flags@1.0.5: 2045 | version "1.0.5" 2046 | resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" 2047 | integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ== 2048 | dependencies: 2049 | object.getownpropertydescriptors "^2.0.3" 2050 | semver "^5.7.0" 2051 | 2052 | node-environment-flags@^1.0.5: 2053 | version "1.0.6" 2054 | resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" 2055 | integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== 2056 | dependencies: 2057 | object.getownpropertydescriptors "^2.0.3" 2058 | semver "^5.7.0" 2059 | 2060 | node-modules-regexp@^1.0.0: 2061 | version "1.0.0" 2062 | resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" 2063 | integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= 2064 | 2065 | node-releases@^1.1.53: 2066 | version "1.1.58" 2067 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.58.tgz#8ee20eef30fa60e52755fcc0942def5a734fe935" 2068 | integrity sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg== 2069 | 2070 | normalize-path@^2.1.1: 2071 | version "2.1.1" 2072 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 2073 | integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= 2074 | dependencies: 2075 | remove-trailing-separator "^1.0.1" 2076 | 2077 | normalize-path@^3.0.0: 2078 | version "3.0.0" 2079 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 2080 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 2081 | 2082 | object-copy@^0.1.0: 2083 | version "0.1.0" 2084 | resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" 2085 | integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= 2086 | dependencies: 2087 | copy-descriptor "^0.1.0" 2088 | define-property "^0.2.5" 2089 | kind-of "^3.0.3" 2090 | 2091 | object-inspect@^1.7.0: 2092 | version "1.7.0" 2093 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" 2094 | integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== 2095 | 2096 | object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: 2097 | version "1.1.1" 2098 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 2099 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 2100 | 2101 | object-visit@^1.0.0: 2102 | version "1.0.1" 2103 | resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" 2104 | integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= 2105 | dependencies: 2106 | isobject "^3.0.0" 2107 | 2108 | object.assign@4.1.0, object.assign@^4.1.0: 2109 | version "4.1.0" 2110 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" 2111 | integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== 2112 | dependencies: 2113 | define-properties "^1.1.2" 2114 | function-bind "^1.1.1" 2115 | has-symbols "^1.0.0" 2116 | object-keys "^1.0.11" 2117 | 2118 | object.getownpropertydescriptors@^2.0.3: 2119 | version "2.1.0" 2120 | resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" 2121 | integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== 2122 | dependencies: 2123 | define-properties "^1.1.3" 2124 | es-abstract "^1.17.0-next.1" 2125 | 2126 | object.pick@^1.3.0: 2127 | version "1.3.0" 2128 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" 2129 | integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= 2130 | dependencies: 2131 | isobject "^3.0.1" 2132 | 2133 | once@^1.3.0: 2134 | version "1.4.0" 2135 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 2136 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 2137 | dependencies: 2138 | wrappy "1" 2139 | 2140 | p-limit@^1.1.0: 2141 | version "1.3.0" 2142 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" 2143 | integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== 2144 | dependencies: 2145 | p-try "^1.0.0" 2146 | 2147 | p-limit@^2.0.0: 2148 | version "2.3.0" 2149 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 2150 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 2151 | dependencies: 2152 | p-try "^2.0.0" 2153 | 2154 | p-locate@^2.0.0: 2155 | version "2.0.0" 2156 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 2157 | integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= 2158 | dependencies: 2159 | p-limit "^1.1.0" 2160 | 2161 | p-locate@^3.0.0: 2162 | version "3.0.0" 2163 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 2164 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 2165 | dependencies: 2166 | p-limit "^2.0.0" 2167 | 2168 | p-try@^1.0.0: 2169 | version "1.0.0" 2170 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" 2171 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= 2172 | 2173 | p-try@^2.0.0: 2174 | version "2.2.0" 2175 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 2176 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 2177 | 2178 | parse-passwd@^1.0.0: 2179 | version "1.0.0" 2180 | resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" 2181 | integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= 2182 | 2183 | pascalcase@^0.1.1: 2184 | version "0.1.1" 2185 | resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" 2186 | integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= 2187 | 2188 | path-dirname@^1.0.0: 2189 | version "1.0.2" 2190 | resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" 2191 | integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= 2192 | 2193 | path-exists@^3.0.0: 2194 | version "3.0.0" 2195 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 2196 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 2197 | 2198 | path-is-absolute@^1.0.0: 2199 | version "1.0.1" 2200 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2201 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 2202 | 2203 | path-key@^2.0.1: 2204 | version "2.0.1" 2205 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 2206 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 2207 | 2208 | path-parse@^1.0.6: 2209 | version "1.0.6" 2210 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 2211 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 2212 | 2213 | pify@^4.0.1: 2214 | version "4.0.1" 2215 | resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" 2216 | integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== 2217 | 2218 | pirates@^4.0.0: 2219 | version "4.0.1" 2220 | resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" 2221 | integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== 2222 | dependencies: 2223 | node-modules-regexp "^1.0.0" 2224 | 2225 | pkg-dir@^3.0.0: 2226 | version "3.0.0" 2227 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" 2228 | integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== 2229 | dependencies: 2230 | find-up "^3.0.0" 2231 | 2232 | pkg-up@^2.0.0: 2233 | version "2.0.0" 2234 | resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" 2235 | integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= 2236 | dependencies: 2237 | find-up "^2.1.0" 2238 | 2239 | posix-character-classes@^0.1.0: 2240 | version "0.1.1" 2241 | resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" 2242 | integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= 2243 | 2244 | private@^0.1.8: 2245 | version "0.1.8" 2246 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" 2247 | integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== 2248 | 2249 | process-nextick-args@~2.0.0: 2250 | version "2.0.1" 2251 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 2252 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 2253 | 2254 | readable-stream@^2.0.2: 2255 | version "2.3.7" 2256 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 2257 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 2258 | dependencies: 2259 | core-util-is "~1.0.0" 2260 | inherits "~2.0.3" 2261 | isarray "~1.0.0" 2262 | process-nextick-args "~2.0.0" 2263 | safe-buffer "~5.1.1" 2264 | string_decoder "~1.1.1" 2265 | util-deprecate "~1.0.1" 2266 | 2267 | readdirp@^2.2.1: 2268 | version "2.2.1" 2269 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" 2270 | integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== 2271 | dependencies: 2272 | graceful-fs "^4.1.11" 2273 | micromatch "^3.1.10" 2274 | readable-stream "^2.0.2" 2275 | 2276 | regenerate-unicode-properties@^8.2.0: 2277 | version "8.2.0" 2278 | resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" 2279 | integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== 2280 | dependencies: 2281 | regenerate "^1.4.0" 2282 | 2283 | regenerate@^1.4.0: 2284 | version "1.4.1" 2285 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" 2286 | integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== 2287 | 2288 | regenerator-runtime@^0.13.4: 2289 | version "0.13.5" 2290 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" 2291 | integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== 2292 | 2293 | regenerator-transform@^0.14.2: 2294 | version "0.14.4" 2295 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7" 2296 | integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw== 2297 | dependencies: 2298 | "@babel/runtime" "^7.8.4" 2299 | private "^0.1.8" 2300 | 2301 | regex-not@^1.0.0, regex-not@^1.0.2: 2302 | version "1.0.2" 2303 | resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" 2304 | integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== 2305 | dependencies: 2306 | extend-shallow "^3.0.2" 2307 | safe-regex "^1.1.0" 2308 | 2309 | regexpu-core@^4.7.0: 2310 | version "4.7.0" 2311 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" 2312 | integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== 2313 | dependencies: 2314 | regenerate "^1.4.0" 2315 | regenerate-unicode-properties "^8.2.0" 2316 | regjsgen "^0.5.1" 2317 | regjsparser "^0.6.4" 2318 | unicode-match-property-ecmascript "^1.0.4" 2319 | unicode-match-property-value-ecmascript "^1.2.0" 2320 | 2321 | regjsgen@^0.5.1: 2322 | version "0.5.2" 2323 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" 2324 | integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== 2325 | 2326 | regjsparser@^0.6.4: 2327 | version "0.6.4" 2328 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" 2329 | integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== 2330 | dependencies: 2331 | jsesc "~0.5.0" 2332 | 2333 | remove-trailing-separator@^1.0.1: 2334 | version "1.1.0" 2335 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 2336 | integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= 2337 | 2338 | repeat-element@^1.1.2: 2339 | version "1.1.3" 2340 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" 2341 | integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== 2342 | 2343 | repeat-string@^1.6.1: 2344 | version "1.6.1" 2345 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 2346 | integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= 2347 | 2348 | require-directory@^2.1.1: 2349 | version "2.1.1" 2350 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2351 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 2352 | 2353 | require-main-filename@^2.0.0: 2354 | version "2.0.0" 2355 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 2356 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 2357 | 2358 | resolve-url@^0.2.1: 2359 | version "0.2.1" 2360 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" 2361 | integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= 2362 | 2363 | resolve@^1.13.1, resolve@^1.3.2, resolve@^1.8.1: 2364 | version "1.17.0" 2365 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" 2366 | integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== 2367 | dependencies: 2368 | path-parse "^1.0.6" 2369 | 2370 | ret@~0.1.10: 2371 | version "0.1.15" 2372 | resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" 2373 | integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== 2374 | 2375 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 2376 | version "5.1.2" 2377 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2378 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 2379 | 2380 | safe-regex@^1.1.0: 2381 | version "1.1.0" 2382 | resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" 2383 | integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= 2384 | dependencies: 2385 | ret "~0.1.10" 2386 | 2387 | semver@7.0.0: 2388 | version "7.0.0" 2389 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" 2390 | integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== 2391 | 2392 | semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: 2393 | version "5.7.1" 2394 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 2395 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 2396 | 2397 | set-blocking@^2.0.0: 2398 | version "2.0.0" 2399 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 2400 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 2401 | 2402 | set-value@^2.0.0, set-value@^2.0.1: 2403 | version "2.0.1" 2404 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" 2405 | integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== 2406 | dependencies: 2407 | extend-shallow "^2.0.1" 2408 | is-extendable "^0.1.1" 2409 | is-plain-object "^2.0.3" 2410 | split-string "^3.0.1" 2411 | 2412 | shebang-command@^1.2.0: 2413 | version "1.2.0" 2414 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 2415 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 2416 | dependencies: 2417 | shebang-regex "^1.0.0" 2418 | 2419 | shebang-regex@^1.0.0: 2420 | version "1.0.0" 2421 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 2422 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 2423 | 2424 | slash@^2.0.0: 2425 | version "2.0.0" 2426 | resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" 2427 | integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== 2428 | 2429 | sleep-promise@^8.0.1: 2430 | version "8.0.1" 2431 | resolved "https://registry.yarnpkg.com/sleep-promise/-/sleep-promise-8.0.1.tgz#8d795a27ea23953df6b52b91081e5e22665993c5" 2432 | integrity sha1-jXlaJ+ojlT32tSuRCB5eImZZk8U= 2433 | 2434 | snapdragon-node@^2.0.1: 2435 | version "2.1.1" 2436 | resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" 2437 | integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== 2438 | dependencies: 2439 | define-property "^1.0.0" 2440 | isobject "^3.0.0" 2441 | snapdragon-util "^3.0.1" 2442 | 2443 | snapdragon-util@^3.0.1: 2444 | version "3.0.1" 2445 | resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" 2446 | integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== 2447 | dependencies: 2448 | kind-of "^3.2.0" 2449 | 2450 | snapdragon@^0.8.1: 2451 | version "0.8.2" 2452 | resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" 2453 | integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== 2454 | dependencies: 2455 | base "^0.11.1" 2456 | debug "^2.2.0" 2457 | define-property "^0.2.5" 2458 | extend-shallow "^2.0.1" 2459 | map-cache "^0.2.2" 2460 | source-map "^0.5.6" 2461 | source-map-resolve "^0.5.0" 2462 | use "^3.1.0" 2463 | 2464 | source-map-resolve@^0.5.0: 2465 | version "0.5.3" 2466 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" 2467 | integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== 2468 | dependencies: 2469 | atob "^2.1.2" 2470 | decode-uri-component "^0.2.0" 2471 | resolve-url "^0.2.1" 2472 | source-map-url "^0.4.0" 2473 | urix "^0.1.0" 2474 | 2475 | source-map-support@^0.5.16, source-map-support@^0.5.17: 2476 | version "0.5.19" 2477 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" 2478 | integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== 2479 | dependencies: 2480 | buffer-from "^1.0.0" 2481 | source-map "^0.6.0" 2482 | 2483 | source-map-url@^0.4.0: 2484 | version "0.4.0" 2485 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" 2486 | integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= 2487 | 2488 | source-map@^0.5.0, source-map@^0.5.6: 2489 | version "0.5.7" 2490 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 2491 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 2492 | 2493 | source-map@^0.6.0: 2494 | version "0.6.1" 2495 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2496 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2497 | 2498 | split-string@^3.0.1, split-string@^3.0.2: 2499 | version "3.1.0" 2500 | resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" 2501 | integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== 2502 | dependencies: 2503 | extend-shallow "^3.0.0" 2504 | 2505 | sprintf-js@~1.0.2: 2506 | version "1.0.3" 2507 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2508 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 2509 | 2510 | static-extend@^0.1.1: 2511 | version "0.1.2" 2512 | resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" 2513 | integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= 2514 | dependencies: 2515 | define-property "^0.2.5" 2516 | object-copy "^0.1.0" 2517 | 2518 | "string-width@^1.0.2 || 2": 2519 | version "2.1.1" 2520 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 2521 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 2522 | dependencies: 2523 | is-fullwidth-code-point "^2.0.0" 2524 | strip-ansi "^4.0.0" 2525 | 2526 | string-width@^3.0.0, string-width@^3.1.0: 2527 | version "3.1.0" 2528 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 2529 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 2530 | dependencies: 2531 | emoji-regex "^7.0.1" 2532 | is-fullwidth-code-point "^2.0.0" 2533 | strip-ansi "^5.1.0" 2534 | 2535 | string.prototype.trimend@^1.0.1: 2536 | version "1.0.1" 2537 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" 2538 | integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== 2539 | dependencies: 2540 | define-properties "^1.1.3" 2541 | es-abstract "^1.17.5" 2542 | 2543 | string.prototype.trimstart@^1.0.1: 2544 | version "1.0.1" 2545 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" 2546 | integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== 2547 | dependencies: 2548 | define-properties "^1.1.3" 2549 | es-abstract "^1.17.5" 2550 | 2551 | string_decoder@~1.1.1: 2552 | version "1.1.1" 2553 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 2554 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 2555 | dependencies: 2556 | safe-buffer "~5.1.0" 2557 | 2558 | strip-ansi@^4.0.0: 2559 | version "4.0.0" 2560 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 2561 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 2562 | dependencies: 2563 | ansi-regex "^3.0.0" 2564 | 2565 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: 2566 | version "5.2.0" 2567 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 2568 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 2569 | dependencies: 2570 | ansi-regex "^4.1.0" 2571 | 2572 | strip-json-comments@2.0.1: 2573 | version "2.0.1" 2574 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 2575 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 2576 | 2577 | supports-color@6.0.0: 2578 | version "6.0.0" 2579 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" 2580 | integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== 2581 | dependencies: 2582 | has-flag "^3.0.0" 2583 | 2584 | supports-color@^5.3.0: 2585 | version "5.5.0" 2586 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2587 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2588 | dependencies: 2589 | has-flag "^3.0.0" 2590 | 2591 | "terminal.js@github:kevinptt0323/terminal.js": 2592 | version "1.0.10" 2593 | resolved "https://codeload.github.com/kevinptt0323/terminal.js/tar.gz/450a01c81e2974fe28c171a8cb9dfa5486fe2588" 2594 | 2595 | to-fast-properties@^2.0.0: 2596 | version "2.0.0" 2597 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 2598 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 2599 | 2600 | to-object-path@^0.3.0: 2601 | version "0.3.0" 2602 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" 2603 | integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= 2604 | dependencies: 2605 | kind-of "^3.0.2" 2606 | 2607 | to-regex-range@^2.1.0: 2608 | version "2.1.1" 2609 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" 2610 | integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= 2611 | dependencies: 2612 | is-number "^3.0.0" 2613 | repeat-string "^1.6.1" 2614 | 2615 | to-regex@^3.0.1, to-regex@^3.0.2: 2616 | version "3.0.2" 2617 | resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" 2618 | integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== 2619 | dependencies: 2620 | define-property "^2.0.2" 2621 | extend-shallow "^3.0.2" 2622 | regex-not "^1.0.2" 2623 | safe-regex "^1.1.0" 2624 | 2625 | ts-node@^8.3.0: 2626 | version "8.10.2" 2627 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d" 2628 | integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA== 2629 | dependencies: 2630 | arg "^4.1.0" 2631 | diff "^4.0.1" 2632 | make-error "^1.1.1" 2633 | source-map-support "^0.5.17" 2634 | yn "3.1.1" 2635 | 2636 | tslib@^1.10.0, tslib@^1.8.1: 2637 | version "1.13.0" 2638 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" 2639 | integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== 2640 | 2641 | tslint@^6.0.0-beta0: 2642 | version "6.1.2" 2643 | resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.2.tgz#2433c248512cc5a7b2ab88ad44a6b1b34c6911cf" 2644 | integrity sha512-UyNrLdK3E0fQG/xWNqAFAC5ugtFyPO4JJR1KyyfQAyzR8W0fTRrC91A8Wej4BntFzcvETdCSDa/4PnNYJQLYiA== 2645 | dependencies: 2646 | "@babel/code-frame" "^7.0.0" 2647 | builtin-modules "^1.1.1" 2648 | chalk "^2.3.0" 2649 | commander "^2.12.1" 2650 | diff "^4.0.1" 2651 | glob "^7.1.1" 2652 | js-yaml "^3.13.1" 2653 | minimatch "^3.0.4" 2654 | mkdirp "^0.5.3" 2655 | resolve "^1.3.2" 2656 | semver "^5.3.0" 2657 | tslib "^1.10.0" 2658 | tsutils "^2.29.0" 2659 | 2660 | tsutils@^2.29.0: 2661 | version "2.29.0" 2662 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" 2663 | integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== 2664 | dependencies: 2665 | tslib "^1.8.1" 2666 | 2667 | typescript@^3.5.3: 2668 | version "3.9.5" 2669 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.5.tgz#586f0dba300cde8be52dd1ac4f7e1009c1b13f36" 2670 | integrity sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ== 2671 | 2672 | uao-js@^1.0.1: 2673 | version "1.0.1" 2674 | resolved "https://registry.yarnpkg.com/uao-js/-/uao-js-1.0.1.tgz#e28647fdb1b78b90ce6a011237431c51cee99eea" 2675 | integrity sha1-4oZH/bG3i5DOagESN0McUc7pnuo= 2676 | 2677 | unicode-canonical-property-names-ecmascript@^1.0.4: 2678 | version "1.0.4" 2679 | resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" 2680 | integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== 2681 | 2682 | unicode-match-property-ecmascript@^1.0.4: 2683 | version "1.0.4" 2684 | resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" 2685 | integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== 2686 | dependencies: 2687 | unicode-canonical-property-names-ecmascript "^1.0.4" 2688 | unicode-property-aliases-ecmascript "^1.0.4" 2689 | 2690 | unicode-match-property-value-ecmascript@^1.2.0: 2691 | version "1.2.0" 2692 | resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" 2693 | integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== 2694 | 2695 | unicode-property-aliases-ecmascript@^1.0.4: 2696 | version "1.1.0" 2697 | resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" 2698 | integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== 2699 | 2700 | union-value@^1.0.0: 2701 | version "1.0.1" 2702 | resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" 2703 | integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== 2704 | dependencies: 2705 | arr-union "^3.1.0" 2706 | get-value "^2.0.6" 2707 | is-extendable "^0.1.1" 2708 | set-value "^2.0.1" 2709 | 2710 | unset-value@^1.0.0: 2711 | version "1.0.0" 2712 | resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" 2713 | integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= 2714 | dependencies: 2715 | has-value "^0.3.1" 2716 | isobject "^3.0.0" 2717 | 2718 | upath@^1.1.1: 2719 | version "1.2.0" 2720 | resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" 2721 | integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== 2722 | 2723 | urix@^0.1.0: 2724 | version "0.1.0" 2725 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" 2726 | integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= 2727 | 2728 | use@^3.1.0: 2729 | version "3.1.1" 2730 | resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" 2731 | integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== 2732 | 2733 | util-deprecate@~1.0.1: 2734 | version "1.0.2" 2735 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2736 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 2737 | 2738 | v8flags@^3.1.1: 2739 | version "3.2.0" 2740 | resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" 2741 | integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== 2742 | dependencies: 2743 | homedir-polyfill "^1.0.1" 2744 | 2745 | wcwidth@^1.0.1: 2746 | version "1.0.1" 2747 | resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" 2748 | integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= 2749 | dependencies: 2750 | defaults "^1.0.3" 2751 | 2752 | which-module@^2.0.0: 2753 | version "2.0.0" 2754 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 2755 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 2756 | 2757 | which@1.3.1, which@^1.2.9: 2758 | version "1.3.1" 2759 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 2760 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 2761 | dependencies: 2762 | isexe "^2.0.0" 2763 | 2764 | wide-align@1.1.3: 2765 | version "1.1.3" 2766 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 2767 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 2768 | dependencies: 2769 | string-width "^1.0.2 || 2" 2770 | 2771 | wrap-ansi@^5.1.0: 2772 | version "5.1.0" 2773 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" 2774 | integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== 2775 | dependencies: 2776 | ansi-styles "^3.2.0" 2777 | string-width "^3.0.0" 2778 | strip-ansi "^5.0.0" 2779 | 2780 | wrappy@1: 2781 | version "1.0.2" 2782 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2783 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2784 | 2785 | ws@^7.1.1: 2786 | version "7.3.0" 2787 | resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.0.tgz#4b2f7f219b3d3737bc1a2fbf145d825b94d38ffd" 2788 | integrity sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w== 2789 | 2790 | y18n@^4.0.0: 2791 | version "4.0.0" 2792 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" 2793 | integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== 2794 | 2795 | yargs-parser@13.1.2, yargs-parser@^13.1.2: 2796 | version "13.1.2" 2797 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" 2798 | integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== 2799 | dependencies: 2800 | camelcase "^5.0.0" 2801 | decamelize "^1.2.0" 2802 | 2803 | yargs-unparser@1.6.0: 2804 | version "1.6.0" 2805 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" 2806 | integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== 2807 | dependencies: 2808 | flat "^4.1.0" 2809 | lodash "^4.17.15" 2810 | yargs "^13.3.0" 2811 | 2812 | yargs@13.3.2, yargs@^13.3.0: 2813 | version "13.3.2" 2814 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" 2815 | integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== 2816 | dependencies: 2817 | cliui "^5.0.0" 2818 | find-up "^3.0.0" 2819 | get-caller-file "^2.0.1" 2820 | require-directory "^2.1.1" 2821 | require-main-filename "^2.0.0" 2822 | set-blocking "^2.0.0" 2823 | string-width "^3.0.0" 2824 | which-module "^2.0.0" 2825 | y18n "^4.0.0" 2826 | yargs-parser "^13.1.2" 2827 | 2828 | yn@3.1.1: 2829 | version "3.1.1" 2830 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 2831 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 2832 | --------------------------------------------------------------------------------