├── .editorconfig ├── .gitignore ├── PROTOCOL.md ├── README.md ├── example ├── complete.ts └── read.ts ├── package.json ├── src ├── Commands.ts ├── Communication.ts └── index.ts ├── tsconfig.json └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | insert_final_newline = true 7 | 8 | [*.js] 9 | indent_style = space 10 | indent_size = 2 11 | trim_trailing_whitespace = true 12 | prettier.singleQuote = true 13 | 14 | [*.tsx] 15 | indent_style = space 16 | indent_size = 2 17 | trim_trailing_whitespace = true 18 | prettier.singleQuote = true 19 | 20 | [*.ts] 21 | indent_style = space 22 | indent_size = 2 23 | trim_trailing_whitespace = true 24 | prettier.singleQuote = true -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | -------------------------------------------------------------------------------- /PROTOCOL.md: -------------------------------------------------------------------------------- 1 | # Packet format 2 | The packages are composed by the header, the payload, the checksum, and an ending byte; 3 | ## Header 4 | 0xfb, 0xbf 5 | 6 | [0xfb, 0xbf] 7 | 8 | ## Payload 9 | packet length, 1 byte command, ...n bytes params 10 | 11 | [0x07, 0x0B, 0x00, 0x00] 12 | 13 | ## Packet end 14 | checksum + 0xed 15 | 16 | The checksum is the sum of all the bytes of the packet.length + payload 17 | 18 | [0x9a, 0xed] 19 | 20 | ## Full package example 21 | 22 | [0xfb, 0xbf, 0x07, 0x0b, 0x00, 0x00, 0x0b, 0xed] 23 | 24 | # Commands 25 | 26 | ## Controlling wheels 27 | Command 07 28 | 29 | ### one servo 30 | params 0x01 [motor 1 byte][direction 1 byte][velocity 2 bytes] 31 | 32 | mode 1 control one servo 33 | direction 1-2 34 | velocity 16 bits 35 | 36 | cmd mode s d v1 v2 37 | const payload = [0x0A, 0x07, 0x01, 0x01, 0x02, 0x01, 120]; 38 | 39 | > remember that the servos are inverted so if you send a command to the 2 wheels servos they will run in opposite direction 40 | 41 | ## Controlling servo position 42 | 43 | const payload = [ 44 | 0x09, 45 | 0, 46 | 0, 47 | 0, 48 | 28, 49 | 205, // motor central 50 | 80, // brazo izquierdo 51 | 130, // brazo derecho 52 | 30, // velocidad 53 | 1, // ? 54 | 121 // ? 55 | ]; 56 | 57 | ## Control eyes colors 58 | 59 | ### all lights 60 | const payload = [ 61 | 0x79, 62 | 0x04, 63 | 0x03, // eyes 1, 2, 3 both 64 | 0x0A, // time 65 | 0x01, // number of colors 66 | 0xFF, // light mask 67 | 0x35, // color 68 | 0x35, // color 69 | 0x35 // color 70 | ] 71 | 72 | ### custom colors each light 73 | const payload = [ 74 | 0x79, 75 | 0x04, 76 | 0x03, // eyes 77 | 0xFF, // time 78 | 0x05, // number of colors 79 | 0x11, // light mask 80 | 0xFF, // color 81 | 0xF0, // color 82 | 0x00, // color 83 | 0x0A, // light mask 84 | 0xFF, // color 85 | 0x80, // color 86 | 0x00, // color 87 | 0x04, // light mask 88 | 0xFF, // color 89 | 0x00, // color 90 | 0x00, // color 91 | 0xA0, // light mask 92 | 0x00, // color 93 | 0xFF, // color 94 | 0xFF, // color 95 | 0x40, // light mask 96 | 0x35, // color 97 | 0x35, // color 98 | 0x35, // color 99 | ] 100 | 101 | ### animation eyes 102 | 103 | const payload = [ 104 | 0x78, // command 105 | 0x04, 106 | 0x03, // eye 1, 2, 3 both 107 | 0x02, // animation 108 | 0x00, // repetition 16bits? 109 | 0x01, // repetitions 110 | 0x40, // RR 111 | 0x40, // GG 112 | 0xFF // BB 113 | ] 114 | 115 | ### IR sensor status request 116 | const payload = [ 117 | 0x08, 118 | 0x7E, 119 | 0x01, 120 | 0x01, 121 | 0x01 122 | ] 123 | // read response 124 | characteristics[1].on('data', function (data, isNotification) { 125 | console.log(data) 126 | console.log('NOTIFICATION', data.readInt32BE(10)); 127 | }); 128 | 129 | ### read positions 130 | 070B 0000 131 | 070B 0001 132 | 133 | // read response 134 | characteristics[1].on('data', function (data, isNotification) { 135 | // last payload byte is the position of the servo (one response by servo) 136 | console.log(data) 137 | }); 138 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # NODE-JIMU 2 | 3 | This is a quick and dirty lib to control the Ubtech robots. I bought an Astrobot kit to teach some coding concepts to my daughter, and despite that the mobile app is great I wanted to have the possibility to work with it from a mac or PC. 4 | Spoofing the Bluetooth communication from the app with the robot I was able to figure out some parts of the communication protocol. 5 | 6 | Disclaimer: I have no affiliation with Ubtech and the intention of this lib is to get even more from these awesome robotics kits. 7 | 8 | ## Compatibilty 9 | 10 | For now this code is to control the astrobot model 11 | 12 | ## Installation 13 | 14 | `yarn add node-jimu` 15 | or 16 | `npm install node-jimu` 17 | 18 | ## Usage 19 | 20 | ```js 21 | import { Communication, Commands, delay } from "node-jimu"; 22 | 23 | const comm = new Communication("My_Jimu_CA15"); // name of the robot as seen in jimu app 24 | const robot: Commands = new Commands(comm); 25 | 26 | comm.connect(async () => { 27 | // // enable predefined animation for the eyes: red, green, blue, animation (0 - 15), eye (1, 2 or 3 for both) 28 | await robot.setEyesAnimation(253, 158, 254, 1, 3, 1); 29 | 30 | // set servo positions central, left arm, right arm, speed 31 | await robot.setPosition(205, 120, 120, 20); 32 | await delay(4000); 33 | 34 | // enable predefined animation for the eyes: red, green, blue, animation (0 - 15), eye (1, 2 or 3 for both) 35 | await robot.setEyesAnimation(253, 158, 254, 6, 3, 3); 36 | 37 | // set servo positions central, left arm, right arm, speed 38 | await robot.setPosition(190, 120, 120, 10); 39 | await delay(2000); 40 | 41 | // set eyes color red, green, blue, eye (1, 2 or 3 for both), time 42 | await robot.setEyes(0xff, 0x04, 0x04, 3, 60); 43 | await delay(2000); 44 | 45 | // set position again 46 | await robot.setPosition(220, 140, 100, 44); 47 | await delay(1000); 48 | 49 | // set wheels speed (sadly, it seems like you only can do it individually ) 50 | await robot.setSpeed(1, 2, 0x92); 51 | await robot.setSpeed(2, 1, 0x92); 52 | 53 | await delay(2000); 54 | 55 | // full stop! 56 | await robot.stop(); 57 | 58 | await delay(100); 59 | // disconnect 60 | comm.disconnect(); 61 | 62 | // close 63 | process.exit(0); 64 | }); 65 | 66 | ``` 67 | 68 | Reading data 69 | ```js 70 | import { Communication, Commands, delay } from "node-jimu"; 71 | 72 | const comm = new Communication("My_Jimu_CA15"); // name of the robot as seen in jimu app 73 | const robot: Commands = new Commands(comm); 74 | comm.setDebug(true); 75 | 76 | comm.connect(async () => { 77 | try { 78 | // get servo positions 79 | const p = await robot.getPosition(); 80 | console.log("position", p); 81 | 82 | // get sensors data 83 | const s = await robot.getSensors(); 84 | console.log("sensors", s); 85 | } catch (error) { 86 | console.log(error); 87 | } 88 | 89 | // disconnect 90 | comm.disconnect(); 91 | 92 | // close 93 | process.exit(0); 94 | }); 95 | ``` 96 | -------------------------------------------------------------------------------- /example/complete.ts: -------------------------------------------------------------------------------- 1 | import { Communication, Commands, delay } from "../src"; 2 | 3 | const comm = new Communication("My_Jimu_CA10"); // name of the robot as seen in jimu app 4 | const robot: Commands = new Commands(comm); 5 | 6 | comm.connect(async () => { 7 | const s = await robot.getSensors(); 8 | 9 | console.log(s); // Sensors information 10 | 11 | // // enable predefined animation for the eyes: red, green, blue, animation (0 - 15), eye (1, 2 or 3 for both) 12 | await robot.setEyesAnimation(253, 158, 254, 1, 3, 1); 13 | 14 | // set servo positions central, left arm, right arm, speed 15 | await robot.setPosition(205, 120, 120, 20); 16 | await delay(4000); 17 | 18 | // enable predefined animation for the eyes: red, green, blue, animation (0 - 15), eye (1, 2 or 3 for both) 19 | await robot.setEyesAnimation(253, 158, 254, 6, 3, 3); 20 | 21 | // set servo positions central, left arm, right arm, speed 22 | await robot.setPosition(190, 120, 120, 10); 23 | await delay(2000); 24 | 25 | // set eyes color red, green, blue, eye (1, 2 or 3 for both), time 26 | await robot.setEyes(0xff, 0x04, 0x04, 3, 60); 27 | await delay(2000); 28 | 29 | // set position again 30 | await robot.setPosition(220, 140, 100, 44); 31 | await delay(1000); 32 | 33 | // set wheels speed (sadly, it seems like you only can do it individually ) 34 | await robot.setSpeed(1, 2, 0x92); 35 | await robot.setSpeed(2, 1, 0x92); 36 | 37 | await delay(2000); 38 | 39 | // full stop! 40 | await robot.stop(); 41 | 42 | await delay(100); 43 | // disconnect 44 | comm.disconnect(); 45 | 46 | // close 47 | process.exit(0); 48 | }); 49 | -------------------------------------------------------------------------------- /example/read.ts: -------------------------------------------------------------------------------- 1 | import { Communication, Commands, delay } from "../src"; 2 | 3 | const comm = new Communication("My_Jimu_CA10"); // name of the robot as seen in jimu app 4 | const robot: Commands = new Commands(comm); 5 | comm.setDebug(true); 6 | 7 | comm.connect(async () => { 8 | try { 9 | // get servo positions 10 | const p = await robot.getPosition(); 11 | console.log("position", p); 12 | 13 | // get sensors data 14 | const s = await robot.getSensors(); 15 | console.log("sensors", s); 16 | } catch (error) { 17 | console.log(error); 18 | } 19 | 20 | // disconnect 21 | comm.disconnect(); 22 | 23 | // close 24 | process.exit(0); 25 | }); 26 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node-jimu", 3 | "version": "0.1.1", 4 | "main": "dist/index.js", 5 | "author": "Martin Alejandro Santangelo ", 6 | "license": "MIT", 7 | "types": "dist/index.d.ts", 8 | "repository": { 9 | "type": "git", 10 | "url": "git+https://github.com/msantang78/node-jimu.git" 11 | }, 12 | "scripts": { 13 | "build": "tsc", 14 | "prepare": "tsc" 15 | }, 16 | "dependencies": { 17 | "@abandonware/noble": "^1.9.2-14" 18 | }, 19 | "devDependencies": { 20 | "@types/node": "^13.13.4", 21 | "ts-node": "^8.10.0", 22 | "typescript": "^3.8.3" 23 | }, 24 | "keywords": [ 25 | "Jimu", 26 | "Ubtech", 27 | "bluetooth", 28 | "robot" 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /src/Commands.ts: -------------------------------------------------------------------------------- 1 | import type { Communication } from "./Communication"; 2 | 3 | /** 4 | * Robot commands 5 | */ 6 | export class Commands { 7 | com: Communication; 8 | 9 | constructor(com: Communication) { 10 | this.com = com; 11 | } 12 | 13 | async com1() { 14 | const payload = [0x06, 0x36, 0x00, 0x3c]; 15 | await this.com.send(payload); 16 | } 17 | 18 | async setEyes(r: number, g: number, b: number, eyes: number = 3, time = 255) { 19 | const payload = [ 20 | 0x79, 21 | 0x04, 22 | eyes, // eyes 1, 2, 3 both 23 | time, // time 24 | 0x01, // number of colors 25 | 0xff, // light mask 26 | r, // color 0-255 27 | g, // color 0-255 28 | b, // color 0-255 29 | ]; 30 | await this.com.send(payload); 31 | } 32 | 33 | async setEyesAnimation( 34 | r: number, 35 | g: number, 36 | b: number, 37 | animation: number, 38 | eyes: number = 3, 39 | repetition = 1 40 | ) { 41 | const payload = [ 42 | 0x78, // command 43 | 0x04, 44 | eyes, // eye 1, 2, 3 both 45 | animation, // animation 46 | 0x00, // repetition 16bits? 47 | repetition, // repetitions 48 | r, // 0-255 49 | g, // 0-255 50 | b, // 0-255 51 | ]; 52 | await this.com.send(payload); 53 | } 54 | 55 | /** 56 | * Get sensors 57 | */ 58 | async getSensors() { 59 | const payload = [0x7e, 0x01, 0x01, 0x01]; 60 | 61 | return await this.com.sendWithResponse(payload); 62 | } 63 | 64 | /** 65 | * Get position of servo 66 | * @param servo 67 | * @returns 68 | */ 69 | async getPosition() { 70 | const payload = [0x0b, 0x00, 0x00]; 71 | 72 | return await this.com.sendWithResponse(payload, 5, 1500); 73 | } 74 | 75 | /** 76 | * Set servos positions 77 | */ 78 | async setPosition(s1: number, s2: number, s3: number, speed: number) { 79 | const payload = [ 80 | 0x09, 81 | 0, 82 | 0, 83 | 0, 84 | 28, 85 | s1, // central servo position 86 | s2, // left arm position 87 | s3, // right arm position 88 | speed, // speed 89 | 1, // ? 90 | 121, // ? 91 | ]; 92 | await this.com.send(payload); 93 | } 94 | 95 | async setSpeed(motor: number, direction: 1 | 2, vel: number) { 96 | const payload = [0x07, 0x01, motor, direction, 0x01, vel]; 97 | await this.com.send(payload); 98 | } 99 | 100 | async setRotationSpeed(direction: 1 | 2, vel: number) { 101 | const payload = [0x07, 0x02, direction, direction === 2 ? 1 : 2, 0x01, vel]; 102 | await this.com.send(payload); 103 | } 104 | 105 | async stop() { 106 | const payload = [0x07, 0x02, 1, 2, 0, 0, 0]; 107 | await this.com.send(payload); 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /src/Communication.ts: -------------------------------------------------------------------------------- 1 | import noble, { Peripheral, Characteristic } from "@abandonware/noble"; 2 | 3 | /** 4 | * Bluetooth Communication 5 | */ 6 | export class Communication { 7 | characteristics: Array; 8 | peripheral: Peripheral; 9 | onReady?: Function; 10 | onDisconnect?: Function; 11 | debug: boolean = false; 12 | 13 | constructor(name: string) { 14 | noble.on("discover", async (peripheral: Peripheral) => { 15 | console.log("Found device", peripheral.advertisement.localName); 16 | if ( 17 | peripheral.advertisement && 18 | peripheral.advertisement.localName === name 19 | ) { 20 | await noble.stopScanningAsync(); 21 | await peripheral.connectAsync(); 22 | this.peripheral = peripheral; 23 | 24 | // on disconnet 25 | if (this.onDisconnect) { 26 | peripheral.on("disconnect", this.onDisconnect); 27 | } 28 | 29 | // get bluetooth characteristics and services 30 | const { characteristics, services } = 31 | await peripheral.discoverAllServicesAndCharacteristicsAsync(); 32 | 33 | this.characteristics = characteristics; 34 | 35 | // subscribe to events 36 | try { 37 | await characteristics[1].subscribeAsync(); 38 | console.log("Ready"); 39 | if (this.onReady) { 40 | this.onReady(this); 41 | } 42 | } catch (error) { 43 | console.log(error); 44 | return; 45 | } 46 | } 47 | }); 48 | } 49 | 50 | /** 51 | * Enable or disable debug 52 | */ 53 | setDebug(v: boolean) { 54 | this.debug = v; 55 | } 56 | 57 | /** 58 | * Builds the message 59 | */ 60 | private buildMessage(payload: Array) { 61 | const header = [0xfb, 0xbf, payload.length + 4]; // message header 62 | const message = header.concat(payload); 63 | message.push(message.slice(2).reduce((p, c) => p + c)); // checksum 64 | message.push(0xed); // finish char 65 | return Buffer.from(message); 66 | } 67 | 68 | /** 69 | * Send a packet 70 | */ 71 | send(payload: Array) { 72 | if (this.debug) console.log('[Comm]: Sending', this.buildMessage(payload)); 73 | return this.characteristics[0].writeAsync(this.buildMessage(payload), true); 74 | } 75 | 76 | /** 77 | * Send and wait responses 78 | */ 79 | sendWithResponse( 80 | payload: Array, 81 | count: number = 1, 82 | timeout: number = 200 83 | ): Promise> { 84 | return new Promise(async (resolve, reject) => { 85 | const responses: Array = []; 86 | const handler = (data: Buffer) => { 87 | responses.push(data); 88 | if (this.debug) console.log('[Comm]: Receiving', data); 89 | if (responses.length === count) { 90 | clearTimeout(wait); 91 | this.characteristics[1].off("data", handler); 92 | resolve(responses); 93 | } 94 | } 95 | 96 | // listen for responses 97 | this.characteristics[1].on("data", handler); 98 | 99 | const wait = setTimeout(() => { 100 | clearTimeout(wait); 101 | this.characteristics[1].off("data", handler); 102 | reject(new Error('timeout')); 103 | }, timeout); 104 | 105 | if (this.debug) console.log('[Comm]: Sending', this.buildMessage(payload)); 106 | 107 | this.characteristics[0].writeAsync(this.buildMessage(payload), true); 108 | }); 109 | } 110 | 111 | /** 112 | * Disconnect 113 | */ 114 | async disconnect() { 115 | await noble.stopScanningAsync(); 116 | await this.characteristics[1].unsubscribeAsync(); 117 | if (this.peripheral) { 118 | await this.peripheral.disconnectAsync(); 119 | } 120 | } 121 | 122 | /** 123 | * Connect to robot 124 | */ 125 | connect(onReady: Function, onDisconnect?: Function) { 126 | this.onReady = onReady; 127 | this.onDisconnect = onDisconnect; 128 | if (noble.state !== "poweredOn") { 129 | noble.on("stateChange", (state) => { 130 | if (state === "poweredOn") { 131 | this._connect(); 132 | } 133 | }); 134 | return; 135 | } 136 | this._connect(); 137 | } 138 | 139 | _connect() { 140 | console.log("Scanning for robots..."); 141 | noble.startScanningAsync(); 142 | } 143 | } 144 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./Communication"; 2 | export * from "./Commands"; 3 | 4 | export const delay = (t: number) => new Promise((resolve) => setTimeout(resolve, t)); 5 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "esModuleInterop": true, 5 | "allowSyntheticDefaultImports": true, 6 | "target": "es6", 7 | "noImplicitAny": true, 8 | "moduleResolution": "node", 9 | "sourceMap": true, 10 | "declaration": true, 11 | "outDir": "dist", 12 | "baseUrl": ".", 13 | "paths": { 14 | "*": ["node_modules/*", "src/types/*"] 15 | } 16 | }, 17 | "include": ["src/**/*", "*.ts"], 18 | "exclude": ["node_modules/*"] 19 | } 20 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@abandonware/bluetooth-hci-socket@^0.5.3-7": 6 | version "0.5.3-7" 7 | resolved "https://registry.yarnpkg.com/@abandonware/bluetooth-hci-socket/-/bluetooth-hci-socket-0.5.3-7.tgz#a20d0230cb3cca7210a68f631b269d74c5fcd924" 8 | integrity sha512-CaGDBeXEooRjaVJlgmnaWeI+MXlEBVN9705tp2GHCF2IFARH3h15lqf6eHjqFsdpQOiMWiBa/QZUAOGjzBrhmA== 9 | dependencies: 10 | debug "^4.3.1" 11 | nan "^2.14.2" 12 | node-pre-gyp "^0.17.0" 13 | optionalDependencies: 14 | usb "^1.6.3" 15 | 16 | "@abandonware/noble@^1.9.2-14": 17 | version "1.9.2-14" 18 | resolved "https://registry.yarnpkg.com/@abandonware/noble/-/noble-1.9.2-14.tgz#304d5dc824a1c67b5c4a6e69ce1f5620722d118a" 19 | integrity sha512-zSHu2gHs6TpCS3QRzvOpOsKkiGW7MZzhjtmScTj1EjaK2DMpSkfZrmGdSB1z34nOZuVeo+2XnYzyHbcg0tb1Cg== 20 | dependencies: 21 | debug "^4.3.1" 22 | napi-thread-safe-callback "0.0.6" 23 | node-addon-api "^3.2.0" 24 | optionalDependencies: 25 | "@abandonware/bluetooth-hci-socket" "^0.5.3-7" 26 | 27 | "@types/node@^13.13.4": 28 | version "13.13.4" 29 | resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.4.tgz#1581d6c16e3d4803eb079c87d4ac893ee7501c2c" 30 | integrity sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA== 31 | 32 | abbrev@1: 33 | version "1.1.1" 34 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 35 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 36 | 37 | ansi-regex@^2.0.0: 38 | version "2.1.1" 39 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 40 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 41 | 42 | ansi-regex@^3.0.0: 43 | version "3.0.0" 44 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 45 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 46 | 47 | aproba@^1.0.3: 48 | version "1.2.0" 49 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 50 | integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== 51 | 52 | are-we-there-yet@~1.1.2: 53 | version "1.1.5" 54 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" 55 | integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== 56 | dependencies: 57 | delegates "^1.0.0" 58 | readable-stream "^2.0.6" 59 | 60 | arg@^4.1.0: 61 | version "4.1.3" 62 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 63 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 64 | 65 | balanced-match@^1.0.0: 66 | version "1.0.0" 67 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 68 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 69 | 70 | base64-js@^1.0.2: 71 | version "1.3.1" 72 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" 73 | integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== 74 | 75 | bindings@^1.4.0: 76 | version "1.5.0" 77 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" 78 | integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== 79 | dependencies: 80 | file-uri-to-path "1.0.0" 81 | 82 | bl@^4.0.1: 83 | version "4.0.2" 84 | resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a" 85 | integrity sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ== 86 | dependencies: 87 | buffer "^5.5.0" 88 | inherits "^2.0.4" 89 | readable-stream "^3.4.0" 90 | 91 | brace-expansion@^1.1.7: 92 | version "1.1.11" 93 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 94 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 95 | dependencies: 96 | balanced-match "^1.0.0" 97 | concat-map "0.0.1" 98 | 99 | buffer-from@^1.0.0: 100 | version "1.1.1" 101 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 102 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 103 | 104 | buffer@^5.5.0: 105 | version "5.6.0" 106 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" 107 | integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== 108 | dependencies: 109 | base64-js "^1.0.2" 110 | ieee754 "^1.1.4" 111 | 112 | chownr@^1.1.1: 113 | version "1.1.4" 114 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" 115 | integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== 116 | 117 | code-point-at@^1.0.0: 118 | version "1.1.0" 119 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 120 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= 121 | 122 | concat-map@0.0.1: 123 | version "0.0.1" 124 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 125 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 126 | 127 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 128 | version "1.1.0" 129 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 130 | integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= 131 | 132 | core-util-is@~1.0.0: 133 | version "1.0.2" 134 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 135 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 136 | 137 | debug@^3.2.6: 138 | version "3.2.6" 139 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 140 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 141 | dependencies: 142 | ms "^2.1.1" 143 | 144 | debug@^4.3.1: 145 | version "4.3.1" 146 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 147 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 148 | dependencies: 149 | ms "2.1.2" 150 | 151 | decompress-response@^4.2.0: 152 | version "4.2.1" 153 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" 154 | integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== 155 | dependencies: 156 | mimic-response "^2.0.0" 157 | 158 | deep-extend@^0.6.0: 159 | version "0.6.0" 160 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 161 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 162 | 163 | delegates@^1.0.0: 164 | version "1.0.0" 165 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 166 | integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= 167 | 168 | detect-libc@^1.0.3: 169 | version "1.0.3" 170 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 171 | integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= 172 | 173 | diff@^4.0.1: 174 | version "4.0.2" 175 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 176 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 177 | 178 | end-of-stream@^1.1.0, end-of-stream@^1.4.1: 179 | version "1.4.4" 180 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 181 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 182 | dependencies: 183 | once "^1.4.0" 184 | 185 | expand-template@^2.0.3: 186 | version "2.0.3" 187 | resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" 188 | integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== 189 | 190 | file-uri-to-path@1.0.0: 191 | version "1.0.0" 192 | resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" 193 | integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== 194 | 195 | fs-constants@^1.0.0: 196 | version "1.0.0" 197 | resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" 198 | integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== 199 | 200 | fs-minipass@^1.2.5: 201 | version "1.2.7" 202 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" 203 | integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== 204 | dependencies: 205 | minipass "^2.6.0" 206 | 207 | fs.realpath@^1.0.0: 208 | version "1.0.0" 209 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 210 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 211 | 212 | gauge@~2.7.3: 213 | version "2.7.4" 214 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 215 | integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= 216 | dependencies: 217 | aproba "^1.0.3" 218 | console-control-strings "^1.0.0" 219 | has-unicode "^2.0.0" 220 | object-assign "^4.1.0" 221 | signal-exit "^3.0.0" 222 | string-width "^1.0.1" 223 | strip-ansi "^3.0.1" 224 | wide-align "^1.1.0" 225 | 226 | github-from-package@0.0.0: 227 | version "0.0.0" 228 | resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" 229 | integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= 230 | 231 | glob@^7.1.3: 232 | version "7.1.6" 233 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 234 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 235 | dependencies: 236 | fs.realpath "^1.0.0" 237 | inflight "^1.0.4" 238 | inherits "2" 239 | minimatch "^3.0.4" 240 | once "^1.3.0" 241 | path-is-absolute "^1.0.0" 242 | 243 | has-unicode@^2.0.0: 244 | version "2.0.1" 245 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 246 | integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= 247 | 248 | iconv-lite@^0.4.4: 249 | version "0.4.24" 250 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 251 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 252 | dependencies: 253 | safer-buffer ">= 2.1.2 < 3" 254 | 255 | ieee754@^1.1.4: 256 | version "1.1.13" 257 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" 258 | integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== 259 | 260 | ignore-walk@^3.0.1: 261 | version "3.0.3" 262 | resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" 263 | integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== 264 | dependencies: 265 | minimatch "^3.0.4" 266 | 267 | inflight@^1.0.4: 268 | version "1.0.6" 269 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 270 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 271 | dependencies: 272 | once "^1.3.0" 273 | wrappy "1" 274 | 275 | inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: 276 | version "2.0.4" 277 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 278 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 279 | 280 | ini@~1.3.0: 281 | version "1.3.5" 282 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" 283 | integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== 284 | 285 | is-fullwidth-code-point@^1.0.0: 286 | version "1.0.0" 287 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 288 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= 289 | dependencies: 290 | number-is-nan "^1.0.0" 291 | 292 | is-fullwidth-code-point@^2.0.0: 293 | version "2.0.0" 294 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 295 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 296 | 297 | isarray@~1.0.0: 298 | version "1.0.0" 299 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 300 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 301 | 302 | make-error@^1.1.1: 303 | version "1.3.6" 304 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 305 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 306 | 307 | mimic-response@^2.0.0: 308 | version "2.1.0" 309 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" 310 | integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== 311 | 312 | minimatch@^3.0.4: 313 | version "3.0.4" 314 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 315 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 316 | dependencies: 317 | brace-expansion "^1.1.7" 318 | 319 | minimist@^1.2.0, minimist@^1.2.5: 320 | version "1.2.5" 321 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 322 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 323 | 324 | minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: 325 | version "2.9.0" 326 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" 327 | integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== 328 | dependencies: 329 | safe-buffer "^5.1.2" 330 | yallist "^3.0.0" 331 | 332 | minizlib@^1.2.1: 333 | version "1.3.3" 334 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" 335 | integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== 336 | dependencies: 337 | minipass "^2.9.0" 338 | 339 | mkdirp-classic@^0.5.2: 340 | version "0.5.2" 341 | resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz#54c441ce4c96cd7790e10b41a87aa51068ecab2b" 342 | integrity sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g== 343 | 344 | mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5: 345 | version "0.5.5" 346 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 347 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 348 | dependencies: 349 | minimist "^1.2.5" 350 | 351 | ms@2.1.2, ms@^2.1.1: 352 | version "2.1.2" 353 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 354 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 355 | 356 | nan@^2.14.2: 357 | version "2.14.2" 358 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" 359 | integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== 360 | 361 | napi-build-utils@^1.0.1: 362 | version "1.0.2" 363 | resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" 364 | integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== 365 | 366 | napi-thread-safe-callback@0.0.6: 367 | version "0.0.6" 368 | resolved "https://registry.yarnpkg.com/napi-thread-safe-callback/-/napi-thread-safe-callback-0.0.6.tgz#ef86a149b5312e480f74e89a614e6d9e3b17b456" 369 | integrity sha512-X7uHCOCdY4u0yamDxDrv3jF2NtYc8A1nvPzBQgvpoSX+WB3jAe2cVNsY448V1ucq7Whf9Wdy02HEUoLW5rJKWg== 370 | 371 | needle@^2.5.2: 372 | version "2.6.0" 373 | resolved "https://registry.yarnpkg.com/needle/-/needle-2.6.0.tgz#24dbb55f2509e2324b4a99d61f413982013ccdbe" 374 | integrity sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg== 375 | dependencies: 376 | debug "^3.2.6" 377 | iconv-lite "^0.4.4" 378 | sax "^1.2.4" 379 | 380 | node-abi@^2.7.0: 381 | version "2.16.0" 382 | resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.16.0.tgz#7df94e9c0a7a189f4197ab84bac8089ef5894992" 383 | integrity sha512-+sa0XNlWDA6T+bDLmkCUYn6W5k5W6BPRL6mqzSCs6H/xUgtl4D5x2fORKDzopKiU6wsyn/+wXlRXwXeSp+mtoA== 384 | dependencies: 385 | semver "^5.4.1" 386 | 387 | node-addon-api@3.0.2: 388 | version "3.0.2" 389 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.0.2.tgz#04bc7b83fd845ba785bb6eae25bc857e1ef75681" 390 | integrity sha512-+D4s2HCnxPd5PjjI0STKwncjXTUKKqm74MDMz9OPXavjsGmjkvwgLtA5yoxJUdmpj52+2u+RrXgPipahKczMKg== 391 | 392 | node-addon-api@^3.2.0: 393 | version "3.2.1" 394 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" 395 | integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== 396 | 397 | node-pre-gyp@^0.17.0: 398 | version "0.17.0" 399 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.17.0.tgz#5af3f7b4c3848b5ed00edc3d298ff836daae5f1d" 400 | integrity sha512-abzZt1hmOjkZez29ppg+5gGqdPLUuJeAEwVPtHYEJgx0qzttCbcKFpxrCQn2HYbwCv2c+7JwH4BgEzFkUGpn4A== 401 | dependencies: 402 | detect-libc "^1.0.3" 403 | mkdirp "^0.5.5" 404 | needle "^2.5.2" 405 | nopt "^4.0.3" 406 | npm-packlist "^1.4.8" 407 | npmlog "^4.1.2" 408 | rc "^1.2.8" 409 | rimraf "^2.7.1" 410 | semver "^5.7.1" 411 | tar "^4.4.13" 412 | 413 | noop-logger@^0.1.1: 414 | version "0.1.1" 415 | resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" 416 | integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI= 417 | 418 | nopt@^4.0.3: 419 | version "4.0.3" 420 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" 421 | integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== 422 | dependencies: 423 | abbrev "1" 424 | osenv "^0.1.4" 425 | 426 | npm-bundled@^1.0.1: 427 | version "1.1.1" 428 | resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" 429 | integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== 430 | dependencies: 431 | npm-normalize-package-bin "^1.0.1" 432 | 433 | npm-normalize-package-bin@^1.0.1: 434 | version "1.0.1" 435 | resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" 436 | integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== 437 | 438 | npm-packlist@^1.4.8: 439 | version "1.4.8" 440 | resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" 441 | integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== 442 | dependencies: 443 | ignore-walk "^3.0.1" 444 | npm-bundled "^1.0.1" 445 | npm-normalize-package-bin "^1.0.1" 446 | 447 | npmlog@^4.0.1, npmlog@^4.1.2: 448 | version "4.1.2" 449 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 450 | integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== 451 | dependencies: 452 | are-we-there-yet "~1.1.2" 453 | console-control-strings "~1.1.0" 454 | gauge "~2.7.3" 455 | set-blocking "~2.0.0" 456 | 457 | number-is-nan@^1.0.0: 458 | version "1.0.1" 459 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 460 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 461 | 462 | object-assign@^4.1.0: 463 | version "4.1.1" 464 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 465 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 466 | 467 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 468 | version "1.4.0" 469 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 470 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 471 | dependencies: 472 | wrappy "1" 473 | 474 | os-homedir@^1.0.0: 475 | version "1.0.2" 476 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 477 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= 478 | 479 | os-tmpdir@^1.0.0: 480 | version "1.0.2" 481 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 482 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 483 | 484 | osenv@^0.1.4: 485 | version "0.1.5" 486 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" 487 | integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== 488 | dependencies: 489 | os-homedir "^1.0.0" 490 | os-tmpdir "^1.0.0" 491 | 492 | path-is-absolute@^1.0.0: 493 | version "1.0.1" 494 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 495 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 496 | 497 | prebuild-install@^5.3.3: 498 | version "5.3.3" 499 | resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.3.tgz#ef4052baac60d465f5ba6bf003c9c1de79b9da8e" 500 | integrity sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g== 501 | dependencies: 502 | detect-libc "^1.0.3" 503 | expand-template "^2.0.3" 504 | github-from-package "0.0.0" 505 | minimist "^1.2.0" 506 | mkdirp "^0.5.1" 507 | napi-build-utils "^1.0.1" 508 | node-abi "^2.7.0" 509 | noop-logger "^0.1.1" 510 | npmlog "^4.0.1" 511 | pump "^3.0.0" 512 | rc "^1.2.7" 513 | simple-get "^3.0.3" 514 | tar-fs "^2.0.0" 515 | tunnel-agent "^0.6.0" 516 | which-pm-runs "^1.0.0" 517 | 518 | process-nextick-args@~2.0.0: 519 | version "2.0.1" 520 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 521 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 522 | 523 | pump@^3.0.0: 524 | version "3.0.0" 525 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 526 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 527 | dependencies: 528 | end-of-stream "^1.1.0" 529 | once "^1.3.1" 530 | 531 | rc@^1.2.7, rc@^1.2.8: 532 | version "1.2.8" 533 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 534 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== 535 | dependencies: 536 | deep-extend "^0.6.0" 537 | ini "~1.3.0" 538 | minimist "^1.2.0" 539 | strip-json-comments "~2.0.1" 540 | 541 | readable-stream@^2.0.6: 542 | version "2.3.7" 543 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 544 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 545 | dependencies: 546 | core-util-is "~1.0.0" 547 | inherits "~2.0.3" 548 | isarray "~1.0.0" 549 | process-nextick-args "~2.0.0" 550 | safe-buffer "~5.1.1" 551 | string_decoder "~1.1.1" 552 | util-deprecate "~1.0.1" 553 | 554 | readable-stream@^3.1.1, readable-stream@^3.4.0: 555 | version "3.6.0" 556 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" 557 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== 558 | dependencies: 559 | inherits "^2.0.3" 560 | string_decoder "^1.1.1" 561 | util-deprecate "^1.0.1" 562 | 563 | rimraf@^2.7.1: 564 | version "2.7.1" 565 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 566 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== 567 | dependencies: 568 | glob "^7.1.3" 569 | 570 | safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: 571 | version "5.2.0" 572 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" 573 | integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== 574 | 575 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 576 | version "5.1.2" 577 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 578 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 579 | 580 | "safer-buffer@>= 2.1.2 < 3": 581 | version "2.1.2" 582 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 583 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 584 | 585 | sax@^1.2.4: 586 | version "1.2.4" 587 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 588 | integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== 589 | 590 | semver@^5.4.1, semver@^5.7.1: 591 | version "5.7.1" 592 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 593 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 594 | 595 | set-blocking@~2.0.0: 596 | version "2.0.0" 597 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 598 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 599 | 600 | signal-exit@^3.0.0: 601 | version "3.0.3" 602 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 603 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 604 | 605 | simple-concat@^1.0.0: 606 | version "1.0.0" 607 | resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" 608 | integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= 609 | 610 | simple-get@^3.0.3: 611 | version "3.1.0" 612 | resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3" 613 | integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== 614 | dependencies: 615 | decompress-response "^4.2.0" 616 | once "^1.3.1" 617 | simple-concat "^1.0.0" 618 | 619 | source-map-support@^0.5.17: 620 | version "0.5.19" 621 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" 622 | integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== 623 | dependencies: 624 | buffer-from "^1.0.0" 625 | source-map "^0.6.0" 626 | 627 | source-map@^0.6.0: 628 | version "0.6.1" 629 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 630 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 631 | 632 | string-width@^1.0.1: 633 | version "1.0.2" 634 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 635 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= 636 | dependencies: 637 | code-point-at "^1.0.0" 638 | is-fullwidth-code-point "^1.0.0" 639 | strip-ansi "^3.0.0" 640 | 641 | "string-width@^1.0.2 || 2": 642 | version "2.1.1" 643 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 644 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 645 | dependencies: 646 | is-fullwidth-code-point "^2.0.0" 647 | strip-ansi "^4.0.0" 648 | 649 | string_decoder@^1.1.1: 650 | version "1.3.0" 651 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 652 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 653 | dependencies: 654 | safe-buffer "~5.2.0" 655 | 656 | string_decoder@~1.1.1: 657 | version "1.1.1" 658 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 659 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 660 | dependencies: 661 | safe-buffer "~5.1.0" 662 | 663 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 664 | version "3.0.1" 665 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 666 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 667 | dependencies: 668 | ansi-regex "^2.0.0" 669 | 670 | strip-ansi@^4.0.0: 671 | version "4.0.0" 672 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 673 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 674 | dependencies: 675 | ansi-regex "^3.0.0" 676 | 677 | strip-json-comments@~2.0.1: 678 | version "2.0.1" 679 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 680 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 681 | 682 | tar-fs@^2.0.0: 683 | version "2.0.1" 684 | resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.1.tgz#e44086c1c60d31a4f0cf893b1c4e155dabfae9e2" 685 | integrity sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA== 686 | dependencies: 687 | chownr "^1.1.1" 688 | mkdirp-classic "^0.5.2" 689 | pump "^3.0.0" 690 | tar-stream "^2.0.0" 691 | 692 | tar-stream@^2.0.0: 693 | version "2.1.2" 694 | resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.2.tgz#6d5ef1a7e5783a95ff70b69b97455a5968dc1325" 695 | integrity sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q== 696 | dependencies: 697 | bl "^4.0.1" 698 | end-of-stream "^1.4.1" 699 | fs-constants "^1.0.0" 700 | inherits "^2.0.3" 701 | readable-stream "^3.1.1" 702 | 703 | tar@^4.4.13: 704 | version "4.4.13" 705 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" 706 | integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== 707 | dependencies: 708 | chownr "^1.1.1" 709 | fs-minipass "^1.2.5" 710 | minipass "^2.8.6" 711 | minizlib "^1.2.1" 712 | mkdirp "^0.5.0" 713 | safe-buffer "^5.1.2" 714 | yallist "^3.0.3" 715 | 716 | ts-node@^8.10.0: 717 | version "8.10.0" 718 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.0.tgz#b4678e5a1d2475db79d1a56aec56ef7b9bccf1a7" 719 | integrity sha512-9llNE7EOwPXr40e01DAVHTMgWLXDyHBMRaBB47xbF1ppbYVhc6iNT/VUz2jntkzPxjBOjxOn//XkeBgBtHbn/w== 720 | dependencies: 721 | arg "^4.1.0" 722 | diff "^4.0.1" 723 | make-error "^1.1.1" 724 | source-map-support "^0.5.17" 725 | yn "3.1.1" 726 | 727 | tunnel-agent@^0.6.0: 728 | version "0.6.0" 729 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 730 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 731 | dependencies: 732 | safe-buffer "^5.0.1" 733 | 734 | typescript@^3.8.3: 735 | version "3.8.3" 736 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" 737 | integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== 738 | 739 | usb@^1.6.3: 740 | version "1.7.1" 741 | resolved "https://registry.yarnpkg.com/usb/-/usb-1.7.1.tgz#d723223ec517b802c4d2082e31a4649c65c491c5" 742 | integrity sha512-HTCfx6NnNRhv5y98t04Y8j2+A8dmQnEGxCMY2/zN/0gkiioLYfTZ5w/PEKlWRVUY+3qLe9xwRv9pHLkjQYNw/g== 743 | dependencies: 744 | bindings "^1.4.0" 745 | node-addon-api "3.0.2" 746 | prebuild-install "^5.3.3" 747 | 748 | util-deprecate@^1.0.1, util-deprecate@~1.0.1: 749 | version "1.0.2" 750 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 751 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 752 | 753 | which-pm-runs@^1.0.0: 754 | version "1.0.0" 755 | resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" 756 | integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= 757 | 758 | wide-align@^1.1.0: 759 | version "1.1.3" 760 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 761 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 762 | dependencies: 763 | string-width "^1.0.2 || 2" 764 | 765 | wrappy@1: 766 | version "1.0.2" 767 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 768 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 769 | 770 | yallist@^3.0.0, yallist@^3.0.3: 771 | version "3.1.1" 772 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" 773 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== 774 | 775 | yn@3.1.1: 776 | version "3.1.1" 777 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 778 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 779 | --------------------------------------------------------------------------------