├── .prettierrc ├── jasmine.json ├── Procfile ├── src ├── notify.ts ├── candle.ts ├── time.ts ├── interfaces.ts ├── test │ ├── base64_spec.ts │ └── redis_spec.ts ├── base64.ts ├── events.ts ├── redis.ts └── index.ts ├── LICENSE.txt ├── README.md ├── package.json ├── .gitignore ├── types └── buffer-layout.d.ts ├── tsconfig.json └── yarn.lock /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true 4 | } 5 | -------------------------------------------------------------------------------- /jasmine.json: -------------------------------------------------------------------------------- 1 | { 2 | "reporters": [ 3 | { 4 | "name": "jasmine-spec-reporter#SpecReporter", 5 | "options": { 6 | "displayStacktrace": "all" 7 | } 8 | } 9 | ], 10 | "spec_dir": "src/test", 11 | "spec_files": ["**/*_spec.ts"], 12 | "stopSpecOnExpectationFailure": false 13 | } 14 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: env WEBHOOK_URL=https://discord.com/api/webhooks/881943164309606421/sib-EX1K1mJYZGMoe_Quoc7Vob8pdmsxiG8vnXjDqkJQkMebvPTGikrRqHlyi8xDdrNg ROLE=web yarn start 2 | worker: env WEBHOOK_URL=https://discord.com/api/webhooks/881946637784731691/xAskf3QXuj1Oxaq9ixYu1b9kk_LV-DlMF_CyZ-hUwzjbpl4yd2QAXjx391BMYt9uSfE5 ROLE=worker yarn start -------------------------------------------------------------------------------- /src/notify.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | 3 | export default function notify(content: string) { 4 | if (process.env.WEBHOOK_URL) { 5 | try { 6 | axios.post(process.env.WEBHOOK_URL, { content }) 7 | } catch (e) { 8 | console.error(`could not notify webhook: ${content}`) 9 | } 10 | } else { 11 | console.warn(content) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/candle.ts: -------------------------------------------------------------------------------- 1 | 2 | import { Candle, Trade } from "./interfaces"; 3 | 4 | 5 | export function batch(ts: Trade[], start: number, end: number): Candle | undefined { 6 | 7 | const batchTrades = ts.filter(t => t.ts >= start && t.ts < end); 8 | 9 | if (batchTrades.length == 0) { 10 | return undefined; 11 | } else { 12 | let t0 = batchTrades[0]; 13 | let c = { open: t0.price, 14 | close: t0.price, 15 | high: t0.price, 16 | low: t0.price, 17 | volume: t0.size, 18 | vwap: t0.price * t0.size, 19 | start, end }; 20 | 21 | batchTrades.slice(1).forEach(t => { 22 | c.close = t.price; 23 | c.high = Math.max(c.high, t.price); 24 | c.low = Math.min(c.low, t.price); 25 | c.volume += t.size; 26 | c.vwap += t.price * t.size; 27 | }); 28 | 29 | c.vwap /= c.volume; 30 | 31 | return c; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/time.ts: -------------------------------------------------------------------------------- 1 | 2 | const SECONDS = 1000; 3 | const MINUTES = 60 * SECONDS; 4 | const HOURS = 60 * MINUTES; 5 | 6 | export const resolutions: { [id: string]: number | undefined } = { 7 | "1": 1 * MINUTES, 8 | "3": 3 * MINUTES, 9 | "5": 5 * MINUTES, 10 | "15": 15 * MINUTES, 11 | "30": 30 * MINUTES, 12 | "60": 1 * HOURS, 13 | "120": 2 * HOURS, 14 | "180": 3 * HOURS, 15 | "240": 4 * HOURS, 16 | "1D": 24 * HOURS, 17 | } 18 | 19 | interface Timespan { 20 | Millis?: number; 21 | Seconds?: number; 22 | Minutes?: number; 23 | Hours?: number; 24 | } 25 | 26 | export function sleep(time: Timespan) { 27 | const millis = time.Millis || 0; 28 | const seconds = time.Seconds || 0; 29 | const minutes = time.Minutes || 0; 30 | const hours = time.Hours || 0; 31 | const total = millis + SECONDS * seconds + MINUTES * minutes + HOURS * hours; 32 | return new Promise((resolve) => setTimeout(resolve, total)) 33 | } 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2021 Blockworks Foundation 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Serum History 2 | 3 | Collects and aggregates trades from serum dex for display in a tradingview chart. 4 | This is powering the charts on [mango.markets](https://mango.markets). 5 | Feel free to improve and extend for the benefit for the larger solana ecosystem. 6 | 7 | ** Note: This does not include a functioning trading view to inspect the 8 | data.** Check the [mango markets gui code](https://github.com/blockworks-foundation/mango-ui-v2/blob/main/components/TradingView/index.tsx) for a reference how to use this API to display a TradingView. 9 | 10 | ## Configuration 11 | 12 | * Markets: should be added to the dictionaries in src/index.ts 13 | marketsV3 - for wrapped token denominated markets (deprecated) 14 | nativeMarketsV3 - for native token denominated markets 15 | 16 | * All other configuration should be handled via environment variables. 17 | So far the following variables exist: 18 | 19 | ``` 20 | REDISCLOUD_URL: redis connection url 21 | REDIS_MAX_CONN: maximum number of concurrent connections used by the redis pool 22 | RPC_ENDPOINT_URL: solana rpc connection url 23 | INTERVAL: time in seconds to wait between event queue polls 24 | ``` 25 | 26 | ## Questions / Suggestions? 27 | 28 | 👋 Reach us on our [discord](https://discord.gg/cbDHKCnGJU) 29 | -------------------------------------------------------------------------------- /src/interfaces.ts: -------------------------------------------------------------------------------- 1 | import BN from 'bn.js' 2 | import LRUCache from 'lru-cache' 3 | 4 | export interface MarketConfig { 5 | clusterUrl: string 6 | programId: string 7 | marketName: string 8 | marketPk: string 9 | } 10 | 11 | export enum TradeSide { 12 | None = 0, 13 | Buy = 1, 14 | Sell = 2, 15 | } 16 | 17 | export interface Trade { 18 | price: number 19 | side: TradeSide 20 | size: number 21 | ts: number 22 | } 23 | 24 | export interface Coder { 25 | encode: (t: T) => string 26 | decode: (s: string) => T 27 | } 28 | 29 | export interface Candle { 30 | open: number 31 | close: number 32 | high: number 33 | low: number 34 | volume: number 35 | vwap: number 36 | start: number 37 | end: number 38 | } 39 | 40 | export interface CandleStore { 41 | storeTrade: (t: Trade) => Promise 42 | loadCandles: ( 43 | resolution: number, 44 | from: number, 45 | to: number, 46 | cache?: LRUCache 47 | ) => Promise 48 | } 49 | 50 | export interface BufferStore { 51 | storeBuffer: (ts: number, b: Buffer) => Promise 52 | } 53 | 54 | export interface KeyValStore { 55 | storeNumber: (key: string, val: number) => Promise 56 | loadNumber: (key: string) => Promise 57 | } 58 | -------------------------------------------------------------------------------- /src/test/base64_spec.ts: -------------------------------------------------------------------------------- 1 | import { Base64TradeCoder, Base64CandleCoder } from '../base64'; 2 | import { TradeSide } from '../interfaces'; 3 | 4 | const t = {id: '1234567890', price: 0.1234567, side: TradeSide.Buy, size: 1234567, ts: Date.now()}; 5 | const c = {open: 0.12345, close: 0.123456, high: 0.1234567, low: 0.12345678, 6 | volume: 1234567, vwap: 0.123456789, start: 1234567890, end: 1234567899}; 7 | 8 | describe('Base64TradeCoder', () => { 9 | it('encodes to 20 bytes', () => { 10 | let e = new Base64TradeCoder().encode(t); 11 | expect(e.length).toBe(20); 12 | }); 13 | 14 | it('preserves price,size,ts', () => { 15 | let e = new Base64TradeCoder().encode(t); 16 | let d = new Base64TradeCoder().decode(e); 17 | expect(d.price).toBeCloseTo(t.price, 7); 18 | expect(d.size).toBeCloseTo(t.size, 7); 19 | expect(d.ts).toBe(t.ts); 20 | }); 21 | }); 22 | 23 | describe('Base64CandleCoder', () => { 24 | it('encodes to 48 bytes', () => { 25 | 26 | let e = new Base64CandleCoder().encode(c); 27 | expect(e.length).toBe(48); 28 | }); 29 | 30 | it('preserves data', () => { 31 | let e = new Base64CandleCoder().encode(c); 32 | let d = new Base64CandleCoder().decode(e); 33 | expect(d.open).toBeCloseTo(c.open, 7); 34 | expect(d.close).toBeCloseTo(c.close, 7); 35 | expect(d.high).toBeCloseTo(c.high, 7); 36 | expect(d.low).toBeCloseTo(c.low, 7); 37 | expect(d.volume).toBeCloseTo(c.volume, 7); 38 | expect(d.vwap).toBeCloseTo(c.vwap, 7); 39 | expect(d.start).toBe(c.start); 40 | expect(d.end).toBe(c.end); 41 | }); 42 | }); 43 | 44 | 45 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "serum-history", 3 | "version": "1.0.0", 4 | "description": "Aggregate Serum DEX history for display in TradingView charts.", 5 | "main": "index.js", 6 | "repository": "https://github.com/blockworks-foundation/serum-history", 7 | "author": "Blockworks Foundation", 8 | "license": "MIT", 9 | "private": true, 10 | "devDependencies": { 11 | "@types/bn.js": "^5.1.0", 12 | "@types/cors": "^2.8.10", 13 | "@types/express": "^4.17.11", 14 | "@types/jasmine": "^3.6.3", 15 | "@types/lru-cache": "^5.1.1", 16 | "@types/node": "^14.14.28", 17 | "jasmine": "^3.6.4", 18 | "jasmine-spec-reporter": "^6.0.0", 19 | "jasmine-ts": "^0.3.0", 20 | "ts-node": "8.10.2", 21 | "ts-node-dev": "^1.1.1", 22 | "typescript": "^4.1.4" 23 | }, 24 | "dependencies": { 25 | "@blockworks-foundation/mango-client": "^3.0.11", 26 | "@project-serum/serum": "^0.13.20", 27 | "@solana/web3.js": "^0.91.0", 28 | "axios": "^0.21.1", 29 | "cors": "^2.8.5", 30 | "dayjs": "^1.10.7", 31 | "express": "^4.17.1", 32 | "lru-cache": "^5.1.0", 33 | "tedis": "^0.1.12" 34 | }, 35 | "scripts": { 36 | "start": "node dist/index.js", 37 | "dev": "ts-node-dev --files src/index.ts", 38 | "clean": "rm -rf dist", 39 | "prepare": "run-s clean postinstall", 40 | "postinstall": "tsc", 41 | "shell": "node -e \"$(< shell)\" -i --experimental-repl-await", 42 | "test": "jasmine-ts --config=jasmine.json" 43 | }, 44 | "engines": { 45 | "node": "16.x" 46 | }, 47 | "resolutions": { 48 | "bn.js": "5.1.3", 49 | "@types/bn.js": "5.1.0" 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/base64.ts: -------------------------------------------------------------------------------- 1 | import { Candle, Trade, TradeSide, Coder } from './interfaces'; 2 | 3 | export class Base64TradeCoder implements Coder { 4 | constructor() {}; 5 | 6 | encode(t: Trade): string { 7 | const buf = Buffer.alloc(15); 8 | buf.writeFloatLE(t.price, 0); 9 | buf.writeFloatLE(t.size, 4); 10 | buf.writeUIntLE(t.ts, 8, 6); 11 | buf.writeUInt8(t.side, 14); 12 | const base64 = buf.toString('base64'); 13 | return base64; 14 | }; 15 | 16 | decode(s: string): Trade { 17 | const buf = Buffer.from(s, 'base64'); 18 | const trade = { 19 | price: buf.readFloatLE(0), 20 | size: buf.readFloatLE(4), 21 | ts: buf.readUIntLE(8, 6), 22 | side: buf.readUInt8(14) as TradeSide, 23 | }; 24 | return trade; 25 | }; 26 | }; 27 | 28 | 29 | export class Base64CandleCoder implements Coder { 30 | constructor() {}; 31 | 32 | encode(c: Candle): string { 33 | const buf = Buffer.alloc(36); 34 | buf.writeFloatLE(c.open, 0); 35 | buf.writeFloatLE(c.close, 4); 36 | buf.writeFloatLE(c.high, 8); 37 | buf.writeFloatLE(c.low, 12); 38 | buf.writeFloatLE(c.volume, 16); 39 | buf.writeFloatLE(c.vwap, 20); 40 | buf.writeUIntLE(c.start, 24, 6); 41 | buf.writeUIntLE(c.end, 30, 6); 42 | const base64 = buf.toString('base64'); 43 | return base64; 44 | }; 45 | 46 | decode(s: string): Candle { 47 | const buf = Buffer.from(s, 'base64'); 48 | const candle = { 49 | open: buf.readFloatLE(0), 50 | close: buf.readFloatLE(4), 51 | high: buf.readFloatLE(8), 52 | low: buf.readFloatLE(12), 53 | volume: buf.readFloatLE(16), 54 | vwap: buf.readFloatLE(20), 55 | start: buf.readUIntLE(24, 6), 56 | end: buf.readUIntLE(30, 6) 57 | }; 58 | return candle; 59 | }; 60 | 61 | } 62 | -------------------------------------------------------------------------------- /src/events.ts: -------------------------------------------------------------------------------- 1 | import BN from 'bn.js'; 2 | import { bits, blob, struct, u8, u32, nu64 } from 'buffer-layout'; 3 | import { 4 | accountFlagsLayout, 5 | publicKeyLayout, 6 | u128, 7 | u64, 8 | zeros, 9 | } from '@project-serum/serum/lib/layout'; 10 | 11 | interface EventQueueHeader { 12 | head: number; 13 | count: number; 14 | seqNum: number; 15 | } 16 | 17 | const EVENT_QUEUE_HEADER = struct([ 18 | blob(5), 19 | accountFlagsLayout('accountFlags'), 20 | u32('head'), 21 | zeros(4), 22 | u32('count'), 23 | zeros(4), 24 | u32('seqNum'), 25 | zeros(4), 26 | ]); 27 | 28 | const EVENT_FLAGS = bits(u8(), false, 'eventFlags'); 29 | EVENT_FLAGS.addBoolean('fill'); 30 | EVENT_FLAGS.addBoolean('out'); 31 | EVENT_FLAGS.addBoolean('bid'); 32 | EVENT_FLAGS.addBoolean('maker'); 33 | 34 | const EVENT = struct([ 35 | EVENT_FLAGS, 36 | u8('openOrdersSlot'), 37 | u8('feeTier'), 38 | blob(5), 39 | u64('nativeQuantityReleased'), // Amount the user received 40 | u64('nativeQuantityPaid'), // Amount the user paid 41 | u64('nativeFeeOrRebate'), 42 | u128('orderId'), 43 | publicKeyLayout('openOrders'), 44 | u64('clientOrderId'), 45 | ]); 46 | 47 | 48 | export function decodeRecentEvents( 49 | buffer: Buffer, 50 | lastSeenSeqNum?: number, 51 | ) { 52 | const header = EVENT_QUEUE_HEADER.decode(buffer); 53 | const events: any[] = []; 54 | 55 | if (lastSeenSeqNum !== undefined) { 56 | const allocLen = Math.floor( 57 | (buffer.length - EVENT_QUEUE_HEADER.span) / EVENT.span, 58 | ); 59 | 60 | const newEventsCount = Math.min(header.seqNum - lastSeenSeqNum, allocLen - 1) 61 | 62 | for (let i = newEventsCount; i > 0; --i) { 63 | const nodeIndex = (header.head + header.count + allocLen - i) % allocLen 64 | const decodedItem = EVENT.decode(buffer, EVENT_QUEUE_HEADER.span + nodeIndex * EVENT.span) 65 | events.push(decodedItem) 66 | } 67 | } 68 | 69 | return { header, events }; 70 | } 71 | 72 | -------------------------------------------------------------------------------- /src/test/redis_spec.ts: -------------------------------------------------------------------------------- 1 | import { RedisStore } from '../redis'; 2 | import { TradeSide } from '../interfaces'; 3 | import { Tedis } from "tedis"; 4 | 5 | const SECONDS = 1000; 6 | const DAYS = 86400000; 7 | const YEARS = 365*DAYS; 8 | const ts = [{id: '0', price: 1.2, side: TradeSide.Buy, size: 3.4, ts: 1234567890000}, 9 | {id: '1', price: 2.3, side: TradeSide.Buy, size: 4.5, ts: 1234567890000-0.8*DAYS}, 10 | {id: '2', price: 3.4, side: TradeSide.Buy, size: 5.6, ts: 1234567890000+1*DAYS}, 11 | {id: '3', price: 4.5, side: TradeSide.Buy, size: 6.7, ts: 1234567890000+3*DAYS}]; 12 | const s = new RedisStore({} as Tedis, 'ABC/DEF'); 13 | 14 | describe('RedisStore', () => { 15 | it('stores trades in buckets per day', () => { 16 | let keys = ts.map(t => s.keyForTrade(t)); 17 | 18 | expect(keys[0]).toBe('ABC/DEF-2009-1-13'); 19 | expect(keys[0]).toBe(keys[1]); 20 | expect(keys[0]).not.toBe(keys[2]); 21 | expect(keys[0]).not.toBe(keys[3]); 22 | expect(keys[2]).not.toBe(keys[3]); 23 | }); 24 | 25 | it('iterates trades for candles in buckets per day', () => { 26 | let from = ts[0].ts; 27 | let to = from + 1.2*DAYS; 28 | let keys = s.keysForCandles(DAYS, from, to); 29 | expect(keys).toEqual(['ABC/DEF-2009-1-13', 30 | 'ABC/DEF-2009-1-14', 31 | 'ABC/DEF-2009-1-15']); 32 | }); 33 | 34 | it('iterates trades for candles preserving order', () => { 35 | let from = ts[0].ts; 36 | let to = from + 1*YEARS; 37 | let keys = s.keysForCandles(DAYS, from, to); 38 | expect(keys[0]).toEqual('ABC/DEF-2009-1-13'); 39 | expect(keys[keys.length-1]).toEqual('ABC/DEF-2010-1-13'); 40 | }); 41 | 42 | it('stores buffers in keys per millisecond', () => { 43 | expect(s.keyForBuffer(ts[0].ts)).toEqual('ABC/DEF-1234567890000'); 44 | }); 45 | 46 | it('iterates events for a single candle', () => { 47 | let from = ts[0].ts; 48 | let keyMatch = s.keyMatchForCandle(DAYS, from); 49 | expect(keyMatch).toEqual('ABC/DEF-1234*'); 50 | }); 51 | }); 52 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.toptal.com/developers/gitignore/api/node 3 | # Edit at https://www.toptal.com/developers/gitignore?templates=node 4 | 5 | ### Node ### 6 | # Logs 7 | logs 8 | *.log 9 | npm-debug.log* 10 | yarn-debug.log* 11 | yarn-error.log* 12 | lerna-debug.log* 13 | 14 | # Diagnostic reports (https://nodejs.org/api/report.html) 15 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 16 | 17 | # Runtime data 18 | pids 19 | *.pid 20 | *.seed 21 | *.pid.lock 22 | 23 | # Directory for instrumented libs generated by jscoverage/JSCover 24 | lib-cov 25 | 26 | # Coverage directory used by tools like istanbul 27 | coverage 28 | *.lcov 29 | 30 | # nyc test coverage 31 | .nyc_output 32 | 33 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 34 | .grunt 35 | 36 | # Bower dependency directory (https://bower.io/) 37 | bower_components 38 | 39 | # node-waf configuration 40 | .lock-wscript 41 | 42 | # Compiled binary addons (https://nodejs.org/api/addons.html) 43 | build/Release 44 | 45 | # Dependency directories 46 | node_modules/ 47 | jspm_packages/ 48 | 49 | # TypeScript v1 declaration files 50 | typings/ 51 | 52 | # TypeScript cache 53 | *.tsbuildinfo 54 | 55 | # Optional npm cache directory 56 | .npm 57 | 58 | # Optional eslint cache 59 | .eslintcache 60 | 61 | # Optional stylelint cache 62 | .stylelintcache 63 | 64 | # Microbundle cache 65 | .rpt2_cache/ 66 | .rts2_cache_cjs/ 67 | .rts2_cache_es/ 68 | .rts2_cache_umd/ 69 | 70 | # Optional REPL history 71 | .node_repl_history 72 | 73 | # Output of 'npm pack' 74 | *.tgz 75 | 76 | # Yarn Integrity file 77 | .yarn-integrity 78 | 79 | # dotenv environment variables file 80 | .env 81 | .env.test 82 | .env*.local 83 | 84 | # parcel-bundler cache (https://parceljs.org/) 85 | .cache 86 | .parcel-cache 87 | 88 | # Next.js build output 89 | .next 90 | 91 | # Nuxt.js build / generate output 92 | .nuxt 93 | dist 94 | 95 | # Gatsby files 96 | .cache/ 97 | # Comment in the public line in if your project uses Gatsby and not Next.js 98 | # https://nextjs.org/blog/next-9-1#public-directory-support 99 | # public 100 | 101 | # vuepress build output 102 | .vuepress/dist 103 | 104 | # Serverless directories 105 | .serverless/ 106 | 107 | # FuseBox cache 108 | .fusebox/ 109 | 110 | # DynamoDB Local files 111 | .dynamodb/ 112 | 113 | # TernJS port file 114 | .tern-port 115 | 116 | # Stores VSCode versions used for testing VSCode extensions 117 | .vscode-test 118 | 119 | # End of https://www.toptal.com/developers/gitignore/api/node 120 | -------------------------------------------------------------------------------- /types/buffer-layout.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'buffer-layout' { 2 | // TODO: remove `any`. 3 | export class Layout { 4 | span: number; 5 | property?: string; 6 | 7 | constructor(span: number, property?: string); 8 | 9 | decode(b: Buffer, offset?: number): T; 10 | encode(src: T, b: Buffer, offset?: number): number; 11 | getSpan(b: Buffer, offset?: number): number; 12 | replicate(name: string): this; 13 | } 14 | // TODO: remove any. 15 | export class Structure extends Layout { 16 | span: any; 17 | } 18 | export function greedy( 19 | elementSpan?: number, 20 | property?: string, 21 | ): Layout; 22 | export function offset( 23 | layout: Layout, 24 | offset?: number, 25 | property?: string, 26 | ): Layout; 27 | export function u8(property?: string): Layout; 28 | export function u16(property?: string): Layout; 29 | export function u24(property?: string): Layout; 30 | export function u32(property?: string): Layout; 31 | export function u40(property?: string): Layout; 32 | export function u48(property?: string): Layout; 33 | export function nu64(property?: string): Layout; 34 | export function u16be(property?: string): Layout; 35 | export function u24be(property?: string): Layout; 36 | export function u32be(property?: string): Layout; 37 | export function u40be(property?: string): Layout; 38 | export function u48be(property?: string): Layout; 39 | export function nu64be(property?: string): Layout; 40 | export function s8(property?: string): Layout; 41 | export function s16(property?: string): Layout; 42 | export function s24(property?: string): Layout; 43 | export function s32(property?: string): Layout; 44 | export function s40(property?: string): Layout; 45 | export function s48(property?: string): Layout; 46 | export function ns64(property?: string): Layout; 47 | export function s16be(property?: string): Layout; 48 | export function s24be(property?: string): Layout; 49 | export function s32be(property?: string): Layout; 50 | export function s40be(property?: string): Layout; 51 | export function s48be(property?: string): Layout; 52 | export function ns64be(property?: string): Layout; 53 | export function f32(property?: string): Layout; 54 | export function f32be(property?: string): Layout; 55 | export function f64(property?: string): Layout; 56 | export function f64be(property?: string): Layout; 57 | export function struct( 58 | fields: Layout[], 59 | property?: string, 60 | decodePrefixes?: boolean, 61 | ): Layout; 62 | export function bits( 63 | word: Layout, 64 | msb?: boolean, 65 | property?: string, 66 | ): any; 67 | export function seq( 68 | elementLayout: Layout, 69 | count: number | Layout, 70 | property?: string, 71 | ): Layout; 72 | export function union( 73 | discr: Layout, 74 | defaultLayout?: any, 75 | property?: string, 76 | ): any; 77 | export function unionLayoutDiscriminator( 78 | layout: Layout, 79 | property?: string, 80 | ): any; 81 | export function blob( 82 | length: number | Layout, 83 | property?: string, 84 | ): Layout; 85 | export function cstr(property?: string): Layout; 86 | export function utf8(maxSpan: number, property?: string): Layout; 87 | } 88 | -------------------------------------------------------------------------------- /src/redis.ts: -------------------------------------------------------------------------------- 1 | import { Base64TradeCoder } from './base64' 2 | const coder = new Base64TradeCoder() 3 | 4 | import { batch } from './candle' 5 | import { 6 | BufferStore, 7 | Candle, 8 | CandleStore, 9 | KeyValStore, 10 | Trade, 11 | } from './interfaces' 12 | import { Tedis } from 'tedis' 13 | import LRUCache from 'lru-cache' 14 | 15 | export interface RedisConfig { 16 | host: string 17 | port: number 18 | db: number 19 | password?: string 20 | } 21 | 22 | export class RedisStore implements CandleStore, BufferStore, KeyValStore { 23 | connection: Tedis 24 | symbol: string 25 | 26 | constructor(connection: Tedis, symbol: string) { 27 | this.connection = connection 28 | this.symbol = symbol 29 | } 30 | 31 | keyForDay(ts: number): string { 32 | const d = new Date(ts) 33 | return `${ 34 | this.symbol 35 | }-${d.getUTCFullYear()}-${d.getUTCMonth()}-${d.getUTCDate()}` 36 | } 37 | 38 | keyForTrade(t: Trade): string { 39 | return this.keyForDay(t.ts) 40 | } 41 | 42 | keyMatchForCandle(resolution: number, from: number): string { 43 | const keys = [this.keyForBuffer(from), this.keyForBuffer(from + resolution)] 44 | for (let i = 0; i < Math.min(keys[0].length, keys[1].length); i += 1) { 45 | if (keys[0][i] != keys[1][i]) { 46 | return keys[0].substr(0, i) + '*' 47 | } 48 | } 49 | return keys[0] 50 | } 51 | 52 | keysForCandles(resolution: number, from: number, to: number): string[] { 53 | const keys = new Set() 54 | while (from < to) { 55 | keys.add(this.keyForDay(from)) 56 | from += resolution 57 | } 58 | keys.add(this.keyForDay(to)) 59 | return Array.from(keys) 60 | } 61 | 62 | keyForBuffer(ts: number): string { 63 | return `${this.symbol}-${ts}` 64 | } 65 | 66 | // interface CandleStore 67 | 68 | async storeTrade(t: Trade): Promise { 69 | await this.connection.rpush(this.keyForTrade(t), coder.encode(t)) 70 | } 71 | 72 | async loadTrades( 73 | key: string, 74 | cache?: LRUCache 75 | ): Promise { 76 | const cached = cache?.get(key) 77 | if (cached && key != this.keyForDay(Date.now())) return cached 78 | const response = await this.connection.lrange(key, 0, -1) 79 | const result = response.map((t) => coder.decode(t)) 80 | cache?.set(key, result) 81 | return result 82 | } 83 | 84 | async loadCandles( 85 | resolution: number, 86 | from: number, 87 | to: number, 88 | cache?: LRUCache 89 | ): Promise { 90 | const keys = this.keysForCandles(resolution, from, to).slice(-7) 91 | const tradeRequests = keys.map((k) => this.loadTrades(k, cache)) 92 | const tradeResponses = await Promise.all(tradeRequests) 93 | const trades = tradeResponses.flat() 94 | const candles: Candle[] = [] 95 | while (from + resolution <= to) { 96 | let candle = batch(trades, from, from + resolution) 97 | if (candle) { 98 | candles.push(candle) 99 | } 100 | from += resolution 101 | } 102 | return candles 103 | } 104 | 105 | async loadRecentTrades(): Promise { 106 | const today = Date.now() 107 | const yesterday = today - 24 * 60 * 60 * 1000 108 | const keys = [this.keyForDay(yesterday), this.keyForDay(today)] 109 | const tradeRequests = keys.map((k) => this.connection.lrange(k, 0, -1)) 110 | const tradeResponses = await Promise.all(tradeRequests) 111 | const trades = tradeResponses 112 | .flat() 113 | .slice(-50) 114 | .reverse() 115 | .map((t) => coder.decode(t)) 116 | return trades 117 | } 118 | 119 | // interface BufferStore 120 | 121 | async storeBuffer(ts: number, b: Buffer): Promise { 122 | const key = this.keyForBuffer(ts) 123 | await this.connection.set(key, b.toString('base64')) 124 | } 125 | 126 | // interface KeyValStore 127 | 128 | async storeNumber(key: string, val: number): Promise { 129 | await this.connection.set(`${this.symbol}-NUM-${key}`, val.toString()) 130 | } 131 | 132 | async loadNumber(key: string): Promise { 133 | const result = await this.connection.get(`${this.symbol}-NUM-${key}`) 134 | if (result) return result as number 135 | else return undefined 136 | } 137 | } 138 | 139 | export async function createRedisStore( 140 | config: RedisConfig, 141 | symbol: string 142 | ): Promise { 143 | const conn = new Tedis({ 144 | host: config.host, 145 | port: config.port, 146 | password: config.password, 147 | }) 148 | await conn.command('SELECT', config.db) 149 | return new RedisStore(conn, symbol) 150 | } 151 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */ 4 | 5 | /* Basic Options */ 6 | // "incremental": true, /* Enable incremental compilation */ 7 | "target": "es2019", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ 8 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ 9 | "lib": ["es2019"], /* Specify library files to be included in the compilation. */ 10 | "allowJs": true, /* Allow javascript files to be compiled. */ 11 | // "checkJs": true, /* Report errors in .js files. */ 12 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ 13 | // "declaration": true, /* Generates corresponding '.d.ts' file. */ 14 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ 15 | // "sourceMap": true, /* Generates corresponding '.map' file. */ 16 | // "outFile": "./", /* Concatenate and emit output to single file. */ 17 | "outDir": "dist", /* Redirect output structure to the directory. */ 18 | "rootDir": "src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 19 | // "composite": true, /* Enable project compilation */ 20 | // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ 21 | // "removeComments": true, /* Do not emit comments to output. */ 22 | // "noEmit": true, /* Do not emit outputs. */ 23 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */ 24 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ 25 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ 26 | 27 | /* Strict Type-Checking Options */ 28 | "strict": true, /* Enable all strict type-checking options. */ 29 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ 30 | // "strictNullChecks": true, /* Enable strict null checks. */ 31 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */ 32 | // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ 33 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ 34 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ 35 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ 36 | 37 | /* Additional Checks */ 38 | // "noUnusedLocals": true, /* Report errors on unused locals. */ 39 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 40 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 41 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 42 | // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ 43 | 44 | /* Module Resolution Options */ 45 | // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ 46 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ 47 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ 48 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ 49 | // "typeRoots": [], /* List of folders to include type definitions from. */ 50 | // "types": [], /* Type declaration files to be included in compilation. */ 51 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 52 | "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 53 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ 54 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 55 | 56 | /* Source Map Options */ 57 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ 58 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 59 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ 60 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ 61 | 62 | /* Experimental Options */ 63 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 64 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ 65 | 66 | /* Advanced Options */ 67 | "skipLibCheck": true, /* Skip type checking of declaration files. */ 68 | "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { Account, Commitment, Connection, PublicKey } from '@solana/web3.js' 2 | import { Market } from '@project-serum/serum' 3 | import cors from 'cors' 4 | import express from 'express' 5 | import { Tedis, TedisPool } from 'tedis' 6 | import { URL } from 'url' 7 | import { decodeRecentEvents } from './events' 8 | import { MarketConfig, Trade, TradeSide } from './interfaces' 9 | import { RedisConfig, RedisStore, createRedisStore } from './redis' 10 | import { resolutions, sleep } from './time' 11 | import { 12 | Config, 13 | getMarketByBaseSymbolAndKind, 14 | GroupConfig, 15 | MangoClient, 16 | PerpMarketConfig, 17 | FillEvent, 18 | } from '@blockworks-foundation/mango-client' 19 | import BN from 'bn.js' 20 | import notify from './notify' 21 | import LRUCache from 'lru-cache' 22 | import * as dayjs from 'dayjs' 23 | 24 | const redisUrl = new URL(process.env.REDISCLOUD_URL || 'redis://localhost:6379') 25 | const host = redisUrl.hostname 26 | const port = parseInt(redisUrl.port) 27 | let password: string | undefined 28 | if (redisUrl.password !== '') { 29 | password = redisUrl.password 30 | } 31 | 32 | const network = 'mainnet-beta' 33 | const clusterUrl = 34 | process.env.RPC_ENDPOINT_URL || 'https://solana-api.projectserum.com' 35 | const fetchInterval = process.env.INTERVAL ? parseInt(process.env.INTERVAL) : 30 36 | 37 | console.log({ clusterUrl, fetchInterval }) 38 | 39 | const programIdV3 = '9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin' 40 | 41 | const nativeMarketsV3: Record = { 42 | 'BTC/USDT': 'C1EuT9VokAKLiW7i2ASnZUvxDoKuKkCpDDeNxAptuNe4', 43 | 'ETH/USDT': '7dLVkUfBVfCGkFhSXDCq1ukM9usathSgS716t643iFGF', 44 | 45 | 'BTC/USDC': 'A8YFbxQYFVqKZaoYJLLUVcQiWP7G2MeEgW5wsAQgMvFw', 46 | 'ETH/USDC': '4tSvZvnbyzHXLMTiFonMyxZoHmFqau1XArcRCVHLZ5gX', 47 | 'SOL/USDC': '9wFFyRfZBsuAha4YcuxcXLKwMxJR43S7fPfQLusDBzvT', 48 | 'SRM/USDC': 'ByRys5tuUWDgL73G8JBAEfkdFf8JWBzPBDHsBVQ5vbQA', 49 | 50 | 'MCAPS/USDC': 'GgzXqy6agt7nnfoPjAEAFpWqnUwLBK5r2acaAQqXiEM8', 51 | 'MNGO/USDC': '3d4rzwpy9iGdCZvgxcu7B1YocYffVLsQXPXkBZKt2zLc', 52 | 53 | 'USDT/USDC': '77quYg4MGneUdjgXCunt9GgM1usmrxKY31twEy3WHwcS', 54 | 'FTT/USDC': '2Pbh1CvRVku1TgewMfycemghf6sU9EyuFDcNXqvRmSxc', 55 | 'RAY/USDC': '2xiv8A5xrJ7RnGdxXB42uFEkYHJjszEhaJyKKt4WaLep', 56 | 'COPE/USDC': '6fc7v3PmjZG9Lk2XTot6BywGyYLkBQuzuFKd4FpCsPxk', 57 | 'SBR/USDC': 'HXBi8YBwbh4TXF6PjVw81m8Z3Cc4WBofvauj5SBFdgUs', 58 | 'STEP/USDC': '97qCB4cAVSTthvJu3eNoEx6AY6DLuRDtCoPm5Tdyg77S', 59 | 60 | /* 61 | 'CCAI/USDC': '7gZNLDbWE73ueAoHuAeFoSu7JqmorwCLpNTBXHtYSFTa', 62 | 'FIDA/USDC': 'E14BKBhDWD4EuTkWj1ooZezesGxMW8LPCps4W5PuzZJo', 63 | 'MER/USDC': 'G4LcexdCzzJUKZfqyVDQFzpkjhB1JoCNL8Kooxi9nJz5', 64 | 'renDOGE/USDC': '5FpKCWYXgHWZ9CdDMHjwxAfqxJLdw2PRXuAmtECkzADk', 65 | 'SLRS/USDC': '2Gx3UfV831BAh8uQv1FKSPKS9yajfeeD8GJ4ZNb2o2YP', 66 | 'SNY/USDC': 'DPfj2jYwPaezkCmUNm5SSYfkrkz8WFqwGLcxDDUsN3gA', 67 | 'TULIP/USDC': '8GufnKq7YnXKhnB3WNhgy5PzU9uvHbaaRrZWQK6ixPxW', 68 | */ 69 | } 70 | 71 | const symbolsByPk = Object.assign( 72 | {}, 73 | ...Object.entries(nativeMarketsV3).map(([a, b]) => ({ [b]: a })) 74 | ) 75 | 76 | async function collectEventQueue(m: MarketConfig, r: RedisConfig) { 77 | try { 78 | const store = await createRedisStore(r, m.marketName) 79 | const marketAddress = new PublicKey(m.marketPk) 80 | const programKey = new PublicKey(m.programId) 81 | const connection = new Connection(m.clusterUrl) 82 | const market = await Market.load( 83 | connection, 84 | marketAddress, 85 | undefined, 86 | programKey 87 | ) 88 | 89 | async function fetchTrades( 90 | lastSeqNum?: number 91 | ): Promise<[Trade[], number]> { 92 | const now = Date.now() 93 | const accountInfo = await connection.getAccountInfo( 94 | market['_decoded'].eventQueue 95 | ) 96 | if (accountInfo === null) { 97 | throw new Error( 98 | `Event queue account for market ${m.marketName} not found` 99 | ) 100 | } 101 | const { header, events } = decodeRecentEvents( 102 | accountInfo.data, 103 | lastSeqNum 104 | ) 105 | const takerFills = events.filter( 106 | (e) => e.eventFlags.fill && !e.eventFlags.maker 107 | ) 108 | const trades = takerFills 109 | .map((e) => market.parseFillEvent(e)) 110 | .map((e) => { 111 | return { 112 | price: e.price, 113 | side: e.side === 'buy' ? TradeSide.Buy : TradeSide.Sell, 114 | size: e.size, 115 | ts: now, 116 | } 117 | }) 118 | /* 119 | if (trades.length > 0) 120 | console.log({e: events.map(e => e.eventFlags), takerFills, trades}) 121 | */ 122 | return [trades, header.seqNum] 123 | } 124 | 125 | async function storeTrades(ts: Trade[]) { 126 | if (ts.length > 0) { 127 | console.log(m.marketName, ts.length) 128 | for (let i = 0; i < ts.length; i += 1) { 129 | await store.storeTrade(ts[i]) 130 | } 131 | } 132 | } 133 | 134 | while (true) { 135 | try { 136 | const lastSeqNum = await store.loadNumber('LASTSEQ') 137 | const [trades, currentSeqNum] = await fetchTrades(lastSeqNum) 138 | storeTrades(trades) 139 | store.storeNumber('LASTSEQ', currentSeqNum) 140 | } catch (e) { 141 | notify(`collectEventQueue ${m.marketName} ${e.toString()}`) 142 | } 143 | await sleep({ Seconds: fetchInterval }) 144 | } 145 | } catch (e) { 146 | notify(`collectEventQueue ${m.marketName} ${e.toString()}`) 147 | } 148 | } 149 | 150 | function collectMarketData(programId: string, markets: Record) { 151 | if (process.env.ROLE === 'web') { 152 | console.warn('ROLE=web detected. Not collecting market data.') 153 | return 154 | } 155 | 156 | Object.entries(markets).forEach((e) => { 157 | const [marketName, marketPk] = e 158 | const marketConfig = { 159 | clusterUrl, 160 | programId, 161 | marketName, 162 | marketPk, 163 | } as MarketConfig 164 | collectEventQueue(marketConfig, { host, port, password, db: 0 }) 165 | }) 166 | } 167 | 168 | collectMarketData(programIdV3, nativeMarketsV3) 169 | 170 | const groupConfig = Config.ids().getGroup('mainnet', 'mainnet.1') as GroupConfig 171 | 172 | async function collectPerpEventQueue(r: RedisConfig, m: PerpMarketConfig) { 173 | const connection = new Connection(clusterUrl, 'processed' as Commitment) 174 | 175 | const store = await createRedisStore(r, m.name) 176 | const mangoClient = new MangoClient(connection, groupConfig!.mangoProgramId) 177 | const mangoGroup = await mangoClient.getMangoGroup(groupConfig!.publicKey) 178 | const perpMarket = await mangoGroup.loadPerpMarket( 179 | connection, 180 | m.marketIndex, 181 | m.baseDecimals, 182 | m.quoteDecimals 183 | ) 184 | 185 | async function fetchTrades(lastSeqNum?: BN): Promise<[Trade[], BN]> { 186 | lastSeqNum ||= new BN(0) 187 | const now = Date.now() 188 | 189 | const eventQueue = await perpMarket.loadEventQueue(connection) 190 | const events = eventQueue.eventsSince(lastSeqNum) 191 | 192 | const trades = events 193 | .map((e) => e.fill) 194 | .filter((e) => !!e) 195 | .map((e) => perpMarket.parseFillEvent(e)) 196 | .map((e) => { 197 | return { 198 | price: e.price, 199 | side: e.takerSide === 'buy' ? TradeSide.Buy : TradeSide.Sell, 200 | size: e.quantity, 201 | ts: e.timestamp.toNumber() * 1000, 202 | } 203 | }) 204 | 205 | if (events.length > 0) { 206 | const last = events[events.length - 1] 207 | const latestSeqNum = 208 | last.fill?.seqNum || last.liquidate?.seqNum || last.out?.seqNum 209 | lastSeqNum = latestSeqNum 210 | } 211 | 212 | return [trades, lastSeqNum as BN] 213 | } 214 | 215 | async function storeTrades(ts: Trade[]) { 216 | if (ts.length > 0) { 217 | console.log(m.name, ts.length) 218 | for (let i = 0; i < ts.length; i += 1) { 219 | await store.storeTrade(ts[i]) 220 | } 221 | } 222 | } 223 | 224 | while (true) { 225 | try { 226 | const lastSeqNum = await store.loadNumber('LASTSEQ') 227 | const [trades, currentSeqNum] = await fetchTrades(new BN(lastSeqNum || 0)) 228 | storeTrades(trades) 229 | store.storeNumber('LASTSEQ', currentSeqNum.toString() as any) 230 | } catch (err) { 231 | notify(`collectPerpEventQueue ${m.name} ${err.toString()}`) 232 | } 233 | 234 | await sleep({ Seconds: fetchInterval }) 235 | } 236 | } 237 | 238 | if (process.env.ROLE === 'web') { 239 | console.warn('ROLE=web detected. Not collecting perp market data.') 240 | } else { 241 | groupConfig.perpMarkets.forEach((m) => 242 | collectPerpEventQueue({ host, port, password, db: 0 }, m) 243 | ) 244 | } 245 | 246 | const priceScales: any = { 247 | 'BTC/USDC': 1, 248 | 'BTC-PERP': 1, 249 | 250 | 'ETH/USDC': 10, 251 | 'ETH-PERP': 10, 252 | 253 | 'SOL/USDC': 1000, 254 | 'SOL-PERP': 1000, 255 | 256 | 'RAY/USDC': 1000, 257 | 'RAY-PERP': 1000, 258 | 259 | 'SRM/USDC': 1000, 260 | 'SRM-PERP': 1000, 261 | 262 | 'FTT/USDC': 1000, 263 | 'FTT-PERP': 1000, 264 | 265 | 'COPE/USDC': 1000, 266 | 'COPE-PERP': 1000, 267 | 268 | // 'ADA/USDC': 10000, 269 | 'ADA-PERP': 10000, 270 | 271 | 'MNGO/USDC': 10000, 272 | 'MNGO-PERP': 10000, 273 | 274 | 'USDT/USDC': 10000, 275 | // 'USDT-PERP': 10000, 276 | } 277 | 278 | const cache = new LRUCache( 279 | parseInt(process.env.CACHE_LIMIT ?? '500') 280 | ) 281 | 282 | const marketStores = {} as any 283 | 284 | Object.keys(priceScales).forEach((marketName) => { 285 | const conn = new Tedis({ 286 | host, 287 | port, 288 | password, 289 | }) 290 | 291 | const store = new RedisStore(conn, marketName) 292 | marketStores[marketName] = store 293 | 294 | // preload heavy markets 295 | if (['SOL/USDC', 'SOL-PERP', 'BTC-PERP'].includes(marketName)) { 296 | for (let i = 1; i < 60; ++i) { 297 | const day = dayjs.default().subtract(i, 'days') 298 | const key = store.keyForDay(+day) 299 | store 300 | .loadTrades(key, cache) 301 | .then(() => console.log('loaded', key)) 302 | .catch(() => console.error('could not cache', key)) 303 | } 304 | } 305 | }) 306 | 307 | const app = express() 308 | app.use(cors()) 309 | 310 | app.get('/tv/config', async (req, res) => { 311 | const response = { 312 | supported_resolutions: Object.keys(resolutions), 313 | supports_group_request: false, 314 | supports_marks: false, 315 | supports_search: true, 316 | supports_timescale_marks: false, 317 | } 318 | res.set('Cache-control', 'public, max-age=360') 319 | res.send(response) 320 | }) 321 | 322 | app.get('/tv/symbols', async (req, res) => { 323 | const symbol = req.query.symbol as string 324 | const response = { 325 | name: symbol, 326 | ticker: symbol, 327 | description: symbol, 328 | type: 'Spot', 329 | session: '24x7', 330 | exchange: 'Mango', 331 | listed_exchange: 'Mango', 332 | timezone: 'Etc/UTC', 333 | has_intraday: true, 334 | supported_resolutions: Object.keys(resolutions), 335 | minmov: 1, 336 | pricescale: priceScales[symbol] || 100, 337 | } 338 | res.set('Cache-control', 'public, max-age=360') 339 | res.send(response) 340 | }) 341 | 342 | app.get('/tv/history', async (req, res) => { 343 | // parse 344 | const marketName = req.query.symbol as string 345 | const market = 346 | nativeMarketsV3[marketName] || 347 | groupConfig.perpMarkets.find((m) => m.name === marketName) 348 | const resolution = resolutions[req.query.resolution as string] as number 349 | let from = parseInt(req.query.from as string) * 1000 350 | let to = parseInt(req.query.to as string) * 1000 351 | 352 | // validate 353 | const validSymbol = market != undefined 354 | const validResolution = resolution != undefined 355 | const validFrom = true || new Date(from).getFullYear() >= 2021 356 | if (!(validSymbol && validResolution && validFrom)) { 357 | const error = { s: 'error', validSymbol, validResolution, validFrom } 358 | console.error({ marketName, error }) 359 | res.status(404).send(error) 360 | return 361 | } 362 | 363 | // respond 364 | try { 365 | const store = marketStores[marketName] as RedisStore 366 | 367 | // snap candle boundaries to exact hours 368 | from = Math.floor(from / resolution) * resolution 369 | to = Math.ceil(to / resolution) * resolution 370 | 371 | // ensure the candle is at least one period in length 372 | if (from == to) { 373 | to += resolution 374 | } 375 | const candles = await store.loadCandles(resolution, from, to, cache) 376 | const response = { 377 | s: 'ok', 378 | t: candles.map((c) => c.start / 1000), 379 | c: candles.map((c) => c.close), 380 | o: candles.map((c) => c.open), 381 | h: candles.map((c) => c.high), 382 | l: candles.map((c) => c.low), 383 | v: candles.map((c) => c.volume), 384 | } 385 | res.set('Cache-control', 'public, max-age=1') 386 | res.send(response) 387 | return 388 | } catch (e) { 389 | notify(`tv/history ${marketName} ${e.toString()}`) 390 | const error = { s: 'error' } 391 | res.status(500).send(error) 392 | } 393 | }) 394 | 395 | app.get('/trades/address/:marketPk', async (req, res) => { 396 | // parse 397 | const marketPk = req.params.marketPk as string 398 | const marketName = 399 | symbolsByPk[marketPk] || 400 | groupConfig.perpMarkets.find((m) => m.publicKey.toBase58() === marketPk) 401 | ?.name 402 | 403 | // validate 404 | const validPk = marketName != undefined 405 | if (!validPk) { 406 | const error = { s: 'error', validPk } 407 | res.status(404).send(error) 408 | return 409 | } 410 | 411 | // respond 412 | try { 413 | const store = marketStores[marketName] as RedisStore 414 | const trades = await store.loadRecentTrades() 415 | const response = { 416 | success: true, 417 | data: trades.map((t) => { 418 | return { 419 | market: marketName, 420 | marketAddress: marketPk, 421 | price: t.price, 422 | size: t.size, 423 | side: t.side == TradeSide.Buy ? 'buy' : 'sell', 424 | time: t.ts, 425 | orderId: '', 426 | feeCost: 0, 427 | } 428 | }), 429 | } 430 | res.set('Cache-control', 'public, max-age=5') 431 | res.send(response) 432 | return 433 | } catch (e) { 434 | notify(`trades ${marketName} ${e.toString()}`) 435 | const error = { s: 'error' } 436 | res.status(500).send(error) 437 | } 438 | }) 439 | 440 | const httpPort = parseInt(process.env.PORT || '5000') 441 | app.listen(httpPort) 442 | 443 | process.on('unhandledRejection', (err: any, p: any) => { 444 | console.error(`Unhandled rejection: ${err} promise: ${p})`) 445 | }) 446 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/runtime@^7.10.5", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5": 6 | version "7.16.0" 7 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.0.tgz#e27b977f2e2088ba24748bf99b5e1dece64e4f0b" 8 | integrity sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw== 9 | dependencies: 10 | regenerator-runtime "^0.13.4" 11 | 12 | "@babel/runtime@^7.3.1": 13 | version "7.12.13" 14 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.13.tgz#0a21452352b02542db0ffb928ac2d3ca7cb6d66d" 15 | integrity sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw== 16 | dependencies: 17 | regenerator-runtime "^0.13.4" 18 | 19 | "@blockworks-foundation/mango-client@^3.0.11": 20 | version "3.2.4" 21 | resolved "https://registry.yarnpkg.com/@blockworks-foundation/mango-client/-/mango-client-3.2.4.tgz#93bd65a38b947bc4cb7b19deb5e528b190f8713a" 22 | integrity sha512-jXxUrsIovFaZNsEdWEdUiooH3w+ir0Hgp5EvgLCp1AErfs9hQCtjnkVygz2GhEgU+NAes9UrVYu/ozxLu1wmcA== 23 | dependencies: 24 | "@project-serum/anchor" "^0.16.2" 25 | "@project-serum/serum" "0.13.55" 26 | "@project-serum/sol-wallet-adapter" "^0.2.0" 27 | "@solana/spl-token" "^0.1.6" 28 | "@solana/web3.js" "1.21.0" 29 | axios "^0.21.1" 30 | big.js "^6.1.1" 31 | bigint-buffer "^1.1.5" 32 | bn.js "^5.2.0" 33 | buffer-layout "^1.2.1" 34 | dotenv "^10.0.0" 35 | dotenv-expand "^5.1.0" 36 | yargs "^17.0.1" 37 | 38 | "@ethersproject/bytes@^5.5.0": 39 | version "5.5.0" 40 | resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.5.0.tgz#cb11c526de657e7b45d2e0f0246fb3b9d29a601c" 41 | integrity sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog== 42 | dependencies: 43 | "@ethersproject/logger" "^5.5.0" 44 | 45 | "@ethersproject/logger@^5.5.0": 46 | version "5.5.0" 47 | resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d" 48 | integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg== 49 | 50 | "@ethersproject/sha2@^5.5.0": 51 | version "5.5.0" 52 | resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.5.0.tgz#a40a054c61f98fd9eee99af2c3cc6ff57ec24db7" 53 | integrity sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA== 54 | dependencies: 55 | "@ethersproject/bytes" "^5.5.0" 56 | "@ethersproject/logger" "^5.5.0" 57 | hash.js "1.1.7" 58 | 59 | "@project-serum/anchor@^0.11.1": 60 | version "0.11.1" 61 | resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.11.1.tgz#155bff2c70652eafdcfd5559c81a83bb19cec9ff" 62 | integrity sha512-oIdm4vTJkUy6GmE6JgqDAuQPKI7XM4TPJkjtoIzp69RZe0iAD9JP2XHx7lV1jLdYXeYHqDXfBt3zcq7W91K6PA== 63 | dependencies: 64 | "@project-serum/borsh" "^0.2.2" 65 | "@solana/web3.js" "^1.17.0" 66 | base64-js "^1.5.1" 67 | bn.js "^5.1.2" 68 | bs58 "^4.0.1" 69 | buffer-layout "^1.2.0" 70 | camelcase "^5.3.1" 71 | crypto-hash "^1.3.0" 72 | eventemitter3 "^4.0.7" 73 | find "^0.3.0" 74 | js-sha256 "^0.9.0" 75 | pako "^2.0.3" 76 | snake-case "^3.0.4" 77 | toml "^3.0.0" 78 | 79 | "@project-serum/anchor@^0.16.2": 80 | version "0.16.2" 81 | resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.16.2.tgz#b8b4ec4c749d59a224108f8d82ab68217ef752ae" 82 | integrity sha512-wOJwObd4wOZ5tRRMCKYjeMNsEmf7vuC71KQRnw6wthhErL8c/818n4gYIZCf/1ZPl/8WPruIlmtQHDSEyy2+0Q== 83 | dependencies: 84 | "@project-serum/borsh" "^0.2.2" 85 | "@solana/web3.js" "^1.17.0" 86 | base64-js "^1.5.1" 87 | bn.js "^5.1.2" 88 | bs58 "^4.0.1" 89 | buffer-layout "^1.2.0" 90 | camelcase "^5.3.1" 91 | crypto-hash "^1.3.0" 92 | eventemitter3 "^4.0.7" 93 | find "^0.3.0" 94 | js-sha256 "^0.9.0" 95 | pako "^2.0.3" 96 | snake-case "^3.0.4" 97 | toml "^3.0.0" 98 | 99 | "@project-serum/borsh@^0.2.2": 100 | version "0.2.2" 101 | resolved "https://registry.yarnpkg.com/@project-serum/borsh/-/borsh-0.2.2.tgz#63e558f2d6eb6ab79086bf499dea94da3182498f" 102 | integrity sha512-Ms+aWmGVW6bWd3b0+MWwoaYig2QD0F90h0uhr7AzY3dpCb5e2S6RsRW02vFTfa085pY2VLB7nTZNbFECQ1liTg== 103 | dependencies: 104 | bn.js "^5.1.2" 105 | buffer-layout "^1.2.0" 106 | 107 | "@project-serum/serum@0.13.55": 108 | version "0.13.55" 109 | resolved "https://registry.yarnpkg.com/@project-serum/serum/-/serum-0.13.55.tgz#2ac44fe7b07651274eb57ac54ea9325789df5dd7" 110 | integrity sha512-SPQ4NsuNbBJO3mLGnTYbjt47WCXoNIcW2C9xv0gNXyG62dxgONsAEEgErKv1gT34hWCMPsXFSpatnX6ppriq7w== 111 | dependencies: 112 | "@project-serum/anchor" "^0.11.1" 113 | "@solana/spl-token" "^0.1.6" 114 | "@solana/web3.js" "^1.21.0" 115 | bn.js "^5.1.2" 116 | buffer-layout "^1.2.0" 117 | 118 | "@project-serum/serum@^0.13.20": 119 | version "0.13.23" 120 | resolved "https://registry.yarnpkg.com/@project-serum/serum/-/serum-0.13.23.tgz#70a4206e3fe926ef2f6e41da1b562399a20b3c9d" 121 | integrity sha512-Atg2sSdQLEp4JIg4jp3vy1T9u9O5wObVTcGe0hX7e7zDmDc4zxBbTJXxdvMRxaz4pfrETyithX//zIMyIHMA8Q== 122 | dependencies: 123 | "@solana/web3.js" "0.86.1" 124 | bn.js "^5.1.2" 125 | buffer-layout "^1.2.0" 126 | 127 | "@project-serum/sol-wallet-adapter@^0.2.0": 128 | version "0.2.6" 129 | resolved "https://registry.yarnpkg.com/@project-serum/sol-wallet-adapter/-/sol-wallet-adapter-0.2.6.tgz#b4cd25a566294354427c97c26d716112b91a0107" 130 | integrity sha512-cpIb13aWPW8y4KzkZAPDgw+Kb+DXjCC6rZoH74MGm3I/6e/zKyGnfAuW5olb2zxonFqsYgnv7ev8MQnvSgJ3/g== 131 | dependencies: 132 | bs58 "^4.0.1" 133 | eventemitter3 "^4.0.7" 134 | 135 | "@solana/buffer-layout@^3.0.0": 136 | version "3.0.0" 137 | resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-3.0.0.tgz#b9353caeb9a1589cb77a1b145bcb1a9a93114326" 138 | integrity sha512-MVdgAKKL39tEs0l8je0hKaXLQFb7Rdfb0Xg2LjFZd8Lfdazkg6xiS98uAZrEKvaoF3i4M95ei9RydkGIDMeo3w== 139 | dependencies: 140 | buffer "~6.0.3" 141 | 142 | "@solana/spl-token@^0.1.6": 143 | version "0.1.8" 144 | resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.1.8.tgz#f06e746341ef8d04165e21fc7f555492a2a0faa6" 145 | integrity sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ== 146 | dependencies: 147 | "@babel/runtime" "^7.10.5" 148 | "@solana/web3.js" "^1.21.0" 149 | bn.js "^5.1.0" 150 | buffer "6.0.3" 151 | buffer-layout "^1.2.0" 152 | dotenv "10.0.0" 153 | 154 | "@solana/web3.js@0.86.1": 155 | version "0.86.1" 156 | resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-0.86.1.tgz#034a2cef742569f74dfc9960dfbcabc92e674b08" 157 | integrity sha512-9mjWs17ym7PIm7bHA37wnnYyD7rIVHwkx1RI6BzGhMO5h8E+HlZM8ISLgOx+NItg8XRCfFhlrVgJTzK4om1s0g== 158 | dependencies: 159 | "@babel/runtime" "^7.3.1" 160 | bn.js "^5.0.0" 161 | bs58 "^4.0.1" 162 | buffer "^5.4.3" 163 | buffer-layout "^1.2.0" 164 | crypto-hash "^1.2.2" 165 | esdoc-inject-style-plugin "^1.0.0" 166 | jayson "^3.0.1" 167 | keccak "^3.0.1" 168 | mz "^2.7.0" 169 | node-fetch "^2.2.0" 170 | npm-run-all "^4.1.5" 171 | rpc-websockets "^7.4.2" 172 | secp256k1 "^4.0.2" 173 | superstruct "^0.8.3" 174 | tweetnacl "^1.0.0" 175 | ws "^7.0.0" 176 | 177 | "@solana/web3.js@1.21.0": 178 | version "1.21.0" 179 | resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.21.0.tgz#4f98edea38d4cb3ae4d2ea49a050b0ec09508023" 180 | integrity sha512-x1NXlF92tEjxuTxS0u4n9JV17UKk0Dn2L+qSWGvKOb4iWhzApDj6wicJsrGdSbGdxnZ7eciQ/SNn3zB4ydUllA== 181 | dependencies: 182 | "@babel/runtime" "^7.12.5" 183 | "@solana/buffer-layout" "^3.0.0" 184 | bn.js "^5.0.0" 185 | borsh "^0.4.0" 186 | bs58 "^4.0.1" 187 | buffer "6.0.1" 188 | crypto-hash "^1.2.2" 189 | jayson "^3.4.4" 190 | js-sha3 "^0.8.0" 191 | node-fetch "^2.6.1" 192 | rpc-websockets "^7.4.2" 193 | secp256k1 "^4.0.2" 194 | superstruct "^0.14.2" 195 | tweetnacl "^1.0.0" 196 | 197 | "@solana/web3.js@^0.91.0": 198 | version "0.91.3" 199 | resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-0.91.3.tgz#826c9ee01040177798b963bf5fb2b0f0662560bb" 200 | integrity sha512-eMKJFDJewiTUEBHyQpk1h6aNQ6d1ac+hyzwzRxQKWzquQgbvNIKBTM2FxmeYF5Os1Vc9SEYG2+AyIWTtdjm0zw== 201 | dependencies: 202 | "@babel/runtime" "^7.12.5" 203 | bn.js "^5.0.0" 204 | bs58 "^4.0.1" 205 | buffer "6.0.1" 206 | buffer-layout "^1.2.0" 207 | crypto-hash "^1.2.2" 208 | jayson "^3.4.4" 209 | js-sha3 "^0.8.0" 210 | node-fetch "^2.6.1" 211 | rpc-websockets "^7.4.2" 212 | secp256k1 "^4.0.2" 213 | superstruct "^0.8.3" 214 | tweetnacl "^1.0.0" 215 | 216 | "@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0": 217 | version "1.30.2" 218 | resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.30.2.tgz#e85da75e0825dc64f53eb64a1ff0115b27bec135" 219 | integrity sha512-hznCj+rkfvM5taRP3Z+l5lumB7IQnDrB4l55Wpsg4kDU9Zds8pE5YOH5Z9bbF/pUzZJKQjyBjnY/6kScBm3Ugg== 220 | dependencies: 221 | "@babel/runtime" "^7.12.5" 222 | "@ethersproject/sha2" "^5.5.0" 223 | "@solana/buffer-layout" "^3.0.0" 224 | bn.js "^5.0.0" 225 | borsh "^0.4.0" 226 | bs58 "^4.0.1" 227 | buffer "6.0.1" 228 | cross-fetch "^3.1.4" 229 | jayson "^3.4.4" 230 | js-sha3 "^0.8.0" 231 | rpc-websockets "^7.4.2" 232 | secp256k1 "^4.0.2" 233 | superstruct "^0.14.2" 234 | tweetnacl "^1.0.0" 235 | 236 | "@types/bn.js@5.1.0", "@types/bn.js@^4.11.5", "@types/bn.js@^5.1.0": 237 | version "5.1.0" 238 | resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" 239 | integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== 240 | dependencies: 241 | "@types/node" "*" 242 | 243 | "@types/body-parser@*": 244 | version "1.19.0" 245 | resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" 246 | integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== 247 | dependencies: 248 | "@types/connect" "*" 249 | "@types/node" "*" 250 | 251 | "@types/connect@*": 252 | version "3.4.34" 253 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.34.tgz#170a40223a6d666006d93ca128af2beb1d9b1901" 254 | integrity sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ== 255 | dependencies: 256 | "@types/node" "*" 257 | 258 | "@types/connect@^3.4.33": 259 | version "3.4.35" 260 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" 261 | integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== 262 | dependencies: 263 | "@types/node" "*" 264 | 265 | "@types/cors@^2.8.10": 266 | version "2.8.10" 267 | resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.10.tgz#61cc8469849e5bcdd0c7044122265c39cec10cf4" 268 | integrity sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ== 269 | 270 | "@types/express-serve-static-core@^4.17.18": 271 | version "4.17.18" 272 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.18.tgz#8371e260f40e0e1ca0c116a9afcd9426fa094c40" 273 | integrity sha512-m4JTwx5RUBNZvky/JJ8swEJPKFd8si08pPF2PfizYjGZOKr/svUWPcoUmLow6MmPzhasphB7gSTINY67xn3JNA== 274 | dependencies: 275 | "@types/node" "*" 276 | "@types/qs" "*" 277 | "@types/range-parser" "*" 278 | 279 | "@types/express-serve-static-core@^4.17.9": 280 | version "4.17.24" 281 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.24.tgz#ea41f93bf7e0d59cd5a76665068ed6aab6815c07" 282 | integrity sha512-3UJuW+Qxhzwjq3xhwXm2onQcFHn76frIYVbTu+kn24LFxI+dEhdfISDFovPB8VpEgW8oQCTpRuCe+0zJxB7NEA== 283 | dependencies: 284 | "@types/node" "*" 285 | "@types/qs" "*" 286 | "@types/range-parser" "*" 287 | 288 | "@types/express@^4.17.11": 289 | version "4.17.11" 290 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.11.tgz#debe3caa6f8e5fcda96b47bd54e2f40c4ee59545" 291 | integrity sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg== 292 | dependencies: 293 | "@types/body-parser" "*" 294 | "@types/express-serve-static-core" "^4.17.18" 295 | "@types/qs" "*" 296 | "@types/serve-static" "*" 297 | 298 | "@types/jasmine@^3.6.3": 299 | version "3.6.3" 300 | resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.6.3.tgz#824df555b8a5114f91619e78d8f59624d6f23050" 301 | integrity sha512-5QKAG8WfC9XrOgYLXPrxv1G2IIUE6zDyzTWamhNWJO0LqPRUbZ0q0zGHDhDJ7MpFloUuyME/jpBIdPjq3/P3jA== 302 | 303 | "@types/lodash@^4.14.159": 304 | version "4.14.176" 305 | resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.176.tgz#641150fc1cda36fbfa329de603bbb175d7ee20c0" 306 | integrity sha512-xZmuPTa3rlZoIbtDUyJKZQimJV3bxCmzMIO2c9Pz9afyDro6kr7R79GwcB6mRhuoPmV2p1Vb66WOJH7F886WKQ== 307 | 308 | "@types/lru-cache@^5.1.1": 309 | version "5.1.1" 310 | resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" 311 | integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== 312 | 313 | "@types/mime@^1": 314 | version "1.3.2" 315 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" 316 | integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== 317 | 318 | "@types/node@*": 319 | version "16.11.6" 320 | resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.6.tgz#6bef7a2a0ad684cf6e90fcfe31cecabd9ce0a3ae" 321 | integrity sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w== 322 | 323 | "@types/node@^12.12.54": 324 | version "12.20.36" 325 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.36.tgz#5bd54d2383e714fc4d2c258107ee70c5bad86d0c" 326 | integrity sha512-+5haRZ9uzI7rYqzDznXgkuacqb6LJhAti8mzZKWxIXn/WEtvB+GHVJ7AuMwcN1HMvXOSJcrvA6PPoYHYOYYebA== 327 | 328 | "@types/node@^14.14.28": 329 | version "14.14.28" 330 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.28.tgz#cade4b64f8438f588951a6b35843ce536853f25b" 331 | integrity sha512-lg55ArB+ZiHHbBBttLpzD07akz0QPrZgUODNakeC09i62dnrywr9mFErHuaPlB6I7z+sEbK+IYmplahvplCj2g== 332 | 333 | "@types/qs@*": 334 | version "6.9.7" 335 | resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" 336 | integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== 337 | 338 | "@types/range-parser@*": 339 | version "1.2.4" 340 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" 341 | integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== 342 | 343 | "@types/serve-static@*": 344 | version "1.13.9" 345 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.9.tgz#aacf28a85a05ee29a11fb7c3ead935ac56f33e4e" 346 | integrity sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA== 347 | dependencies: 348 | "@types/mime" "^1" 349 | "@types/node" "*" 350 | 351 | "@types/strip-bom@^3.0.0": 352 | version "3.0.0" 353 | resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" 354 | integrity sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I= 355 | 356 | "@types/strip-json-comments@0.0.30": 357 | version "0.0.30" 358 | resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" 359 | integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== 360 | 361 | "@types/ws@^7.4.4": 362 | version "7.4.7" 363 | resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" 364 | integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== 365 | dependencies: 366 | "@types/node" "*" 367 | 368 | JSONStream@^1.3.5: 369 | version "1.3.5" 370 | resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" 371 | integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== 372 | dependencies: 373 | jsonparse "^1.2.0" 374 | through ">=2.2.7 <3" 375 | 376 | accepts@~1.3.7: 377 | version "1.3.7" 378 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" 379 | integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== 380 | dependencies: 381 | mime-types "~2.1.24" 382 | negotiator "0.6.2" 383 | 384 | ansi-regex@^2.0.0: 385 | version "2.1.1" 386 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 387 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 388 | 389 | ansi-regex@^3.0.0: 390 | version "3.0.0" 391 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 392 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 393 | 394 | ansi-regex@^5.0.1: 395 | version "5.0.1" 396 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 397 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 398 | 399 | ansi-styles@^3.2.1: 400 | version "3.2.1" 401 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 402 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 403 | dependencies: 404 | color-convert "^1.9.0" 405 | 406 | ansi-styles@^4.0.0: 407 | version "4.3.0" 408 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 409 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 410 | dependencies: 411 | color-convert "^2.0.1" 412 | 413 | any-promise@^1.0.0: 414 | version "1.3.0" 415 | resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" 416 | integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= 417 | 418 | anymatch@~3.1.1: 419 | version "3.1.1" 420 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" 421 | integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== 422 | dependencies: 423 | normalize-path "^3.0.0" 424 | picomatch "^2.0.4" 425 | 426 | arg@^4.1.0: 427 | version "4.1.3" 428 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 429 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 430 | 431 | array-find-index@^1.0.1: 432 | version "1.0.2" 433 | resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" 434 | integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= 435 | 436 | array-flatten@1.1.1: 437 | version "1.1.1" 438 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 439 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= 440 | 441 | axios@^0.21.1: 442 | version "0.21.1" 443 | resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" 444 | integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== 445 | dependencies: 446 | follow-redirects "^1.10.0" 447 | 448 | balanced-match@^1.0.0: 449 | version "1.0.0" 450 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 451 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 452 | 453 | base-x@^3.0.2: 454 | version "3.0.9" 455 | resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" 456 | integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== 457 | dependencies: 458 | safe-buffer "^5.0.1" 459 | 460 | base64-js@^1.3.1, base64-js@^1.5.1: 461 | version "1.5.1" 462 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" 463 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 464 | 465 | big.js@^6.1.1: 466 | version "6.1.1" 467 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-6.1.1.tgz#63b35b19dc9775c94991ee5db7694880655d5537" 468 | integrity sha512-1vObw81a8ylZO5ePrtMay0n018TcftpTA5HFKDaSuiUDBo8biRBtjIobw60OpwuvrGk+FsxKamqN4cnmj/eXdg== 469 | 470 | bigint-buffer@^1.1.5: 471 | version "1.1.5" 472 | resolved "https://registry.yarnpkg.com/bigint-buffer/-/bigint-buffer-1.1.5.tgz#d038f31c8e4534c1f8d0015209bf34b4fa6dd442" 473 | integrity sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA== 474 | dependencies: 475 | bindings "^1.3.0" 476 | 477 | binary-extensions@^2.0.0: 478 | version "2.2.0" 479 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 480 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 481 | 482 | bindings@^1.3.0: 483 | version "1.5.0" 484 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" 485 | integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== 486 | dependencies: 487 | file-uri-to-path "1.0.0" 488 | 489 | bn.js@5.1.3, bn.js@^4.11.9, bn.js@^5.0.0, bn.js@^5.1.0, bn.js@^5.1.2, bn.js@^5.2.0: 490 | version "5.1.3" 491 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" 492 | integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== 493 | 494 | body-parser@1.19.0: 495 | version "1.19.0" 496 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" 497 | integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== 498 | dependencies: 499 | bytes "3.1.0" 500 | content-type "~1.0.4" 501 | debug "2.6.9" 502 | depd "~1.1.2" 503 | http-errors "1.7.2" 504 | iconv-lite "0.4.24" 505 | on-finished "~2.3.0" 506 | qs "6.7.0" 507 | raw-body "2.4.0" 508 | type-is "~1.6.17" 509 | 510 | boolbase@~1.0.0: 511 | version "1.0.0" 512 | resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" 513 | integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= 514 | 515 | borsh@^0.4.0: 516 | version "0.4.0" 517 | resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.4.0.tgz#9dd6defe741627f1315eac2a73df61421f6ddb9f" 518 | integrity sha512-aX6qtLya3K0AkT66CmYWCCDr77qsE9arV05OmdFpmat9qu8Pg9J5tBUPDztAW5fNh/d/MyVG/OYziP52Ndzx1g== 519 | dependencies: 520 | "@types/bn.js" "^4.11.5" 521 | bn.js "^5.0.0" 522 | bs58 "^4.0.0" 523 | text-encoding-utf-8 "^1.0.2" 524 | 525 | brace-expansion@^1.1.7: 526 | version "1.1.11" 527 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 528 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 529 | dependencies: 530 | balanced-match "^1.0.0" 531 | concat-map "0.0.1" 532 | 533 | braces@~3.0.2: 534 | version "3.0.2" 535 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 536 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 537 | dependencies: 538 | fill-range "^7.0.1" 539 | 540 | brorand@^1.1.0: 541 | version "1.1.0" 542 | resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" 543 | integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= 544 | 545 | bs58@^4.0.0, bs58@^4.0.1: 546 | version "4.0.1" 547 | resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" 548 | integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= 549 | dependencies: 550 | base-x "^3.0.2" 551 | 552 | buffer-from@^1.0.0: 553 | version "1.1.1" 554 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 555 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 556 | 557 | buffer-layout@^1.2.0, buffer-layout@^1.2.1: 558 | version "1.2.2" 559 | resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5" 560 | integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA== 561 | 562 | buffer@6.0.1: 563 | version "6.0.1" 564 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.1.tgz#3cbea8c1463e5a0779e30b66d4c88c6ffa182ac2" 565 | integrity sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ== 566 | dependencies: 567 | base64-js "^1.3.1" 568 | ieee754 "^1.2.1" 569 | 570 | buffer@6.0.3, buffer@~6.0.3: 571 | version "6.0.3" 572 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" 573 | integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== 574 | dependencies: 575 | base64-js "^1.3.1" 576 | ieee754 "^1.2.1" 577 | 578 | buffer@^5.4.3: 579 | version "5.7.1" 580 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" 581 | integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== 582 | dependencies: 583 | base64-js "^1.3.1" 584 | ieee754 "^1.1.13" 585 | 586 | bufferutil@^4.0.1: 587 | version "4.0.5" 588 | resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" 589 | integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== 590 | dependencies: 591 | node-gyp-build "^4.3.0" 592 | 593 | bytes@3.1.0: 594 | version "3.1.0" 595 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" 596 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== 597 | 598 | call-bind@^1.0.0, call-bind@^1.0.2: 599 | version "1.0.2" 600 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 601 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 602 | dependencies: 603 | function-bind "^1.1.1" 604 | get-intrinsic "^1.0.2" 605 | 606 | camelcase-keys@^2.0.0: 607 | version "2.1.0" 608 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" 609 | integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= 610 | dependencies: 611 | camelcase "^2.0.0" 612 | map-obj "^1.0.0" 613 | 614 | camelcase@^2.0.0: 615 | version "2.1.1" 616 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" 617 | integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= 618 | 619 | camelcase@^4.1.0: 620 | version "4.1.0" 621 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" 622 | integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= 623 | 624 | camelcase@^5.3.1: 625 | version "5.3.1" 626 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 627 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 628 | 629 | chalk@^2.4.1: 630 | version "2.4.2" 631 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 632 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 633 | dependencies: 634 | ansi-styles "^3.2.1" 635 | escape-string-regexp "^1.0.5" 636 | supports-color "^5.3.0" 637 | 638 | cheerio@0.22.0: 639 | version "0.22.0" 640 | resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" 641 | integrity sha1-qbqoYKP5tZWmuBsahocxIe06Jp4= 642 | dependencies: 643 | css-select "~1.2.0" 644 | dom-serializer "~0.1.0" 645 | entities "~1.1.1" 646 | htmlparser2 "^3.9.1" 647 | lodash.assignin "^4.0.9" 648 | lodash.bind "^4.1.4" 649 | lodash.defaults "^4.0.1" 650 | lodash.filter "^4.4.0" 651 | lodash.flatten "^4.2.0" 652 | lodash.foreach "^4.3.0" 653 | lodash.map "^4.4.0" 654 | lodash.merge "^4.4.0" 655 | lodash.pick "^4.2.1" 656 | lodash.reduce "^4.4.0" 657 | lodash.reject "^4.4.0" 658 | lodash.some "^4.4.0" 659 | 660 | chokidar@^3.4.0: 661 | version "3.5.1" 662 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" 663 | integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== 664 | dependencies: 665 | anymatch "~3.1.1" 666 | braces "~3.0.2" 667 | glob-parent "~5.1.0" 668 | is-binary-path "~2.1.0" 669 | is-glob "~4.0.1" 670 | normalize-path "~3.0.0" 671 | readdirp "~3.5.0" 672 | optionalDependencies: 673 | fsevents "~2.3.1" 674 | 675 | circular-json@^0.5.9: 676 | version "0.5.9" 677 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.5.9.tgz#932763ae88f4f7dead7a0d09c8a51a4743a53b1d" 678 | integrity sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ== 679 | 680 | cliui@^3.2.0: 681 | version "3.2.0" 682 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" 683 | integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= 684 | dependencies: 685 | string-width "^1.0.1" 686 | strip-ansi "^3.0.1" 687 | wrap-ansi "^2.0.0" 688 | 689 | cliui@^7.0.2: 690 | version "7.0.4" 691 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 692 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 693 | dependencies: 694 | string-width "^4.2.0" 695 | strip-ansi "^6.0.0" 696 | wrap-ansi "^7.0.0" 697 | 698 | code-point-at@^1.0.0: 699 | version "1.1.0" 700 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 701 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= 702 | 703 | color-convert@^1.9.0: 704 | version "1.9.3" 705 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 706 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 707 | dependencies: 708 | color-name "1.1.3" 709 | 710 | color-convert@^2.0.1: 711 | version "2.0.1" 712 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 713 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 714 | dependencies: 715 | color-name "~1.1.4" 716 | 717 | color-name@1.1.3: 718 | version "1.1.3" 719 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 720 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 721 | 722 | color-name@~1.1.4: 723 | version "1.1.4" 724 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 725 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 726 | 727 | colors@1.4.0: 728 | version "1.4.0" 729 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" 730 | integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== 731 | 732 | commander@^2.20.3: 733 | version "2.20.3" 734 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 735 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 736 | 737 | concat-map@0.0.1: 738 | version "0.0.1" 739 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 740 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 741 | 742 | content-disposition@0.5.3: 743 | version "0.5.3" 744 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" 745 | integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== 746 | dependencies: 747 | safe-buffer "5.1.2" 748 | 749 | content-type@~1.0.4: 750 | version "1.0.4" 751 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 752 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 753 | 754 | cookie-signature@1.0.6: 755 | version "1.0.6" 756 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 757 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= 758 | 759 | cookie@0.4.0: 760 | version "0.4.0" 761 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" 762 | integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== 763 | 764 | cors@^2.8.5: 765 | version "2.8.5" 766 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 767 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== 768 | dependencies: 769 | object-assign "^4" 770 | vary "^1" 771 | 772 | create-require@^1.1.0: 773 | version "1.1.1" 774 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" 775 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 776 | 777 | cross-fetch@^3.1.4: 778 | version "3.1.4" 779 | resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.4.tgz#9723f3a3a247bf8b89039f3a380a9244e8fa2f39" 780 | integrity sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ== 781 | dependencies: 782 | node-fetch "2.6.1" 783 | 784 | cross-spawn@^5.0.1: 785 | version "5.1.0" 786 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 787 | integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= 788 | dependencies: 789 | lru-cache "^4.0.1" 790 | shebang-command "^1.2.0" 791 | which "^1.2.9" 792 | 793 | cross-spawn@^6.0.5: 794 | version "6.0.5" 795 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 796 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 797 | dependencies: 798 | nice-try "^1.0.4" 799 | path-key "^2.0.1" 800 | semver "^5.5.0" 801 | shebang-command "^1.2.0" 802 | which "^1.2.9" 803 | 804 | crypto-hash@^1.2.2, crypto-hash@^1.3.0: 805 | version "1.3.0" 806 | resolved "https://registry.yarnpkg.com/crypto-hash/-/crypto-hash-1.3.0.tgz#b402cb08f4529e9f4f09346c3e275942f845e247" 807 | integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg== 808 | 809 | css-select@~1.2.0: 810 | version "1.2.0" 811 | resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" 812 | integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= 813 | dependencies: 814 | boolbase "~1.0.0" 815 | css-what "2.1" 816 | domutils "1.5.1" 817 | nth-check "~1.0.1" 818 | 819 | css-what@2.1: 820 | version "2.1.3" 821 | resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" 822 | integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== 823 | 824 | currently-unhandled@^0.4.1: 825 | version "0.4.1" 826 | resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" 827 | integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= 828 | dependencies: 829 | array-find-index "^1.0.1" 830 | 831 | dateformat@~1.0.4-1.2.3: 832 | version "1.0.12" 833 | resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" 834 | integrity sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk= 835 | dependencies: 836 | get-stdin "^4.0.1" 837 | meow "^3.3.0" 838 | 839 | dayjs@^1.10.7: 840 | version "1.10.7" 841 | resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" 842 | integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== 843 | 844 | debug@2.6.9: 845 | version "2.6.9" 846 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 847 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 848 | dependencies: 849 | ms "2.0.0" 850 | 851 | decamelize@^1.1.1, decamelize@^1.1.2: 852 | version "1.2.0" 853 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 854 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 855 | 856 | define-properties@^1.1.3: 857 | version "1.1.3" 858 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 859 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 860 | dependencies: 861 | object-keys "^1.0.12" 862 | 863 | delay@^5.0.0: 864 | version "5.0.0" 865 | resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" 866 | integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== 867 | 868 | depd@~1.1.2: 869 | version "1.1.2" 870 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 871 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 872 | 873 | destroy@~1.0.4: 874 | version "1.0.4" 875 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 876 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= 877 | 878 | diff@^4.0.1: 879 | version "4.0.2" 880 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 881 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 882 | 883 | dom-serializer@0: 884 | version "0.2.2" 885 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" 886 | integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== 887 | dependencies: 888 | domelementtype "^2.0.1" 889 | entities "^2.0.0" 890 | 891 | dom-serializer@~0.1.0: 892 | version "0.1.1" 893 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" 894 | integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== 895 | dependencies: 896 | domelementtype "^1.3.0" 897 | entities "^1.1.1" 898 | 899 | domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: 900 | version "1.3.1" 901 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" 902 | integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== 903 | 904 | domelementtype@^2.0.1: 905 | version "2.1.0" 906 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" 907 | integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== 908 | 909 | domhandler@^2.3.0: 910 | version "2.4.2" 911 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" 912 | integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== 913 | dependencies: 914 | domelementtype "1" 915 | 916 | domutils@1.5.1: 917 | version "1.5.1" 918 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" 919 | integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= 920 | dependencies: 921 | dom-serializer "0" 922 | domelementtype "1" 923 | 924 | domutils@^1.5.1: 925 | version "1.7.0" 926 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" 927 | integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== 928 | dependencies: 929 | dom-serializer "0" 930 | domelementtype "1" 931 | 932 | dot-case@^3.0.4: 933 | version "3.0.4" 934 | resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" 935 | integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== 936 | dependencies: 937 | no-case "^3.0.4" 938 | tslib "^2.0.3" 939 | 940 | dotenv-expand@^5.1.0: 941 | version "5.1.0" 942 | resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" 943 | integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== 944 | 945 | dotenv@10.0.0, dotenv@^10.0.0: 946 | version "10.0.0" 947 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" 948 | integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== 949 | 950 | dynamic-dedupe@^0.3.0: 951 | version "0.3.0" 952 | resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz#06e44c223f5e4e94d78ef9db23a6515ce2f962a1" 953 | integrity sha1-BuRMIj9eTpTXjvnbI6ZRXOL5YqE= 954 | dependencies: 955 | xtend "^4.0.0" 956 | 957 | ee-first@1.1.1: 958 | version "1.1.1" 959 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 960 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 961 | 962 | elliptic@^6.5.2: 963 | version "6.5.4" 964 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" 965 | integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== 966 | dependencies: 967 | bn.js "^4.11.9" 968 | brorand "^1.1.0" 969 | hash.js "^1.0.0" 970 | hmac-drbg "^1.0.1" 971 | inherits "^2.0.4" 972 | minimalistic-assert "^1.0.1" 973 | minimalistic-crypto-utils "^1.0.1" 974 | 975 | emoji-regex@^8.0.0: 976 | version "8.0.0" 977 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 978 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 979 | 980 | encodeurl@~1.0.2: 981 | version "1.0.2" 982 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 983 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 984 | 985 | entities@^1.1.1, entities@~1.1.1: 986 | version "1.1.2" 987 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" 988 | integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== 989 | 990 | entities@^2.0.0: 991 | version "2.2.0" 992 | resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" 993 | integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== 994 | 995 | error-ex@^1.2.0, error-ex@^1.3.1: 996 | version "1.3.2" 997 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 998 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 999 | dependencies: 1000 | is-arrayish "^0.2.1" 1001 | 1002 | es-abstract@^1.18.0-next.1: 1003 | version "1.18.0-next.2" 1004 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.2.tgz#088101a55f0541f595e7e057199e27ddc8f3a5c2" 1005 | integrity sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw== 1006 | dependencies: 1007 | call-bind "^1.0.2" 1008 | es-to-primitive "^1.2.1" 1009 | function-bind "^1.1.1" 1010 | get-intrinsic "^1.0.2" 1011 | has "^1.0.3" 1012 | has-symbols "^1.0.1" 1013 | is-callable "^1.2.2" 1014 | is-negative-zero "^2.0.1" 1015 | is-regex "^1.1.1" 1016 | object-inspect "^1.9.0" 1017 | object-keys "^1.1.1" 1018 | object.assign "^4.1.2" 1019 | string.prototype.trimend "^1.0.3" 1020 | string.prototype.trimstart "^1.0.3" 1021 | 1022 | es-to-primitive@^1.2.1: 1023 | version "1.2.1" 1024 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 1025 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 1026 | dependencies: 1027 | is-callable "^1.1.4" 1028 | is-date-object "^1.0.1" 1029 | is-symbol "^1.0.2" 1030 | 1031 | es6-promise@^4.0.3: 1032 | version "4.2.8" 1033 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" 1034 | integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== 1035 | 1036 | es6-promisify@^5.0.0: 1037 | version "5.0.0" 1038 | resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" 1039 | integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= 1040 | dependencies: 1041 | es6-promise "^4.0.3" 1042 | 1043 | escalade@^3.1.1: 1044 | version "3.1.1" 1045 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 1046 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 1047 | 1048 | escape-html@~1.0.3: 1049 | version "1.0.3" 1050 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 1051 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 1052 | 1053 | escape-string-regexp@^1.0.5: 1054 | version "1.0.5" 1055 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1056 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 1057 | 1058 | esdoc-inject-style-plugin@^1.0.0: 1059 | version "1.0.0" 1060 | resolved "https://registry.yarnpkg.com/esdoc-inject-style-plugin/-/esdoc-inject-style-plugin-1.0.0.tgz#a13597368bb9fb89c365e066495caf97a4decbb1" 1061 | integrity sha1-oTWXNou5+4nDZeBmSVyvl6Tey7E= 1062 | dependencies: 1063 | cheerio "0.22.0" 1064 | fs-extra "1.0.0" 1065 | 1066 | etag@~1.8.1: 1067 | version "1.8.1" 1068 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 1069 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 1070 | 1071 | eventemitter3@^4.0.7: 1072 | version "4.0.7" 1073 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" 1074 | integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== 1075 | 1076 | execa@^0.7.0: 1077 | version "0.7.0" 1078 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" 1079 | integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= 1080 | dependencies: 1081 | cross-spawn "^5.0.1" 1082 | get-stream "^3.0.0" 1083 | is-stream "^1.1.0" 1084 | npm-run-path "^2.0.0" 1085 | p-finally "^1.0.0" 1086 | signal-exit "^3.0.0" 1087 | strip-eof "^1.0.0" 1088 | 1089 | express@^4.17.1: 1090 | version "4.17.1" 1091 | resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" 1092 | integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== 1093 | dependencies: 1094 | accepts "~1.3.7" 1095 | array-flatten "1.1.1" 1096 | body-parser "1.19.0" 1097 | content-disposition "0.5.3" 1098 | content-type "~1.0.4" 1099 | cookie "0.4.0" 1100 | cookie-signature "1.0.6" 1101 | debug "2.6.9" 1102 | depd "~1.1.2" 1103 | encodeurl "~1.0.2" 1104 | escape-html "~1.0.3" 1105 | etag "~1.8.1" 1106 | finalhandler "~1.1.2" 1107 | fresh "0.5.2" 1108 | merge-descriptors "1.0.1" 1109 | methods "~1.1.2" 1110 | on-finished "~2.3.0" 1111 | parseurl "~1.3.3" 1112 | path-to-regexp "0.1.7" 1113 | proxy-addr "~2.0.5" 1114 | qs "6.7.0" 1115 | range-parser "~1.2.1" 1116 | safe-buffer "5.1.2" 1117 | send "0.17.1" 1118 | serve-static "1.14.1" 1119 | setprototypeof "1.1.1" 1120 | statuses "~1.5.0" 1121 | type-is "~1.6.18" 1122 | utils-merge "1.0.1" 1123 | vary "~1.1.2" 1124 | 1125 | eyes@^0.1.8: 1126 | version "0.1.8" 1127 | resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" 1128 | integrity sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A= 1129 | 1130 | file-uri-to-path@1.0.0: 1131 | version "1.0.0" 1132 | resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" 1133 | integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== 1134 | 1135 | fill-range@^7.0.1: 1136 | version "7.0.1" 1137 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1138 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1139 | dependencies: 1140 | to-regex-range "^5.0.1" 1141 | 1142 | finalhandler@~1.1.2: 1143 | version "1.1.2" 1144 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 1145 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== 1146 | dependencies: 1147 | debug "2.6.9" 1148 | encodeurl "~1.0.2" 1149 | escape-html "~1.0.3" 1150 | on-finished "~2.3.0" 1151 | parseurl "~1.3.3" 1152 | statuses "~1.5.0" 1153 | unpipe "~1.0.0" 1154 | 1155 | find-up@^1.0.0: 1156 | version "1.1.2" 1157 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 1158 | integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= 1159 | dependencies: 1160 | path-exists "^2.0.0" 1161 | pinkie-promise "^2.0.0" 1162 | 1163 | find-up@^2.0.0: 1164 | version "2.1.0" 1165 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 1166 | integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= 1167 | dependencies: 1168 | locate-path "^2.0.0" 1169 | 1170 | find@^0.3.0: 1171 | version "0.3.0" 1172 | resolved "https://registry.yarnpkg.com/find/-/find-0.3.0.tgz#4082e8fc8d8320f1a382b5e4f521b9bc50775cb8" 1173 | integrity sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw== 1174 | dependencies: 1175 | traverse-chain "~0.1.0" 1176 | 1177 | follow-redirects@^1.10.0: 1178 | version "1.14.2" 1179 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.2.tgz#cecb825047c00f5e66b142f90fed4f515dec789b" 1180 | integrity sha512-yLR6WaE2lbF0x4K2qE2p9PEXKLDjUjnR/xmjS3wHAYxtlsI9MLLBJUZirAHKzUZDGLxje7w/cXR49WOUo4rbsA== 1181 | 1182 | forwarded@~0.1.2: 1183 | version "0.1.2" 1184 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 1185 | integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= 1186 | 1187 | fresh@0.5.2: 1188 | version "0.5.2" 1189 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 1190 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 1191 | 1192 | fs-extra@1.0.0: 1193 | version "1.0.0" 1194 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" 1195 | integrity sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA= 1196 | dependencies: 1197 | graceful-fs "^4.1.2" 1198 | jsonfile "^2.1.0" 1199 | klaw "^1.0.0" 1200 | 1201 | fs.realpath@^1.0.0: 1202 | version "1.0.0" 1203 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1204 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 1205 | 1206 | fsevents@~2.3.1: 1207 | version "2.3.2" 1208 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 1209 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 1210 | 1211 | function-bind@^1.1.1: 1212 | version "1.1.1" 1213 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1214 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1215 | 1216 | get-caller-file@^1.0.1: 1217 | version "1.0.3" 1218 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" 1219 | integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== 1220 | 1221 | get-caller-file@^2.0.5: 1222 | version "2.0.5" 1223 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1224 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1225 | 1226 | get-intrinsic@^1.0.2: 1227 | version "1.1.1" 1228 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" 1229 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== 1230 | dependencies: 1231 | function-bind "^1.1.1" 1232 | has "^1.0.3" 1233 | has-symbols "^1.0.1" 1234 | 1235 | get-stdin@^4.0.1: 1236 | version "4.0.1" 1237 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" 1238 | integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= 1239 | 1240 | get-stream@^3.0.0: 1241 | version "3.0.0" 1242 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 1243 | integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= 1244 | 1245 | glob-parent@~5.1.0: 1246 | version "5.1.1" 1247 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" 1248 | integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== 1249 | dependencies: 1250 | is-glob "^4.0.1" 1251 | 1252 | glob@^7.1.3, glob@^7.1.6: 1253 | version "7.1.6" 1254 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 1255 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 1256 | dependencies: 1257 | fs.realpath "^1.0.0" 1258 | inflight "^1.0.4" 1259 | inherits "2" 1260 | minimatch "^3.0.4" 1261 | once "^1.3.0" 1262 | path-is-absolute "^1.0.0" 1263 | 1264 | graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: 1265 | version "4.2.6" 1266 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" 1267 | integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== 1268 | 1269 | has-flag@^3.0.0: 1270 | version "3.0.0" 1271 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1272 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1273 | 1274 | has-symbols@^1.0.1: 1275 | version "1.0.1" 1276 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" 1277 | integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== 1278 | 1279 | has@^1.0.3: 1280 | version "1.0.3" 1281 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1282 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1283 | dependencies: 1284 | function-bind "^1.1.1" 1285 | 1286 | hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: 1287 | version "1.1.7" 1288 | resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" 1289 | integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== 1290 | dependencies: 1291 | inherits "^2.0.3" 1292 | minimalistic-assert "^1.0.1" 1293 | 1294 | hmac-drbg@^1.0.1: 1295 | version "1.0.1" 1296 | resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" 1297 | integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= 1298 | dependencies: 1299 | hash.js "^1.0.3" 1300 | minimalistic-assert "^1.0.0" 1301 | minimalistic-crypto-utils "^1.0.1" 1302 | 1303 | hosted-git-info@^2.1.4: 1304 | version "2.8.8" 1305 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" 1306 | integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== 1307 | 1308 | htmlparser2@^3.9.1: 1309 | version "3.10.1" 1310 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" 1311 | integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== 1312 | dependencies: 1313 | domelementtype "^1.3.1" 1314 | domhandler "^2.3.0" 1315 | domutils "^1.5.1" 1316 | entities "^1.1.1" 1317 | inherits "^2.0.1" 1318 | readable-stream "^3.1.1" 1319 | 1320 | http-errors@1.7.2: 1321 | version "1.7.2" 1322 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" 1323 | integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== 1324 | dependencies: 1325 | depd "~1.1.2" 1326 | inherits "2.0.3" 1327 | setprototypeof "1.1.1" 1328 | statuses ">= 1.5.0 < 2" 1329 | toidentifier "1.0.0" 1330 | 1331 | http-errors@~1.7.2: 1332 | version "1.7.3" 1333 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" 1334 | integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== 1335 | dependencies: 1336 | depd "~1.1.2" 1337 | inherits "2.0.4" 1338 | setprototypeof "1.1.1" 1339 | statuses ">= 1.5.0 < 2" 1340 | toidentifier "1.0.0" 1341 | 1342 | iconv-lite@0.4.24: 1343 | version "0.4.24" 1344 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1345 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 1346 | dependencies: 1347 | safer-buffer ">= 2.1.2 < 3" 1348 | 1349 | ieee754@^1.1.13, ieee754@^1.2.1: 1350 | version "1.2.1" 1351 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" 1352 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 1353 | 1354 | indent-string@^2.1.0: 1355 | version "2.1.0" 1356 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" 1357 | integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= 1358 | dependencies: 1359 | repeating "^2.0.0" 1360 | 1361 | inflight@^1.0.4: 1362 | version "1.0.6" 1363 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1364 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1365 | dependencies: 1366 | once "^1.3.0" 1367 | wrappy "1" 1368 | 1369 | inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: 1370 | version "2.0.4" 1371 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1372 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1373 | 1374 | inherits@2.0.3: 1375 | version "2.0.3" 1376 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1377 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 1378 | 1379 | invert-kv@^1.0.0: 1380 | version "1.0.0" 1381 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" 1382 | integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= 1383 | 1384 | ipaddr.js@1.9.1: 1385 | version "1.9.1" 1386 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 1387 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 1388 | 1389 | is-arrayish@^0.2.1: 1390 | version "0.2.1" 1391 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1392 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 1393 | 1394 | is-binary-path@~2.1.0: 1395 | version "2.1.0" 1396 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 1397 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1398 | dependencies: 1399 | binary-extensions "^2.0.0" 1400 | 1401 | is-callable@^1.1.4, is-callable@^1.2.2: 1402 | version "1.2.3" 1403 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" 1404 | integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== 1405 | 1406 | is-core-module@^2.2.0: 1407 | version "2.2.0" 1408 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" 1409 | integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== 1410 | dependencies: 1411 | has "^1.0.3" 1412 | 1413 | is-date-object@^1.0.1: 1414 | version "1.0.2" 1415 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" 1416 | integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== 1417 | 1418 | is-extglob@^2.1.1: 1419 | version "2.1.1" 1420 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1421 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1422 | 1423 | is-finite@^1.0.0: 1424 | version "1.1.0" 1425 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" 1426 | integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== 1427 | 1428 | is-fullwidth-code-point@^1.0.0: 1429 | version "1.0.0" 1430 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1431 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= 1432 | dependencies: 1433 | number-is-nan "^1.0.0" 1434 | 1435 | is-fullwidth-code-point@^2.0.0: 1436 | version "2.0.0" 1437 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1438 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 1439 | 1440 | is-fullwidth-code-point@^3.0.0: 1441 | version "3.0.0" 1442 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1443 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1444 | 1445 | is-glob@^4.0.1, is-glob@~4.0.1: 1446 | version "4.0.1" 1447 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 1448 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 1449 | dependencies: 1450 | is-extglob "^2.1.1" 1451 | 1452 | is-negative-zero@^2.0.1: 1453 | version "2.0.1" 1454 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" 1455 | integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== 1456 | 1457 | is-number@^7.0.0: 1458 | version "7.0.0" 1459 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1460 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1461 | 1462 | is-regex@^1.1.1: 1463 | version "1.1.2" 1464 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" 1465 | integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== 1466 | dependencies: 1467 | call-bind "^1.0.2" 1468 | has-symbols "^1.0.1" 1469 | 1470 | is-stream@^1.1.0: 1471 | version "1.1.0" 1472 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1473 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 1474 | 1475 | is-symbol@^1.0.2: 1476 | version "1.0.3" 1477 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" 1478 | integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== 1479 | dependencies: 1480 | has-symbols "^1.0.1" 1481 | 1482 | is-utf8@^0.2.0: 1483 | version "0.2.1" 1484 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 1485 | integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= 1486 | 1487 | isexe@^2.0.0: 1488 | version "2.0.0" 1489 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1490 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1491 | 1492 | isomorphic-ws@^4.0.1: 1493 | version "4.0.1" 1494 | resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" 1495 | integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== 1496 | 1497 | jasmine-core@~3.6.0: 1498 | version "3.6.0" 1499 | resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.6.0.tgz#491f3bb23941799c353ceb7a45b38a950ebc5a20" 1500 | integrity sha512-8uQYa7zJN8hq9z+g8z1bqCfdC8eoDAeVnM5sfqs7KHv9/ifoJ500m018fpFc7RDaO6SWCLCXwo/wPSNcdYTgcw== 1501 | 1502 | jasmine-spec-reporter@^6.0.0: 1503 | version "6.0.0" 1504 | resolved "https://registry.yarnpkg.com/jasmine-spec-reporter/-/jasmine-spec-reporter-6.0.0.tgz#3b9c85689676a351f343ba8dd6d3957f11a4bf1d" 1505 | integrity sha512-MvTOVoMxDZAftQYBApIlSfKnGMzi9cj351nXeqtnZTuXffPlbONN31+Es7F+Ke4okUeQ2xISukt4U1npfzLVrQ== 1506 | dependencies: 1507 | colors "1.4.0" 1508 | 1509 | jasmine-ts@^0.3.0: 1510 | version "0.3.0" 1511 | resolved "https://registry.yarnpkg.com/jasmine-ts/-/jasmine-ts-0.3.0.tgz#d604b4624cf11e2edda75bbd702dbfb3e0df33ab" 1512 | integrity sha512-K5joodjVOh3bnD06CNXC8P5htDq/r0Rhjv66ECOpdIGFLly8kM7V+X/GXcd9kv+xO+tIq3q9Y8B5OF6yr/iiDw== 1513 | dependencies: 1514 | yargs "^8.0.2" 1515 | 1516 | jasmine@^3.6.4: 1517 | version "3.6.4" 1518 | resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-3.6.4.tgz#1f8e4a0d5028a2dc66942b73b9fef4c32be97ad5" 1519 | integrity sha512-hIeOou6y0BgCOKYgXYveQvlY+PTHgDPajFf+vLCYbMTQ+VjAP9+EQv0nuC9+gyCAAWISRFauB1XUb9kFuOKtcQ== 1520 | dependencies: 1521 | glob "^7.1.6" 1522 | jasmine-core "~3.6.0" 1523 | 1524 | jayson@^3.0.1: 1525 | version "3.4.4" 1526 | resolved "https://registry.yarnpkg.com/jayson/-/jayson-3.4.4.tgz#dcedffba0c02785c4aa22dbff8c28966cae59773" 1527 | integrity sha512-fgQflh+Qnhdv9fjxTnpTsa2WUG/dgyeKQzIh5MJ77Qv2sqFyyAZn7mTUYgPjJMFjsKfb4HNsSBh6ktJeeQiAGQ== 1528 | dependencies: 1529 | "@types/connect" "^3.4.33" 1530 | "@types/express-serve-static-core" "^4.17.9" 1531 | "@types/lodash" "^4.14.159" 1532 | "@types/node" "^12.12.54" 1533 | JSONStream "^1.3.5" 1534 | commander "^2.20.3" 1535 | es6-promisify "^5.0.0" 1536 | eyes "^0.1.8" 1537 | json-stringify-safe "^5.0.1" 1538 | lodash "^4.17.20" 1539 | uuid "^3.4.0" 1540 | 1541 | jayson@^3.4.4: 1542 | version "3.6.5" 1543 | resolved "https://registry.yarnpkg.com/jayson/-/jayson-3.6.5.tgz#e560bcad4daf098c7391f46ba8efc9d6f34a4102" 1544 | integrity sha512-wmOjX+eQcnCDyPF4KORomaIj9wj3h0B5VEbeD0+2VHfTfErB+h1zpR7oBkgCZp36AFjp3+a4CLz6U72BYpFHAw== 1545 | dependencies: 1546 | "@types/connect" "^3.4.33" 1547 | "@types/express-serve-static-core" "^4.17.9" 1548 | "@types/lodash" "^4.14.159" 1549 | "@types/node" "^12.12.54" 1550 | "@types/ws" "^7.4.4" 1551 | JSONStream "^1.3.5" 1552 | commander "^2.20.3" 1553 | delay "^5.0.0" 1554 | es6-promisify "^5.0.0" 1555 | eyes "^0.1.8" 1556 | isomorphic-ws "^4.0.1" 1557 | json-stringify-safe "^5.0.1" 1558 | lodash "^4.17.20" 1559 | uuid "^3.4.0" 1560 | ws "^7.4.5" 1561 | 1562 | js-sha256@^0.9.0: 1563 | version "0.9.0" 1564 | resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" 1565 | integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== 1566 | 1567 | js-sha3@^0.8.0: 1568 | version "0.8.0" 1569 | resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" 1570 | integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== 1571 | 1572 | json-parse-better-errors@^1.0.1: 1573 | version "1.0.2" 1574 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 1575 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== 1576 | 1577 | json-stringify-safe@^5.0.1: 1578 | version "5.0.1" 1579 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1580 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= 1581 | 1582 | jsonfile@^2.1.0: 1583 | version "2.4.0" 1584 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" 1585 | integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= 1586 | optionalDependencies: 1587 | graceful-fs "^4.1.6" 1588 | 1589 | jsonparse@^1.2.0: 1590 | version "1.3.1" 1591 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" 1592 | integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= 1593 | 1594 | keccak@^3.0.1: 1595 | version "3.0.1" 1596 | resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" 1597 | integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== 1598 | dependencies: 1599 | node-addon-api "^2.0.0" 1600 | node-gyp-build "^4.2.0" 1601 | 1602 | kind-of@^6.0.2: 1603 | version "6.0.3" 1604 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" 1605 | integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== 1606 | 1607 | klaw@^1.0.0: 1608 | version "1.3.1" 1609 | resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" 1610 | integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= 1611 | optionalDependencies: 1612 | graceful-fs "^4.1.9" 1613 | 1614 | lcid@^1.0.0: 1615 | version "1.0.0" 1616 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" 1617 | integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= 1618 | dependencies: 1619 | invert-kv "^1.0.0" 1620 | 1621 | load-json-file@^1.0.0: 1622 | version "1.1.0" 1623 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" 1624 | integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= 1625 | dependencies: 1626 | graceful-fs "^4.1.2" 1627 | parse-json "^2.2.0" 1628 | pify "^2.0.0" 1629 | pinkie-promise "^2.0.0" 1630 | strip-bom "^2.0.0" 1631 | 1632 | load-json-file@^2.0.0: 1633 | version "2.0.0" 1634 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" 1635 | integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= 1636 | dependencies: 1637 | graceful-fs "^4.1.2" 1638 | parse-json "^2.2.0" 1639 | pify "^2.0.0" 1640 | strip-bom "^3.0.0" 1641 | 1642 | load-json-file@^4.0.0: 1643 | version "4.0.0" 1644 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" 1645 | integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= 1646 | dependencies: 1647 | graceful-fs "^4.1.2" 1648 | parse-json "^4.0.0" 1649 | pify "^3.0.0" 1650 | strip-bom "^3.0.0" 1651 | 1652 | locate-path@^2.0.0: 1653 | version "2.0.0" 1654 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 1655 | integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= 1656 | dependencies: 1657 | p-locate "^2.0.0" 1658 | path-exists "^3.0.0" 1659 | 1660 | lodash.assignin@^4.0.9: 1661 | version "4.2.0" 1662 | resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" 1663 | integrity sha1-uo31+4QesKPoBEIysOJjqNxqKKI= 1664 | 1665 | lodash.bind@^4.1.4: 1666 | version "4.2.1" 1667 | resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" 1668 | integrity sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU= 1669 | 1670 | lodash.defaults@^4.0.1: 1671 | version "4.2.0" 1672 | resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" 1673 | integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= 1674 | 1675 | lodash.filter@^4.4.0: 1676 | version "4.6.0" 1677 | resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" 1678 | integrity sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4= 1679 | 1680 | lodash.flatten@^4.2.0: 1681 | version "4.4.0" 1682 | resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" 1683 | integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= 1684 | 1685 | lodash.foreach@^4.3.0: 1686 | version "4.5.0" 1687 | resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" 1688 | integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= 1689 | 1690 | lodash.map@^4.4.0: 1691 | version "4.6.0" 1692 | resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" 1693 | integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= 1694 | 1695 | lodash.merge@^4.4.0: 1696 | version "4.6.2" 1697 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1698 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1699 | 1700 | lodash.pick@^4.2.1: 1701 | version "4.4.0" 1702 | resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" 1703 | integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= 1704 | 1705 | lodash.reduce@^4.4.0: 1706 | version "4.6.0" 1707 | resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" 1708 | integrity sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs= 1709 | 1710 | lodash.reject@^4.4.0: 1711 | version "4.6.0" 1712 | resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" 1713 | integrity sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU= 1714 | 1715 | lodash.some@^4.4.0: 1716 | version "4.6.0" 1717 | resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" 1718 | integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= 1719 | 1720 | lodash@^4.17.20: 1721 | version "4.17.21" 1722 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1723 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1724 | 1725 | loud-rejection@^1.0.0: 1726 | version "1.6.0" 1727 | resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" 1728 | integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= 1729 | dependencies: 1730 | currently-unhandled "^0.4.1" 1731 | signal-exit "^3.0.0" 1732 | 1733 | lower-case@^2.0.2: 1734 | version "2.0.2" 1735 | resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" 1736 | integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== 1737 | dependencies: 1738 | tslib "^2.0.3" 1739 | 1740 | lru-cache@^4.0.1: 1741 | version "4.1.5" 1742 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" 1743 | integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== 1744 | dependencies: 1745 | pseudomap "^1.0.2" 1746 | yallist "^2.1.2" 1747 | 1748 | lru-cache@^5.1.0: 1749 | version "5.1.1" 1750 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" 1751 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== 1752 | dependencies: 1753 | yallist "^3.0.2" 1754 | 1755 | make-error@^1.1.1: 1756 | version "1.3.6" 1757 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 1758 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 1759 | 1760 | map-obj@^1.0.0, map-obj@^1.0.1: 1761 | version "1.0.1" 1762 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" 1763 | integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= 1764 | 1765 | media-typer@0.3.0: 1766 | version "0.3.0" 1767 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 1768 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 1769 | 1770 | mem@^1.1.0: 1771 | version "1.1.0" 1772 | resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" 1773 | integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= 1774 | dependencies: 1775 | mimic-fn "^1.0.0" 1776 | 1777 | memorystream@^0.3.1: 1778 | version "0.3.1" 1779 | resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" 1780 | integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= 1781 | 1782 | meow@^3.3.0: 1783 | version "3.7.0" 1784 | resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" 1785 | integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= 1786 | dependencies: 1787 | camelcase-keys "^2.0.0" 1788 | decamelize "^1.1.2" 1789 | loud-rejection "^1.0.0" 1790 | map-obj "^1.0.1" 1791 | minimist "^1.1.3" 1792 | normalize-package-data "^2.3.4" 1793 | object-assign "^4.0.1" 1794 | read-pkg-up "^1.0.1" 1795 | redent "^1.0.0" 1796 | trim-newlines "^1.0.0" 1797 | 1798 | merge-descriptors@1.0.1: 1799 | version "1.0.1" 1800 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 1801 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 1802 | 1803 | methods@~1.1.2: 1804 | version "1.1.2" 1805 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 1806 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= 1807 | 1808 | mime-db@1.45.0: 1809 | version "1.45.0" 1810 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" 1811 | integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== 1812 | 1813 | mime-types@~2.1.24: 1814 | version "2.1.28" 1815 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" 1816 | integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== 1817 | dependencies: 1818 | mime-db "1.45.0" 1819 | 1820 | mime@1.6.0: 1821 | version "1.6.0" 1822 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 1823 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 1824 | 1825 | mimic-fn@^1.0.0: 1826 | version "1.2.0" 1827 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" 1828 | integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== 1829 | 1830 | minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: 1831 | version "1.0.1" 1832 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" 1833 | integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== 1834 | 1835 | minimalistic-crypto-utils@^1.0.1: 1836 | version "1.0.1" 1837 | resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" 1838 | integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= 1839 | 1840 | minimatch@^3.0.4: 1841 | version "3.0.4" 1842 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1843 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1844 | dependencies: 1845 | brace-expansion "^1.1.7" 1846 | 1847 | minimist@^1.1.3, minimist@^1.2.5: 1848 | version "1.2.5" 1849 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 1850 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 1851 | 1852 | mkdirp@^1.0.4: 1853 | version "1.0.4" 1854 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" 1855 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== 1856 | 1857 | ms@2.0.0: 1858 | version "2.0.0" 1859 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1860 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1861 | 1862 | ms@2.1.1: 1863 | version "2.1.1" 1864 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 1865 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 1866 | 1867 | mz@^2.7.0: 1868 | version "2.7.0" 1869 | resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" 1870 | integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== 1871 | dependencies: 1872 | any-promise "^1.0.0" 1873 | object-assign "^4.0.1" 1874 | thenify-all "^1.0.0" 1875 | 1876 | negotiator@0.6.2: 1877 | version "0.6.2" 1878 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" 1879 | integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== 1880 | 1881 | nice-try@^1.0.4: 1882 | version "1.0.5" 1883 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 1884 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 1885 | 1886 | no-case@^3.0.4: 1887 | version "3.0.4" 1888 | resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" 1889 | integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== 1890 | dependencies: 1891 | lower-case "^2.0.2" 1892 | tslib "^2.0.3" 1893 | 1894 | node-addon-api@^2.0.0: 1895 | version "2.0.2" 1896 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" 1897 | integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== 1898 | 1899 | node-fetch@2.6.1, node-fetch@^2.2.0: 1900 | version "2.6.1" 1901 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" 1902 | integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== 1903 | 1904 | node-fetch@^2.6.1: 1905 | version "2.6.6" 1906 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89" 1907 | integrity sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA== 1908 | dependencies: 1909 | whatwg-url "^5.0.0" 1910 | 1911 | node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: 1912 | version "4.3.0" 1913 | resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3" 1914 | integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== 1915 | 1916 | normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: 1917 | version "2.5.0" 1918 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" 1919 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 1920 | dependencies: 1921 | hosted-git-info "^2.1.4" 1922 | resolve "^1.10.0" 1923 | semver "2 || 3 || 4 || 5" 1924 | validate-npm-package-license "^3.0.1" 1925 | 1926 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1927 | version "3.0.0" 1928 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1929 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1930 | 1931 | npm-run-all@^4.1.5: 1932 | version "4.1.5" 1933 | resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" 1934 | integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== 1935 | dependencies: 1936 | ansi-styles "^3.2.1" 1937 | chalk "^2.4.1" 1938 | cross-spawn "^6.0.5" 1939 | memorystream "^0.3.1" 1940 | minimatch "^3.0.4" 1941 | pidtree "^0.3.0" 1942 | read-pkg "^3.0.0" 1943 | shell-quote "^1.6.1" 1944 | string.prototype.padend "^3.0.0" 1945 | 1946 | npm-run-path@^2.0.0: 1947 | version "2.0.2" 1948 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 1949 | integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= 1950 | dependencies: 1951 | path-key "^2.0.0" 1952 | 1953 | nth-check@~1.0.1: 1954 | version "1.0.2" 1955 | resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" 1956 | integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== 1957 | dependencies: 1958 | boolbase "~1.0.0" 1959 | 1960 | number-is-nan@^1.0.0: 1961 | version "1.0.1" 1962 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1963 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 1964 | 1965 | object-assign@^4, object-assign@^4.0.1: 1966 | version "4.1.1" 1967 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1968 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1969 | 1970 | object-inspect@^1.9.0: 1971 | version "1.9.0" 1972 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" 1973 | integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== 1974 | 1975 | object-keys@^1.0.12, object-keys@^1.1.1: 1976 | version "1.1.1" 1977 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 1978 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1979 | 1980 | object.assign@^4.1.2: 1981 | version "4.1.2" 1982 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" 1983 | integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== 1984 | dependencies: 1985 | call-bind "^1.0.0" 1986 | define-properties "^1.1.3" 1987 | has-symbols "^1.0.1" 1988 | object-keys "^1.1.1" 1989 | 1990 | on-finished@~2.3.0: 1991 | version "2.3.0" 1992 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 1993 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 1994 | dependencies: 1995 | ee-first "1.1.1" 1996 | 1997 | once@^1.3.0: 1998 | version "1.4.0" 1999 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 2000 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 2001 | dependencies: 2002 | wrappy "1" 2003 | 2004 | os-locale@^2.0.0: 2005 | version "2.1.0" 2006 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" 2007 | integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== 2008 | dependencies: 2009 | execa "^0.7.0" 2010 | lcid "^1.0.0" 2011 | mem "^1.1.0" 2012 | 2013 | p-finally@^1.0.0: 2014 | version "1.0.0" 2015 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 2016 | integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= 2017 | 2018 | p-limit@^1.1.0: 2019 | version "1.3.0" 2020 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" 2021 | integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== 2022 | dependencies: 2023 | p-try "^1.0.0" 2024 | 2025 | p-locate@^2.0.0: 2026 | version "2.0.0" 2027 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 2028 | integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= 2029 | dependencies: 2030 | p-limit "^1.1.0" 2031 | 2032 | p-try@^1.0.0: 2033 | version "1.0.0" 2034 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" 2035 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= 2036 | 2037 | pako@^2.0.3: 2038 | version "2.0.4" 2039 | resolved "https://registry.yarnpkg.com/pako/-/pako-2.0.4.tgz#6cebc4bbb0b6c73b0d5b8d7e8476e2b2fbea576d" 2040 | integrity sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg== 2041 | 2042 | parse-json@^2.2.0: 2043 | version "2.2.0" 2044 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 2045 | integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= 2046 | dependencies: 2047 | error-ex "^1.2.0" 2048 | 2049 | parse-json@^4.0.0: 2050 | version "4.0.0" 2051 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 2052 | integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= 2053 | dependencies: 2054 | error-ex "^1.3.1" 2055 | json-parse-better-errors "^1.0.1" 2056 | 2057 | parseurl@~1.3.3: 2058 | version "1.3.3" 2059 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 2060 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 2061 | 2062 | path-exists@^2.0.0: 2063 | version "2.1.0" 2064 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 2065 | integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= 2066 | dependencies: 2067 | pinkie-promise "^2.0.0" 2068 | 2069 | path-exists@^3.0.0: 2070 | version "3.0.0" 2071 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 2072 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 2073 | 2074 | path-is-absolute@^1.0.0: 2075 | version "1.0.1" 2076 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2077 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 2078 | 2079 | path-key@^2.0.0, path-key@^2.0.1: 2080 | version "2.0.1" 2081 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 2082 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 2083 | 2084 | path-parse@^1.0.6: 2085 | version "1.0.6" 2086 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 2087 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 2088 | 2089 | path-to-regexp@0.1.7: 2090 | version "0.1.7" 2091 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 2092 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= 2093 | 2094 | path-type@^1.0.0: 2095 | version "1.1.0" 2096 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" 2097 | integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= 2098 | dependencies: 2099 | graceful-fs "^4.1.2" 2100 | pify "^2.0.0" 2101 | pinkie-promise "^2.0.0" 2102 | 2103 | path-type@^2.0.0: 2104 | version "2.0.0" 2105 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" 2106 | integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= 2107 | dependencies: 2108 | pify "^2.0.0" 2109 | 2110 | path-type@^3.0.0: 2111 | version "3.0.0" 2112 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" 2113 | integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== 2114 | dependencies: 2115 | pify "^3.0.0" 2116 | 2117 | picomatch@^2.0.4, picomatch@^2.2.1: 2118 | version "2.2.2" 2119 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 2120 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 2121 | 2122 | pidtree@^0.3.0: 2123 | version "0.3.1" 2124 | resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" 2125 | integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== 2126 | 2127 | pify@^2.0.0: 2128 | version "2.3.0" 2129 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 2130 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= 2131 | 2132 | pify@^3.0.0: 2133 | version "3.0.0" 2134 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 2135 | integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= 2136 | 2137 | pinkie-promise@^2.0.0: 2138 | version "2.0.1" 2139 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 2140 | integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= 2141 | dependencies: 2142 | pinkie "^2.0.0" 2143 | 2144 | pinkie@^2.0.0: 2145 | version "2.0.4" 2146 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 2147 | integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= 2148 | 2149 | proxy-addr@~2.0.5: 2150 | version "2.0.6" 2151 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" 2152 | integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== 2153 | dependencies: 2154 | forwarded "~0.1.2" 2155 | ipaddr.js "1.9.1" 2156 | 2157 | pseudomap@^1.0.2: 2158 | version "1.0.2" 2159 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 2160 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= 2161 | 2162 | qs@6.7.0: 2163 | version "6.7.0" 2164 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" 2165 | integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== 2166 | 2167 | range-parser@~1.2.1: 2168 | version "1.2.1" 2169 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 2170 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 2171 | 2172 | raw-body@2.4.0: 2173 | version "2.4.0" 2174 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" 2175 | integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== 2176 | dependencies: 2177 | bytes "3.1.0" 2178 | http-errors "1.7.2" 2179 | iconv-lite "0.4.24" 2180 | unpipe "1.0.0" 2181 | 2182 | read-pkg-up@^1.0.1: 2183 | version "1.0.1" 2184 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" 2185 | integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= 2186 | dependencies: 2187 | find-up "^1.0.0" 2188 | read-pkg "^1.0.0" 2189 | 2190 | read-pkg-up@^2.0.0: 2191 | version "2.0.0" 2192 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" 2193 | integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= 2194 | dependencies: 2195 | find-up "^2.0.0" 2196 | read-pkg "^2.0.0" 2197 | 2198 | read-pkg@^1.0.0: 2199 | version "1.1.0" 2200 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" 2201 | integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= 2202 | dependencies: 2203 | load-json-file "^1.0.0" 2204 | normalize-package-data "^2.3.2" 2205 | path-type "^1.0.0" 2206 | 2207 | read-pkg@^2.0.0: 2208 | version "2.0.0" 2209 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" 2210 | integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= 2211 | dependencies: 2212 | load-json-file "^2.0.0" 2213 | normalize-package-data "^2.3.2" 2214 | path-type "^2.0.0" 2215 | 2216 | read-pkg@^3.0.0: 2217 | version "3.0.0" 2218 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" 2219 | integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= 2220 | dependencies: 2221 | load-json-file "^4.0.0" 2222 | normalize-package-data "^2.3.2" 2223 | path-type "^3.0.0" 2224 | 2225 | readable-stream@^3.1.1: 2226 | version "3.6.0" 2227 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" 2228 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== 2229 | dependencies: 2230 | inherits "^2.0.3" 2231 | string_decoder "^1.1.1" 2232 | util-deprecate "^1.0.1" 2233 | 2234 | readdirp@~3.5.0: 2235 | version "3.5.0" 2236 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" 2237 | integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== 2238 | dependencies: 2239 | picomatch "^2.2.1" 2240 | 2241 | redent@^1.0.0: 2242 | version "1.0.0" 2243 | resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" 2244 | integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= 2245 | dependencies: 2246 | indent-string "^2.1.0" 2247 | strip-indent "^1.0.1" 2248 | 2249 | regenerator-runtime@^0.13.4: 2250 | version "0.13.9" 2251 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" 2252 | integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== 2253 | 2254 | repeating@^2.0.0: 2255 | version "2.0.1" 2256 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 2257 | integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= 2258 | dependencies: 2259 | is-finite "^1.0.0" 2260 | 2261 | require-directory@^2.1.1: 2262 | version "2.1.1" 2263 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2264 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 2265 | 2266 | require-main-filename@^1.0.1: 2267 | version "1.0.1" 2268 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 2269 | integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= 2270 | 2271 | resolve@^1.0.0, resolve@^1.10.0: 2272 | version "1.20.0" 2273 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" 2274 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== 2275 | dependencies: 2276 | is-core-module "^2.2.0" 2277 | path-parse "^1.0.6" 2278 | 2279 | rimraf@^2.6.1: 2280 | version "2.7.1" 2281 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 2282 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== 2283 | dependencies: 2284 | glob "^7.1.3" 2285 | 2286 | rpc-websockets@^7.4.2: 2287 | version "7.4.16" 2288 | resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.4.16.tgz#eb701cdef577d4357ba5f526d50e25f370396fac" 2289 | integrity sha512-0b7OVhutzwRIaYAtJo5tqtaQTWKfwAsKnaThOSOy+VkhVdleNUgb8eZnWSdWITRZZEigV5uPEIDr5KZe4DBrdQ== 2290 | dependencies: 2291 | "@babel/runtime" "^7.11.2" 2292 | circular-json "^0.5.9" 2293 | eventemitter3 "^4.0.7" 2294 | uuid "^8.3.0" 2295 | ws "^7.4.5" 2296 | optionalDependencies: 2297 | bufferutil "^4.0.1" 2298 | utf-8-validate "^5.0.2" 2299 | 2300 | safe-buffer@5.1.2: 2301 | version "5.1.2" 2302 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2303 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 2304 | 2305 | safe-buffer@^5.0.1, safe-buffer@~5.2.0: 2306 | version "5.2.1" 2307 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 2308 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 2309 | 2310 | "safer-buffer@>= 2.1.2 < 3": 2311 | version "2.1.2" 2312 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2313 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 2314 | 2315 | secp256k1@^4.0.2: 2316 | version "4.0.2" 2317 | resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1" 2318 | integrity sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg== 2319 | dependencies: 2320 | elliptic "^6.5.2" 2321 | node-addon-api "^2.0.0" 2322 | node-gyp-build "^4.2.0" 2323 | 2324 | "semver@2 || 3 || 4 || 5", semver@^5.5.0: 2325 | version "5.7.1" 2326 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 2327 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 2328 | 2329 | send@0.17.1: 2330 | version "0.17.1" 2331 | resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" 2332 | integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== 2333 | dependencies: 2334 | debug "2.6.9" 2335 | depd "~1.1.2" 2336 | destroy "~1.0.4" 2337 | encodeurl "~1.0.2" 2338 | escape-html "~1.0.3" 2339 | etag "~1.8.1" 2340 | fresh "0.5.2" 2341 | http-errors "~1.7.2" 2342 | mime "1.6.0" 2343 | ms "2.1.1" 2344 | on-finished "~2.3.0" 2345 | range-parser "~1.2.1" 2346 | statuses "~1.5.0" 2347 | 2348 | serve-static@1.14.1: 2349 | version "1.14.1" 2350 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" 2351 | integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== 2352 | dependencies: 2353 | encodeurl "~1.0.2" 2354 | escape-html "~1.0.3" 2355 | parseurl "~1.3.3" 2356 | send "0.17.1" 2357 | 2358 | set-blocking@^2.0.0: 2359 | version "2.0.0" 2360 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 2361 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 2362 | 2363 | setprototypeof@1.1.1: 2364 | version "1.1.1" 2365 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" 2366 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== 2367 | 2368 | shebang-command@^1.2.0: 2369 | version "1.2.0" 2370 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 2371 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 2372 | dependencies: 2373 | shebang-regex "^1.0.0" 2374 | 2375 | shebang-regex@^1.0.0: 2376 | version "1.0.0" 2377 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 2378 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 2379 | 2380 | shell-quote@^1.6.1: 2381 | version "1.7.2" 2382 | resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" 2383 | integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== 2384 | 2385 | signal-exit@^3.0.0: 2386 | version "3.0.3" 2387 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 2388 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 2389 | 2390 | snake-case@^3.0.4: 2391 | version "3.0.4" 2392 | resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" 2393 | integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== 2394 | dependencies: 2395 | dot-case "^3.0.4" 2396 | tslib "^2.0.3" 2397 | 2398 | source-map-support@^0.5.12, source-map-support@^0.5.17: 2399 | version "0.5.19" 2400 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" 2401 | integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== 2402 | dependencies: 2403 | buffer-from "^1.0.0" 2404 | source-map "^0.6.0" 2405 | 2406 | source-map@^0.6.0: 2407 | version "0.6.1" 2408 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2409 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2410 | 2411 | spdx-correct@^3.0.0: 2412 | version "3.1.1" 2413 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" 2414 | integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== 2415 | dependencies: 2416 | spdx-expression-parse "^3.0.0" 2417 | spdx-license-ids "^3.0.0" 2418 | 2419 | spdx-exceptions@^2.1.0: 2420 | version "2.3.0" 2421 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" 2422 | integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== 2423 | 2424 | spdx-expression-parse@^3.0.0: 2425 | version "3.0.1" 2426 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" 2427 | integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== 2428 | dependencies: 2429 | spdx-exceptions "^2.1.0" 2430 | spdx-license-ids "^3.0.0" 2431 | 2432 | spdx-license-ids@^3.0.0: 2433 | version "3.0.7" 2434 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" 2435 | integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== 2436 | 2437 | "statuses@>= 1.5.0 < 2", statuses@~1.5.0: 2438 | version "1.5.0" 2439 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 2440 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 2441 | 2442 | string-width@^1.0.1: 2443 | version "1.0.2" 2444 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 2445 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= 2446 | dependencies: 2447 | code-point-at "^1.0.0" 2448 | is-fullwidth-code-point "^1.0.0" 2449 | strip-ansi "^3.0.0" 2450 | 2451 | string-width@^2.0.0: 2452 | version "2.1.1" 2453 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 2454 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 2455 | dependencies: 2456 | is-fullwidth-code-point "^2.0.0" 2457 | strip-ansi "^4.0.0" 2458 | 2459 | string-width@^4.1.0, string-width@^4.2.0: 2460 | version "4.2.3" 2461 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 2462 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 2463 | dependencies: 2464 | emoji-regex "^8.0.0" 2465 | is-fullwidth-code-point "^3.0.0" 2466 | strip-ansi "^6.0.1" 2467 | 2468 | string.prototype.padend@^3.0.0: 2469 | version "3.1.1" 2470 | resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.1.tgz#824c84265dbac46cade2b957b38b6a5d8d1683c5" 2471 | integrity sha512-eCzTASPnoCr5Ht+Vn1YXgm8SB015hHKgEIMu9Nr9bQmLhRBxKRfmzSj/IQsxDFc8JInJDDFA0qXwK+xxI7wDkg== 2472 | dependencies: 2473 | call-bind "^1.0.0" 2474 | define-properties "^1.1.3" 2475 | es-abstract "^1.18.0-next.1" 2476 | 2477 | string.prototype.trimend@^1.0.3: 2478 | version "1.0.3" 2479 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" 2480 | integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== 2481 | dependencies: 2482 | call-bind "^1.0.0" 2483 | define-properties "^1.1.3" 2484 | 2485 | string.prototype.trimstart@^1.0.3: 2486 | version "1.0.3" 2487 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" 2488 | integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== 2489 | dependencies: 2490 | call-bind "^1.0.0" 2491 | define-properties "^1.1.3" 2492 | 2493 | string_decoder@^1.1.1: 2494 | version "1.3.0" 2495 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 2496 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 2497 | dependencies: 2498 | safe-buffer "~5.2.0" 2499 | 2500 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 2501 | version "3.0.1" 2502 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 2503 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 2504 | dependencies: 2505 | ansi-regex "^2.0.0" 2506 | 2507 | strip-ansi@^4.0.0: 2508 | version "4.0.0" 2509 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 2510 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 2511 | dependencies: 2512 | ansi-regex "^3.0.0" 2513 | 2514 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 2515 | version "6.0.1" 2516 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 2517 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 2518 | dependencies: 2519 | ansi-regex "^5.0.1" 2520 | 2521 | strip-bom@^2.0.0: 2522 | version "2.0.0" 2523 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 2524 | integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= 2525 | dependencies: 2526 | is-utf8 "^0.2.0" 2527 | 2528 | strip-bom@^3.0.0: 2529 | version "3.0.0" 2530 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 2531 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 2532 | 2533 | strip-eof@^1.0.0: 2534 | version "1.0.0" 2535 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 2536 | integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= 2537 | 2538 | strip-indent@^1.0.1: 2539 | version "1.0.1" 2540 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" 2541 | integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= 2542 | dependencies: 2543 | get-stdin "^4.0.1" 2544 | 2545 | strip-json-comments@^2.0.0: 2546 | version "2.0.1" 2547 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 2548 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 2549 | 2550 | superstruct@^0.14.2: 2551 | version "0.14.2" 2552 | resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.14.2.tgz#0dbcdf3d83676588828f1cf5ed35cda02f59025b" 2553 | integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ== 2554 | 2555 | superstruct@^0.8.3: 2556 | version "0.8.4" 2557 | resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.8.4.tgz#478a19649f6b02c6319c02044db6a1f5863c391f" 2558 | integrity sha512-48Ors8IVWZm/tMr8r0Si6+mJiB7mkD7jqvIzktjJ4+EnP5tBp0qOpiM1J8sCUorKx+TXWrfb3i1UcjdD1YK/wA== 2559 | dependencies: 2560 | kind-of "^6.0.2" 2561 | tiny-invariant "^1.0.6" 2562 | 2563 | supports-color@^5.3.0: 2564 | version "5.5.0" 2565 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2566 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2567 | dependencies: 2568 | has-flag "^3.0.0" 2569 | 2570 | tedis@^0.1.12: 2571 | version "0.1.12" 2572 | resolved "https://registry.yarnpkg.com/tedis/-/tedis-0.1.12.tgz#e3eeccc92a5d068a35e7b16efef3e4d75cc3ef12" 2573 | integrity sha512-bxOKYWvdF1WsjkBYIfeO+2+xZuiqHmikqTTYPm3j/FYFpxQsX2JTBh6fFSlH6jDiCL4lfPcS2woIdD3FHopS/Q== 2574 | dependencies: 2575 | uuid "^3.3.2" 2576 | 2577 | text-encoding-utf-8@^1.0.2: 2578 | version "1.0.2" 2579 | resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" 2580 | integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== 2581 | 2582 | thenify-all@^1.0.0: 2583 | version "1.6.0" 2584 | resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" 2585 | integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= 2586 | dependencies: 2587 | thenify ">= 3.1.0 < 4" 2588 | 2589 | "thenify@>= 3.1.0 < 4": 2590 | version "3.3.1" 2591 | resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" 2592 | integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== 2593 | dependencies: 2594 | any-promise "^1.0.0" 2595 | 2596 | "through@>=2.2.7 <3": 2597 | version "2.3.8" 2598 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 2599 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 2600 | 2601 | tiny-invariant@^1.0.6: 2602 | version "1.1.0" 2603 | resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" 2604 | integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== 2605 | 2606 | to-regex-range@^5.0.1: 2607 | version "5.0.1" 2608 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2609 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2610 | dependencies: 2611 | is-number "^7.0.0" 2612 | 2613 | toidentifier@1.0.0: 2614 | version "1.0.0" 2615 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 2616 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== 2617 | 2618 | toml@^3.0.0: 2619 | version "3.0.0" 2620 | resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" 2621 | integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== 2622 | 2623 | tr46@~0.0.3: 2624 | version "0.0.3" 2625 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 2626 | integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= 2627 | 2628 | traverse-chain@~0.1.0: 2629 | version "0.1.0" 2630 | resolved "https://registry.yarnpkg.com/traverse-chain/-/traverse-chain-0.1.0.tgz#61dbc2d53b69ff6091a12a168fd7d433107e40f1" 2631 | integrity sha1-YdvC1Ttp/2CRoSoWj9fUMxB+QPE= 2632 | 2633 | tree-kill@^1.2.2: 2634 | version "1.2.2" 2635 | resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" 2636 | integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== 2637 | 2638 | trim-newlines@^1.0.0: 2639 | version "1.0.0" 2640 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" 2641 | integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= 2642 | 2643 | ts-node-dev@^1.1.1: 2644 | version "1.1.1" 2645 | resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-1.1.1.tgz#b7602929395b1616b4aa99a3be0a4e121742283d" 2646 | integrity sha512-kAO8LUZgXZSY0+PucMPsQ0Bbdv0x+lgbN7j8gcD4PuTI4uKC6YchekaspmYTBNilkiu+rQYkWJA7cK+Q8/B0tQ== 2647 | dependencies: 2648 | chokidar "^3.4.0" 2649 | dateformat "~1.0.4-1.2.3" 2650 | dynamic-dedupe "^0.3.0" 2651 | minimist "^1.2.5" 2652 | mkdirp "^1.0.4" 2653 | resolve "^1.0.0" 2654 | rimraf "^2.6.1" 2655 | source-map-support "^0.5.12" 2656 | tree-kill "^1.2.2" 2657 | ts-node "^9.0.0" 2658 | tsconfig "^7.0.0" 2659 | 2660 | ts-node@8.10.2: 2661 | version "8.10.2" 2662 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d" 2663 | integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA== 2664 | dependencies: 2665 | arg "^4.1.0" 2666 | diff "^4.0.1" 2667 | make-error "^1.1.1" 2668 | source-map-support "^0.5.17" 2669 | yn "3.1.1" 2670 | 2671 | ts-node@^9.0.0: 2672 | version "9.1.1" 2673 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" 2674 | integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== 2675 | dependencies: 2676 | arg "^4.1.0" 2677 | create-require "^1.1.0" 2678 | diff "^4.0.1" 2679 | make-error "^1.1.1" 2680 | source-map-support "^0.5.17" 2681 | yn "3.1.1" 2682 | 2683 | tsconfig@^7.0.0: 2684 | version "7.0.0" 2685 | resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" 2686 | integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== 2687 | dependencies: 2688 | "@types/strip-bom" "^3.0.0" 2689 | "@types/strip-json-comments" "0.0.30" 2690 | strip-bom "^3.0.0" 2691 | strip-json-comments "^2.0.0" 2692 | 2693 | tslib@^2.0.3: 2694 | version "2.3.1" 2695 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" 2696 | integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== 2697 | 2698 | tweetnacl@^1.0.0: 2699 | version "1.0.3" 2700 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" 2701 | integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== 2702 | 2703 | type-is@~1.6.17, type-is@~1.6.18: 2704 | version "1.6.18" 2705 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 2706 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 2707 | dependencies: 2708 | media-typer "0.3.0" 2709 | mime-types "~2.1.24" 2710 | 2711 | typescript@^4.1.4: 2712 | version "4.1.5" 2713 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.5.tgz#123a3b214aaff3be32926f0d8f1f6e704eb89a72" 2714 | integrity sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA== 2715 | 2716 | unpipe@1.0.0, unpipe@~1.0.0: 2717 | version "1.0.0" 2718 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 2719 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 2720 | 2721 | utf-8-validate@^5.0.2: 2722 | version "5.0.7" 2723 | resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" 2724 | integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== 2725 | dependencies: 2726 | node-gyp-build "^4.3.0" 2727 | 2728 | util-deprecate@^1.0.1: 2729 | version "1.0.2" 2730 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2731 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 2732 | 2733 | utils-merge@1.0.1: 2734 | version "1.0.1" 2735 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 2736 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= 2737 | 2738 | uuid@^3.3.2, uuid@^3.4.0: 2739 | version "3.4.0" 2740 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" 2741 | integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== 2742 | 2743 | uuid@^8.3.0: 2744 | version "8.3.2" 2745 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" 2746 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 2747 | 2748 | validate-npm-package-license@^3.0.1: 2749 | version "3.0.4" 2750 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 2751 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 2752 | dependencies: 2753 | spdx-correct "^3.0.0" 2754 | spdx-expression-parse "^3.0.0" 2755 | 2756 | vary@^1, vary@~1.1.2: 2757 | version "1.1.2" 2758 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 2759 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 2760 | 2761 | webidl-conversions@^3.0.0: 2762 | version "3.0.1" 2763 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 2764 | integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= 2765 | 2766 | whatwg-url@^5.0.0: 2767 | version "5.0.0" 2768 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 2769 | integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= 2770 | dependencies: 2771 | tr46 "~0.0.3" 2772 | webidl-conversions "^3.0.0" 2773 | 2774 | which-module@^2.0.0: 2775 | version "2.0.0" 2776 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 2777 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 2778 | 2779 | which@^1.2.9: 2780 | version "1.3.1" 2781 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 2782 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 2783 | dependencies: 2784 | isexe "^2.0.0" 2785 | 2786 | wrap-ansi@^2.0.0: 2787 | version "2.1.0" 2788 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 2789 | integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= 2790 | dependencies: 2791 | string-width "^1.0.1" 2792 | strip-ansi "^3.0.1" 2793 | 2794 | wrap-ansi@^7.0.0: 2795 | version "7.0.0" 2796 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 2797 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 2798 | dependencies: 2799 | ansi-styles "^4.0.0" 2800 | string-width "^4.1.0" 2801 | strip-ansi "^6.0.0" 2802 | 2803 | wrappy@1: 2804 | version "1.0.2" 2805 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2806 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2807 | 2808 | ws@^7.0.0: 2809 | version "7.4.3" 2810 | resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.3.tgz#1f9643de34a543b8edb124bdcbc457ae55a6e5cd" 2811 | integrity sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA== 2812 | 2813 | ws@^7.4.5: 2814 | version "7.5.5" 2815 | resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" 2816 | integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w== 2817 | 2818 | xtend@^4.0.0: 2819 | version "4.0.2" 2820 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 2821 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 2822 | 2823 | y18n@^3.2.1: 2824 | version "3.2.2" 2825 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" 2826 | integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== 2827 | 2828 | y18n@^5.0.5: 2829 | version "5.0.8" 2830 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 2831 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 2832 | 2833 | yallist@^2.1.2: 2834 | version "2.1.2" 2835 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 2836 | integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= 2837 | 2838 | yallist@^3.0.2: 2839 | version "3.1.1" 2840 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" 2841 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== 2842 | 2843 | yargs-parser@^20.2.2: 2844 | version "20.2.9" 2845 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 2846 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 2847 | 2848 | yargs-parser@^7.0.0: 2849 | version "7.0.0" 2850 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" 2851 | integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= 2852 | dependencies: 2853 | camelcase "^4.1.0" 2854 | 2855 | yargs@^17.0.1: 2856 | version "17.2.1" 2857 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.2.1.tgz#e2c95b9796a0e1f7f3bf4427863b42e0418191ea" 2858 | integrity sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q== 2859 | dependencies: 2860 | cliui "^7.0.2" 2861 | escalade "^3.1.1" 2862 | get-caller-file "^2.0.5" 2863 | require-directory "^2.1.1" 2864 | string-width "^4.2.0" 2865 | y18n "^5.0.5" 2866 | yargs-parser "^20.2.2" 2867 | 2868 | yargs@^8.0.2: 2869 | version "8.0.2" 2870 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" 2871 | integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A= 2872 | dependencies: 2873 | camelcase "^4.1.0" 2874 | cliui "^3.2.0" 2875 | decamelize "^1.1.1" 2876 | get-caller-file "^1.0.1" 2877 | os-locale "^2.0.0" 2878 | read-pkg-up "^2.0.0" 2879 | require-directory "^2.1.1" 2880 | require-main-filename "^1.0.1" 2881 | set-blocking "^2.0.0" 2882 | string-width "^2.0.0" 2883 | which-module "^2.0.0" 2884 | y18n "^3.2.1" 2885 | yargs-parser "^7.0.0" 2886 | 2887 | yn@3.1.1: 2888 | version "3.1.1" 2889 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 2890 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 2891 | --------------------------------------------------------------------------------