mirror of
https://github.com/enso-org/enso.git
synced 2024-12-18 14:01:37 +03:00
Improving Electron App (https://github.com/enso-org/ide/pull/263)
Original commit: da0872f05a
This commit is contained in:
parent
e207e0afa9
commit
4f95075f2f
@ -4,19 +4,19 @@ let config = {
|
||||
main: "index.js",
|
||||
|
||||
dependencies: {
|
||||
"enso-studio-content": "2.0.0-alpha.0",
|
||||
"enso-studio-common": "2.0.0-alpha.0",
|
||||
"enso-studio-icons": "2.0.0-alpha.0",
|
||||
"copy-webpack-plugin": "^5.1.1",
|
||||
"create-servers": "^3.1.0",
|
||||
"electron-is-dev": "^1.1.0"
|
||||
"electron-is-dev": "^1.1.0",
|
||||
"enso-studio-common": "2.0.0-alpha.0",
|
||||
"enso-studio-content": "2.0.0-alpha.0",
|
||||
"enso-studio-icons": "2.0.0-alpha.0",
|
||||
"yargs": "^15.3.0"
|
||||
},
|
||||
|
||||
devDependencies: {
|
||||
"compression-webpack-plugin": "^3.1.0",
|
||||
"copy-webpack-plugin": "^5.1.1",
|
||||
"devtron": "^1.4.0",
|
||||
"electron": "8.0.2",
|
||||
"electron": "8.1.1",
|
||||
"electron-builder": "^22.3.2"
|
||||
},
|
||||
|
||||
|
@ -1,15 +1,18 @@
|
||||
'use strict'
|
||||
|
||||
import * as buildCfg from '../../../../../dist/build.json'
|
||||
import * as Electron from 'electron'
|
||||
import * as isDev from 'electron-is-dev'
|
||||
import * as minimist from 'minimist'
|
||||
import * as path from 'path'
|
||||
import * as pkg from '../package.json'
|
||||
import * as rootCfg from '../../../package.json'
|
||||
import * as buildCfg from '../../../../../dist/build.json'
|
||||
import * as Server from 'enso-studio-common/src/server'
|
||||
import * as yargs from 'yargs'
|
||||
|
||||
|
||||
// FIXME default options parsed wrong
|
||||
// https://github.com/yargs/yargs/issues/1590
|
||||
|
||||
// ================
|
||||
// === Defaults ===
|
||||
@ -22,72 +25,112 @@ let windowCfg = {
|
||||
|
||||
|
||||
|
||||
// =============
|
||||
// === Utils ===
|
||||
// =============
|
||||
// =====================
|
||||
// === Option Parser ===
|
||||
// =====================
|
||||
|
||||
function kebabToCamelCase(str){
|
||||
let arr = str.split('-');
|
||||
let capital = arr.map((item,index) => {
|
||||
return index ? item.charAt(0).toUpperCase() + item.slice(1).toLowerCase() : item
|
||||
})
|
||||
return capital.join("");
|
||||
}
|
||||
|
||||
function parseCmdArgs() {
|
||||
let argv = isDev ? process.argv.slice(process.argv.indexOf('--') + 1) : process.argv
|
||||
let args = minimist(argv)
|
||||
for (let argName in args) {
|
||||
let newName = kebabToCamelCase(argName)
|
||||
args[newName] = args[argName]
|
||||
}
|
||||
return args
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ==================================
|
||||
// === Command Line Args Handlers ===
|
||||
// ==================================
|
||||
|
||||
const HELP_MESSAGE = `
|
||||
let usage = `
|
||||
${pkg.build.productName} ${rootCfg.version} command line interface.
|
||||
|
||||
Usage: ${pkg.build.productName} [options]
|
||||
|
||||
Config Options:
|
||||
--port Port to use [${Server.DEFAULT_PORT}].
|
||||
--server Run the server [true].
|
||||
--window Show the window [true].
|
||||
|
||||
Debug Options:
|
||||
--background-throttling Throttle animations when the app becomes background.
|
||||
--debug-scene [SCENE] Run the debug scene instead of the main app.
|
||||
--dev Run the application in development mode.
|
||||
--devtron Install the Devtron Developer Tools extension.
|
||||
|
||||
Style Options:
|
||||
--frame Draw window frame.
|
||||
--vibrancy Use the vibrancy effect [true].
|
||||
--window-size [SIZE] Set the window size [${windowCfg.width}x${windowCfg.height}].
|
||||
|
||||
Other Options:
|
||||
--help Print the help message and exit.
|
||||
--version Print the version.
|
||||
`
|
||||
|
||||
let optParser = yargs
|
||||
.scriptName("")
|
||||
.usage(usage)
|
||||
.help()
|
||||
.version(false)
|
||||
.parserConfiguration({'populate--':true})
|
||||
.strict()
|
||||
|
||||
|
||||
// === Config Options ===
|
||||
|
||||
let configOptionsGroup = 'Config Options:'
|
||||
|
||||
optParser.options('port', {
|
||||
group : configOptionsGroup,
|
||||
describe : `Port to use [${Server.DEFAULT_PORT}]`,
|
||||
})
|
||||
|
||||
optParser.options('server', {
|
||||
group : configOptionsGroup,
|
||||
describe : 'Run the server [true]',
|
||||
})
|
||||
|
||||
optParser.options('window', {
|
||||
group : configOptionsGroup,
|
||||
describe : 'Show the window [true]',
|
||||
})
|
||||
|
||||
optParser.options('background-throttling', {
|
||||
group : configOptionsGroup,
|
||||
describe : 'Throttle animations when run in background [false]',
|
||||
})
|
||||
|
||||
|
||||
// === Debug Options ===
|
||||
|
||||
let debugOptionsGroup = 'Debug Options:'
|
||||
|
||||
optParser.options('debug-scene', {
|
||||
group : debugOptionsGroup,
|
||||
describe : 'Run the debug scene instead of the main app',
|
||||
requiresArg : true
|
||||
})
|
||||
|
||||
optParser.options('dev', {
|
||||
group : debugOptionsGroup,
|
||||
describe : 'Run the application in development mode',
|
||||
})
|
||||
|
||||
optParser.options('devtron', {
|
||||
group : debugOptionsGroup,
|
||||
describe : 'Install the Devtron Developer Tools extension',
|
||||
})
|
||||
|
||||
|
||||
// === Style Options ===
|
||||
|
||||
let styleOptionsGroup = 'Style Options:'
|
||||
|
||||
optParser.options('frame', {
|
||||
group : styleOptionsGroup,
|
||||
describe : 'Draw window frame [false]'
|
||||
})
|
||||
|
||||
optParser.options('vibrancy', {
|
||||
group : styleOptionsGroup,
|
||||
describe : 'Use the vibrancy effect [true]'
|
||||
})
|
||||
|
||||
optParser.options('window-size', {
|
||||
group : styleOptionsGroup,
|
||||
describe : `Set the window size [${windowCfg.width}x${windowCfg.height}]`,
|
||||
requiresArg : true
|
||||
})
|
||||
|
||||
|
||||
// === Other Options ===
|
||||
|
||||
optParser.options('info', {
|
||||
describe : `Print the system debug info`,
|
||||
})
|
||||
|
||||
optParser.options('version', {
|
||||
describe : `Print the version`,
|
||||
})
|
||||
|
||||
|
||||
// === Parsing ===
|
||||
|
||||
function parseCmdArgs() {
|
||||
let argv = isDev ? process.argv.slice(process.argv.indexOf('--') + 1) : process.argv
|
||||
return optParser.parse(argv)
|
||||
}
|
||||
|
||||
let args = parseCmdArgs()
|
||||
|
||||
if (args.help) {
|
||||
console.log(HELP_MESSAGE)
|
||||
process.exit()
|
||||
}
|
||||
|
||||
if (args.version) {
|
||||
console.log(`${rootCfg.version} (build ${buildCfg.buildVersion})`)
|
||||
process.exit();
|
||||
}
|
||||
|
||||
if (args.windowSize) {
|
||||
let size = args.windowSize.split('x')
|
||||
let width = parseInt(size[0])
|
||||
@ -102,6 +145,47 @@ if (args.windowSize) {
|
||||
|
||||
|
||||
|
||||
// ==================
|
||||
// === Debug Info ===
|
||||
// ==================
|
||||
|
||||
let versionInfo = {
|
||||
core: rootCfg.version,
|
||||
build: buildCfg.buildVersion,
|
||||
electron: process.versions.electron,
|
||||
chrome: process.versions.chrome,
|
||||
}
|
||||
|
||||
async function getDebugInfo() {
|
||||
let procMemInfo = await process.getProcessMemoryInfo()
|
||||
return {
|
||||
version: versionInfo,
|
||||
creation: process.getCreationTime(),
|
||||
perf: {
|
||||
cpu: process.getCPUUsage(),
|
||||
},
|
||||
memory: {
|
||||
heap: process.getHeapStatistics(),
|
||||
blink: process.getBlinkMemoryInfo(),
|
||||
process: procMemInfo,
|
||||
system: process.getSystemMemoryInfo(),
|
||||
},
|
||||
system: {
|
||||
platform: process.platform,
|
||||
arch: process.arch,
|
||||
version: process.getSystemVersion(),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
async function printDebugInfo() {
|
||||
let info = await getDebugInfo()
|
||||
console.log(JSON.stringify(info,undefined,4))
|
||||
process.exit();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ================
|
||||
// === Security ===
|
||||
// ================
|
||||
@ -191,7 +275,7 @@ async function main() {
|
||||
serverCfg.fallback = '/assets/index.html'
|
||||
server = await Server.create(serverCfg)
|
||||
}
|
||||
mainWindow = createWindow()
|
||||
mainWindow = createWindow()
|
||||
mainWindow.on("close", (evt) => {
|
||||
if (hideInsteadOfQuit) {
|
||||
evt.preventDefault()
|
||||
@ -297,8 +381,18 @@ Electron.app.on('activate', () => {
|
||||
})
|
||||
|
||||
Electron.app.on('ready', () => {
|
||||
if(args.window !== false) {
|
||||
main()
|
||||
if (args.version) {
|
||||
console.log(`core : ${versionInfo.core}`)
|
||||
console.log(`build : ${versionInfo.build}`)
|
||||
console.log(`electron : ${versionInfo.electron}`)
|
||||
console.log(`chrome : ${versionInfo.chrome}`)
|
||||
process.exit();
|
||||
} else if (args.info) {
|
||||
printDebugInfo()
|
||||
} else {
|
||||
if(args.window !== false) {
|
||||
main()
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
|
@ -20,34 +20,34 @@
|
||||
/>
|
||||
<title>Enso IDE</title>
|
||||
<style>
|
||||
html, body {
|
||||
width : 100vw;
|
||||
height : 100vh;
|
||||
}
|
||||
body {
|
||||
margin:0;
|
||||
}
|
||||
#root {
|
||||
width : 100vw;
|
||||
height : 100vh;
|
||||
margin : 0;
|
||||
position : absolute;
|
||||
overflow : hidden;
|
||||
}
|
||||
.titlebar {
|
||||
width : 100vw;
|
||||
height : 36px;
|
||||
margin : 0;
|
||||
position : absolute;
|
||||
z-index : 10;
|
||||
-webkit-app-region : drag;
|
||||
-webkit-user-select : none;
|
||||
}
|
||||
html, body {
|
||||
width : 100vw;
|
||||
height : 100vh;
|
||||
}
|
||||
body {
|
||||
margin:0;
|
||||
}
|
||||
#root {
|
||||
width : 100vw;
|
||||
height : 100vh;
|
||||
margin : 0;
|
||||
position : absolute;
|
||||
overflow : hidden;
|
||||
}
|
||||
.titlebar {
|
||||
width : 100vw;
|
||||
height : 36px;
|
||||
margin : 0;
|
||||
position : absolute;
|
||||
z-index : 10;
|
||||
-webkit-app-region : drag;
|
||||
-webkit-user-select : none;
|
||||
}
|
||||
</style>
|
||||
<script type="module" src="/assets/index.js" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="titlebar"></div>
|
||||
<!-- <div class="titlebar"></div> -->
|
||||
<div id="root"></div>
|
||||
<noscript>
|
||||
This page requires JavaScript to run. Please enable it in your browser.
|
||||
|
@ -1,311 +1,113 @@
|
||||
/// This file generates the product logo as SVG and then converts it to set of PNGs, MacOS ICNS, and
|
||||
/// Windows ICO formats.
|
||||
|
||||
class Text {
|
||||
constructor(size = 64, compatibleMode = true, xoff = 0) {
|
||||
this.size = size;
|
||||
this.compatibleMode = compatibleMode;
|
||||
this.borderMax = 10
|
||||
this.borderSpread = 0
|
||||
this.xoff = xoff
|
||||
this.init();
|
||||
}
|
||||
|
||||
init() {
|
||||
var scaleStop = 128;
|
||||
var scaleLog = Math.log2(scaleStop);
|
||||
this.borderWidth = this.borderMax - Math.pow(Math.log2(Math.min(this.size, 128)) / scaleLog, 3) * scaleLog;
|
||||
this.scale = this.size / 64;
|
||||
|
||||
this.d = this.borderWidth;
|
||||
this.height = 64;
|
||||
this.r = this.height / 3.5;
|
||||
this.baseHeight = this.r * 2;
|
||||
|
||||
this.ww = 240 * 10; // FIXME: * 10 added to make letters not clipped in small scale. Just a hack.
|
||||
this.hh = this.size * 10; // FIXME: ^^^
|
||||
|
||||
this.spacing = 10;
|
||||
|
||||
if (this.compatibleMode) { this.ref = "xlink:href" } else { this.ref = "href" }
|
||||
|
||||
this.defs = ''
|
||||
this.body = `<use ${this.ref}="#text" fill="#AE8035"/>`
|
||||
}
|
||||
|
||||
generate() {
|
||||
var widthOf_l = this.d + this.spacing
|
||||
var widthOf_lu = widthOf_l + 2 * this.r + this.spacing
|
||||
var widthOf_lun = widthOf_lu + 2 * this.r + this.spacing
|
||||
var widthOf_luna = widthOf_lun + 2 * this.r + this.spacing
|
||||
var docWidth = (widthOf_luna + this.xoff - this.spacing) * this.scale
|
||||
|
||||
return `
|
||||
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="${this.size}" width="${docWidth}" viewBox="0 0 ${docWidth} ${this.size}">
|
||||
<defs>
|
||||
|
||||
<rect id="bg" width="${this.ww}" height="${this.hh}" fill="white"/>
|
||||
|
||||
|
||||
<circle id="dotT" r="${this.d/2}" cx="${this.d/2}" cy="${this.d/2}"/>
|
||||
<circle id="dotB" r="${this.d/2}" cx="${this.d/2}" cy="-${this.d/2}"/>
|
||||
<circle id="dotM" r="${this.d/2}" cx="${this.d/2}" cy="${this.d/2 + this.height - this.baseHeight}"/>
|
||||
|
||||
<g id="letter_l">
|
||||
<use ${this.ref}="#dotT"/>
|
||||
<rect y="${this.d/2}" width="${this.d}" height="${this.height-this.d}"/>
|
||||
<use transform="translate(0,${this.height})" ${this.ref}="#dotB"/>
|
||||
</g>
|
||||
|
||||
<mask id="letter_u_mask">
|
||||
<use ${this.ref}="#bg"/>
|
||||
<circle cx="${this.r}" cy="${this.height-this.r}" r="${this.r-this.d}" fill="black"/>
|
||||
<rect width="${this.r*2}" height="${this.height-this.r-1}" fill="black"/>
|
||||
</mask>
|
||||
|
||||
<rect id="letter_u_side" y="${this.height-this.baseHeight+this.d/2}" width="${this.d}" height="${this.baseHeight-this.r-this.d/2}"/>
|
||||
|
||||
<g id="letter_u">
|
||||
<use ${this.ref}="#dotM"/>
|
||||
<use ${this.ref}="#dotM" transform="translate(${this.r*2-this.d})"/>
|
||||
<circle cx="${this.r}" cy="${this.height-this.r}" r="${this.r}" mask="url(#letter_u_mask)"/>
|
||||
<use ${this.ref}="#letter_u_side"/>
|
||||
<use ${this.ref}="#letter_u_side" transform="translate(${this.r*2-this.d})"/>
|
||||
</g>
|
||||
|
||||
<g id="letter_n">
|
||||
<use ${this.ref}="#letter_u" transform="rotate(180,${this.r},${this.height}) translate(0,${this.baseHeight})"/>
|
||||
</g>
|
||||
|
||||
<mask id="letter_a_mask">
|
||||
<use ${this.ref}="#bg"/>
|
||||
<circle cx="${this.r}" cy="${this.height-this.r}" r="${this.r-this.d}" fill="black"/>
|
||||
<rect y="${this.height-this.r}" x="${this.r}" width="${this.r-this.d}" height="${this.r-this.d}" fill="black"/>
|
||||
|
||||
</mask>
|
||||
|
||||
<g id="letter_a" mask="url(#letter_a_mask)">
|
||||
<circle cx="${this.r}" cy="${this.height-this.r}" r="${this.r}"/>
|
||||
<rect y="${this.height-this.r}" x="${this.r}" width="${this.r}" height="${this.r}"/>
|
||||
</g>
|
||||
|
||||
|
||||
|
||||
|
||||
<g id="text">
|
||||
<use ${this.ref}="#letter_l"/>
|
||||
<use ${this.ref}="#letter_u" transform="translate(${widthOf_l})"/>
|
||||
<use ${this.ref}="#letter_n" transform="translate(${widthOf_lu})"/>
|
||||
<use ${this.ref}="#letter_a" transform="translate(${widthOf_lun})"/>
|
||||
</g>
|
||||
|
||||
${this.defs}
|
||||
|
||||
</defs>
|
||||
<g transform="scale(${this.scale}) translate(${this.xoff})">${this.body}</g>
|
||||
</svg>
|
||||
`
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class Logo {
|
||||
constructor(size = 64, compatibleMode = true) {
|
||||
this.xsize = size
|
||||
this.size = 64;
|
||||
this.compatibleMode = compatibleMode;
|
||||
this.size = 64
|
||||
this.compatibleMode = compatibleMode
|
||||
this.borderMax = 10
|
||||
this.borderSpread = 0
|
||||
this.init();
|
||||
this.init()
|
||||
}
|
||||
|
||||
init() {
|
||||
var scaleStop = 128;
|
||||
var scaleLog = Math.log2(scaleStop);
|
||||
this.borderWidth = this.borderMax - Math.pow(Math.log2(Math.min(this.size, 128)) / scaleLog, 3) * scaleLog;
|
||||
this.topRadius = 32;
|
||||
this.borderOffset = this.borderWidth - this.borderSpread;
|
||||
this.innerRadius = this.topRadius - this.borderWidth - this.borderOffset;
|
||||
this.atomRadius = this.innerRadius / 2;
|
||||
this.atomDiff = 0;
|
||||
this.d = 4;
|
||||
this.scale = this.xsize / 64;
|
||||
|
||||
var scaleStop = 128
|
||||
var scaleLog = Math.log2(scaleStop)
|
||||
this.borderWidth = 6
|
||||
this.topRadius = 32
|
||||
this.borderOffset = this.borderWidth - this.borderSpread
|
||||
this.innerRadius = this.topRadius - this.borderWidth - this.borderOffset
|
||||
this.atomRadius = this.innerRadius / 2
|
||||
this.atomDiff = 0
|
||||
this.d = 4
|
||||
let innerSize = 56
|
||||
this.scale1 = innerSize / 64
|
||||
this.scale = (this.xsize / 64)
|
||||
this.tx = (64 - innerSize) / 2
|
||||
if (this.compatibleMode) { this.ref = "xlink:href" } else { this.ref = "href" }
|
||||
|
||||
this.defs = ''
|
||||
this.body = `<use ${this.ref}="#logo" fill="red"/>`
|
||||
}
|
||||
|
||||
generate() {
|
||||
return `
|
||||
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="${this.xsize}" width="${this.xsize}" viewBox="0 0 ${this.xsize} ${this.xsize}">
|
||||
<defs>
|
||||
<circle id="innerCircle" cx="32" cy="32" r="${this.innerRadius}"/>
|
||||
<circle id="leftAtom" cx="${this.borderWidth + this.borderOffset + this.atomRadius + this.atomDiff - this.d}" cy="32" r="${this.atomRadius + this.atomDiff + this.d}"/>
|
||||
<circle id="rightAtom" cx="${this.borderWidth + this.borderOffset + 3 * this.atomRadius + this.atomDiff}" cy="32" r="${this.atomRadius - this.atomDiff}"/>
|
||||
<mask id="innerCircleMask">
|
||||
<use ${this.ref}="#innerCircle" fill="white"/>
|
||||
</mask>
|
||||
<defs>
|
||||
<circle id="innerCircle" cx="32" cy="32" r="${this.innerRadius}"/>
|
||||
<circle id="leftAtom" cx="${this.borderWidth + this.borderOffset + this.atomRadius + this.atomDiff - this.d}" cy="32" r="${this.atomRadius + this.atomDiff + this.d}"/>
|
||||
<circle id="rightAtom" cx="${this.borderWidth + this.borderOffset + 3 * this.atomRadius + this.atomDiff}" cy="32" r="${this.atomRadius - this.atomDiff}"/>
|
||||
<mask id="innerCircleMask">
|
||||
<use ${this.ref}="#innerCircle" fill="white"/>
|
||||
</mask>
|
||||
|
||||
<rect id="bg" width="64" height="64" fill="white"/>
|
||||
<mask id="bgmask">
|
||||
<use ${this.ref}="#bg"/>
|
||||
<circle cx="32" cy="32" r="${32-this.borderWidth}" fill="black"/>
|
||||
</mask>
|
||||
<rect id="bg" width="64" height="64" fill="white"/>
|
||||
<mask id="bgmask">
|
||||
<use ${this.ref}="#bg"/>
|
||||
<circle cx="32" cy="32" r="${32-this.borderWidth}" fill="black"/>
|
||||
</mask>
|
||||
|
||||
<mask id="mainShapeMask">
|
||||
<use ${this.ref}="#bg"/>
|
||||
<use ${this.ref}="#leftAtom" fill="black"/>
|
||||
<rect cy="32" width="64" height="32" fill="black"/>
|
||||
</mask>
|
||||
<mask id="mainShapeMask">
|
||||
<use ${this.ref}="#bg"/>
|
||||
<use ${this.ref}="#leftAtom" fill="black"/>
|
||||
<rect cy="32" width="64" height="32" fill="black"/>
|
||||
</mask>
|
||||
|
||||
<g id="border">
|
||||
<circle cx="32" cy="32" r="32" mask="url(#bgmask)"/>
|
||||
</g>
|
||||
<g id="border">
|
||||
<circle cx="32" cy="32" r="32" mask="url(#bgmask)"/>
|
||||
</g>
|
||||
|
||||
<g id="front">
|
||||
<use ${this.ref}="#innerCircle" mask="url(#mainShapeMask)"/>
|
||||
<use ${this.ref}="#rightAtom"/>
|
||||
</g>
|
||||
<g id="front">
|
||||
<use ${this.ref}="#innerCircle" mask="url(#mainShapeMask)"/>
|
||||
<use ${this.ref}="#rightAtom"/>
|
||||
</g>
|
||||
|
||||
<g id="logo">
|
||||
<use ${this.ref}="#border"/>
|
||||
<use ${this.ref}="#front" transform="rotate(35 32 32)"/>
|
||||
</g>
|
||||
<g id="logo">
|
||||
<use ${this.ref}="#border"/>
|
||||
<use ${this.ref}="#front" transform="rotate(35 32 32)"/>
|
||||
</g>
|
||||
|
||||
${this.defs}
|
||||
<g id="logo-scaled">
|
||||
<g transform="translate(${this.tx} ${this.tx}) scale(${this.scale1})">
|
||||
<use ${this.ref}="#logo" fill="#fafafa"/>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<g id="background">
|
||||
<circle id="innerCircle" cx="32" cy="32" r="31" fill="#24292f"/>
|
||||
</g>
|
||||
|
||||
<g id="final">
|
||||
<g> <use ${this.ref}="#background"/> </g>
|
||||
<g> <use ${this.ref}="#logo-scaled"/> </g>
|
||||
</g>
|
||||
|
||||
${this.defs}
|
||||
|
||||
</defs>
|
||||
<g transform="scale(${this.scale})">${this.body}</g>
|
||||
<g transform="scale(${this.scale})"> <use ${this.ref}="#final"/> </g>
|
||||
</svg>
|
||||
`
|
||||
}
|
||||
}
|
||||
|
||||
class InAppLogo extends Logo {
|
||||
constructor(size, compatibleMode) {
|
||||
super(size, compatibleMode);
|
||||
this.body = `<use ${this.ref}="#logo" fill="#AE8035"/>`
|
||||
}
|
||||
}
|
||||
|
||||
class MinimalBlackLogo extends Logo {
|
||||
constructor(size, compatibleMode) {
|
||||
super(size, compatibleMode);
|
||||
this.borderMax = 10
|
||||
this.borderSpread = 0
|
||||
this.init()
|
||||
this.body = `<use ${this.ref}="#logo" fill="black"/>`
|
||||
}
|
||||
}
|
||||
|
||||
class MinimalWhiteLogo extends Logo {
|
||||
constructor(size, compatibleMode) {
|
||||
super(size, compatibleMode);
|
||||
super(size, compatibleMode)
|
||||
this.borderMax = 10
|
||||
this.borderSpread = 0
|
||||
this.init()
|
||||
this.body = `<use ${this.ref}="#logo" fill="#fafafa"/>`
|
||||
}
|
||||
}
|
||||
|
||||
class AppLogo extends Logo {
|
||||
constructor(size, compatibleMode) {
|
||||
super(size, compatibleMode);
|
||||
|
||||
var border = 4
|
||||
var scale = (64 - 2 * border) / 64
|
||||
|
||||
this.defs = `
|
||||
<linearGradient id="cd" x1="0" y1="0" x2="0" y2="64px" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0%" style="stop-color:#ECAE67;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#E2963B;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<filter id="toShadow" x="-50%" y="-50%" width="200%" height="200%">
|
||||
<feOffset result="offOut" in="SourceAlpha" dx="0" dy="2" />
|
||||
<feGaussianBlur result="blurOut" in="offOut" stdDeviation="1" />
|
||||
</filter>
|
||||
<g id="txLogo" transform="translate(${border}, ${border})"><use ${this.ref}="#scalledLogo"/></g>
|
||||
<g id="scalledLogo" transform="scale(${scale})"><use ${this.ref}="#filledLogo"/></g>
|
||||
<g id="filledLogo">
|
||||
<circle cx="32" cy="32" r="30" fill="#211F1A"/>
|
||||
<use ${this.ref}="#logo" fill="url(#cd)"/>
|
||||
</g>`;
|
||||
this.body = `
|
||||
<use ${this.ref}="#txLogo" filter="url(#toShadow)" opacity="0.7"/>
|
||||
<use ${this.ref}="#txLogo"/>
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
class BlackBackgroundLogo extends Logo {
|
||||
constructor(size, compatibleMode) {
|
||||
super(size, compatibleMode);
|
||||
|
||||
var border = 4
|
||||
var scale = (64 - 2 * border) / 64
|
||||
|
||||
this.defs = `
|
||||
<linearGradient id="cd" x1="0" y1="0" x2="0" y2="64px" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0%" style="stop-color:#ECAE67;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#E2963B;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<g id="txLogo" transform="translate(${border}, ${border})"><use ${this.ref}="#scalledLogo"/></g>
|
||||
<g id="scalledLogo" transform="scale(${scale})"><use ${this.ref}="#filledLogo"/></g>
|
||||
<g id="filledLogo">
|
||||
<use ${this.ref}="#logo" fill="url(#cd)"/>
|
||||
</g>`;
|
||||
this.body = `
|
||||
<rect id="bg" width="64" height="64" fill="#211F1A"/>
|
||||
<use ${this.ref}="#txLogo"/>
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
class WhiteBackgroundLogo extends Logo {
|
||||
constructor(size, compatibleMode) {
|
||||
super(size, compatibleMode);
|
||||
|
||||
var border = 4
|
||||
var scale = (64 - 2 * border) / 64
|
||||
|
||||
this.defs = `
|
||||
<linearGradient id="cd" x1="0" y1="0" x2="0" y2="64px" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0%" style="stop-color:#FAAF67;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#EB9139;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<g id="txLogo" transform="translate(${border}, ${border})"><use ${this.ref}="#scalledLogo"/></g>
|
||||
<g id="scalledLogo" transform="scale(${scale})"><use ${this.ref}="#filledLogo"/></g>
|
||||
|
||||
<g id="filledLogo">
|
||||
<use ${this.ref}="#logo" fill="url(#cd)"/>
|
||||
</g>`;
|
||||
this.body = `
|
||||
<use ${this.ref}="#txLogo"/>
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
fastGenerate = (cons) => (...args) => new cons(...args).generate()
|
||||
|
||||
exports.generateLogo = fastGenerate(Logo);
|
||||
exports.generateAppLogo = fastGenerate(AppLogo);
|
||||
exports.generateInAppLogo = fastGenerate(InAppLogo);
|
||||
exports.generateMinimalBlackLogo = fastGenerate(MinimalBlackLogo);
|
||||
exports.generateMinimalWhiteLogo = fastGenerate(MinimalWhiteLogo);
|
||||
exports.generateBlackBackgroundLogo = fastGenerate(BlackBackgroundLogo);
|
||||
exports.generateWhiteBackgroundLogo = fastGenerate(WhiteBackgroundLogo);
|
||||
exports.generateInAppLogoWithText = (size, mode) => exports.generateInAppLogo(size, mode) + exports.generateText(size, mode, 20);
|
||||
|
||||
exports.generateText = fastGenerate(Text);
|
||||
|
||||
exports.generateMinimalWhiteLogo = fastGenerate(MinimalWhiteLogo)
|
||||
|
||||
|
||||
const fss = require('fs')
|
||||
const fs = fss.promises
|
||||
const exec = require('child_process').exec;
|
||||
const spawn = require('child_process').spawn;
|
||||
const exec = require('child_process').exec
|
||||
const spawn = require('child_process').spawn
|
||||
const toIco = require('to-ico')
|
||||
const sharp = require("sharp")
|
||||
const path = require('path')
|
||||
|
275
gui/src/js/package-lock.json
generated
275
gui/src/js/package-lock.json
generated
@ -265,6 +265,69 @@
|
||||
"dedent": "^0.7.0",
|
||||
"npmlog": "^4.1.2",
|
||||
"yargs": "^14.2.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-regex": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
|
||||
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
|
||||
"dev": true
|
||||
},
|
||||
"is-fullwidth-code-point": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
|
||||
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
|
||||
"dev": true
|
||||
},
|
||||
"string-width": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
|
||||
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"emoji-regex": "^7.0.1",
|
||||
"is-fullwidth-code-point": "^2.0.0",
|
||||
"strip-ansi": "^5.1.0"
|
||||
}
|
||||
},
|
||||
"strip-ansi": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
|
||||
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-regex": "^4.1.0"
|
||||
}
|
||||
},
|
||||
"yargs": {
|
||||
"version": "14.2.3",
|
||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz",
|
||||
"integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"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-parser": {
|
||||
"version": "15.0.1",
|
||||
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz",
|
||||
"integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"camelcase": "^5.0.0",
|
||||
"decamelize": "^1.2.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@lerna/collect-uncommitted": {
|
||||
@ -4084,9 +4147,9 @@
|
||||
"integrity": "sha512-cuIMtJwxvzumSAkqaaoGY/L6Fc/t6YvoP9/VIaK0V/CyqKLEQ8sqODmYfy/cjXEdZ9+OOL8TecbJu+1RsofGDw=="
|
||||
},
|
||||
"electron": {
|
||||
"version": "8.0.2",
|
||||
"resolved": "https://registry.npmjs.org/electron/-/electron-8.0.2.tgz",
|
||||
"integrity": "sha512-hiQaFtFhd9X2Vjs01l3GXb8hPWSCa31o/kXydo+RC7vwcx9AGuzG7jWIq8vidzAWsF/YPM0LFVjFRZrfkqi03Q==",
|
||||
"version": "8.1.1",
|
||||
"resolved": "https://registry.npmjs.org/electron/-/electron-8.1.1.tgz",
|
||||
"integrity": "sha512-t+5zzFo7VOgckJc9YpImHJkpqeWxwpmEjywWbAa4IT5MULS7h1XU52H9gMswK/y8xc5lBNwxLhJSty/15+gi1A==",
|
||||
"requires": {
|
||||
"@electron/get": "^1.0.1",
|
||||
"@types/node": "^12.0.12",
|
||||
@ -4121,11 +4184,6 @@
|
||||
"yargs": "^15.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-regex": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
||||
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
|
||||
},
|
||||
"ansi-styles": {
|
||||
"version": "4.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
|
||||
@ -4144,16 +4202,6 @@
|
||||
"supports-color": "^7.1.0"
|
||||
}
|
||||
},
|
||||
"cliui": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
|
||||
"integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
|
||||
"requires": {
|
||||
"string-width": "^4.2.0",
|
||||
"strip-ansi": "^6.0.0",
|
||||
"wrap-ansi": "^6.2.0"
|
||||
}
|
||||
},
|
||||
"color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
@ -4167,69 +4215,11 @@
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
||||
},
|
||||
"emoji-regex": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
|
||||
},
|
||||
"find-up": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
|
||||
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
|
||||
"requires": {
|
||||
"locate-path": "^5.0.0",
|
||||
"path-exists": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"has-flag": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
|
||||
},
|
||||
"is-fullwidth-code-point": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
||||
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
|
||||
},
|
||||
"locate-path": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
|
||||
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
|
||||
"requires": {
|
||||
"p-locate": "^4.1.0"
|
||||
}
|
||||
},
|
||||
"p-locate": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
|
||||
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
|
||||
"requires": {
|
||||
"p-limit": "^2.2.0"
|
||||
}
|
||||
},
|
||||
"path-exists": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
|
||||
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
|
||||
},
|
||||
"string-width": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
|
||||
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
|
||||
"requires": {
|
||||
"emoji-regex": "^8.0.0",
|
||||
"is-fullwidth-code-point": "^3.0.0",
|
||||
"strip-ansi": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"strip-ansi": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
|
||||
"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
|
||||
"requires": {
|
||||
"ansi-regex": "^5.0.0"
|
||||
}
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "7.1.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
|
||||
@ -12213,63 +12203,134 @@
|
||||
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
|
||||
},
|
||||
"yargs": {
|
||||
"version": "14.2.3",
|
||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz",
|
||||
"integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==",
|
||||
"dev": true,
|
||||
"version": "15.3.0",
|
||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.0.tgz",
|
||||
"integrity": "sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA==",
|
||||
"requires": {
|
||||
"cliui": "^5.0.0",
|
||||
"cliui": "^6.0.0",
|
||||
"decamelize": "^1.2.0",
|
||||
"find-up": "^3.0.0",
|
||||
"find-up": "^4.1.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",
|
||||
"string-width": "^4.2.0",
|
||||
"which-module": "^2.0.0",
|
||||
"y18n": "^4.0.0",
|
||||
"yargs-parser": "^15.0.1"
|
||||
"yargs-parser": "^18.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-regex": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
||||
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
|
||||
},
|
||||
"ansi-styles": {
|
||||
"version": "4.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
|
||||
"integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
|
||||
"requires": {
|
||||
"@types/color-name": "^1.1.1",
|
||||
"color-convert": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"cliui": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
|
||||
"integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
|
||||
"requires": {
|
||||
"string-width": "^4.2.0",
|
||||
"strip-ansi": "^6.0.0",
|
||||
"wrap-ansi": "^6.2.0"
|
||||
}
|
||||
},
|
||||
"color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"requires": {
|
||||
"color-name": "~1.1.4"
|
||||
}
|
||||
},
|
||||
"color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
||||
},
|
||||
"emoji-regex": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
|
||||
},
|
||||
"find-up": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
|
||||
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
|
||||
"dev": true
|
||||
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
|
||||
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
|
||||
"requires": {
|
||||
"locate-path": "^5.0.0",
|
||||
"path-exists": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"is-fullwidth-code-point": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
|
||||
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
|
||||
"dev": true
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
||||
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
|
||||
},
|
||||
"locate-path": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
|
||||
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
|
||||
"requires": {
|
||||
"p-locate": "^4.1.0"
|
||||
}
|
||||
},
|
||||
"p-locate": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
|
||||
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
|
||||
"requires": {
|
||||
"p-limit": "^2.2.0"
|
||||
}
|
||||
},
|
||||
"path-exists": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
|
||||
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
|
||||
},
|
||||
"string-width": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
|
||||
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
|
||||
"dev": true,
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
|
||||
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
|
||||
"requires": {
|
||||
"emoji-regex": "^7.0.1",
|
||||
"is-fullwidth-code-point": "^2.0.0",
|
||||
"strip-ansi": "^5.1.0"
|
||||
"emoji-regex": "^8.0.0",
|
||||
"is-fullwidth-code-point": "^3.0.0",
|
||||
"strip-ansi": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"strip-ansi": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
|
||||
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
|
||||
"dev": true,
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
|
||||
"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
|
||||
"requires": {
|
||||
"ansi-regex": "^4.1.0"
|
||||
"ansi-regex": "^5.0.0"
|
||||
}
|
||||
},
|
||||
"wrap-ansi": {
|
||||
"version": "6.2.0",
|
||||
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
|
||||
"integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
|
||||
"requires": {
|
||||
"ansi-styles": "^4.0.0",
|
||||
"string-width": "^4.1.0",
|
||||
"strip-ansi": "^6.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"yargs-parser": {
|
||||
"version": "15.0.1",
|
||||
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz",
|
||||
"integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==",
|
||||
"dev": true,
|
||||
"version": "18.1.0",
|
||||
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.0.tgz",
|
||||
"integrity": "sha512-o/Jr6JBOv6Yx3pL+5naWSoIA2jJ+ZkMYQG/ie9qFbukBe4uzmBatlXFOiu/tNKRWEtyf+n5w7jc/O16ufqOTdQ==",
|
||||
"requires": {
|
||||
"camelcase": "^5.0.0",
|
||||
"decamelize": "^1.2.0"
|
||||
|
Loading…
Reference in New Issue
Block a user