Переглянути джерело

Improve app appearance

Use custom button for closing, improve app window.
master
Allan Crisostomo 3 роки тому
джерело
коміт
171da12746
23 змінених файлів з 541 додано та 495 видалено
  1. +2
    -0
      .gitignore
  2. +4
    -2
      package.json
  3. +44
    -2
      public/index.html
  4. +20
    -3
      public/style.css
  5. +33
    -6
      src/App.tsx
  6. +4
    -23
      src/components/Keyboard/Keyboard.tsx
  7. +2
    -3
      src/components/PedalBoard/PedalBoard.tsx
  8. +194
    -0
      src/electron.ts
  9. +10
    -5
      src/index.tsx
  10. +2
    -0
      src/react-app-env.d.ts
  11. +5
    -0
      src/services/Config.ts
  12. +15
    -0
      src/services/getKeyName.ts
  13. +7
    -0
      src/services/getKeyOctave.ts
  14. +15
    -0
      src/services/getNaturalKeyCount.ts
  15. +64
    -0
      src/services/isNaturalKey.test.ts
  16. +21
    -0
      src/services/isNaturalKey.ts
  17. +14
    -0
      src/services/keyNames.json
  18. +6
    -0
      src/services/messages.json
  19. +12
    -0
      src/services/messages.ts
  20. +4
    -0
      src/services/scaleFactors.json
  21. +34
    -0
      src/services/spans.json
  22. +0
    -161
      src/shell/electron.ts
  23. +29
    -290
      yarn.lock

+ 2
- 0
.gitignore Переглянути файл

@@ -92,3 +92,5 @@ dist
.pnp.*
build
public/electron.js
public/services
config.json

+ 4
- 2
package.json Переглянути файл

@@ -3,6 +3,7 @@
"description": "Simple monitor for displaying MIDI status for digital pianos.",
"author": "TheoryOfNekomata <allan.crisostomo@outlook.com> (https://modal.sh)",
"version": "0.1.0",
"main": "public/electron.js",
"private": true,
"license": "MIT",
"dependencies": {
@@ -11,7 +12,6 @@
"@testing-library/user-event": "^7.1.2",
"@theoryofnekomata/react-musical-keyboard": "1.0.4",
"@types/jest": "^24.0.0",
"@types/node": "^12.0.0",
"@types/react": "^16.9.0",
"@types/react-dom": "^16.9.0",
"electron-is-dev": "^1.2.0",
@@ -25,7 +25,7 @@
"postinstall": "electron-builder install-app-deps",
"start": "concurrently \"BROWSER=none react-scripts start\" \"wait-on http://localhost:3000 && electron .\"",
"test": "react-scripts test",
"compile": "tsc src/shell/electron.ts --outDir public/",
"compile": "tsc src/electron.ts --resolveJsonModule --esModuleInterop --outDir public/",
"rebuild": "electron-rebuild -f -w midi",
"prebuild": "react-scripts build",
"build": "electron-builder"
@@ -46,9 +46,11 @@
]
},
"devDependencies": {
"@types/node": "12",
"concurrently": "^5.3.0",
"electron": "^9.2.0",
"electron-builder": "^22.8.0",
"fast-check": "^2.1.0",
"wait-on": "^5.1.0"
},
"build": {


+ 44
- 2
public/index.html Переглянути файл

@@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en">
<html lang="en-PH" style="--size-close-button: 2rem;">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
@@ -28,8 +28,46 @@
<title>Piano MIDI Monitor</title>
</head>
<body>
<button
id="close"
class="theme button"
style="
display: block;
position: fixed;
line-height: 0;
top: 0;
right: 0;
padding: 0;
border: 0;
height: var(--size-close-button, 2rem);
width: var(--size-close-button, 2rem);
text-align: center;
outline: 0;
"
>
<span
style="
display: block;
background-color: currentColor;
width: 50%;
height: 0.125rem;
margin: 0 auto;
transform: rotate(45deg);
"
></span>
<span
style="
display: block;
background-color: currentColor;
width: 50%;
height: 0.125rem;
margin: 0 auto;
margin-top: -0.125rem;
transform: rotate(-45deg);
"
></span>
</button>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
@@ -57,6 +95,10 @@
})
})
})

window.document.getElementById('close').addEventListener('click', () => {
ipcRenderer.send('quit')
})
})(window, require('electron'))
</script>
</body>


+ 20
- 3
public/style.css Переглянути файл

@@ -1,6 +1,7 @@
html {
width: 100%;
height: 100%;
-webkit-app-region: drag;
}

body {
@@ -9,7 +10,7 @@ body {
height: 100%;
}

#root {
main {
width: 100%;
height: 100%;
display: grid;
@@ -17,6 +18,22 @@ body {
align-items: stretch;
}

:root {
--size-scale-factor: 2;
.theme {
color: black;
background-color: white;
}

.button {
opacity: 0.5;
}

.button:hover {
opacity: 1;
}

@media (prefers-color-scheme: dark) {
.theme {
color: white;
background-color: black;
}
}

+ 33
- 6
src/App.tsx Переглянути файл

@@ -2,11 +2,38 @@ import * as React from 'react'
import Keyboard from './components/Keyboard/Keyboard'
import PedalBoard from './components/PedalBoard/PedalBoard'

const App = () => (
<React.Fragment>
<Keyboard />
<PedalBoard />
</React.Fragment>
)
const search = new URLSearchParams(window.location.search)

const App = () => {
const [startKey, setStartKey, ] = React.useState<number>(Number(search.get('startKey')))
const [endKey, setEndKey, ] = React.useState<number>(Number(search.get('endKey')))

React.useEffect(() => {
const onMessage = (e: MessageEvent) => {
if (e.data.event !== 'spanchange') {
return
}

const [startKey, endKey, ] = e.data.message.split(':')
setStartKey(Number(startKey))
setEndKey(Number(endKey))
}

window.addEventListener('message', onMessage)
return () => {
window.removeEventListener('message', onMessage)
}
}, [])

return (
<React.Fragment>
<Keyboard
startKey={startKey}
endKey={endKey}
/>
<PedalBoard />
</React.Fragment>
)
}

export default App;

+ 4
- 23
src/components/Keyboard/Keyboard.tsx Переглянути файл

@@ -4,10 +4,10 @@ import KeyboardBase, { StyledAccidentalKey, StyledNaturalKey, } from '@theoryofn
const NaturalKey = React.memo(StyledNaturalKey)
const AccidentalKey = React.memo(StyledAccidentalKey)

const Keyboard = () => {
const [startKey, setStartKey, ] = React.useState(21)
const [endKey, setEndKey, ] = React.useState(108)
const [width, setWidth, ] = React.useState(52)
const Keyboard = ({
startKey = 21,
endKey = 108,
}) => {
const [keyChannels, setKeyChannels, ] = React.useState<any[]>([])

React.useEffect(() => {
@@ -39,27 +39,8 @@ const Keyboard = () => {
}
}, [])

React.useEffect(() => {
const onMessage = (e: MessageEvent) => {
if (e.data.event !== 'spanchange') {
return
}

const [startKey, endKey, naturalKeys, ] = e.data.message.split(':')
setStartKey(Number(startKey))
setEndKey(Number(endKey))
setWidth(Number(naturalKeys))
}

window.addEventListener('message', onMessage)
return () => {
window.removeEventListener('message', onMessage)
}
}, [])

return (
<KeyboardBase
width={width * 20}
height="100%"
startKey={startKey}
endKey={endKey}


+ 2
- 3
src/components/PedalBoard/PedalBoard.tsx Переглянути файл

@@ -38,13 +38,12 @@ const PedalBoard = () => {

return (
<div
className="theme"
style={{
color: 'white',
backgroundColor: 'black',
display: 'grid',
gridTemplateColumns: 'repeat(3, auto)',
alignItems: 'center',
padding: '1rem',
padding: 'var(--size-close-button, 2rem) 1rem 1rem',
gap: '1rem',
}}
>


+ 194
- 0
src/electron.ts Переглянути файл

@@ -0,0 +1,194 @@
import { app, BrowserWindow, Menu, ipcMain, } from 'electron'
import path from 'path'
import fs from 'fs'

import SPANS from './services/spans.json'
import SCALE_FACTORS from './services/scaleFactors.json'
import { _ } from './services/messages'
import getKeyName from './services/getKeyName'
import getNaturalKeyCount from './services/getNaturalKeyCount'
import Config from './services/Config'
// @ts-ignore
import electronIsDev = require('electron-is-dev')
// @ts-ignore
import midi = require('midi')
// @ts-ignore

const WINDOW_HEIGHT = 100

let config: Config = {
startKey: 21,
endKey: 108,
scaleFactor: 1,
}

const createWindow = () => {
const KEYS_WIDTH = getNaturalKeyCount(config.startKey, config.endKey) * 20
const WINDOW_WIDTH = KEYS_WIDTH + 207
const win = new BrowserWindow({
width: WINDOW_WIDTH,
height: WINDOW_HEIGHT,
useContentSize: true,
backgroundColor: '#000000',
resizable: false,
minimizable: false,
maximizable: false,
fullscreenable: false,
frame: false,
webPreferences: {
devTools: electronIsDev,
nodeIntegration: true,
},
})

const baseUrl: string = (
electronIsDev
? 'http://localhost:3000'
: `file:///${path.join(__dirname, '../build/index.html')}`
)

const search = new URLSearchParams(config as Record<string, string>)
const url = new URL(baseUrl)
url.search = search.toString()
win.loadURL(url.toString())

if (electronIsDev) {
win.webContents.openDevTools()
}

const input = new midi.Input()

if (input.getPortCount() > 0) {
input.openPort(0)
}

input.on('message', (deltaTime: number, message: unknown[]) => {
const [type, data1, data2] = message
switch (type) {
case 144:
win.webContents.send('note', data1 + ':' + data2)
break
case 176:
win.webContents.send('pedal', data1 + ':' + data2)
break
}
})
}

app
.whenReady()
.then(() => {
try {
const configJsonRaw = fs.readFileSync('./config.json').toString('utf-8')
config = JSON.parse(configJsonRaw)
} catch (e) {
config = {
startKey: 21,
endKey: 108,
scaleFactor: 1,
}
}

const platformMenu = Menu.buildFromTemplate([
...(
process.platform === 'darwin'
? [
{
label: app.name,
submenu: [
{ role: 'about' },
{ type: 'separator' },
{ role: 'services' },
{ type: 'separator' },
{ role: 'hide' },
{ role: 'hideothers' },
{ role: 'unhide' },
{ type: 'separator' },
{ role: 'quit' }
],
}
]
: []
) as object[],
{
label: _('VIEW'),
submenu: [
{
label: _('SPAN'),
submenu: SPANS.map(s => ({
label: `${getKeyName(s.startKey)}–${getKeyName(s.endKey)}`,
sublabel: `${s.endKey - s.startKey + 1}-key`,
type: 'radio',
checked: config.startKey === s.startKey && config.endKey === s.endKey,
click: () => {
config.startKey = s.startKey
config.endKey = s.endKey
app.relaunch({
args: process.argv.slice(1).concat([
`--startKey=${config.startKey}`,
`--endKey=${config.endKey}`,
`--scaleFactor=${config.scaleFactor}`,
])
})
app.exit(0)
},
}))
},
{
label: _('DETAIL_SCALE_FACTOR'),
submenu: SCALE_FACTORS.map(s => ({
label: `${s}×`,
type: 'radio',
checked: config.scaleFactor === s,
click: () => {
config.scaleFactor = s

app.relaunch({
args: process.argv.slice(1).concat([
`--startKey=${config.startKey}`,
`--endKey=${config.endKey}`,
`--scaleFactor=${config.scaleFactor}`,
])
})
app.exit(0)
},
})),
},
]
},
...(
electronIsDev
? [
{
label: _('DEBUG'),
submenu: [
{ role: 'forceReload' },
{ role: 'toggleDevTools' },
]
}
]
: []
) as object[]
])

Menu.setApplicationMenu(platformMenu)
createWindow()

ipcMain.on('quit', () => {
app.quit()
})
})

app.on('quit', () => {
fs.writeFileSync('./config.json', JSON.stringify(config))
})

app.on('window-all-closed', () => {
app.quit()
})

app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})

+ 10
- 5
src/index.tsx Переглянути файл

@@ -1,10 +1,15 @@
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import * as React from 'react'
import ReactDOM from 'react-dom'
import App from './App'

const div = window.document.createElement('main')
const search = new URLSearchParams(window.location.search)
window.document.body.appendChild(div)
window.document.documentElement.style.setProperty('--size-scale-factor', search.get('scaleFactor'))

ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
);
div
)

+ 2
- 0
src/react-app-env.d.ts Переглянути файл

@@ -1,2 +1,4 @@
/// <reference types="react-scripts" />
/// <reference types="node" />

declare module 'midi'

+ 5
- 0
src/services/Config.ts Переглянути файл

@@ -0,0 +1,5 @@
export default interface Config extends Record<string, string | number>{
startKey: number,
endKey: number,
scaleFactor: number,
}

+ 15
- 0
src/services/getKeyName.ts Переглянути файл

@@ -0,0 +1,15 @@
import getKeyOctave from './getKeyOctave'
import keyNames from './keyNames.json'

interface GetKeyName {
(key: number): string,
}

const getKeyName: GetKeyName = (key) => {
const octave = getKeyOctave(key)
const pitch = (Math.floor(key) % 12) as keyof typeof keyNames
const keyName: string = keyNames[pitch] as unknown as string
return `${keyName}${octave}`
}

export default getKeyName

+ 7
- 0
src/services/getKeyOctave.ts Переглянути файл

@@ -0,0 +1,7 @@
interface GetKeyOctave {
(key: number): number,
}

const getOctave: GetKeyOctave = (key) => Math.floor(key / 12) - 1

export default getOctave

+ 15
- 0
src/services/getNaturalKeyCount.ts Переглянути файл

@@ -0,0 +1,15 @@
import isNaturalKey from './isNaturalKey'

interface GetNaturalKeyCount {
(startKey: number, endKey: number): number,
}

const getNaturalKeyCount: GetNaturalKeyCount = (startKey, endKey) => (
Array(endKey - startKey + 1)
.fill(startKey)
.map((s, i) => s + i)
.filter(k => isNaturalKey(k))
.length
)

export default getNaturalKeyCount

+ 64
- 0
src/services/isNaturalKey.test.ts Переглянути файл

@@ -0,0 +1,64 @@
import * as fc from 'fast-check'
import isNaturalKey from './isNaturalKey'

it('should exist', () => {
expect(isNaturalKey).toBeDefined()
})

it('should be a callable', () => {
expect(typeof isNaturalKey).toBe('function')
})

it('should accept 1 parameter', () => {
expect(isNaturalKey).toHaveLength(1)
})

it('should throw TypeError upon passing invalid types', () => {
fc.assert(
fc.property(
fc.anything().filter((anything) => typeof anything !== 'number'),
(anything) => {
expect(() => isNaturalKey(anything as number)).toThrowError(TypeError)
},
),
)
})

it('should throw RangeError upon passing NaN', () => {
expect(() => isNaturalKey(NaN)).toThrowError(RangeError)
})

it('should throw RangeError upon passing negative numbers', () => {
fc.assert(
fc.property(
fc.anything().filter((anything) => typeof anything! === 'number' && !isNaN(anything) && anything < 0),
(negativeValue) => {
expect(() => isNaturalKey(negativeValue as number)).toThrowError(RangeError)
},
),
)
})

describe('upon passing a positive number or zero', () => {
it('should not throw any error', () => {
fc.assert(
fc.property(
fc.anything().filter((anything) => typeof anything! === 'number' && !isNaN(anything) && anything >= 0),
(value) => {
expect(() => isNaturalKey(value as number)).not.toThrow()
},
),
)
})

it('should return a boolean', () => {
fc.assert(
fc.property(
fc.anything().filter((anything) => typeof anything! === 'number' && !isNaN(anything) && anything >= 0),
(value) => {
expect(typeof isNaturalKey(value as number)).toBe('boolean')
},
),
)
})
})

+ 21
- 0
src/services/isNaturalKey.ts Переглянути файл

@@ -0,0 +1,21 @@
const NATURAL_KEYS = [0, 2, 4, 5, 7, 9, 11]

interface IsNaturalKey {
(k: number): boolean
}

const isNaturalKey: IsNaturalKey = (k: number): boolean => {
const type = typeof (k as unknown)
if ((type as string) !== 'number') {
throw TypeError(`Invalid value type passed to isNaturalKey, expected 'number', got ${type}.`)
}
if (isNaN(k)) {
throw RangeError('Value passed is NaN.')
}
if (k < 0) {
throw RangeError('Value must be positive.')
}
return NATURAL_KEYS.includes(Math.floor(k) % 12)
}

export default isNaturalKey

+ 14
- 0
src/services/keyNames.json Переглянути файл

@@ -0,0 +1,14 @@
[
"C",
"C♯",
"D",
"D♯",
"E",
"F",
"F♯",
"G",
"G♯",
"A",
"A♯",
"B"
]

+ 6
- 0
src/services/messages.json Переглянути файл

@@ -0,0 +1,6 @@
{
"SPAN": "Span",
"DETAIL_SCALE_FACTOR": "Detail Scale Factor",
"DEBUG": "Debug",
"VIEW": "View"
}

+ 12
- 0
src/services/messages.ts Переглянути файл

@@ -0,0 +1,12 @@
import messages from './messages.json'

type MsgId = keyof typeof messages

interface GetMessage {
(msgId: string): string,
}

export const _: GetMessage = (msgId) => {
const { [msgId as MsgId]: msgStr = msgId } = messages
return msgStr
}

+ 4
- 0
src/services/scaleFactors.json Переглянути файл

@@ -0,0 +1,4 @@
[
1,
2
]

+ 34
- 0
src/services/spans.json Переглянути файл

@@ -0,0 +1,34 @@
[
{
"startKey": 36,
"endKey": 84
},
{
"startKey": 36,
"endKey": 89
},
{
"startKey": 36,
"endKey": 96
},
{
"startKey": 28,
"endKey": 103
},
{
"startKey": 21,
"endKey": 108
},
{
"startKey": 12,
"endKey": 108
},
{
"startKey": 12,
"endKey": 119
},
{
"startKey": 0,
"endKey": 127
}
]

+ 0
- 161
src/shell/electron.ts Переглянути файл

@@ -1,161 +0,0 @@
import { app, BrowserWindow, Menu, } from 'electron'
// @ts-ignore
import electronIsDev = require('electron-is-dev')
// @ts-ignore
import midi = require('midi')
// @ts-ignore
import path = require('path')

const SCREEN_HEIGHT = 100
const SCREEN_WIDTH = 52 * 20 + 200

const createWindow = () => {
const win = new BrowserWindow({
width: SCREEN_WIDTH,
height: SCREEN_HEIGHT,
useContentSize: true,
backgroundColor: '#000000',
resizable: false,
minimizable: false,
maximizable: false,
fullscreenable: false,
webPreferences: {
devTools: electronIsDev,
nodeIntegration: true,
}
})

win.loadURL(
electronIsDev
? 'http://localhost:3000'
: `file://${path.join(__dirname, '../build/index.html')}`
)

//if (electronIsDev) {
win.webContents.openDevTools()
//}

const input = new midi.Input()

if (input.getPortCount() > 0) {
input.openPort(0)
}

input.on('message', (deltaTime: number, message: unknown[]) => {
const [type, data1, data2] = message
switch (type) {
case 144:
win.webContents.send('note', data1 + ':' + data2)
break
case 176:
win.webContents.send('pedal', data1 + ':' + data2)
break
}
})
}

const SPANS = [
{
label: '4 octaves (C2 - C6)',
startKey: 36,
endKey: 84,
naturalKeys: 29,
},
{
label: '4 1/2 octaves (C2 - F6)',
startKey: 36,
endKey: 89,
naturalKeys: 33,
},
{
label: '5 octaves (C2 - C7)',
startKey: 36,
endKey: 96,
naturalKeys: 36,
},
{
label: '6 octaves (E1 - G7)',
startKey: 28,
endKey: 103,
naturalKeys: 45,
},
{
label: '7 1/3 octaves (A0 - C8)',
startKey: 21,
endKey: 108,
naturalKeys: 52,
},
{
label: '8 octaves (C0 - C8)',
startKey: 12,
endKey: 108,
naturalKeys: 57,
},
{
label: '9 octaves (C0 - B8)',
startKey: 12,
endKey: 119,
naturalKeys: 63,
},
{
label: 'Full MIDI (C-1 - G9)',
startKey: 0,
endKey: 127,
naturalKeys: 75,
},
]

const platformMenu = Menu.buildFromTemplate([
...(
process.platform === 'darwin'
? [
{
label: app.name,
submenu: [
{ role: 'about' },
{ type: 'separator' },
{ role: 'services' },
{ type: 'separator' },
{ role: 'hide' },
{ role: 'hideothers' },
{ role: 'unhide' },
{ type: 'separator' },
{ role: 'quit' }
],
}
]
: []
) as object[],
{
label: 'Span',
submenu: SPANS.map(s => ({
label: s.label,
click: (item, browserWindow) => {
if (typeof browserWindow !== 'undefined') {
browserWindow!.setContentSize((14 * s.naturalKeys) + 200, SCREEN_HEIGHT)
browserWindow!.webContents.send('spanchange', `${s.startKey}:${s.endKey}:${s.naturalKeys}`)
}
},
}))
}
])

Menu.setApplicationMenu(platformMenu)

app
.whenReady()
.then(() => {
createWindow()
})

app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})

app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})

+ 29
- 290
yarn.lock Переглянути файл

@@ -1663,7 +1663,7 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.2.tgz#ace1880c03594cc3e80206d96847157d8e7fa349"
integrity sha512-bnoqK579sAYrQbp73wwglccjJ4sfRdKU7WNEZ5FW4K2U6Kc0/eZ5kvXG0JKsEKFB50zrFmfFt52/cvBbZa7eXg==

"@types/node@^12.0.0", "@types/node@^12.0.12":
"@types/node@12", "@types/node@^12.0.12":
version "12.12.54"
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.54.tgz#a4b58d8df3a4677b6c08bfbc94b7ad7a7a5f82d1"
integrity sha512-ge4xZ3vSBornVYlDnk7yZ0gK6ChHf/CHB7Gl1I0Jhah8DDnEQqBzgohYG4FX4p81TNirSETOiSyn+y1r9/IR6w==
@@ -1949,11 +1949,6 @@ abab@^2.0.0:
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a"
integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==

abbrev@1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==

accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
version "1.3.7"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
@@ -2162,19 +2157,11 @@ app-builder-lib@22.8.0:
semver "^7.3.2"
temp-file "^3.3.7"

aproba@^1.0.3, aproba@^1.1.1:
aproba@^1.1.1:
version "1.2.0"
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==

are-we-there-yet@~1.1.2:
version "1.1.5"
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
dependencies:
delegates "^1.0.0"
readable-stream "^2.0.6"

argparse@^1.0.7:
version "1.0.10"
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
@@ -3161,13 +3148,6 @@ cli-boxes@^2.2.0:
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d"
integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==

cli-cursor@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
dependencies:
restore-cursor "^2.0.0"

cli-cursor@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
@@ -3175,11 +3155,6 @@ cli-cursor@^3.1.0:
dependencies:
restore-cursor "^3.1.0"

cli-spinners@^2.0.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.4.0.tgz#c6256db216b878cfba4720e719cec7cf72685d7f"
integrity sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA==

cli-width@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
@@ -3239,11 +3214,6 @@ clone-response@^1.0.2:
dependencies:
mimic-response "^1.0.0"

clone@^1.0.2:
version "1.0.4"
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=

co@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
@@ -3311,11 +3281,6 @@ color@^3.0.0:
color-convert "^1.9.1"
color-string "^1.5.2"

colors@^1.3.3:
version "1.4.0"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==

combined-stream@^1.0.6, combined-stream@~1.0.6:
version "1.0.8"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
@@ -3440,11 +3405,6 @@ console-browserify@^1.1.0:
resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==

console-control-strings@^1.0.0, console-control-strings@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=

constants-browserify@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
@@ -3890,7 +3850,7 @@ date-fns@^2.0.1:
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.15.0.tgz#424de6b3778e4e69d3ff27046ec136af58ae5d5f"
integrity sha512-ZCPzAMJZn3rNUvvQIMlXhDr4A+Ar07eLeGsGREoWU19a3Pqf5oYa+ccd+B3F6XVtQY6HANMFdOQ8A+ipFnvJdQ==

debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.5.1, debug@^2.6.0, debug@^2.6.9:
debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
@@ -3965,13 +3925,6 @@ default-gateway@^4.2.0:
execa "^1.0.0"
ip-regex "^2.1.0"

defaults@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=
dependencies:
clone "^1.0.2"

defer-to-connect@^1.0.1:
version "1.1.3"
resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591"
@@ -4024,11 +3977,6 @@ delayed-stream@~1.0.0:
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=

delegates@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=

depd@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
@@ -4047,11 +3995,6 @@ destroy@~1.0.4:
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=

detect-libc@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=

detect-newline@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
@@ -4320,21 +4263,6 @@ electron-publish@22.8.0:
lazy-val "^1.0.4"
mime "^2.4.6"

electron-rebuild@^1.11.0:
version "1.11.0"
resolved "https://registry.yarnpkg.com/electron-rebuild/-/electron-rebuild-1.11.0.tgz#e384773a9ad30fe0a6a5bbb326b779d51f668b6a"
integrity sha512-cn6AqZBQBVtaEyj5jZW1/LOezZZ22PA1HvhEP7asvYPJ8PDF4i4UFt9be4i9T7xJKiSiomXvY5Fd+dSq3FXZxA==
dependencies:
colors "^1.3.3"
debug "^4.1.1"
detect-libc "^1.0.3"
fs-extra "^8.1.0"
node-abi "^2.11.0"
node-gyp "^6.0.1"
ora "^3.4.0"
spawn-rx "^3.0.0"
yargs "^14.2.0"

electron-to-chromium@^1.3.378:
version "1.3.379"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.379.tgz#81dc5e82a3e72bbb830d93e15bc35eda2bbc910e"
@@ -4916,6 +4844,13 @@ extsprintf@^1.2.0:
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=

fast-check@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fast-check/-/fast-check-2.1.0.tgz#5d7b6f104160253361e95ce9c282b749395a5ee9"
integrity sha512-aZe06whLv1ZNFM1rn8mGL3+wf0PQpZyySQ81+O0L3APiLNzCi2PtJqeohn5Xab1yAxF3Vhzf5AvKzPispGd0tQ==
dependencies:
pure-rand "^3.0.0"

fast-deep-equal@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4"
@@ -5250,13 +5185,6 @@ fs-extra@^9.0.1:
jsonfile "^6.0.1"
universalify "^1.0.0"

fs-minipass@^1.2.5:
version "1.2.7"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==
dependencies:
minipass "^2.6.0"

fs-minipass@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
@@ -5302,20 +5230,6 @@ functional-red-black-tree@^1.0.1:
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=

gauge@~2.7.3:
version "2.7.4"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
dependencies:
aproba "^1.0.3"
console-control-strings "^1.0.0"
has-unicode "^2.0.0"
object-assign "^4.1.0"
signal-exit "^3.0.0"
string-width "^1.0.1"
strip-ansi "^3.0.1"
wide-align "^1.1.0"

gensync@^1.0.0-beta.1:
version "1.0.0-beta.1"
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
@@ -5563,11 +5477,6 @@ has-symbols@^1.0.0, has-symbols@^1.0.1:
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==

has-unicode@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=

has-value@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
@@ -7240,11 +7149,6 @@ lodash._reinterpolate@^3.0.0:
resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=

lodash.assign@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=

lodash.memoize@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
@@ -7285,13 +7189,6 @@ lodash@^4.17.10, lodash@^4.17.19:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==

log-symbols@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==
dependencies:
chalk "^2.0.1"

loglevel@^1.6.6:
version "1.6.7"
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.7.tgz#b3e034233188c68b889f5b862415306f565e2c56"
@@ -7543,11 +7440,6 @@ mime@^2.4.6:
resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1"
integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==

mimic-fn@^1.0.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==

mimic-fn@^2.0.0, mimic-fn@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
@@ -7626,14 +7518,6 @@ minipass-pipeline@^1.2.2:
dependencies:
minipass "^3.0.0"

minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0:
version "2.9.0"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
dependencies:
safe-buffer "^5.1.2"
yallist "^3.0.0"

minipass@^3.0.0, minipass@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5"
@@ -7641,13 +7525,6 @@ minipass@^3.0.0, minipass@^3.1.1:
dependencies:
yallist "^4.0.0"

minizlib@^1.2.1:
version "1.3.3"
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==
dependencies:
minipass "^2.9.0"

mississippi@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
@@ -7687,13 +7564,6 @@ mkdirp@0.5.1:
dependencies:
minimist "0.0.8"

mkdirp@^0.5.0, mkdirp@^0.5.4:
version "0.5.5"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
dependencies:
minimist "^1.2.5"

mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1:
version "0.5.3"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c"
@@ -7701,6 +7571,13 @@ mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1:
dependencies:
minimist "^1.2.5"

mkdirp@^0.5.4:
version "0.5.5"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
dependencies:
minimist "^1.2.5"

move-concurrently@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
@@ -7806,35 +7683,11 @@ no-case@^3.0.3:
lower-case "^2.0.1"
tslib "^1.10.0"

node-abi@^2.11.0:
version "2.18.0"
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.18.0.tgz#1f5486cfd7d38bd4f5392fa44a4ad4d9a0dffbf4"
integrity sha512-yi05ZoiuNNEbyT/xXfSySZE+yVnQW6fxPZuFbLyS1s6b5Kw3HzV2PHOM4XR+nsjzkHxByK+2Wg+yCQbe35l8dw==
dependencies:
semver "^5.4.1"

node-forge@0.9.0:
version "0.9.0"
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579"
integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==

node-gyp@^6.0.1:
version "6.1.0"
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-6.1.0.tgz#64e31c61a4695ad304c1d5b82cf6b7c79cc79f3f"
integrity sha512-h4A2zDlOujeeaaTx06r4Vy+8MZ1679lU+wbCKDS4ZtvY2A37DESo37oejIw0mtmR3+rvNwts5B6Kpt1KrNYdNw==
dependencies:
env-paths "^2.2.0"
glob "^7.1.4"
graceful-fs "^4.2.2"
mkdirp "^0.5.1"
nopt "^4.0.1"
npmlog "^4.1.2"
request "^2.88.0"
rimraf "^2.6.3"
semver "^5.7.1"
tar "^4.4.12"
which "^1.3.1"

node-int64@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
@@ -7892,14 +7745,6 @@ node-releases@^1.1.52:
dependencies:
semver "^6.3.0"

nopt@^4.0.1:
version "4.0.3"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
dependencies:
abbrev "1"
osenv "^0.1.4"

normalize-package-data@^2.3.2, normalize-package-data@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
@@ -7962,16 +7807,6 @@ npm-run-path@^2.0.0:
dependencies:
path-key "^2.0.0"

npmlog@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
dependencies:
are-we-there-yet "~1.1.2"
console-control-strings "~1.1.0"
gauge "~2.7.3"
set-blocking "~2.0.0"

nth-check@^1.0.2, nth-check@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
@@ -8124,13 +7959,6 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0:
dependencies:
wrappy "1"

onetime@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
dependencies:
mimic-fn "^1.0.0"

onetime@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
@@ -8173,18 +8001,6 @@ optionator@^0.8.1, optionator@^0.8.3:
type-check "~0.3.2"
word-wrap "~1.2.3"

ora@^3.4.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318"
integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==
dependencies:
chalk "^2.4.2"
cli-cursor "^2.1.0"
cli-spinners "^2.0.0"
log-symbols "^2.2.0"
strip-ansi "^5.2.0"
wcwidth "^1.0.1"

original@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f"
@@ -8197,11 +8013,6 @@ os-browserify@^0.3.0:
resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=

os-homedir@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=

os-locale@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
@@ -8211,19 +8022,11 @@ os-locale@^3.0.0:
lcid "^2.0.0"
mem "^4.0.0"

os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
os-tmpdir@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=

osenv@^0.1.4:
version "0.1.5"
resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
dependencies:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"

p-cancelable@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
@@ -9461,6 +9264,11 @@ pupa@^2.0.1:
dependencies:
escape-goat "^2.0.0"

pure-rand@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-3.0.0.tgz#9dd90685e0c6ff98871f656a5e37fe90d2bfe0e4"
integrity sha512-7/U3rk8elhZPagxdheW1UHEhRr0IF8wCs3qyYVVswSxLoRrrrCMyaTKtAYIrCfuTeUoX/O3rN1piY/pX8JEcEA==

q@^1.1.2:
version "1.5.1"
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
@@ -9731,7 +9539,7 @@ read-pkg@^4.0.1:
parse-json "^4.0.0"
pify "^3.0.0"

"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
version "2.3.7"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
@@ -10047,14 +9855,6 @@ responselike@^1.0.2:
dependencies:
lowercase-keys "^1.0.0"

restore-cursor@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
dependencies:
onetime "^2.0.0"
signal-exit "^3.0.2"

restore-cursor@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
@@ -10149,7 +9949,7 @@ run-queue@^1.0.0, run-queue@^1.0.3:
dependencies:
aproba "^1.1.1"

rxjs@^6.3.1, rxjs@^6.5.2, rxjs@^6.5.5:
rxjs@^6.5.2, rxjs@^6.5.5:
version "6.6.2"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.2.tgz#8096a7ac03f2cc4fe5860ef6e572810d9e01c0d2"
integrity sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==
@@ -10284,7 +10084,7 @@ semver-diff@^3.1.1:
dependencies:
semver "^6.3.0"

"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1:
"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
@@ -10358,7 +10158,7 @@ serve-static@1.14.1:
parseurl "~1.3.3"
send "0.17.1"

set-blocking@^2.0.0, set-blocking@~2.0.0:
set-blocking@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
@@ -10605,15 +10405,6 @@ spawn-command@^0.0.2-1:
resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0"
integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=

spawn-rx@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/spawn-rx/-/spawn-rx-3.0.0.tgz#1d33511e13ec26337da51d78630e08beb57a6767"
integrity sha512-dw4Ryg/KMNfkKa5ezAR5aZe9wNwPdKlnHEXtHOjVnyEDSPQyOpIPPRtcIiu7127SmtHhaCjw21yC43HliW0iIg==
dependencies:
debug "^2.5.1"
lodash.assign "^4.2.0"
rxjs "^6.3.1"

spdx-correct@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
@@ -10805,7 +10596,7 @@ string-width@^1.0.1:
is-fullwidth-code-point "^1.0.0"
strip-ansi "^3.0.0"

"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1:
string-width@^2.0.0, string-width@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
@@ -11039,19 +10830,6 @@ tapable@^1.0.0, tapable@^1.1.3:
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==

tar@^4.4.12:
version "4.4.13"
resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525"
integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==
dependencies:
chownr "^1.1.1"
fs-minipass "^1.2.5"
minipass "^2.8.6"
minizlib "^1.2.1"
mkdirp "^0.5.0"
safe-buffer "^5.1.2"
yallist "^3.0.3"

temp-file@^3.3.7:
version "3.3.7"
resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.3.7.tgz#686885d635f872748e384e871855958470aeb18a"
@@ -11655,13 +11433,6 @@ wbuf@^1.1.0, wbuf@^1.7.3:
dependencies:
minimalistic-assert "^1.0.0"

wcwidth@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=
dependencies:
defaults "^1.0.3"

webidl-conversions@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
@@ -11840,13 +11611,6 @@ which@^2.0.1:
dependencies:
isexe "^2.0.0"

wide-align@^1.1.0:
version "1.1.3"
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
dependencies:
string-width "^1.0.2 || 2"

widest-line@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca"
@@ -12111,7 +11875,7 @@ xtend@^4.0.0, xtend@~4.0.1:
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==

yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3:
yallist@^3.0.2:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
@@ -12144,14 +11908,6 @@ yargs-parser@^13.1.2:
camelcase "^5.0.0"
decamelize "^1.2.0"

yargs-parser@^15.0.1:
version "15.0.1"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3"
integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==
dependencies:
camelcase "^5.0.0"
decamelize "^1.2.0"

yargs-parser@^18.1.2:
version "18.1.3"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
@@ -12194,23 +11950,6 @@ yargs@^13.3.0:
y18n "^4.0.0"
yargs-parser "^13.1.2"

yargs@^14.2.0:
version "14.2.3"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414"
integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==
dependencies:
cliui "^5.0.0"
decamelize "^1.2.0"
find-up "^3.0.0"
get-caller-file "^2.0.1"
require-directory "^2.1.1"
require-main-filename "^2.0.0"
set-blocking "^2.0.0"
string-width "^3.0.0"
which-module "^2.0.0"
y18n "^4.0.0"
yargs-parser "^15.0.1"

yargs@^15.3.1:
version "15.4.1"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"


Завантаження…
Відмінити
Зберегти