diff --git a/README.md b/README.md index c7cf1f7..cb78fe6 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,80 @@ -# Arduino MicroPython Lab +# Arduino Lab for MicroPython -A lightweight editor for MicroPython supporting connection with a board, code upload, file transfer, interactive REPL shell. +Arduino Lab for MicroPython is an Integrated Development Environment (IDE) for MicroPython. + +## Features +- MicroPython's Read Eval Print Loop (REPL) + - Enter paste mode + - Enter raw repl + - Software reset +- File system management (Disk and MicroPython File System) + - Create + - Rename + - Remove + - Upload + - Download +- Text editor with Python syntax highlight +- Code execution controls + - Run what's on text editor + - Stop (keyboard interrupt) + - Soft reset + +## Technical + +Arduino Lab for MicroPython is an [Electron](https://www.electronjs.org/) app that has its main purpose to communicate over serial with a microprocessor running [MicroPython](https://micropython.org/). All Electron code is at `/index.js`. + +All operations over serial are abstracted and packaged on `/micropython.js` which is an attempt of porting `pyboard.py`. The port has its [own repository](https://github.com/murilopolese/micropython.js) but for the sake of simplicity and transparency, `micropython.js` is committed as source code. + +The User Interface (UI) source code stays inside `/ui` folder and is completely independent of the Electron code. + +The communication between interface and Electron app is accomplished by using the methods and events specified by `/preload.js`. + +## Folder structure + +At the root of the repository you will find: + +- `/.github`: Github's workflow configuration. +- `/build_resources`: Icons and other assets used during the build process. +- `/scripts`: Scripts executed during the build process. +- `/ui`: Available user interfaces. +- `/index.js`: Main Electron code. +- `/micropython.js`: Serial connection abstraction. +- `/preload.js`: Creates Disk and Serial APIs on Electron's main process and exposes it to Electron's renderer process (context bridge). + +## Arduino UI + +Default UI is a [choo-choo](https://github.com/choojs/choo) app. It has pre-built dependencies so no build process is required for the interface. + +The dependencies and source code are included manually in the `/ui/arduino/index.html` file. + +The app is a standard [choo-choo](https://github.com/choojs/choo) app and it has: + +- `/ui/arduino/app.js`: A router deciding which view to load. +- `/ui/arduino/components`: HTML templates and components. +- `/ui/arduino/store.js`: A "store" that handles events emitted by the views, change the app state and orchestrate re-rendering. +- `/ui/arduino/libs`: Prebuilt dependencies. + +It can be useful to learn more about [Choo](https://github.com/choojs/choo) or the [Elm Architecture](https://guide.elm-lang.org/architecture/). + +## Disk and Serial API + +In order for the UI code to be independent of Electron code, there is an API defined at `/preload.js` that describes all the allowed operations. + +There are 2 main operation "channels": Serial communication and local Filesystem operations. Both channels offer methods that always return promises and are used mostly through [`async`/`await`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function). + +While the serial communication is mediated by `/micropython.js`, the local filesystem operations are done through Electron's `ipcRenderer` calls. The handlers for these calls are defined at `/index.js` + +## Running Arduino Lab for MicroPython from source code + +1. Clone this repository: `git clone https://github.com/arduino/MicroPython_Lab.git` +2. Navigate to repository folder: `cd MicroPython_Lab` +3. Install dependencies: `npm install` +4. Run dev mode: `npm run dev` + +Some changes on the Electron code will require reopening the app but all UI changes will only require refreshing the window (ctrl-r/cmd-r). + + +## Trademarks + +"Python" and the Python Logo are trademarks of the Python Software Foundation. diff --git a/build_resources/icon.icns b/build_resources/icon.icns index f7bf349..8677740 100644 Binary files a/build_resources/icon.icns and b/build_resources/icon.icns differ diff --git a/build_resources/icon.png b/build_resources/icon.png index 2604c1e..a25bbc2 100644 Binary files a/build_resources/icon.png and b/build_resources/icon.png differ diff --git a/index.js b/index.js index c743839..b58b30b 100644 --- a/index.js +++ b/index.js @@ -1,30 +1,45 @@ -const { app, BrowserWindow, ipcMain, dialog } = require('electron') +const { app, BrowserWindow, Menu, ipcMain, dialog } = require('electron') const path = require('path') const fs = require('fs') +const join = require('path').join +const openAboutWindow = require('about-window').default let win = null // main window +// HELPERS async function openFolderDialog() { // https://stackoverflow.com/questions/46027287/electron-open-folder-dialog let dir = await dialog.showOpenDialog(win, { properties: [ 'openDirectory' ] }) return dir.filePaths[0] || null } +function listFolder(folder) { + files = fs.readdirSync(path.resolve(folder)) + // Filter out directories + files = files.filter(f => { + let filePath = path.resolve(folder, f) + return !fs.lstatSync(filePath).isDirectory() + }) + return files +} + +// LOCAL FILE SYSTEM ACCESS ipcMain.handle('open-folder', async (event) => { console.log('ipcMain', 'open-folder') const folder = await openFolderDialog() let files = [] if (folder) { - files = fs.readdirSync(path.resolve(folder)) - // Filter out directories - files = files.filter(f => { - let filePath = path.resolve(folder, f) - return !fs.lstatSync(filePath).isDirectory() - }) + files = listFolder(folder) } return { folder, files } }) +ipcMain.handle('list-files', async (event, folder) => { + console.log('ipcMain', 'list-files', folder) + if (!folder) return [] + return listFolder(folder) +}) + ipcMain.handle('load-file', (event, folder, filename) => { console.log('ipcMain', 'load-file', folder, filename ) let filePath = path.resolve(folder, filename) @@ -40,6 +55,7 @@ ipcMain.handle('save-file', (event, folder, filename, content) => { }) ipcMain.handle('update-folder', (event, folder) => { + console.log('ipcMain', 'update-folder', folder) let files = fs.readdirSync(path.resolve(folder)) // Filter out directories files = files.filter(f => { @@ -64,6 +80,7 @@ ipcMain.handle('rename-file', (event, folder, filename, newFilename) => { return newFilename }) +// START APP function createWindow () { // Create the browser window. win = new BrowserWindow({ @@ -77,7 +94,146 @@ function createWindow () { } }) // and load the index.html of the app. - win.loadFile('ui/blank/index.html') + win.loadFile('ui/arduino/index.html') } +// TODO: Loading splash screen + +const isMac = process.platform === 'darwin' +const isDev = !app.isPackaged +const template = [ + ...(isMac ? [{ + label: app.name, + submenu: [ + { role: 'about'}, + { type: 'separator' }, + { role: 'services' }, + { type: 'separator' }, + { role: 'hide' }, + { role: 'hideOthers' }, + { role: 'unhide' }, + { type: 'separator' }, + { role: 'quit' } + ] + }] : []), + { + label: 'File', + submenu: [ + isMac ? { role: 'close' } : { role: 'quit' } + ] + }, + { + label: 'Edit', + submenu: [ + { role: 'undo' }, + { role: 'redo' }, + { type: 'separator' }, + { role: 'cut' }, + { role: 'copy' }, + { role: 'paste' }, + ...(isMac ? [ + { role: 'pasteAndMatchStyle' }, + { role: 'selectAll' }, + { type: 'separator' }, + { + label: 'Speech', + submenu: [ + { role: 'startSpeaking' }, + { role: 'stopSpeaking' } + ] + } + ] : [ + { type: 'separator' }, + { role: 'selectAll' } + ]) + ] + }, + { + label: 'View', + submenu: [ + { role: 'reload' }, + { type: 'separator' }, + { role: 'resetZoom' }, + { role: 'zoomIn' }, + { role: 'zoomOut' }, + { type: 'separator' }, + { role: 'togglefullscreen' }, + ...(isDev ? [ + { type: 'separator' }, + { role: 'toggleDevTools' }, + ]:[ + ]) + ] + }, + { + label: 'Window', + submenu: [ + { role: 'minimize' }, + { role: 'zoom' }, + ...(isMac ? [ + { type: 'separator' }, + { role: 'front' }, + { type: 'separator' }, + { role: 'window' } + ] : [ + { role: 'close' } + ]) + ] + }, + { + role: 'help', + submenu: [ + { + label: 'Learn More', + click: async () => { + const { shell } = require('electron') + await shell.openExternal('https://github.com/arduino/MicroPython_Lab') + } + }, + { + label: 'Report an issue', + click: async () => { + const { shell } = require('electron') + await shell.openExternal('https://github.com/arduino/MicroPython_Lab/issues') + } + }, + { + label:'Info about this app', + click: () => { + openAboutWindow({ + icon_path: join(__dirname, 'ui/arduino/assets/about_image.png'), + css_path: join(__dirname, 'ui/arduino/about.css'), + copyright: '© Arduino SA 2022', + package_json_dir: __dirname, + bug_report_url: "https://github.com/arduino/MicroPython_Lab/issues", + bug_link_text: "report an issue", + homepage: "https://labs.arduino.cc", + use_version_info: false, + win_options: { + parent: win, + modal: true, + }, + show_close_button: 'Close', + }) + } + }, + ] + } +] + +const menu = Menu.buildFromTemplate(template) + +app.setAboutPanelOptions({ + applicationName: app.name, + applicationVersion: app.getVersion(), + copyright: app.copyright, + credits: '(See "Info about this app" in the Help menu)', + authors: ['Arduino'], + website: 'https://arduino.cc', + iconPath: path.join(__dirname, '../assets/image.png'), +}) + +Menu.setApplicationMenu(menu) + + app.whenReady().then(createWindow) diff --git a/micropython.js b/micropython.js index 2cefc82..a845366 100644 --- a/micropython.js +++ b/micropython.js @@ -1,229 +1,304 @@ -const EventEmitter = require('events') -const SerialPort = require('serialport') - -const codeListFiles = ` -from os import listdir -print('') -print(listdir()) -print('') -` -const codeLoadFile = (path) => { - return ` -print('') -with open('${path}', 'r') as f: - line = f.readline() - while line != '': - print(line, end='') - line = f.readline() -print('') -` -} +const { SerialPort } = require('serialport') +const { ReadlineParser } = require('@serialport/parser-readline') +const fs = require('fs') +const path = require('path') -const codeRemoveFile = (path) => { - return ` -from os import remove -remove('${path}') -` +function sleep(millis) { + return new Promise((resolve, reject) => { + setTimeout(() => { + resolve() + }, millis) + }) } -const codeRenameFile = (oldPath, newPath) => { - return ` -from os import rename -rename('${oldPath}', '${newPath}') -` -} +class MicroPythonBoard { + constructor() { + this.device = null + this.serial = null + this.in_raw_repl = false + } -const codeCollectGarbage = `import gc -gc.collect()` - -class SerialConnection extends EventEmitter { - constructor() { - super() - this.executing = false - this.rawRepl = false - } - /** - * List all available serial ports (with vendor id) - * @return {Promise} Resolves with an array of port objects - */ - static listAvailable() { - return new Promise((resolve, reject) => { - SerialPort.list().then((ports) => { - const availablePorts = ports.filter((port) => { - return !!port.vendorId - }) - if (availablePorts) { - resolve(availablePorts) - } else { - reject(new Error('No ports available')) - } - }) - }) - } - /** - * Opens a connection on a given port. - * @param {String} port Port address to open the connection - */ - open(port) { - this.port = new SerialPort(port, { + listPorts() { + return SerialPort.list() + } + + async open(device) { + if (device) { + this.device = device + } + if (!this.device) { + throw new Error(`No device specified`) + } + if (this.serial && this.serial.isOpen) { + await this.serial.close() + this.serial = null + } + + this.serial = new SerialPort({ + path: this.device, baudRate: 115200, + lock: false, autoOpen: false }) - this.port.on('open', () => { - this.emit('connected') - this.port.write('\r') - }) - this.port.on('data', (data) => this._eventHandler(data)) - this.port.open() - } - /** - * Closes current connection. - */ - close() { - this.emit('disconnected') - if (this.port) { - this.port.close() - } - } - /** - * Executes code in a string format. This code can contain multiple lines. - * @param {String} code String of code to be executed. Line breaks must be `\n` - */ - execute(code) { - this.emit('execution-started') - // TODO: break code in lines and `_execRaw` line by line - this.stop() - this._enterRawRepl() - this._executeRaw(code) - .then(() => { - this.emit('execution-finished') - this._exitRawRepl() - }) - } - /** - * Evaluate a command/expression. - * @param {String} command Command/expression to be evaluated - */ - evaluate(command) { - this.port.write(Buffer.from(command)) - } - /** - * Send a "stop" command in order to interrupt any running code. For serial - * REPL this command is "CTRL-C". - */ - stop() { - this.port.write('\r\x03') // CTRL-C - } - /** - * Send a command to "soft reset". - */ - softReset() { - this.stop(); - this.port.write('\r\x04') // CTRL-D - } - /** - * Prints on console the existing files on file system. - */ - listFiles() { - this.data = '' - this.execute(codeListFiles) - } - /** - * Prints on console the content of a given file. - * @param {String} path File's path - */ - loadFile(path) { - this.data = '' - this.execute(codeLoadFile(path)) - } - /** - * Writes a given content to a file in the file system. - * @param {String} path File's path - * @param {String} content File's content - */ - writeFile(path, content) { - if (!path || !content) { - return - } - // TODO: Find anoter way to do it without binascii - let pCode = `f = open('${path}', 'w')\n` - // pCode += `import gc; gc.collect()\n` - pCode += codeCollectGarbage + '\n' - // `content` is what comes from the editor. We want to write it - // line one by one on a file so we split by `\n` - let lines = content.split('\r\n') - lines.forEach((line, lineCount) => { - if (line) { - // TODO: Sanitize line replace """ with \""" - // To avoid the string escaping with weirdly we encode - // the line plus the `\n` that we just removed to base64 - pCode += `f.write("""${line}""")` - if(lineCount != lines.length - 1){ - pCode += `\nf.write('\\n')\n` - } - } - }) - pCode += `\nf.close()\n` - this.once('execution-finished', () => { - this.emit('file-saved') - }) - this.execute(pCode) - } - - /** - * Removes file on a given path - * @param {String} path File's path - */ - removeFile(path) { - this.execute(codeRemoveFile(path)) - } - - renameFile(oldPath, newPath) { - this.execute(codeRenameFile(oldPath, newPath)) - } - /** - * Handles data comming from connection - * @param {Buffer} buffer Data comming from connection - */ - _eventHandler(buffer) { - const data = buffer.toString() - this.emit('output', data) - } - /** - * Put REPL in raw mode - */ - _enterRawRepl() { - this.port.write('\r\x01') // CTRL-A - } - /** - * Exit REPL raw mode - */ - _exitRawRepl() { - this.port.write('\r\x04\r\x02') // CTRL-D // CTRL-B - } - /** - * Writes a command to connected port - * @param {String} command Command to be written on connected port - */ - _executeRaw(command) { - let p = 0 - const l = 256 - return new Promise((resolve, reject) => { - for(let i = 0; i < command.length; i+=l) { - let slice = command.slice(i, i+l) - setTimeout(() => { - this.port.write(slice) - }, p*10) - p += 1 - } - let finished = (command.length / l) + 1 - setTimeout(() => { - this.port.write('\x04') - resolve() - }, finished * 10) - }) - } + return new Promise((resolve, reject) => { + this.serial.open(async (err) => { + if (err) { + reject(err) + } else { + resolve() + } + }) + }) + } + + close() { + if (this.serial.isOpen) { + return this.serial.close() + } else { + return Promise.resolve() + } + } + + read_until(options) { + const { + ending = `\n`, + timeout = null, + data_consumer = () => false + } = options || {} + return new Promise((resolve, reject) => { + const parser = this.serial.pipe(new ReadlineParser({ delimiter: ending })) + let waiting = 0 + if (timeout) { + waiting = setTimeout(() => { + reject(new Error(`Couldn't find ending: ${ending}`)) + }, timeout) + } + parser.once('data', (data) => { + data_consumer(data) + clearTimeout(waiting) + resolve(data + ending) + }) + }) + } + + enter_raw_repl(timeout) { + return new Promise(async (resolve, reject) => { + // ctrl-C twice: interrupt any running program + await this.serial.write(Buffer.from(`\r\x03\x03`)) + // flush input + await this.serial.flush() + // ctrl-A: enter raw REPL + await this.serial.write(Buffer.from(`\r\x01`)) + + let data = await this.read_until({ + ending: Buffer.from(`raw REPL; CTRL-B to exit\r\n>`), + timeout: timeout + }) + + if (data.indexOf(`raw REPL; CTRL-B to exit\r\n>`) !== -1) { + this.in_raw_repl = true + return resolve() + } else { + return reject(new Error(`Couldn't enter raw REPL mode`)) + } + }) + } + + async exit_raw_repl() { + if (this.in_raw_repl) { + // ctrl-B: enter friendly REPL + await this.serial.write(Buffer.from(`\r\x02`)) + this.in_raw_repl = false + } + return Promise.resolve() + } + + follow(options) { + const { timeout = null } = options || {} + return new Promise(async (resolve, reject) => { + // wait for normal output + const data = await this.read_until({ + ending: Buffer.from(`\x04`), + timeout: timeout + }) + resolve(data) + }) + } + + + exec_raw_no_follow(options) { + const { timeout = null, command = '' } = options || {} + return new Promise(async (resolve, reject) => { + // Dismiss any data with ctrl-C + await this.serial.write(Buffer.from(`\x03`)) + // Soft reboot + await this.serial.write(Buffer.from(`\x04`)) + // Check if we have a prompt + const data = await this.read_until({ + ending: Buffer.from(`>`), + timeout: timeout, + }) + + // Write command using standard raw REPL, 256 bytes every 10ms. + for (let i = 0; i < command.length; i += 256) { + const slice = Buffer.from(command.slice(i, i+256)) + await this.serial.write(slice) + await sleep(10) + } + // Execute + await this.serial.write(Buffer.from(`\x04`)) + resolve() + }) + + } + + exec_raw(options) { + const { timeout = null, command = '' } = options || {} + this.exec_raw_no_follow({ + timeout: timeout, + command: command + }) + return this.follow({ timeout }) + } + + async eval(k) { + return await this.serial.write(Buffer.from(k)) + } + + async stop() { + // Dismiss any data with ctrl-C + await this.serial.write(Buffer.from(`\x03`)) + } + + async reset() { + // Dismiss any data with ctrl-C + await this.serial.write(Buffer.from(`\x03`)) + // Soft reboot + await this.serial.write(Buffer.from(`\x04`)) + } + + async execfile(filePath) { + if (filePath) { + const content = fs.readFileSync(path.resolve(filePath)) + await this.enter_raw_repl() + const output = await this.exec_raw({ command: content }) + console.log(output) + return this.exit_raw_repl() + } + return Promise.reject() + } + + async fs_ls() { + await this.enter_raw_repl() + const output = await this.exec_raw({ + command: `import uos\nprint(uos.listdir())` + }) + await this.exit_raw_repl() + return Promise.resolve(output) + } + + async fs_cat(filePath) { + if (filePath) { + await this.enter_raw_repl() + const output = await this.exec_raw({ + command: `with open('${filePath}') as f:\n while 1:\n b=f.read(256)\n if not b:break\n print(b,end='')` + }) + await this.exit_raw_repl() + return Promise.resolve(output) + } + return Promise.reject(new Error(`Path to file was not specified`)) + } + + async fs_put(src, dest) { + if (src && dest) { + const content = fs.readFileSync(path.resolve(src)) + await this.enter_raw_repl() + let output = await this.exec_raw({ + command: `f=open('${dest}','w')\nw=f.write` + }) + await sleep(100) + for (let i = 0; i < content.length; i+=128) { + let slice = content.slice(i, i+128) + slice = slice.toString() + slice = slice.replace(/"""/g, `\\"\\"\\"`) + await this.serial.write(`w("""${slice}""")`) + await this.serial.write(`\x04`) + await sleep(100) + } + return this.exit_raw_repl() + } + return Promise.reject(new Error(`Must specify source and destination paths`)) + } + + async fs_save(content, dest) { + if (content && dest) { + if (typeof content === 'string') { + content = Buffer.from(content) + } + await this.enter_raw_repl() + let output = await this.exec_raw({ + command: `f=open('${dest}','w')\nw=f.write` + }) + for (let i = 0; i < content.length; i+=64) { + let slice = content.slice(i, i+64) + slice = slice.toString() + slice = slice.replace(/"""/g, `\\"\\"\\"`) + // slice = slice.replace(//g, ``) + await this.serial.write(`w("""${slice}""")\n`) + await this.serial.write(`\x04`) + await sleep(50) + } + return this.exit_raw_repl() + } else { + return Promise.reject(new Error(`Must specify content and destination path`)) + } + } + + async fs_mkdir() { + if (filePath) { + await this.enter_raw_repl() + const output = await this.exec_raw({ + command: `import uos\nuos.mkdir('${filePath}')` + }) + console.log(output) + return this.exit_raw_repl() + } + return Promise.reject() + } + + async fs_rmdir() { + if (filePath) { + await this.enter_raw_repl() + const output = await this.exec_raw({ + command: `import uos\nuos.rmdir('${filePath}')` + }) + return this.exit_raw_repl() + } + return Promise.reject() + } + + async fs_rm(filePath) { + if (filePath) { + await this.enter_raw_repl() + const output = await this.exec_raw({ + command: `import uos\nuos.remove('${filePath}')` + }) + return this.exit_raw_repl() + } + return Promise.reject() + } + + async fs_rename(oldFilePath, newFilePath) { + if (oldFilePath && newFilePath) { + await this.enter_raw_repl() + const output = await this.exec_raw({ + command: `import uos\nuos.rename('${oldFilePath}', '${newFilePath}')` + }) + return this.exit_raw_repl() + } + return Promise.reject() + } } -module.exports = SerialConnection +module.exports = MicroPythonBoard diff --git a/package-lock.json b/package-lock.json index 28e84ac..eb7b4cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,4852 @@ { - "name": "MicroPython_lab", - "version": "0.1.0", - "lockfileVersion": 1, + "name": "arduino-lab-micropython-ide", + "version": "0.3.1", + "lockfileVersion": 2, "requires": true, - "dependencies": { - "7zip-bin": { + "packages": { + "": { + "name": "arduino-lab-micropython-ide", + "version": "0.3.1", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "about-window": "^1.15.2", + "mkdirp": "^1.0.3", + "serialport": "^10.4.0" + }, + "devDependencies": { + "electron": "^19.0.10", + "electron-builder": "^23.3.3", + "electron-notarize": "^1.2.1", + "electron-rebuild": "^3.2.9", + "is-ci": "^3.0.1" + } + }, + "node_modules/@develar/schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", + "dev": true, + "dependencies": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@electron/get": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.14.1.tgz", + "integrity": "sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^9.6.0", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=8.6" + }, + "optionalDependencies": { + "global-agent": "^3.0.0", + "global-tunnel-ng": "^2.7.1" + } + }, + "node_modules/@electron/get/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@electron/universal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.2.1.tgz", + "integrity": "sha512-7323HyMh7KBAl/nPDppdLsC87G6RwRU02dy5FPeGB1eS7rUePh55+WNWiDPLhFQqqVPHzh77M69uhmoT8XnwMQ==", + "dev": true, + "dependencies": { + "@malept/cross-spawn-promise": "^1.1.0", + "asar": "^3.1.0", + "debug": "^4.3.1", + "dir-compare": "^2.4.0", + "fs-extra": "^9.0.1", + "minimatch": "^3.0.4", + "plist": "^3.0.4" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@electron/universal/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/universal/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/universal/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "node_modules/@malept/cross-spawn-promise": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@npmcli/fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.1.tgz", + "integrity": "sha512-1Q0uzx6c/NVNGszePbr5Gc2riSU1zLpNlo/1YWntH+eaPmMgBssAW0qXofCVkpdj3ce4swZtlDYQu+NKiYcptg==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/move-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", + "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@serialport/binding-mock": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@serialport/binding-mock/-/binding-mock-10.2.2.tgz", + "integrity": "sha512-HAFzGhk9OuFMpuor7aT5G1ChPgn5qSsklTFOTUX72Rl6p0xwcSVsRtG/xaGp6bxpN7fI9D/S8THLBWbBgS6ldw==", + "dependencies": { + "@serialport/bindings-interface": "^1.2.1", + "debug": "^4.3.3" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@serialport/bindings-cpp": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/@serialport/bindings-cpp/-/bindings-cpp-10.7.0.tgz", + "integrity": "sha512-Xx1wA2UCG2loS32hxNvWJI4smCzGKhWqE85//fLRzHoGgE1lSLe3Nk7W40/ebrlGFHWRbQZmeaIF4chb2XLliA==", + "hasInstallScript": true, + "dependencies": { + "@serialport/bindings-interface": "1.2.1", + "@serialport/parser-readline": "^10.2.1", + "debug": "^4.3.2", + "node-addon-api": "^4.3.0", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=12.17.0 <13.0 || >=14.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/@serialport/bindings-interface": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@serialport/bindings-interface/-/bindings-interface-1.2.1.tgz", + "integrity": "sha512-63Dyqz2gtryRDDckFusOYqLYhR3Hq/M4sEdbF9i/VsvDb6T+tNVgoAKUZ+FMrXXKnCSu+hYbk+MTc0XQANszxw==", + "engines": { + "node": "^12.22 || ^14.13 || >=16" + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + }, + "node_modules/@serialport/bindings-interface": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@serialport/bindings-interface/-/bindings-interface-1.2.2.tgz", + "integrity": "sha512-CJaUd5bLvtM9c5dmO9rPBHPXTa9R2UwpkJ0wdh9JCYcbrPWsKz+ErvR0hBLeo7NPeiFdjFO4sonRljiw4d2XiA==", + "engines": { + "node": "^12.22 || ^14.13 || >=16" + } + }, + "node_modules/@serialport/parser-byte-length": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-10.3.0.tgz", + "integrity": "sha512-pJ/VoFemzKRRNDHLhFfPThwP40QrGaEnm9TtwL7o2GihEPwzBg3T0bN13ew5TpbbUYZdMpUtpm3CGfl6av9rUQ==", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-cctalk": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-10.3.0.tgz", + "integrity": "sha512-8ujmk8EvVbDPrNF4mM33bWvUYJOZ0wXbY3WCRazHRWvyCdL0VO0DQvW81ZqgoTpiDQZm5r8wQu9rmuemahF6vQ==", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-delimiter": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-10.3.0.tgz", + "integrity": "sha512-9E4Vj6s0UbbcCCTclwegHGPYjJhdm9qLCS0lowXQDEQC5naZnbsELemMHs93nD9jHPcyx1B4oXkMnVZLxX5TYw==", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-inter-byte-timeout": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-10.3.0.tgz", + "integrity": "sha512-wKP0QK85NHgvT6BBB1qBfKBBU4pf8kespNXAZBUYmFT+P4n8r8IZE2mqigCD+AiZcfWNQoAizwOsT/Jx/qeVig==", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-packet-length": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-packet-length/-/parser-packet-length-10.3.0.tgz", + "integrity": "sha512-bj0cWzt8YSQj/E5fRQVYdi4TsfTlZQrXlXrUwjyTsCONv8IPOHzsz+yY0fw5SEMiJtaLyqvPkCHLsttOd/zFsg==", + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@serialport/parser-readline": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-10.3.0.tgz", + "integrity": "sha512-ki3ATZ3/RAqnqGROBKE7k+OeZ0DZXZ53GTca4q71OU5RazbbNhTOBQLKLXD3v9QZXCMJdg4hGW/2Y0DuMUqMQg==", + "dependencies": { + "@serialport/parser-delimiter": "10.3.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-ready": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-10.3.0.tgz", + "integrity": "sha512-1owywJ4p592dJyVrEJZPIh6pUZ3/y/LN6kGTDH2wxdewRUITo/sGvDy0er5i2+dJD3yuowiAz0dOHSdz8tevJA==", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-10.3.0.tgz", + "integrity": "sha512-tIogTs7CvTH+UUFnsvE7i33MSISyTPTGPWlglWYH2/5coipXY503jlaYS1YGe818wWNcSx6YAjMZRdhTWwM39w==", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-slip-encoder": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-slip-encoder/-/parser-slip-encoder-10.3.0.tgz", + "integrity": "sha512-JI0ILF5sylWn8f0MuMzHFBix/iMUTa79/Z95KaPZYnVaEdA7h7hh/o21Jmon/26P3RJwL1SNJCjZ81zfan+LtQ==", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-spacepacket": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-spacepacket/-/parser-spacepacket-10.3.0.tgz", + "integrity": "sha512-PDF73ClEPsClD1FEJZHNuBevDKsJCkqy/XD5+S5eA6+tY5D4HLrVgSWsg+3qqB6+dlpwf2CzHe+uO8D3teuKHA==", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/stream": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-10.3.0.tgz", + "integrity": "sha512-7sooi5fHogYNVEJwxVdg872xO6TuMgQd2E9iRmv+o8pk/1dbBnPkmH6Ka3st1mVE+0KnIJqVlgei+ncSsqXIGw==", + "dependencies": { + "@serialport/bindings-interface": "1.2.1", + "debug": "^4.3.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/stream/node_modules/@serialport/bindings-interface": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@serialport/bindings-interface/-/bindings-interface-1.2.1.tgz", + "integrity": "sha512-63Dyqz2gtryRDDckFusOYqLYhR3Hq/M4sEdbF9i/VsvDb6T+tNVgoAKUZ+FMrXXKnCSu+hYbk+MTc0XQANszxw==", + "engines": { + "node": "^12.22 || ^14.13 || >=16" + } + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "dev": true, + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "optional": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, + "node_modules/@types/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==", + "dev": true + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true, + "optional": true + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.11.46", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.46.tgz", + "integrity": "sha512-x+sfpb2dMrhCQPL4NAGs64Z9hh0t72aP0dg+PuZidmPr/0Gj5ELQTjD/t46dq3DF/8ZvSHOaIyDIbAsdPshyVQ==", + "dev": true + }, + "node_modules/@types/plist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.2.tgz", + "integrity": "sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*", + "xmlbuilder": ">=11.0.1" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/verror": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.6.tgz", + "integrity": "sha512-NNm+gdePAX1VGvPcGZCDKQZKYSiAWigKhKaz5KF94hG6f2s8de9Ow5+7AbXoeKxL8gavZfk4UquSAygOF2duEQ==", + "dev": true, + "optional": true + }, + "node_modules/@types/yargs": { + "version": "17.0.11", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.11.tgz", + "integrity": "sha512-aB4y9UDUXTSMxmM4MH+YnuR0g5Cph3FLQBoWoMB21DSvFVAxRVEHEMx3TLh+zUZYMCQtKiqazz0Q4Rre31f/OA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/7zip-bin": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz", + "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/about-window": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/about-window/-/about-window-1.15.2.tgz", + "integrity": "sha512-31mDAnLUfKm4uShfMzeEoS6a3nEto2tUt4zZn7qyAKedaTV4p0dGiW1n+YG8vtRh78mZiewghWJmoxDY+lHyYg==" + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/app-builder-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", + "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", + "dev": true + }, + "node_modules/app-builder-lib": { + "version": "23.3.3", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-23.3.3.tgz", + "integrity": "sha512-m0+M53+HYMzqKxwNQZT143K7WwXEGUy9LY31l8dJphXx2P/FQod615mVbxHyqbDCG4J5bHdWm21qZ0e2DVY6CQ==", + "dev": true, + "dependencies": { + "@develar/schema-utils": "~2.6.5", + "@electron/universal": "1.2.1", + "@malept/flatpak-bundler": "^0.4.0", + "7zip-bin": "~5.1.1", + "async-exit-hook": "^2.0.1", + "bluebird-lst": "^1.0.9", + "builder-util": "23.3.3", + "builder-util-runtime": "9.0.3", + "chromium-pickle-js": "^0.2.0", + "debug": "^4.3.4", + "ejs": "^3.1.7", + "electron-osx-sign": "^0.6.0", + "electron-publish": "23.3.3", + "form-data": "^4.0.0", + "fs-extra": "^10.1.0", + "hosted-git-info": "^4.1.0", + "is-ci": "^3.0.0", + "isbinaryfile": "^4.0.10", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "minimatch": "^3.1.2", + "read-config-file": "6.2.0", + "sanitize-filename": "^1.6.3", + "semver": "^7.3.7", + "tar": "^6.1.11", + "temp-file": "^3.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/app-builder-lib/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/app-builder-lib/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/app-builder-lib/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/asar": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/asar/-/asar-3.2.0.tgz", + "integrity": "sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==", + "deprecated": "Please use @electron/asar moving forward. There is no API change, just a package name change", + "dev": true, + "dependencies": { + "chromium-pickle-js": "^0.2.0", + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + }, + "bin": { + "asar": "bin/asar.js" + }, + "engines": { + "node": ">=10.12.0" + }, + "optionalDependencies": { + "@types/glob": "^7.1.1" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/bluebird-lst": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", + "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5" + } + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "dev": true, + "optional": true + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "dev": true + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builder-util": { + "version": "23.3.3", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-23.3.3.tgz", + "integrity": "sha512-MJZlUiq2PY5hjYv9+XNaoYdsITqvLgRDoHSFg/4nzpInbNxNjLQOolL04Zsyp+hgfcbFvMC4h0KkR1CMPHLWbA==", + "dev": true, + "dependencies": { + "@types/debug": "^4.1.6", + "@types/fs-extra": "^9.0.11", + "7zip-bin": "~5.1.1", + "app-builder-bin": "4.0.0", + "bluebird-lst": "^1.0.9", + "builder-util-runtime": "9.0.3", + "chalk": "^4.1.1", + "cross-spawn": "^7.0.3", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-ci": "^3.0.0", + "js-yaml": "^4.1.0", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.4.0" + } + }, + "node_modules/builder-util-runtime": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.0.3.tgz", + "integrity": "sha512-SfG2wnyjpUbbdtpnqDpWwklujofC6GarGpvdWrEkg9p5AD/xJmTF2buTNaqs3qtsNBEVQDDjZz9xc2GGpVyMfA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/builder-util/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/builder-util/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/builder-util/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/cacache": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", + "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "dev": true + }, + "node_modules/ci-info": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.1.tgz", + "integrity": "sha512-SXgeMX9VwDe7iFFaEWkA5AstuER9YKqy4EhHqr4DVqkwmD9rpVimkMKWHdjn30Ja45txyjhSn63lVX69eVCckg==", + "dev": true + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "optional": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/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==", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/compress-brotli": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", + "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", + "dev": true, + "dependencies": { + "@types/json-buffer": "~3.0.0", + "json-buffer": "~3.0.1" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/compress-brotli/node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "optional": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "optional": true, + "dependencies": { + "buffer": "^5.1.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "optional": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "optional": true + }, + "node_modules/dir-compare": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz", + "integrity": "sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA==", + "dev": true, + "dependencies": { + "buffer-equal": "1.0.0", + "colors": "1.0.3", + "commander": "2.9.0", + "minimatch": "3.0.4" + }, + "bin": { + "dircompare": "src/cli/dircompare.js" + } + }, + "node_modules/dir-compare/node_modules/commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==", + "dev": true, + "dependencies": { + "graceful-readlink": ">= 1.0.0" + }, + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/dir-compare/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dmg-builder": { + "version": "23.3.3", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-23.3.3.tgz", + "integrity": "sha512-ECwAjt+ZWyOvddrkDx1xRD6IVUCZb5SV6vSMHZd+Va3G2sUXHrnglR1cGDKRF4oYRQm8SYVrpLZKbi8npyDcAQ==", + "dev": true, + "dependencies": { + "app-builder-lib": "23.3.3", + "builder-util": "23.3.3", + "builder-util-runtime": "9.0.3", + "fs-extra": "^10.0.0", + "iconv-lite": "^0.6.2", + "js-yaml": "^4.1.0" + }, + "optionalDependencies": { + "dmg-license": "^1.0.11" + } + }, + "node_modules/dmg-builder/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dmg-builder/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/dmg-builder/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/dmg-license": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "@types/plist": "^3.0.1", + "@types/verror": "^1.10.3", + "ajv": "^6.10.0", + "crc": "^3.8.0", + "iconv-corefoundation": "^1.1.7", + "plist": "^3.0.4", + "smart-buffer": "^4.0.2", + "verror": "^1.10.0" + }, + "bin": { + "dmg-license": "bin/dmg-license.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", + "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "dev": true + }, + "node_modules/ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron": { + "version": "19.0.10", + "resolved": "https://registry.npmjs.org/electron/-/electron-19.0.10.tgz", + "integrity": "sha512-EiWtPWdD7CzkRkp1cw7t0N9W2qhI5XZOudHX7daOh5wI076nsdV2dtlAf/XyTHhPNoKR5qhTWrSnYL9PY6D1vg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@electron/get": "^1.14.1", + "@types/node": "^16.11.26", + "extract-zip": "^1.0.3" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 8.6" + } + }, + "node_modules/electron-builder": { + "version": "23.3.3", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-23.3.3.tgz", + "integrity": "sha512-mFYYdhoFPKevP6y5uaaF3dusmB2OtQ/HnwwpyOePeU7QDS0SEIAUokQsHUanAiJAZcBqtY7iyLBgX18QybdFFw==", + "dev": true, + "dependencies": { + "@types/yargs": "^17.0.1", + "app-builder-lib": "23.3.3", + "builder-util": "23.3.3", + "builder-util-runtime": "9.0.3", + "chalk": "^4.1.1", + "dmg-builder": "23.3.3", + "fs-extra": "^10.0.0", + "is-ci": "^3.0.0", + "lazy-val": "^1.0.5", + "read-config-file": "6.2.0", + "update-notifier": "^5.1.0", + "yargs": "^17.0.1" + }, + "bin": { + "electron-builder": "cli.js", + "install-app-deps": "install-app-deps.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/electron-builder/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-builder/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-builder/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-notarize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.2.1.tgz", + "integrity": "sha512-u/ECWhIrhkSQpZM4cJzVZ5TsmkaqrRo5LDC/KMbGF0sPkm53Ng59+M0zp8QVaql0obfJy9vlVT+4iOkAi2UDlA==", + "deprecated": "Please use @electron/notarize moving forward. There is no API change, just a package name change", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-notarize/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/electron-notarize/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-notarize/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-osx-sign": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz", + "integrity": "sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg==", + "deprecated": "Please use @electron/osx-sign moving forward. Be aware the API is slightly different", + "dev": true, + "dependencies": { + "bluebird": "^3.5.0", + "compare-version": "^0.1.2", + "debug": "^2.6.8", + "isbinaryfile": "^3.0.2", + "minimist": "^1.2.0", + "plist": "^3.0.1" + }, + "bin": { + "electron-osx-flat": "bin/electron-osx-flat.js", + "electron-osx-sign": "bin/electron-osx-sign.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/electron-osx-sign/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/electron-osx-sign/node_modules/isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "dependencies": { + "buffer-alloc": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/electron-osx-sign/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/electron-publish": { + "version": "23.3.3", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-23.3.3.tgz", + "integrity": "sha512-1dX17eE5xVXedTxjC+gjsP74oC0+sIHgqysp0ryTlF9+yfQUyXjBk6kcK+zhtBA2SsHMSglDtM+JPxDD/WpPTQ==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^9.0.11", + "builder-util": "23.3.3", + "builder-util-runtime": "9.0.3", + "chalk": "^4.1.1", + "fs-extra": "^10.0.0", + "lazy-val": "^1.0.5", + "mime": "^2.5.2" + } + }, + "node_modules/electron-publish/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-publish/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-publish/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-rebuild": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/electron-rebuild/-/electron-rebuild-3.2.9.tgz", + "integrity": "sha512-FkEZNFViUem3P0RLYbZkUjC8LUFIK+wKq09GHoOITSJjfDAVQv964hwaNseTTWt58sITQX3/5fHNYcTefqaCWw==", + "dev": true, + "dependencies": { + "@malept/cross-spawn-promise": "^2.0.0", + "chalk": "^4.0.0", + "debug": "^4.1.1", + "detect-libc": "^2.0.1", + "fs-extra": "^10.0.0", + "got": "^11.7.0", + "lzma-native": "^8.0.5", + "node-abi": "^3.0.0", + "node-api-version": "^0.1.4", + "node-gyp": "^9.0.0", + "ora": "^5.1.0", + "semver": "^7.3.5", + "tar": "^6.0.5", + "yargs": "^17.0.1" + }, + "bin": { + "electron-rebuild": "lib/src/cli.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/electron-rebuild/node_modules/@malept/cross-spawn-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", + "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/electron-rebuild/node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/electron-rebuild/node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/electron-rebuild/node_modules/cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-rebuild/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-rebuild/node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/electron-rebuild/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-rebuild/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-rebuild/node_modules/got": { + "version": "11.8.5", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", + "integrity": "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/electron-rebuild/node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/electron-rebuild/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-rebuild/node_modules/keyv": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.3.tgz", + "integrity": "sha512-AcysI17RvakTh8ir03+a3zJr5r0ovnAH/XTXei/4HIv3bL2K/jzvgivLK9UuI/JbU1aJjM3NSAnVvVVd3n+4DQ==", + "dev": true, + "dependencies": { + "compress-brotli": "^1.3.8", + "json-buffer": "3.0.1" + } + }, + "node_modules/electron-rebuild/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-rebuild/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-rebuild/node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-rebuild/node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-rebuild/node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-rebuild/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/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==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "optional": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "dev": true, + "dependencies": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + } + }, + "node_modules/extract-zip/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/extract-zip/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/extract-zip/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/extsprintf": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "optional": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true, + "optional": true + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "optional": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/global-agent/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "optional": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dev": true, + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/global-tunnel-ng": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", + "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", + "dev": true, + "optional": true, + "dependencies": { + "encodeurl": "^1.0.2", + "lodash": "^4.17.10", + "npm-conf": "^1.1.3", + "tunnel": "^0.0.6" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "optional": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "optional": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "optional": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-corefoundation": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", + "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "cli-truncate": "^2.1.0", + "node-addon-api": "^1.6.3" + }, + "engines": { + "node": "^8.11.2 || >=10" + } + }, + "node_modules/iconv-corefoundation/node_modules/node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "dev": true, + "optional": true + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "optional": true + }, + "node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lazy-val": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", + "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", + "dev": true + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lzma-native": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/lzma-native/-/lzma-native-8.0.6.tgz", + "integrity": "sha512-09xfg67mkL2Lz20PrrDeNYZxzeW7ADtpYFbwSQh9U8+76RIzx5QsJBMy8qikv3hbUPfpy6hqwxt6FcGK81g9AA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^3.1.0", + "node-gyp-build": "^4.2.1", + "readable-stream": "^3.6.0" + }, + "bin": { + "lzmajs": "bin/lzmajs" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/lzma-native/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-fetch-happen": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.0.tgz", + "integrity": "sha512-OnEfCLofQVJ5zgKwGk55GaqosqKjaR6khQlJY3dBAA+hM25Bc5CmX5rKUfVut+rYA3uidA7zb7AvcglU87rPRg==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", + "dev": true, + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-abi": { + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.24.0.tgz", + "integrity": "sha512-YPG3Co0luSu6GwOBsmIdGW6Wx0NyNDLg/hriIyDllVsNwnI6UeqaWShxC3lbH4LtEQUgoLP3XR1ndXiDAWvmRw==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + }, + "node_modules/node-api-version": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.1.4.tgz", + "integrity": "sha512-KGXihXdUChwJAOHO53bv9/vXcLmdUsZ6jIptbvYvkpKfth+r7jw44JkVxQFA3kX5nQjzjmGu1uAu/xNNLNlI5g==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + } + }, + "node_modules/node-gyp": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz", + "integrity": "sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.22 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp-build": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "dev": true, + "optional": true, + "dependencies": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/plist": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz", + "integrity": "sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA==", + "dev": true, + "dependencies": { + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true, + "optional": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/quick-lru": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz", - "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/read-config-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz", + "integrity": "sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg==", + "dev": true, + "dependencies": { + "dotenv": "^9.0.2", + "dotenv-expand": "^5.1.0", + "js-yaml": "^4.1.0", + "json5": "^2.2.0", + "lazy-val": "^1.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", + "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", + "dev": true, + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "dev": true, + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true, + "optional": true + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialport": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/serialport/-/serialport-10.4.0.tgz", + "integrity": "sha512-PszPM5SnFMgSXom60PkKS2A9nMlNbHkuoyRBlzdSWw9rmgOn258+V0dYbWMrETJMM+TJV32vqBzjg5MmmUMwMw==", + "dependencies": { + "@serialport/binding-mock": "10.2.2", + "@serialport/bindings-cpp": "10.7.0", + "@serialport/parser-byte-length": "10.3.0", + "@serialport/parser-cctalk": "10.3.0", + "@serialport/parser-delimiter": "10.3.0", + "@serialport/parser-inter-byte-timeout": "10.3.0", + "@serialport/parser-packet-length": "10.3.0", + "@serialport/parser-readline": "10.3.0", + "@serialport/parser-ready": "10.3.0", + "@serialport/parser-regex": "10.3.0", + "@serialport/parser-slip-encoder": "10.3.0", + "@serialport/parser-spacepacket": "10.3.0", + "@serialport/stream": "10.3.0", + "debug": "^4.3.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", + "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", + "dev": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true, + "optional": true + }, + "node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/stat-mode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dev": true, + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/temp-file": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", + "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", + "dev": true, + "dependencies": { + "async-exit-hook": "^2.0.1", + "fs-extra": "^10.0.0" + } + }, + "node_modules/temp-file/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/temp-file/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/temp-file/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dev": true, + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dev": true, + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/update-notifier/node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "optional": true + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + }, + "dependencies": { "@develar/schema-utils": { "version": "2.6.5", "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", @@ -46,16 +4883,18 @@ } }, "@electron/universal": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.0.5.tgz", - "integrity": "sha512-zX9O6+jr2NMyAdSkwEUlyltiI4/EBLu2Ls/VD3pUQdi3cAYeYfdQnT2AJJ38HE4QxLccbU13LSpccw1IWlkyag==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.2.1.tgz", + "integrity": "sha512-7323HyMh7KBAl/nPDppdLsC87G6RwRU02dy5FPeGB1eS7rUePh55+WNWiDPLhFQqqVPHzh77M69uhmoT8XnwMQ==", "dev": true, "requires": { "@malept/cross-spawn-promise": "^1.1.0", - "asar": "^3.0.3", + "asar": "^3.1.0", "debug": "^4.3.1", "dir-compare": "^2.4.0", - "fs-extra": "^9.0.1" + "fs-extra": "^9.0.1", + "minimatch": "^3.0.4", + "plist": "^3.0.4" }, "dependencies": { "fs-extra": { @@ -88,6 +4927,12 @@ } } }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, "@malept/cross-spawn-promise": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", @@ -139,80 +4984,131 @@ } } }, - "@serialport/binding-abstract": { - "version": "9.2.3", - "resolved": "https://registry.npmjs.org/@serialport/binding-abstract/-/binding-abstract-9.2.3.tgz", - "integrity": "sha512-cQs9tbIlG3P0IrOWyVirqlhWuJ7Ms2Zh9m2108z6Y5UW/iVj6wEOiW8EmK9QX9jmJXYllE7wgGgvVozP5oCj3w==", + "@npmcli/fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.1.tgz", + "integrity": "sha512-1Q0uzx6c/NVNGszePbr5Gc2riSU1zLpNlo/1YWntH+eaPmMgBssAW0qXofCVkpdj3ce4swZtlDYQu+NKiYcptg==", + "dev": true, "requires": { - "debug": "^4.3.2" + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + } + }, + "@npmcli/move-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", + "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" } }, "@serialport/binding-mock": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/@serialport/binding-mock/-/binding-mock-9.2.4.tgz", - "integrity": "sha512-dpEhACCs44oQhh6ajJfJdvQdK38Vq0N4W6iD/gdplglDCK7qXRQCMUjJIeKdS/HSEiWkC3bwumUhUufdsOyT4g==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@serialport/binding-mock/-/binding-mock-10.2.2.tgz", + "integrity": "sha512-HAFzGhk9OuFMpuor7aT5G1ChPgn5qSsklTFOTUX72Rl6p0xwcSVsRtG/xaGp6bxpN7fI9D/S8THLBWbBgS6ldw==", "requires": { - "@serialport/binding-abstract": "9.2.3", - "debug": "^4.3.2" + "@serialport/bindings-interface": "^1.2.1", + "debug": "^4.3.3" } }, - "@serialport/bindings": { - "version": "9.2.8", - "resolved": "https://registry.npmjs.org/@serialport/bindings/-/bindings-9.2.8.tgz", - "integrity": "sha512-hSLxTe0tADZ3LMMGwvEJWOC/TaFQTyPeFalUCsJ1lSQ0k6bPF04JwrtB/C81GetmDBTNRY0GlD0SNtKCc7Dr5g==", + "@serialport/bindings-cpp": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/@serialport/bindings-cpp/-/bindings-cpp-10.7.0.tgz", + "integrity": "sha512-Xx1wA2UCG2loS32hxNvWJI4smCzGKhWqE85//fLRzHoGgE1lSLe3Nk7W40/ebrlGFHWRbQZmeaIF4chb2XLliA==", "requires": { - "@serialport/binding-abstract": "9.2.3", - "@serialport/parser-readline": "9.2.4", - "bindings": "^1.5.0", + "@serialport/bindings-interface": "1.2.1", + "@serialport/parser-readline": "^10.2.1", "debug": "^4.3.2", - "nan": "^2.15.0", - "prebuild-install": "^7.0.0" + "node-addon-api": "^4.3.0", + "node-gyp-build": "^4.3.0" + }, + "dependencies": { + "@serialport/bindings-interface": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@serialport/bindings-interface/-/bindings-interface-1.2.1.tgz", + "integrity": "sha512-63Dyqz2gtryRDDckFusOYqLYhR3Hq/M4sEdbF9i/VsvDb6T+tNVgoAKUZ+FMrXXKnCSu+hYbk+MTc0XQANszxw==" + }, + "node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + } } }, + "@serialport/bindings-interface": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@serialport/bindings-interface/-/bindings-interface-1.2.2.tgz", + "integrity": "sha512-CJaUd5bLvtM9c5dmO9rPBHPXTa9R2UwpkJ0wdh9JCYcbrPWsKz+ErvR0hBLeo7NPeiFdjFO4sonRljiw4d2XiA==" + }, "@serialport/parser-byte-length": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-9.2.4.tgz", - "integrity": "sha512-sQD/iw4ZMU3xW9PLi0/GlvU6Y623jGeWecbMkO7izUo/6P7gtfv1c9ikd5h0kwL8AoAOpQA1lxdHIKox+umBUg==" + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-10.3.0.tgz", + "integrity": "sha512-pJ/VoFemzKRRNDHLhFfPThwP40QrGaEnm9TtwL7o2GihEPwzBg3T0bN13ew5TpbbUYZdMpUtpm3CGfl6av9rUQ==" }, "@serialport/parser-cctalk": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-9.2.4.tgz", - "integrity": "sha512-T4TU5vQMwmo9AB3gQLFDWbfJXlW5jd9guEsB/nqKjFHTv0FXPdZ7DQ2TpSp8RnHWxU3GX6kYTaDO20BKzc8GPQ==" + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-10.3.0.tgz", + "integrity": "sha512-8ujmk8EvVbDPrNF4mM33bWvUYJOZ0wXbY3WCRazHRWvyCdL0VO0DQvW81ZqgoTpiDQZm5r8wQu9rmuemahF6vQ==" }, "@serialport/parser-delimiter": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-9.2.4.tgz", - "integrity": "sha512-4nvTAoYAgkxFiXrkI+3CA49Yd43CODjeszh89EK+I9c8wOZ+etZduRCzINYPiy26g7zO+GRAb9FoPCsY+sYcbQ==" + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-10.3.0.tgz", + "integrity": "sha512-9E4Vj6s0UbbcCCTclwegHGPYjJhdm9qLCS0lowXQDEQC5naZnbsELemMHs93nD9jHPcyx1B4oXkMnVZLxX5TYw==" }, "@serialport/parser-inter-byte-timeout": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-9.2.4.tgz", - "integrity": "sha512-SOAdvr0oBQIOCXX198hiTlxs4JTKg9j5piapw5tNq52fwDOWdbYrFneT/wN04UTMKaDrJuEvXq6T4rv4j7nJ5A==" + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-10.3.0.tgz", + "integrity": "sha512-wKP0QK85NHgvT6BBB1qBfKBBU4pf8kespNXAZBUYmFT+P4n8r8IZE2mqigCD+AiZcfWNQoAizwOsT/Jx/qeVig==" + }, + "@serialport/parser-packet-length": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-packet-length/-/parser-packet-length-10.3.0.tgz", + "integrity": "sha512-bj0cWzt8YSQj/E5fRQVYdi4TsfTlZQrXlXrUwjyTsCONv8IPOHzsz+yY0fw5SEMiJtaLyqvPkCHLsttOd/zFsg==" }, "@serialport/parser-readline": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-9.2.4.tgz", - "integrity": "sha512-Z1/qrZTQUVhNSJP1hd9YfDvq0o7d87rNwAjjRKbVpa7Qi51tG5BnKt43IV3NFMyBlVcRe0rnIb3tJu57E0SOwg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-10.3.0.tgz", + "integrity": "sha512-ki3ATZ3/RAqnqGROBKE7k+OeZ0DZXZ53GTca4q71OU5RazbbNhTOBQLKLXD3v9QZXCMJdg4hGW/2Y0DuMUqMQg==", "requires": { - "@serialport/parser-delimiter": "9.2.4" + "@serialport/parser-delimiter": "10.3.0" } }, "@serialport/parser-ready": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-9.2.4.tgz", - "integrity": "sha512-Pyi94Itjl6qAURwIZr/gmZpMAyTmKXThm6vL5DoAWGQjcRHWB0gwv2TY2v7N+mQLJYUKU3cMnvnATXxHm7xjxw==" + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-10.3.0.tgz", + "integrity": "sha512-1owywJ4p592dJyVrEJZPIh6pUZ3/y/LN6kGTDH2wxdewRUITo/sGvDy0er5i2+dJD3yuowiAz0dOHSdz8tevJA==" }, "@serialport/parser-regex": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-9.2.4.tgz", - "integrity": "sha512-sI/cVvPOYz+Dbv4ZdnW16qAwvXiFf/1pGASQdbveRTlgJDdz7sRNlCBifzfTN2xljwvCTZYqiudKvDdC1TepRQ==" + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-10.3.0.tgz", + "integrity": "sha512-tIogTs7CvTH+UUFnsvE7i33MSISyTPTGPWlglWYH2/5coipXY503jlaYS1YGe818wWNcSx6YAjMZRdhTWwM39w==" + }, + "@serialport/parser-slip-encoder": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-slip-encoder/-/parser-slip-encoder-10.3.0.tgz", + "integrity": "sha512-JI0ILF5sylWn8f0MuMzHFBix/iMUTa79/Z95KaPZYnVaEdA7h7hh/o21Jmon/26P3RJwL1SNJCjZ81zfan+LtQ==" + }, + "@serialport/parser-spacepacket": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-spacepacket/-/parser-spacepacket-10.3.0.tgz", + "integrity": "sha512-PDF73ClEPsClD1FEJZHNuBevDKsJCkqy/XD5+S5eA6+tY5D4HLrVgSWsg+3qqB6+dlpwf2CzHe+uO8D3teuKHA==" }, "@serialport/stream": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-9.2.4.tgz", - "integrity": "sha512-bLye8Ub4vUFQGmkh8qEqehr7SE7EJs2yDs0h9jzuL5oKi+F34CFmWkEErO8GAOQ8YNn7p6b3GxUgs+0BrHHDZQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-10.3.0.tgz", + "integrity": "sha512-7sooi5fHogYNVEJwxVdg872xO6TuMgQd2E9iRmv+o8pk/1dbBnPkmH6Ka3st1mVE+0KnIJqVlgei+ncSsqXIGw==", "requires": { + "@serialport/bindings-interface": "1.2.1", "debug": "^4.3.2" + }, + "dependencies": { + "@serialport/bindings-interface": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@serialport/bindings-interface/-/bindings-interface-1.2.1.tgz", + "integrity": "sha512-63Dyqz2gtryRDDckFusOYqLYhR3Hq/M4sEdbF9i/VsvDb6T+tNVgoAKUZ+FMrXXKnCSu+hYbk+MTc0XQANszxw==" + } } }, "@sindresorhus/is": { @@ -236,6 +5132,18 @@ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true }, + "@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "dev": true, + "requires": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, "@types/debug": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", @@ -265,6 +5173,27 @@ "@types/node": "*" } }, + "@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, + "@types/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==", + "dev": true + }, + "@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", @@ -279,9 +5208,9 @@ "dev": true }, "@types/node": { - "version": "12.20.52", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.52.tgz", - "integrity": "sha512-cfkwWw72849SNYp3Zx0IcIs25vABmFh73xicxhCkTcvtZQeIez15PpwQN8fY3RD7gv1Wrxlc9MEtfMORZDEsGw==", + "version": "16.11.46", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.46.tgz", + "integrity": "sha512-x+sfpb2dMrhCQPL4NAGs64Z9hh0t72aP0dg+PuZidmPr/0Gj5ELQTjD/t46dq3DF/8ZvSHOaIyDIbAsdPshyVQ==", "dev": true }, "@types/plist": { @@ -293,28 +5222,28 @@ "requires": { "@types/node": "*", "xmlbuilder": ">=11.0.1" - }, - "dependencies": { - "xmlbuilder": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", - "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", - "dev": true, - "optional": true - } + } + }, + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "requires": { + "@types/node": "*" } }, "@types/verror": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.5.tgz", - "integrity": "sha512-9UjMCHK5GPgQRoNbqdLIAvAy0EInuiqbW0PBMtVP6B5B2HQJlvoJHM+KodPZMEjOa5VkSc+5LH7xy+cUzQdmHw==", + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.6.tgz", + "integrity": "sha512-NNm+gdePAX1VGvPcGZCDKQZKYSiAWigKhKaz5KF94hG6f2s8de9Ow5+7AbXoeKxL8gavZfk4UquSAygOF2duEQ==", "dev": true, "optional": true }, "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "version": "17.0.11", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.11.tgz", + "integrity": "sha512-aB4y9UDUXTSMxmM4MH+YnuR0g5Cph3FLQBoWoMB21DSvFVAxRVEHEMx3TLh+zUZYMCQtKiqazz0Q4Rre31f/OA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -326,12 +5255,23 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, + "7zip-bin": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz", + "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", + "dev": true + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, + "about-window": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/about-window/-/about-window-1.15.2.tgz", + "integrity": "sha512-31mDAnLUfKm4uShfMzeEoS6a3nEto2tUt4zZn7qyAKedaTV4p0dGiW1n+YG8vtRh78mZiewghWJmoxDY+lHyYg==" + }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -341,6 +5281,27 @@ "debug": "4" } }, + "agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -357,7 +5318,8 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "requires": {} }, "ansi-align": { "version": "3.0.1", @@ -366,46 +5328,13 @@ "dev": true, "requires": { "string-width": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "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==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "ansi-styles": { "version": "4.3.0", @@ -417,41 +5346,42 @@ } }, "app-builder-bin": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-3.7.1.tgz", - "integrity": "sha512-ql93vEUq6WsstGXD+SBLSIQw6SNnhbDEM0swzgugytMxLp3rT24Ag/jcC80ZHxiPRTdew1niuR7P3/FCrDqIjw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", + "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", "dev": true }, "app-builder-lib": { - "version": "22.14.13", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.14.13.tgz", - "integrity": "sha512-SufmrtxU+D0Tn948fjEwAOlCN9757UXLkzzTWXMwZKR/5hisvgqeeBepWfphMIE6OkDGz0fbzEhL1P2Pty4XMg==", + "version": "23.3.3", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-23.3.3.tgz", + "integrity": "sha512-m0+M53+HYMzqKxwNQZT143K7WwXEGUy9LY31l8dJphXx2P/FQod615mVbxHyqbDCG4J5bHdWm21qZ0e2DVY6CQ==", "dev": true, "requires": { - "7zip-bin": "~5.1.1", "@develar/schema-utils": "~2.6.5", - "@electron/universal": "1.0.5", + "@electron/universal": "1.2.1", "@malept/flatpak-bundler": "^0.4.0", + "7zip-bin": "~5.1.1", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.9", - "builder-util": "22.14.13", - "builder-util-runtime": "8.9.2", + "builder-util": "23.3.3", + "builder-util-runtime": "9.0.3", "chromium-pickle-js": "^0.2.0", - "debug": "^4.3.2", - "ejs": "^3.1.6", - "electron-osx-sign": "^0.5.0", - "electron-publish": "22.14.13", + "debug": "^4.3.4", + "ejs": "^3.1.7", + "electron-osx-sign": "^0.6.0", + "electron-publish": "23.3.3", "form-data": "^4.0.0", - "fs-extra": "^10.0.0", - "hosted-git-info": "^4.0.2", + "fs-extra": "^10.1.0", + "hosted-git-info": "^4.1.0", "is-ci": "^3.0.0", - "isbinaryfile": "^4.0.8", + "isbinaryfile": "^4.0.10", "js-yaml": "^4.1.0", "lazy-val": "^1.0.5", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "read-config-file": "6.2.0", "sanitize-filename": "^1.6.3", - "semver": "^7.3.5", + "semver": "^7.3.7", + "tar": "^6.1.11", "temp-file": "^3.4.0" }, "dependencies": { @@ -476,15 +5406,6 @@ "universalify": "^2.0.0" } }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -494,17 +5415,32 @@ } }, "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true }, "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, "requires": { "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "argparse": { @@ -514,9 +5450,9 @@ "dev": true }, "asar": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/asar/-/asar-3.1.0.tgz", - "integrity": "sha512-vyxPxP5arcAqN4F/ebHd/HhwnAiZtwhglvdmc7BR2f0ywbVNTOpSeyhLDbGXtE/y58hv1oC75TaNIXutnsOZsQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/asar/-/asar-3.2.0.tgz", + "integrity": "sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==", "dev": true, "requires": { "@types/glob": "^7.1.1", @@ -526,20 +5462,12 @@ "minimatch": "^3.0.4" } }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true + "dev": true, + "optional": true }, "astral-regex": { "version": "2.0.0", @@ -549,9 +5477,9 @@ "optional": true }, "async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, "async-exit-hook": { @@ -572,18 +5500,6 @@ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -593,29 +5509,14 @@ "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "requires": { - "file-uri-to-path": "1.0.0" - } + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true }, "bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -626,6 +5527,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -672,38 +5574,6 @@ "wrap-ansi": "^7.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "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==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -726,6 +5596,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -772,20 +5643,20 @@ "dev": true }, "builder-util": { - "version": "22.14.13", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.14.13.tgz", - "integrity": "sha512-oePC/qrrUuerhmH5iaCJzPRAKlSBylrhzuAJmRQClTyWnZUv6jbaHh+VoHMbEiE661wrj2S2aV7/bQh12cj1OA==", + "version": "23.3.3", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-23.3.3.tgz", + "integrity": "sha512-MJZlUiq2PY5hjYv9+XNaoYdsITqvLgRDoHSFg/4nzpInbNxNjLQOolL04Zsyp+hgfcbFvMC4h0KkR1CMPHLWbA==", "dev": true, "requires": { - "7zip-bin": "~5.1.1", "@types/debug": "^4.1.6", "@types/fs-extra": "^9.0.11", - "app-builder-bin": "3.7.1", + "7zip-bin": "~5.1.1", + "app-builder-bin": "4.0.0", "bluebird-lst": "^1.0.9", - "builder-util-runtime": "8.9.2", + "builder-util-runtime": "9.0.3", "chalk": "^4.1.1", "cross-spawn": "^7.0.3", - "debug": "^4.3.2", + "debug": "^4.3.4", "fs-extra": "^10.0.0", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", @@ -826,15 +5697,86 @@ } }, "builder-util-runtime": { - "version": "8.9.2", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.9.2.tgz", - "integrity": "sha512-rhuKm5vh7E0aAmT6i8aoSfEjxzdYEFX7zDApK+eNgOhjofnWb74d9SRJv0H/8nsgOkos0TZ4zxW0P8J4N7xQ2A==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.0.3.tgz", + "integrity": "sha512-SfG2wnyjpUbbdtpnqDpWwklujofC6GarGpvdWrEkg9p5AD/xJmTF2buTNaqs3qtsNBEVQDDjZz9xc2GGpVyMfA==", "dev": true, "requires": { - "debug": "^4.3.2", + "debug": "^4.3.4", "sax": "^1.2.4" } }, + "cacache": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", + "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", + "dev": true, + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "dev": true + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true + }, "cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -873,12 +5815,6 @@ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -890,9 +5826,10 @@ } }, "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true }, "chromium-pickle-js": { "version": "0.2.0", @@ -906,6 +5843,12 @@ "integrity": "sha512-SXgeMX9VwDe7iFFaEWkA5AstuER9YKqy4EhHqr4DVqkwmD9rpVimkMKWHdjn30Ja45txyjhSn63lVX69eVCckg==", "dev": true }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, "cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", @@ -913,18 +5856,18 @@ "dev": true }, "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "requires": { - "restore-cursor": "^2.0.0" + "restore-cursor": "^3.1.0" } }, "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", "dev": true }, "cli-truncate": { @@ -936,44 +5879,6 @@ "requires": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "optional": true - }, - "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==", - "dev": true, - "optional": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "optional": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "cliui": { @@ -985,40 +5890,6 @@ "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "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==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "clone": { @@ -1028,27 +5899,14 @@ "dev": true }, "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, "requires": { "mimic-response": "^1.0.0" - }, - "dependencies": { - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - } } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1064,10 +5922,17 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, "colors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==" + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", + "dev": true }, "combined-stream": { "version": "1.0.8", @@ -1090,6 +5955,24 @@ "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", "dev": true }, + "compress-brotli": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", + "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", + "dev": true, + "requires": { + "@types/json-buffer": "~3.0.0", + "json-buffer": "~3.0.1" + }, + "dependencies": { + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + } + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1136,12 +6019,14 @@ "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true }, "crc": { "version": "3.8.0", @@ -1170,15 +6055,6 @@ "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -1187,29 +6063,25 @@ "ms": "2.1.2" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, "requires": { - "mimic-response": "^3.1.0" + "mimic-response": "^1.0.0" } }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true }, "defaults": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", "dev": true, "requires": { "clone": "^1.0.2" @@ -1235,18 +6107,25 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true }, "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", "dev": true }, "detect-node": { @@ -1289,15 +6168,15 @@ } }, "dmg-builder": { - "version": "22.14.13", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-22.14.13.tgz", - "integrity": "sha512-xNOugB6AbIRETeU2uID15sUfjdZZcKdxK8xkFnwIggsM00PJ12JxpLNPTjcRoUnfwj3WrPjilrO64vRMwNItQg==", + "version": "23.3.3", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-23.3.3.tgz", + "integrity": "sha512-ECwAjt+ZWyOvddrkDx1xRD6IVUCZb5SV6vSMHZd+Va3G2sUXHrnglR1cGDKRF4oYRQm8SYVrpLZKbi8npyDcAQ==", "dev": true, "requires": { - "app-builder-lib": "22.14.13", - "builder-util": "22.14.13", - "builder-util-runtime": "8.9.2", - "dmg-license": "^1.0.9", + "app-builder-lib": "23.3.3", + "builder-util": "23.3.3", + "builder-util-runtime": "9.0.3", + "dmg-license": "^1.0.11", "fs-extra": "^10.0.0", "iconv-lite": "^0.6.2", "js-yaml": "^4.1.0" @@ -1371,21 +6250,11 @@ "dev": true }, "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", "dev": true }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "ejs": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", @@ -1396,28 +6265,28 @@ } }, "electron": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/electron/-/electron-8.5.5.tgz", - "integrity": "sha512-e355H+tRDial0m+X2v+l+0SnaATAPw4sNjv9qmdk/6MJz/glteVJwVJEnxTjPfEELIJSChrBWDBVpjdDvoBF4Q==", + "version": "19.0.10", + "resolved": "https://registry.npmjs.org/electron/-/electron-19.0.10.tgz", + "integrity": "sha512-EiWtPWdD7CzkRkp1cw7t0N9W2qhI5XZOudHX7daOh5wI076nsdV2dtlAf/XyTHhPNoKR5qhTWrSnYL9PY6D1vg==", "dev": true, "requires": { - "@electron/get": "^1.0.1", - "@types/node": "^12.0.12", + "@electron/get": "^1.14.1", + "@types/node": "^16.11.26", "extract-zip": "^1.0.3" } }, "electron-builder": { - "version": "22.14.13", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-22.14.13.tgz", - "integrity": "sha512-3fgLxqF2TXVKiUPeg74O4V3l0l3j7ERLazo8sUbRkApw0+4iVAf2BJkHsHMaXiigsgCoEzK/F4/rB5rne/VAnw==", + "version": "23.3.3", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-23.3.3.tgz", + "integrity": "sha512-mFYYdhoFPKevP6y5uaaF3dusmB2OtQ/HnwwpyOePeU7QDS0SEIAUokQsHUanAiJAZcBqtY7iyLBgX18QybdFFw==", "dev": true, "requires": { "@types/yargs": "^17.0.1", - "app-builder-lib": "22.14.13", - "builder-util": "22.14.13", - "builder-util-runtime": "8.9.2", + "app-builder-lib": "23.3.3", + "builder-util": "23.3.3", + "builder-util-runtime": "9.0.3", "chalk": "^4.1.1", - "dmg-builder": "22.14.13", + "dmg-builder": "23.3.3", "fs-extra": "^10.0.0", "is-ci": "^3.0.0", "lazy-val": "^1.0.5", @@ -1496,9 +6365,9 @@ } }, "electron-osx-sign": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.5.0.tgz", - "integrity": "sha512-icoRLHzFz/qxzDh/N4Pi2z4yVHurlsCAYQvsCSG7fCedJ4UJXBS6PoQyGH71IfcqKupcKeK7HX/NkyfG+v6vlQ==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz", + "integrity": "sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg==", "dev": true, "requires": { "bluebird": "^3.5.0", @@ -1530,20 +6399,20 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, "electron-publish": { - "version": "22.14.13", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.14.13.tgz", - "integrity": "sha512-0oP3QiNj3e8ewOaEpEJV/o6Zrmy2VarVvZ/bH7kyO/S/aJf9x8vQsKVWpsdmSiZ5DJEHgarFIXrnO0ZQf0P9iQ==", + "version": "23.3.3", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-23.3.3.tgz", + "integrity": "sha512-1dX17eE5xVXedTxjC+gjsP74oC0+sIHgqysp0ryTlF9+yfQUyXjBk6kcK+zhtBA2SsHMSglDtM+JPxDD/WpPTQ==", "dev": true, "requires": { "@types/fs-extra": "^9.0.11", - "builder-util": "22.14.13", - "builder-util-runtime": "8.9.2", + "builder-util": "23.3.3", + "builder-util-runtime": "9.0.3", "chalk": "^4.1.1", "fs-extra": "^10.0.0", "lazy-val": "^1.0.5", @@ -1580,152 +6449,184 @@ } }, "electron-rebuild": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/electron-rebuild/-/electron-rebuild-1.11.0.tgz", - "integrity": "sha512-cn6AqZBQBVtaEyj5jZW1/LOezZZ22PA1HvhEP7asvYPJ8PDF4i4UFt9be4i9T7xJKiSiomXvY5Fd+dSq3FXZxA==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/electron-rebuild/-/electron-rebuild-3.2.9.tgz", + "integrity": "sha512-FkEZNFViUem3P0RLYbZkUjC8LUFIK+wKq09GHoOITSJjfDAVQv964hwaNseTTWt58sITQX3/5fHNYcTefqaCWw==", "dev": true, "requires": { - "colors": "^1.3.3", + "@malept/cross-spawn-promise": "^2.0.0", + "chalk": "^4.0.0", "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" + "detect-libc": "^2.0.1", + "fs-extra": "^10.0.0", + "got": "^11.7.0", + "lzma-native": "^8.0.5", + "node-abi": "^3.0.0", + "node-api-version": "^0.1.4", + "node-gyp": "^9.0.0", + "ora": "^5.1.0", + "semver": "^7.3.5", + "tar": "^6.0.5", + "yargs": "^17.0.1" }, "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "@malept/cross-spawn-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", + "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "cross-spawn": "^7.0.1" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dev": true, "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "defer-to-connect": "^2.0.0" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", "dev": true, "requires": { - "color-name": "1.1.3" + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "requires": { + "mimic-response": "^3.1.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=", + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "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==", + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, - "strip-ansi": { + "get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "pump": "^3.0.0" } }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "got": { + "version": "11.8.5", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", + "integrity": "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" } }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, - "yargs": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", - "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "keyv": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.3.tgz", + "integrity": "sha512-AcysI17RvakTh8ir03+a3zJr5r0ovnAH/XTXei/4HIv3bL2K/jzvgivLK9UuI/JbU1aJjM3NSAnVvVVd3n+4DQ==", "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" + "compress-brotli": "^1.3.8", + "json-buffer": "3.0.1" } }, - "yargs-parser": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.3.tgz", - "integrity": "sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==", + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true + }, + "responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "lowercase-keys": "^2.0.0" } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true } } }, @@ -1738,14 +6639,25 @@ "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, "optional": true }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "requires": { "once": "^1.4.0" } @@ -1756,6 +6668,12 @@ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, "es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", @@ -1782,17 +6700,6 @@ "dev": true, "optional": true }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, "extract-zip": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", @@ -1826,7 +6733,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } @@ -1853,17 +6760,12 @@ "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, "requires": { "pend": "~1.2.0" } }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, "filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -1893,21 +6795,6 @@ } } }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, "form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -1919,11 +6806,6 @@ "mime-types": "^2.1.12" } }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -1936,18 +6818,18 @@ } }, "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "requires": { - "minipass": "^2.6.0" + "minipass": "^3.0.0" } }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, "function-bind": { @@ -1958,18 +6840,19 @@ "optional": true }, "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, "requires": { - "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" + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" } }, "get-caller-file": { @@ -1979,15 +6862,15 @@ "dev": true }, "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", "dev": true, "optional": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.3" } }, "get-stream": { @@ -1999,20 +6882,6 @@ "pump": "^3.0.0" } }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" - }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -2111,23 +6980,6 @@ "p-cancelable": "^1.0.0", "to-readable-stream": "^1.0.0", "url-parse-lax": "^3.0.0" - }, - "dependencies": { - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - } } }, "graceful-fs": { @@ -2139,25 +6991,9 @@ "graceful-readlink": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==", "dev": true }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -2194,7 +7030,8 @@ "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true }, "has-yarn": { "version": "2.1.0", @@ -2228,15 +7065,14 @@ "debug": "4" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" } }, "https-proxy-agent": { @@ -2249,6 +7085,15 @@ "debug": "4" } }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, "iconv-corefoundation": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", @@ -2258,6 +7103,15 @@ "requires": { "cli-truncate": "^2.1.0", "node-addon-api": "^1.6.3" + }, + "dependencies": { + "node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "dev": true, + "optional": true + } } }, "iconv-lite": { @@ -2272,24 +7126,37 @@ "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true }, "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", "dev": true }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "requires": { "once": "^1.3.0", @@ -2299,12 +7166,20 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true }, "is-ci": { "version": "3.0.1", @@ -2316,12 +7191,10 @@ } }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } + "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==", + "dev": true }, "is-installed-globally": { "version": "0.4.0", @@ -2333,6 +7206,18 @@ "is-path-inside": "^3.0.2" } }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, "is-npm": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", @@ -2354,7 +7239,13 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, "is-yarn-global": { @@ -2366,7 +7257,8 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true }, "isbinaryfile": { "version": "4.0.10", @@ -2377,13 +7269,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "jake": { @@ -2407,22 +7293,10 @@ "argparse": "^2.0.1" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, "json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", "dev": true }, "json-schema-traverse": { @@ -2434,8 +7308,9 @@ "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "optional": true }, "json5": { "version": "2.2.1", @@ -2446,49 +7321,12 @@ "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "requires": { "graceful-fs": "^4.1.6" } }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - } - } - }, "keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", @@ -2513,93 +7351,20 @@ "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", "dev": true }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true - }, "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { - "chalk": "^2.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" } }, "lowercase-keys": { @@ -2612,10 +7377,35 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "requires": { "yallist": "^4.0.0" } }, + "lzma-native": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/lzma-native/-/lzma-native-8.0.6.tgz", + "integrity": "sha512-09xfg67mkL2Lz20PrrDeNYZxzeW7ADtpYFbwSQh9U8+76RIzx5QsJBMy8qikv3hbUPfpy6hqwxt6FcGK81g9AA==", + "dev": true, + "requires": { + "node-addon-api": "^3.1.0", + "node-gyp-build": "^4.2.1", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -2633,6 +7423,38 @@ } } }, + "make-fetch-happen": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.0.tgz", + "integrity": "sha512-OnEfCLofQVJ5zgKwGk55GaqosqKjaR6khQlJY3dBAA+hM25Bc5CmX5rKUfVut+rYA3uidA7zb7AvcglU87rPRg==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "dev": true + } + } + }, "matcher": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", @@ -2665,15 +7487,16 @@ } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true }, "minimatch": { "version": "3.1.2", @@ -2687,33 +7510,74 @@ "minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true }, "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", "dev": true, "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - }, - "dependencies": { - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" } }, "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "requires": { - "minipass": "^2.9.0" + "minipass": "^3.0.0", + "yallist": "^4.0.0" } }, "mkdirp": { @@ -2721,98 +7585,71 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" - }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true }, "node-abi": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", - "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.24.0.tgz", + "integrity": "sha512-YPG3Co0luSu6GwOBsmIdGW6Wx0NyNDLg/hriIyDllVsNwnI6UeqaWShxC3lbH4LtEQUgoLP3XR1ndXiDAWvmRw==", "dev": true, "requires": { - "semver": "^5.4.1" + "semver": "^7.3.5" } }, "node-addon-api": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + }, + "node-api-version": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.1.4.tgz", + "integrity": "sha512-KGXihXdUChwJAOHO53bv9/vXcLmdUsZ6jIptbvYvkpKfth+r7jw44JkVxQFA3kX5nQjzjmGu1uAu/xNNLNlI5g==", "dev": true, - "optional": true + "requires": { + "semver": "^7.3.5" + } }, "node-gyp": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-6.1.0.tgz", - "integrity": "sha512-h4A2zDlOujeeaaTx06r4Vy+8MZ1679lU+wbCKDS4ZtvY2A37DESo37oejIw0mtmR3+rvNwts5B6Kpt1KrNYdNw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz", + "integrity": "sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g==", "dev": true, "requires": { "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" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" } }, + "node-gyp-build": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" + }, "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dev": true, "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1" } }, "normalize-url": { @@ -2833,32 +7670,17 @@ } }, "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -2869,127 +7691,36 @@ "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "requires": { "wrappy": "1" } }, "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "ora": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", - "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { - "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" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "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" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "mimic-fn": "^2.1.0" + } }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" } }, "p-cancelable": { @@ -2998,30 +7729,15 @@ "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "aggregate-error": "^3.0.0" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, "package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", @@ -3042,16 +7758,10 @@ } } }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true }, "path-key": { @@ -3063,85 +7773,37 @@ "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "optional": true }, "plist": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz", - "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz", + "integrity": "sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA==", "dev": true, "requires": { "base64-js": "^1.5.1", - "xmlbuilder": "^9.0.7" - } - }, - "prebuild-install": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.0.tgz", - "integrity": "sha512-CNcMgI1xBypOyGqjp3wOc8AAo1nMhZS3Cwd3iHIxOdAUbb+YxdNuM4Z5iIrZ8RLvOsf3F3bl7b7xGq6DjQoNYA==", - "requires": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "dependencies": { - "detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" - }, - "node-abi": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.22.0.tgz", - "integrity": "sha512-u4uAs/4Zzmp/jjsD9cyFYDXeISfUWaAVWshPmDZOFOv4Xl4SbzTXm53I04C2uRueYJ+0t5PEtLH/owbn2Npf/w==", - "requires": { - "semver": "^7.3.5" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - } + "xmlbuilder": "^15.1.1" } }, "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", "dev": true }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true }, "progress": { "version": "2.0.3", @@ -3149,23 +7811,34 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, "proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true, "optional": true }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -3186,16 +7859,17 @@ "escape-goat": "^2.0.0" } }, - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -3220,6 +7894,7 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -3231,12 +7906,12 @@ } }, "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", + "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", "dev": true, "requires": { - "rc": "^1.2.8" + "rc": "1.2.8" } }, "registry-url": { @@ -3248,78 +7923,43 @@ "rc": "^1.2.8" } }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - } - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", "dev": true }, "responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "dev": true, "requires": { "lowercase-keys": "^1.0.0" } }, "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "requires": { - "onetime": "^2.0.0", + "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -3344,19 +7984,11 @@ "sprintf-js": "^1.1.2" } }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -3380,15 +8012,18 @@ "dev": true }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "semver-compare": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true, "optional": true }, @@ -3420,27 +8055,31 @@ } }, "serialport": { - "version": "9.2.8", - "resolved": "https://registry.npmjs.org/serialport/-/serialport-9.2.8.tgz", - "integrity": "sha512-FsWpMQgSJxi93JgWl5xM1f9/Z8IjRJuaUEoHqLf8FPBLw7gMhInuHOBhI2onQufWIYPGTz3H3oGcu1nCaK1EfA==", - "requires": { - "@serialport/binding-mock": "9.2.4", - "@serialport/bindings": "9.2.8", - "@serialport/parser-byte-length": "9.2.4", - "@serialport/parser-cctalk": "9.2.4", - "@serialport/parser-delimiter": "9.2.4", - "@serialport/parser-inter-byte-timeout": "9.2.4", - "@serialport/parser-readline": "9.2.4", - "@serialport/parser-ready": "9.2.4", - "@serialport/parser-regex": "9.2.4", - "@serialport/stream": "9.2.4", - "debug": "^4.3.2" + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/serialport/-/serialport-10.4.0.tgz", + "integrity": "sha512-PszPM5SnFMgSXom60PkKS2A9nMlNbHkuoyRBlzdSWw9rmgOn258+V0dYbWMrETJMM+TJV32vqBzjg5MmmUMwMw==", + "requires": { + "@serialport/binding-mock": "10.2.2", + "@serialport/bindings-cpp": "10.7.0", + "@serialport/parser-byte-length": "10.3.0", + "@serialport/parser-cctalk": "10.3.0", + "@serialport/parser-delimiter": "10.3.0", + "@serialport/parser-inter-byte-timeout": "10.3.0", + "@serialport/parser-packet-length": "10.3.0", + "@serialport/parser-readline": "10.3.0", + "@serialport/parser-ready": "10.3.0", + "@serialport/parser-regex": "10.3.0", + "@serialport/parser-slip-encoder": "10.3.0", + "@serialport/parser-spacepacket": "10.3.0", + "@serialport/stream": "10.3.0", + "debug": "^4.3.3" } }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true }, "shebang-command": { "version": "2.0.0", @@ -3460,22 +8099,8 @@ "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - }, - "simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "requires": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "slice-ansi": { "version": "3.0.0", @@ -3487,23 +8112,34 @@ "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "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==", - "dev": true, - "optional": true - } } }, "smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "socks": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", + "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", "dev": true, - "optional": true + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } }, "source-map": { "version": "0.6.1", @@ -3521,34 +8157,6 @@ "source-map": "^0.6.0" } }, - "spawn-rx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spawn-rx/-/spawn-rx-3.0.0.tgz", - "integrity": "sha512-dw4Ryg/KMNfkKa5ezAR5aZe9wNwPdKlnHEXtHOjVnyEDSPQyOpIPPRtcIiu7127SmtHhaCjw21yC43HliW0iIg==", - "dev": true, - "requires": { - "debug": "^2.5.1", - "lodash.assign": "^4.2.0", - "rxjs": "^6.3.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, "sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", @@ -3556,21 +8164,13 @@ "dev": true, "optional": true }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "dev": true, "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" + "minipass": "^3.1.1" } }, "stat-mode": { @@ -3579,36 +8179,40 @@ "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", "dev": true }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" } }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true }, "sumchecker": { "version": "3.0.1", @@ -3629,76 +8233,17 @@ } }, "tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "dev": true, "requires": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" } }, "temp-file": { @@ -3764,31 +8309,15 @@ "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", "dev": true }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, "truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", "dev": true, "requires": { "utf8-byte-length": "^1.0.1" } }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "tunnel": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", @@ -3796,20 +8325,6 @@ "dev": true, "optional": true }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, "type-fest": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", @@ -3820,7 +8335,7 @@ "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, "typedarray-to-buffer": { @@ -3832,6 +8347,24 @@ "is-typedarray": "^1.0.0" } }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -3883,15 +8416,6 @@ "requires": { "ci-info": "^2.0.0" } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } } } }, @@ -3907,7 +8431,7 @@ "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "dev": true, "requires": { "prepend-http": "^2.0.0" @@ -3916,18 +8440,13 @@ "utf8-byte-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=", + "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==", "dev": true }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, "verror": { @@ -3945,7 +8464,7 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true, "optional": true } @@ -3954,7 +8473,7 @@ "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "requires": { "defaults": "^1.0.3" @@ -3969,16 +8488,11 @@ "isexe": "^2.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, "wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, "requires": { "string-width": "^1.0.2 || 2 || 3 || 4" } @@ -3990,40 +8504,6 @@ "dev": true, "requires": { "string-width": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "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==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "wrap-ansi": { @@ -4035,46 +8515,13 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "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==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "write-file-atomic": { "version": "3.0.3", @@ -4095,9 +8542,9 @@ "dev": true }, "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", "dev": true }, "y18n": { @@ -4109,7 +8556,8 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "yargs": { "version": "17.5.1", @@ -4124,52 +8572,18 @@ "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "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==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true }, "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, "requires": { "buffer-crc32": "~0.2.3", diff --git a/package.json b/package.json index cf70f02..1f1a835 100644 --- a/package.json +++ b/package.json @@ -1,22 +1,22 @@ { - "name": "MicroPython_lab", - "version": "0.1.0", - "description": "", + "name": "arduino-lab-micropython-ide", + "productName": "Arduino Lab for Micropython", + "version": "0.3.1", + "description": "Arduino Lab for MicroPython is a project sponsored by Arduino, based on original work by Murilo Polese.\nThis is an experimental pre-release software, please direct any questions exclusively to Github issues.", + "main": "index.js", "scripts": { "post-set-shell": "npm config set script-shell bash", - "post-install": "npm install electron@8.5.5 $(if [ $(uname -m) = arm64 ]; then echo --arch=x64; fi) --save-dev", - "post-rebuild": "electron-rebuild", - "dev": "APP_DEV=true electron ./", - "pack": "electron-builder --dir", + "rebuild": "electron-rebuild", + "dev": "electron ./", "build": "npm run post-set-shell && electron-builder $(if [ $(uname -m) = arm64 ]; then echo --mac --x64; fi)", - "postinstall": "npm run post-set-shell && npm run post-install && npm run post-rebuild" + "postinstall": "npm run post-set-shell && npm run rebuild" }, "devDependencies": { - "electron": "^8.5.5", - "electron-builder": "^22.3.2", - "electron-notarize": "^1.1.1", - "electron-rebuild": "^1.10.0", + "electron": "^19.0.10", + "electron-builder": "^23.3.3", + "electron-notarize": "^1.2.1", + "electron-rebuild": "^3.2.9", "is-ci": "^3.0.1" }, "build": { @@ -36,11 +36,10 @@ }, "afterSign": "scripts/notarize.js" }, - "author": "", - "license": "ISC", + "license": "MIT", "dependencies": { - "colors": "1.0.3", + "about-window": "^1.15.2", "mkdirp": "^1.0.3", - "serialport": "^9.2.8" + "serialport": "^10.4.0" } } diff --git a/preload.js b/preload.js index 44ec6fc..b7ce1ae 100644 --- a/preload.js +++ b/preload.js @@ -1,166 +1,116 @@ console.log('preload') -const { ipcRenderer } = require('electron') -const EventEmitter = require('events') -const SerialConnection = require('./micropython.js') - -const serialBus = new EventEmitter() -let port = null -let connection = null -const SERIAL_BUFFER_SIZE = 128 - -serialBus.on('load-ports', () => { - console.log('serialBus', 'load-ports') - SerialConnection.listAvailable() - .then((ports) => { - serialBus.emit('ports', ports) - }) - .catch((err) => { - console.log(err) - }) -}) - -serialBus.on('connect', (p) => { - console.log('serialBus', 'connect', p) - connection = new SerialConnection() - connection.on('connected', () => { - console.log('serialBus', 'connected') - serialBus.emit('connected', p) - }) - connection.on('disconnected', () => { - console.log('serialBus', 'disconnected') - serialBus.emit('disconnected', p) - }) - connection.on('output', (d) => { - serialBus.emit('data', d) - }) - connection.on('execution-started', () => { - console.log('serialBus', 'execution-started') - serialBus.emit('execution-started') - }) - connection.on('execution-finished', () => { - console.log('serialBus', 'execution-finished') - serialBus.emit('execution-finished') - }) - connection.on('file-saved', () => { - console.log('serialBus', 'file-saved') - serialBus.emit('file-saved') - }) - connection.open(p) -}) - -serialBus.on('disconnect', () => { - console.log('serialBus', 'disconnect') - connection.close() - serialBus.emit('disconnected') -}) - -serialBus.on('run', (code) => { - console.log('serialBus', 'run', code) - connection.execute(code) - serialBus.emit('running') -}) - -serialBus.on('stop', () => { - console.log('serialBus', 'stop') - connection.stop() - serialBus.emit('stopped') -}) - -serialBus.on('reset', () => { - console.log('serialBus', 'reset') - connection.softReset() - serialBus.emit('stopped') -}) - -serialBus.on('write', (command) => { - connection.evaluate(command) -}) - -serialBus.on('save-file', (filename, code) => { - console.log('serialBus', 'save-file', filename, code) - connection.writeFile(filename, code) -}) - -serialBus.on('load-file', (filename) => { - console.log('serialBus', 'load-file', filename) - connection.loadFile(filename) -}) - -serialBus.on('list-files', () => { - console.log('serialBus', 'list-files') - connection.listFiles() -}) - -serialBus.on('rename-file', (oldPath, newPath) => { - console.log('serialBus', 'rename-file', oldPath, newPath) - connection.renameFile(oldPath, newPath) -}) - -serialBus.on('remove-file', (filename) => { - console.log('serialBus', 'remove-file', filename) - connection.removeFile(filename) -}) - -window.serialBus = serialBus - - -const diskBus = new EventEmitter() - -diskBus.on('open-folder', () => { - console.log('diskBus', 'open-folder') - ipcRenderer.invoke('open-folder') - .then((result) => { - diskBus.emit('folder-opened', result) - }) -}) - -diskBus.on('load-file', ({ folder, filename }) => { - console.log('diskBus', 'load-file', folder, filename) - ipcRenderer.invoke('load-file', folder, filename) - .then((result) => { - diskBus.emit('file-loaded', result) - }) -}) - -diskBus.on('save-file', ({ folder, filename, content }) => { - console.log('diskBus', 'save-file', folder, filename, content) - ipcRenderer.invoke('save-file', folder, filename, content) - .then((result) => { - if (result) { - diskBus.emit('file-saved') - } else { - console.log('error', result) - } - }) -}) - -diskBus.on('update-folder', (folder) => { - console.log('diskBus', 'update-folder', folder) - ipcRenderer.invoke('update-folder', folder) - .then((results) => { - diskBus.emit('folder-updated', results) - }) -}) - -diskBus.on('remove-file', ({ folder, filename }) => { - console.log('diskBus', 'remove-file', folder, filename) - ipcRenderer.invoke('remove-file', folder, filename) - .then((result) => { - diskBus.emit('file-removed') - }) -}) - -diskBus.on('rename-file', ({ folder, filename, newFilename }) => { - // TODO: Sanitize `newFilename` - console.log('diskBus', 'rename-file', folder, filename, newFilename) - if (folder && filename) { - ipcRenderer.invoke('rename-file', folder, filename, newFilename) - .then((result) => { - diskBus.emit('file-renamed', result) - }) - } else { - diskBus.emit('file-renamed', newFilename) - } -}) - -window.diskBus = diskBus +const { contextBridge, ipcRenderer } = require('electron') + +const Micropython = require('./micropython.js') +const board = new Micropython() + +function extractFileArray(output) { + output = output.replace(/'/g, '"'); + output = output.split('OK') + let files = output[2] || '' + files = files.slice(0, files.indexOf(']')+1) + files = JSON.parse(files) + return files +} + +const Serial = { + loadPorts: async () => { + let ports = await board.listPorts() + return ports.filter(p => p.vendorId && p.productId) + }, + connect: async (path) => { + return await board.open(path) + }, + disconnect: async () => { + return await board.close() + }, + run: async (code) => { + if (board.in_raw_repl) { + await board.exit_raw_repl() + } + await board.enter_raw_repl() + let result = await board.exec_raw({ command: code }) + await board.exit_raw_repl() + return Promise.resolve(result) + }, + stop: async () => { + if (board.in_raw_repl) { + await board.stop() + return board.exit_raw_repl() + } else { + return board.stop() + } + }, + reset: async () => { + if (board.in_raw_repl) { + await board.stop() + await board.exit_raw_repl() + return board.reset() + } else { + return board.reset() + } + }, + eval: (d) => { + return board.eval(d) + }, + onData: (fn) => { + board.serial.on('data', fn) + }, + listFiles: async () => { + let output = await board.fs_ls() + return extractFileArray(output) + }, + loadFile: async (file) => { + let output = await board.fs_cat(file) + output = output.split('OK') + return output[2] || '' + }, + removeFile: async (file) => { + return board.fs_rm(file) + }, + saveFileContent: async (filename, content) => { + content = content.replace(//g, ``) + return board.fs_save(content || ' ', filename) + }, + uploadFile: async (folder, filename) => { + let src = `${folder}/${filename}` + let dest = filename + return board.fs_put(src, dest) + }, + downloadFile: async (folder, filename) => { + let contents = await Serial.loadFile(filename) + contents = contents.replace(//g, ``) + return ipcRenderer.invoke('save-file', folder, filename, contents) + }, + renameFile: async (oldName, newName) => { + return board.fs_rename(oldName, newName) + }, + onDisconnect: async (fn) => { + board.serial.on('close', fn) + } +} + +const Disk = { + openFolder: async () => { + return ipcRenderer.invoke('open-folder') + }, + listFiles: async (folder) => { + return ipcRenderer.invoke('list-files', folder) + }, + loadFile: async (folder, file) => { + let content = await ipcRenderer.invoke('load-file', folder, file) + return new TextDecoder().decode(content) + }, + removeFile: async (folder, file) => { + return ipcRenderer.invoke('remove-file', folder, file) + }, + saveFileContent: async (folder, file, content) => { + return ipcRenderer.invoke('save-file', folder, file, content) + }, + renameFile: async (folder, oldName, newName) => { + return ipcRenderer.invoke('rename-file', folder, oldName, newName) + } +} + +contextBridge.exposeInMainWorld('BridgeSerial', Serial) +contextBridge.exposeInMainWorld('BridgeDisk', Disk) diff --git a/ui/arduino/about.css b/ui/arduino/about.css new file mode 100644 index 0000000..f9fdd99 --- /dev/null +++ b/ui/arduino/about.css @@ -0,0 +1,84 @@ +body, +html { + width: 100%; + height: 100%; + -webkit-user-select: none; + user-select: none; + -webkit-app-region: drag; +} + +body { + margin: 0; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + color: #333; + background-color: #eee; + font-size: 12px; + font-family: 'Helvetica', 'Arial', 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', 'メイリオ', Meiryo, 'ï¼­ï¼³ Pゴシック', 'MS PGothic', sans-serif; +} + +.logo { + width: 80%; + -webkit-user-select: none; + user-select: none; +} +.logo img{ + width: 100%; + height: auto; +} + +.title, +.copyright, +.description { + margin: 0.2em; +} + +.clickable { + cursor: pointer; +} + +.description { + text-align: left; + margin: 2em; + +} + +.versions { + border-collapse: collapse; + margin-top: 1em; +} + +.copyright, +.versions { + color: #999; +} + +.buttons { + margin-bottom: 1em; + text-align: center; +} + +.buttons button { + margin-top: 1em; + width: 100px; + height: 24px; +} + +.link { + cursor: pointer; + color: #80a0c2; +} + +.bug-report-link { + position: absolute; + right: 1em; + bottom: 1em; +} + +.clickable, +.bug-report-link, +.buttons button { + -webkit-app-region: no-drag; +} diff --git a/ui/arduino/about.html b/ui/arduino/about.html new file mode 100644 index 0000000..0eda52f --- /dev/null +++ b/ui/arduino/about.html @@ -0,0 +1,21 @@ + + + + + + About This App + + + + +

+

+ +
+
+ +
+ + diff --git a/ui/arduino/app.js b/ui/arduino/app.js new file mode 100644 index 0000000..1b784bb --- /dev/null +++ b/ui/arduino/app.js @@ -0,0 +1,22 @@ +function App(state, emit) { + return html` +
+ ${Toolbar(state, emit)} + ${FileName(state, emit)} +
+ ${Editor(state, emit)} + ${Panel(state, emit)} +
+ ${NewFileDialog(state, emit)} + ${PortDialog(state, emit)} + ${Message(state, emit)} +
+ ` +} + +window.addEventListener('load', () => { + let app = Choo() + app.use(store); + app.route('*', App) + app.mount('#app') +}) diff --git a/ui/arduino/assets/about_image.png b/ui/arduino/assets/about_image.png new file mode 100644 index 0000000..ed31dcd Binary files /dev/null and b/ui/arduino/assets/about_image.png differ diff --git a/ui/arduino/components/editor.js b/ui/arduino/components/editor.js new file mode 100644 index 0000000..e58d125 --- /dev/null +++ b/ui/arduino/components/editor.js @@ -0,0 +1,38 @@ +function Editor(state, emit) { + return html` + ${state.cache(AceEditor, 'editor').render()} + ` +} + +class AceEditor extends Component { + constructor() { + super() + this.editor = null + } + + load(element) { + this.editor = ace.edit("editor") + this.editor.setFontSize(14) + this.editor.setTheme("ace/theme/github") + this.editor.session.setMode("ace/mode/python") + this.editor.setValue(`from time import sleep + +for i in range(0, 10): + print('.') + sleep(0.1) + +`) + } + + createElement(content) { + return html`
` + } + + update(newContent) { + if (newContent) { + this.editor.setValue(newContent) + } + setTimeout(() => this.editor.resize(), 10) + return false + } +} diff --git a/ui/arduino/components/filename.js b/ui/arduino/components/filename.js new file mode 100644 index 0000000..e2553c7 --- /dev/null +++ b/ui/arduino/components/filename.js @@ -0,0 +1,35 @@ +function FileName(state, emit) { + // File icon: disk or board + let fileIcon = 'icons/Open.svg' + if (state.isConnected && state.selectedDevice === 'serial') { + fileIcon = 'icons/Connect.svg' + } + // Filename input + function onBlur(e) { + emit('save-filename', e.target.value) + } + function onKeyDown(e) { + if(e.key.toLowerCase() === 'enter') { + e.target.blur() + } + } + /* + XXX: If this input is blurred because person clicked on another serial file, + it triggers both a `save-filename` and a `select-file` event and + filesystem panel will act up. It will require only re-opening it. + */ + let filename = html` + + ` + return html` +
+ ${Icon(fileIcon)} + ${filename} +
+ ` +} diff --git a/ui/arduino/components/icon.js b/ui/arduino/components/icon.js new file mode 100644 index 0000000..aec0666 --- /dev/null +++ b/ui/arduino/components/icon.js @@ -0,0 +1,3 @@ +function Icon(src) { + return html`` +} diff --git a/ui/arduino/components/message.js b/ui/arduino/components/message.js new file mode 100644 index 0000000..5eaeb32 --- /dev/null +++ b/ui/arduino/components/message.js @@ -0,0 +1,6 @@ +function Message(state, emit) { + let className = state.isShowingMessage ? 'show' : '' + return html` +
${state.messageText}
+ ` +} diff --git a/ui/arduino/components/newfiledialog.js b/ui/arduino/components/newfiledialog.js new file mode 100644 index 0000000..b3d2d15 --- /dev/null +++ b/ui/arduino/components/newfiledialog.js @@ -0,0 +1,24 @@ +function NewFileDialog(state, emit) { + if (!state.isNewFileDialogOpen) return null + function PortItem(port) { + return html`
  • emit('connect', port.path)}>${port.path}
  • ` + } + function closeBackdrop(e) { + if (e.target.id == 'backdrop') { + emit('close-new-file-dialog') + } + } + let serialOption = html` +
  • emit('new-file', 'serial')}>MicroPython Board
  • + ` + return html` +
    +
    +
      + ${state.isConnected ? serialOption : null} +
    • emit('new-file', 'disk')}>Computer Storage
    • +
    +
    +
    + ` +} diff --git a/ui/arduino/components/panel.js b/ui/arduino/components/panel.js new file mode 100644 index 0000000..e752b3e --- /dev/null +++ b/ui/arduino/components/panel.js @@ -0,0 +1,31 @@ +function Panel(state, emit) { + let open = state.isTerminalOpen || state.isFilesOpen + let openClass = open ? 'open' : '' + let panelHeight = open ? `height: ${state.panelHeight}` : '' + return html` +
    + ${open ? PanelHandle(state, emit) : null} + ${state.isTerminalOpen ? PanelTerminal(state, emit) : null} + ${state.isFilesOpen ? PanelFiles(state, emit) : null} +
    + ` +} + +function PanelHandle(state, emit) { + let termControls = html` + + + + ` + return html` +
    emit('start-resizing-panel')}> + ${state.isTerminalOpen ? termControls : null} +
    + ` +} diff --git a/ui/arduino/components/panel_files.js b/ui/arduino/components/panel_files.js new file mode 100644 index 0000000..8b2cc7b --- /dev/null +++ b/ui/arduino/components/panel_files.js @@ -0,0 +1,65 @@ +function PanelFiles(state, emit) { + function ListItem(device, file) { + let selectedClass = '' + if (device === state.selectedDevice && file === state.selectedFile) { + selectedClass = 'selected' + } + return html` +
  • emit('select-file', device, file)} + class=${selectedClass} + > + ${file} +
  • + ` + } + + let uploadEnabled = state.isConnected + && state.diskPath + && state.selectedDevice === 'disk' + && state.selectedFile !== null + let downloadEnabled = state.isConnected + && state.diskPath + && state.selectedDevice === 'serial' + && state.selectedFile !== null + let upload = Button({ + label: 'Upload', + icon: 'icons/Copy-Left.svg', + onclick: () => emit('upload'), + disabled: !uploadEnabled + }) + let download = Button({ + label: 'Download', + icon: 'icons/Copy-Right.svg', + onclick: () => emit('download'), + disabled: !downloadEnabled + }) + let remove = Button({ + label: 'Remove', + icon: 'icons/Delete.svg', + onclick: () => emit('remove'), + disabled: state.selectedFile === null + }) + + return html` +
    +
    + Board: ${state.serialPath} +
      + ${state.serialFiles.map((file) => ListItem('serial', file))} +
    +
    +
    + ${upload} + ${download} + ${remove} +
    +
    + Disk: ${state.diskPath} +
      + ${state.diskFiles.map((file) => ListItem('disk', file))} +
    +
    +
    + ` +} diff --git a/ui/blank/components/xterm.js b/ui/arduino/components/panel_terminal.js similarity index 58% rename from ui/blank/components/xterm.js rename to ui/arduino/components/panel_terminal.js index fb4331d..d5641d4 100644 --- a/ui/blank/components/xterm.js +++ b/ui/arduino/components/panel_terminal.js @@ -1,8 +1,12 @@ +function PanelTerminal(state, emit) { + return state.cache(XTerm, 'terminal').render() +} + class XTerm extends Component { constructor(id, state, emit) { super(id) this.term = new Terminal() - this.term.onData((data) => emit('terminal-input', data)) + // this.term.onData((data) => emit('terminal-input', data)) this.resizeTerm = this.resizeTerm.bind(this) } @@ -13,7 +17,7 @@ class XTerm extends Component { } createElement() { - return html`
    ` + return html`
    ` } update() { @@ -22,11 +26,12 @@ class XTerm extends Component { } resizeTerm() { - const parentStyle = window.getComputedStyle(this.term.element.parentElement) - const parentWidth = parseInt(parentStyle.getPropertyValue('width')) - (window.innerHeight*0.0175) - const parentHeight = parseInt(parentStyle.getPropertyValue('height')) - (window.innerHeight*0.0175) + let handleSize = 2 * 0.0225 * window.innerHeight + const parentStyle = window.getComputedStyle(document.querySelector('#panel')) + const parentWidth = parseInt(parentStyle.getPropertyValue('width')) + const parentHeight = parseInt(parentStyle.getPropertyValue('height')) const cols = Math.floor(parentWidth / this.term._core._renderService.dimensions.actualCellWidth) - const rows = Math.floor(parentHeight / this.term._core._renderService.dimensions.actualCellHeight) + const rows = Math.floor((parentHeight-handleSize) / this.term._core._renderService.dimensions.actualCellHeight) this.term.resize(cols, rows) } } diff --git a/ui/blank/components/portdialog.js b/ui/arduino/components/portdialog.js similarity index 65% rename from ui/blank/components/portdialog.js rename to ui/arduino/components/portdialog.js index f9e4e54..18f0124 100644 --- a/ui/blank/components/portdialog.js +++ b/ui/arduino/components/portdialog.js @@ -1,6 +1,7 @@ function PortDialog(state, emit) { + if (!state.isPortDialogOpen) return null function PortItem(port) { - return html`
  • emit('connect', port)}>${port.path}
  • ` + return html`
  • emit('connect', port.path)}>${port.path}
  • ` } function closeBackdrop(e) { if (e.target.id == 'backdrop') { @@ -12,7 +13,7 @@ function PortDialog(state, emit) {
      ${state.ports.map(PortItem)} -
    • window.serialBus.emit('load-ports')}>Refresh
    • +
    • emit('load-ports')}>Refresh
    diff --git a/ui/arduino/components/toolbar.js b/ui/arduino/components/toolbar.js new file mode 100644 index 0000000..a52bceb --- /dev/null +++ b/ui/arduino/components/toolbar.js @@ -0,0 +1,85 @@ +function Toolbar(state, emit) { + const connect = Button({ + icon: state.isConnected ? 'icons/Connect.svg' : 'icons/Disconnect.svg', + label: 'Connect', + disabled: false, + onclick: () => emit('open-port-dialog'), + color: 'default' + }) + + const play = Button({ + icon: 'icons/Run.svg', + label: 'Run', + disabled: !state.isConnected, + onclick: () => emit('run'), + color: 'primary' + }) + const stop = Button({ + icon: 'icons/Stop.svg', + label: 'Stop', + disabled: !state.isConnected, + onclick: () => emit('stop'), + color: 'primary' + }) + const reset = Button({ + icon: 'icons/Reboot.svg', + label: 'Reset', + disabled: !state.isConnected, + onclick: () => emit('reset'), + color: 'primary' + }) + + const newFile = Button({ + icon: 'icons/New.svg', + label: 'New', + disabled: false, + onclick: () => emit('open-new-file-dialog') + }) + const openFolder = Button({ + icon: 'icons/Open.svg', + label: 'Folder', + disabled: false, + onclick: () => emit('open-folder') + }) + + const canSave = (state.isConnected && state.selectedDevice === 'serial' && state.selectedFile) + || (state.selectedDevice === 'disk' && state.selectedFile) + const save = Button({ + icon: 'icons/Save.svg', + label: 'Save', + disabled: !canSave, + onclick: () => emit('save') + }) + + const terminal = Button({ + icon: 'icons/Output.svg', + label: 'Terminal', + disabled: !state.isConnected, + onclick: () => emit('show-terminal'), + selected: state.isTerminalOpen, + }) + const files = Button({ + icon: 'icons/File-Explorer.svg', + label: 'Files', + disabled: false, + onclick: () => emit('show-files'), + selected: state.isFilesOpen + }) + + return html` +
    + ${connect} +
    + ${play} + ${stop} + ${reset} +
    + ${newFile} + ${openFolder} + ${save} +
    + ${terminal} + ${files} +
    + ` +} diff --git a/ui/arduino/components/toolbar_button.js b/ui/arduino/components/toolbar_button.js new file mode 100644 index 0000000..0b5086e --- /dev/null +++ b/ui/arduino/components/toolbar_button.js @@ -0,0 +1,22 @@ +function Button(param) { + let { + onclick = () => false, + disabled = false, + label = '', + icon = '', + color = 'default', + selected = false + } = param || {} + return html` +
    + + ${label} +
    + ` +} diff --git a/ui/arduino/icons/Connect.svg b/ui/arduino/icons/Connect.svg new file mode 100644 index 0000000..a0c9f5e --- /dev/null +++ b/ui/arduino/icons/Connect.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ui/arduino/icons/Connect@3x.png b/ui/arduino/icons/Connect@3x.png new file mode 100644 index 0000000..1d3ae88 Binary files /dev/null and b/ui/arduino/icons/Connect@3x.png differ diff --git a/ui/arduino/icons/Copy-Left.svg b/ui/arduino/icons/Copy-Left.svg new file mode 100644 index 0000000..6d4badc --- /dev/null +++ b/ui/arduino/icons/Copy-Left.svg @@ -0,0 +1,3 @@ + + + diff --git a/ui/arduino/icons/Copy-Left@3x.png b/ui/arduino/icons/Copy-Left@3x.png new file mode 100644 index 0000000..17ffc38 Binary files /dev/null and b/ui/arduino/icons/Copy-Left@3x.png differ diff --git a/ui/arduino/icons/Copy-Right.svg b/ui/arduino/icons/Copy-Right.svg new file mode 100644 index 0000000..459e2b5 --- /dev/null +++ b/ui/arduino/icons/Copy-Right.svg @@ -0,0 +1,3 @@ + + + diff --git a/ui/arduino/icons/Copy-Right@3x.png b/ui/arduino/icons/Copy-Right@3x.png new file mode 100644 index 0000000..ba89881 Binary files /dev/null and b/ui/arduino/icons/Copy-Right@3x.png differ diff --git a/ui/arduino/icons/Delete.svg b/ui/arduino/icons/Delete.svg new file mode 100644 index 0000000..97c8a17 --- /dev/null +++ b/ui/arduino/icons/Delete.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/ui/arduino/icons/Delete@3x.png b/ui/arduino/icons/Delete@3x.png new file mode 100644 index 0000000..63873b0 Binary files /dev/null and b/ui/arduino/icons/Delete@3x.png differ diff --git a/ui/arduino/icons/Disconnect.svg b/ui/arduino/icons/Disconnect.svg new file mode 100644 index 0000000..cac6b7a --- /dev/null +++ b/ui/arduino/icons/Disconnect.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/ui/arduino/icons/Disconnect@3x.png b/ui/arduino/icons/Disconnect@3x.png new file mode 100644 index 0000000..2a2f022 Binary files /dev/null and b/ui/arduino/icons/Disconnect@3x.png differ diff --git a/ui/arduino/icons/File-Explorer.svg b/ui/arduino/icons/File-Explorer.svg new file mode 100644 index 0000000..5786c76 --- /dev/null +++ b/ui/arduino/icons/File-Explorer.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ui/arduino/icons/File-Explorer@3x.png b/ui/arduino/icons/File-Explorer@3x.png new file mode 100644 index 0000000..c4e247a Binary files /dev/null and b/ui/arduino/icons/File-Explorer@3x.png differ diff --git a/ui/arduino/icons/New.svg b/ui/arduino/icons/New.svg new file mode 100644 index 0000000..7503bdd --- /dev/null +++ b/ui/arduino/icons/New.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ui/arduino/icons/New@3x.png b/ui/arduino/icons/New@3x.png new file mode 100644 index 0000000..b4c7b99 Binary files /dev/null and b/ui/arduino/icons/New@3x.png differ diff --git a/ui/arduino/icons/Open.svg b/ui/arduino/icons/Open.svg new file mode 100644 index 0000000..5c072ff --- /dev/null +++ b/ui/arduino/icons/Open.svg @@ -0,0 +1,3 @@ + + + diff --git a/ui/arduino/icons/Open@3x.png b/ui/arduino/icons/Open@3x.png new file mode 100644 index 0000000..5c529e5 Binary files /dev/null and b/ui/arduino/icons/Open@3x.png differ diff --git a/ui/arduino/icons/Output.svg b/ui/arduino/icons/Output.svg new file mode 100644 index 0000000..280acfa --- /dev/null +++ b/ui/arduino/icons/Output.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ui/arduino/icons/Output@3x.png b/ui/arduino/icons/Output@3x.png new file mode 100644 index 0000000..74435d3 Binary files /dev/null and b/ui/arduino/icons/Output@3x.png differ diff --git a/ui/arduino/icons/Reboot.svg b/ui/arduino/icons/Reboot.svg new file mode 100644 index 0000000..aa30102 --- /dev/null +++ b/ui/arduino/icons/Reboot.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/ui/arduino/icons/Reboot@3x.png b/ui/arduino/icons/Reboot@3x.png new file mode 100644 index 0000000..2592276 Binary files /dev/null and b/ui/arduino/icons/Reboot@3x.png differ diff --git a/ui/arduino/icons/Run.svg b/ui/arduino/icons/Run.svg new file mode 100644 index 0000000..c0fa9d3 --- /dev/null +++ b/ui/arduino/icons/Run.svg @@ -0,0 +1,3 @@ + + + diff --git a/ui/arduino/icons/Run@3x.png b/ui/arduino/icons/Run@3x.png new file mode 100644 index 0000000..b474df7 Binary files /dev/null and b/ui/arduino/icons/Run@3x.png differ diff --git a/ui/arduino/icons/Save.svg b/ui/arduino/icons/Save.svg new file mode 100644 index 0000000..39b31bf --- /dev/null +++ b/ui/arduino/icons/Save.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ui/arduino/icons/Save@3x.png b/ui/arduino/icons/Save@3x.png new file mode 100644 index 0000000..423a920 Binary files /dev/null and b/ui/arduino/icons/Save@3x.png differ diff --git a/ui/arduino/icons/Stop.svg b/ui/arduino/icons/Stop.svg new file mode 100644 index 0000000..92cc513 --- /dev/null +++ b/ui/arduino/icons/Stop.svg @@ -0,0 +1,3 @@ + + + diff --git a/ui/arduino/icons/Stop@3x.png b/ui/arduino/icons/Stop@3x.png new file mode 100644 index 0000000..92f5616 Binary files /dev/null and b/ui/arduino/icons/Stop@3x.png differ diff --git a/ui/arduino/index.html b/ui/arduino/index.html new file mode 100644 index 0000000..b0b76ee --- /dev/null +++ b/ui/arduino/index.html @@ -0,0 +1,38 @@ + + + + + Arduino Lab for MicroPython + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/ui/blank/libs/FileSaver.js b/ui/arduino/libs/FileSaver.js similarity index 100% rename from ui/blank/libs/FileSaver.js rename to ui/arduino/libs/FileSaver.js diff --git a/ui/blank/libs/ace/ace.js b/ui/arduino/libs/ace/ace.js similarity index 100% rename from ui/blank/libs/ace/ace.js rename to ui/arduino/libs/ace/ace.js diff --git a/ui/blank/libs/ace/ext-beautify.js b/ui/arduino/libs/ace/ext-beautify.js similarity index 100% rename from ui/blank/libs/ace/ext-beautify.js rename to ui/arduino/libs/ace/ext-beautify.js diff --git a/ui/blank/libs/ace/ext-code_lens.js b/ui/arduino/libs/ace/ext-code_lens.js similarity index 100% rename from ui/blank/libs/ace/ext-code_lens.js rename to ui/arduino/libs/ace/ext-code_lens.js diff --git a/ui/blank/libs/ace/ext-elastic_tabstops_lite.js b/ui/arduino/libs/ace/ext-elastic_tabstops_lite.js similarity index 100% rename from ui/blank/libs/ace/ext-elastic_tabstops_lite.js rename to ui/arduino/libs/ace/ext-elastic_tabstops_lite.js diff --git a/ui/blank/libs/ace/ext-emmet.js b/ui/arduino/libs/ace/ext-emmet.js similarity index 100% rename from ui/blank/libs/ace/ext-emmet.js rename to ui/arduino/libs/ace/ext-emmet.js diff --git a/ui/blank/libs/ace/ext-error_marker.js b/ui/arduino/libs/ace/ext-error_marker.js similarity index 100% rename from ui/blank/libs/ace/ext-error_marker.js rename to ui/arduino/libs/ace/ext-error_marker.js diff --git a/ui/blank/libs/ace/ext-keybinding_menu.js b/ui/arduino/libs/ace/ext-keybinding_menu.js similarity index 100% rename from ui/blank/libs/ace/ext-keybinding_menu.js rename to ui/arduino/libs/ace/ext-keybinding_menu.js diff --git a/ui/blank/libs/ace/ext-language_tools.js b/ui/arduino/libs/ace/ext-language_tools.js similarity index 100% rename from ui/blank/libs/ace/ext-language_tools.js rename to ui/arduino/libs/ace/ext-language_tools.js diff --git a/ui/blank/libs/ace/ext-linking.js b/ui/arduino/libs/ace/ext-linking.js similarity index 100% rename from ui/blank/libs/ace/ext-linking.js rename to ui/arduino/libs/ace/ext-linking.js diff --git a/ui/blank/libs/ace/ext-modelist.js b/ui/arduino/libs/ace/ext-modelist.js similarity index 100% rename from ui/blank/libs/ace/ext-modelist.js rename to ui/arduino/libs/ace/ext-modelist.js diff --git a/ui/blank/libs/ace/ext-options.js b/ui/arduino/libs/ace/ext-options.js similarity index 100% rename from ui/blank/libs/ace/ext-options.js rename to ui/arduino/libs/ace/ext-options.js diff --git a/ui/blank/libs/ace/ext-prompt.js b/ui/arduino/libs/ace/ext-prompt.js similarity index 100% rename from ui/blank/libs/ace/ext-prompt.js rename to ui/arduino/libs/ace/ext-prompt.js diff --git a/ui/blank/libs/ace/ext-rtl.js b/ui/arduino/libs/ace/ext-rtl.js similarity index 100% rename from ui/blank/libs/ace/ext-rtl.js rename to ui/arduino/libs/ace/ext-rtl.js diff --git a/ui/blank/libs/ace/ext-searchbox.js b/ui/arduino/libs/ace/ext-searchbox.js similarity index 100% rename from ui/blank/libs/ace/ext-searchbox.js rename to ui/arduino/libs/ace/ext-searchbox.js diff --git a/ui/blank/libs/ace/ext-settings_menu.js b/ui/arduino/libs/ace/ext-settings_menu.js similarity index 100% rename from ui/blank/libs/ace/ext-settings_menu.js rename to ui/arduino/libs/ace/ext-settings_menu.js diff --git a/ui/blank/libs/ace/ext-spellcheck.js b/ui/arduino/libs/ace/ext-spellcheck.js similarity index 100% rename from ui/blank/libs/ace/ext-spellcheck.js rename to ui/arduino/libs/ace/ext-spellcheck.js diff --git a/ui/blank/libs/ace/ext-split.js b/ui/arduino/libs/ace/ext-split.js similarity index 100% rename from ui/blank/libs/ace/ext-split.js rename to ui/arduino/libs/ace/ext-split.js diff --git a/ui/blank/libs/ace/ext-static_highlight.js b/ui/arduino/libs/ace/ext-static_highlight.js similarity index 100% rename from ui/blank/libs/ace/ext-static_highlight.js rename to ui/arduino/libs/ace/ext-static_highlight.js diff --git a/ui/blank/libs/ace/ext-statusbar.js b/ui/arduino/libs/ace/ext-statusbar.js similarity index 100% rename from ui/blank/libs/ace/ext-statusbar.js rename to ui/arduino/libs/ace/ext-statusbar.js diff --git a/ui/blank/libs/ace/ext-textarea.js b/ui/arduino/libs/ace/ext-textarea.js similarity index 100% rename from ui/blank/libs/ace/ext-textarea.js rename to ui/arduino/libs/ace/ext-textarea.js diff --git a/ui/blank/libs/ace/ext-themelist.js b/ui/arduino/libs/ace/ext-themelist.js similarity index 100% rename from ui/blank/libs/ace/ext-themelist.js rename to ui/arduino/libs/ace/ext-themelist.js diff --git a/ui/blank/libs/ace/ext-whitespace.js b/ui/arduino/libs/ace/ext-whitespace.js similarity index 100% rename from ui/blank/libs/ace/ext-whitespace.js rename to ui/arduino/libs/ace/ext-whitespace.js diff --git a/ui/blank/libs/ace/keybinding-emacs.js b/ui/arduino/libs/ace/keybinding-emacs.js similarity index 100% rename from ui/blank/libs/ace/keybinding-emacs.js rename to ui/arduino/libs/ace/keybinding-emacs.js diff --git a/ui/blank/libs/ace/keybinding-sublime.js b/ui/arduino/libs/ace/keybinding-sublime.js similarity index 100% rename from ui/blank/libs/ace/keybinding-sublime.js rename to ui/arduino/libs/ace/keybinding-sublime.js diff --git a/ui/blank/libs/ace/keybinding-vim.js b/ui/arduino/libs/ace/keybinding-vim.js similarity index 100% rename from ui/blank/libs/ace/keybinding-vim.js rename to ui/arduino/libs/ace/keybinding-vim.js diff --git a/ui/blank/libs/ace/keybinding-vscode.js b/ui/arduino/libs/ace/keybinding-vscode.js similarity index 100% rename from ui/blank/libs/ace/keybinding-vscode.js rename to ui/arduino/libs/ace/keybinding-vscode.js diff --git a/ui/blank/libs/ace/mode-abap.js b/ui/arduino/libs/ace/mode-abap.js similarity index 100% rename from ui/blank/libs/ace/mode-abap.js rename to ui/arduino/libs/ace/mode-abap.js diff --git a/ui/blank/libs/ace/mode-abc.js b/ui/arduino/libs/ace/mode-abc.js similarity index 100% rename from ui/blank/libs/ace/mode-abc.js rename to ui/arduino/libs/ace/mode-abc.js diff --git a/ui/blank/libs/ace/mode-actionscript.js b/ui/arduino/libs/ace/mode-actionscript.js similarity index 100% rename from ui/blank/libs/ace/mode-actionscript.js rename to ui/arduino/libs/ace/mode-actionscript.js diff --git a/ui/blank/libs/ace/mode-ada.js b/ui/arduino/libs/ace/mode-ada.js similarity index 100% rename from ui/blank/libs/ace/mode-ada.js rename to ui/arduino/libs/ace/mode-ada.js diff --git a/ui/blank/libs/ace/mode-alda.js b/ui/arduino/libs/ace/mode-alda.js similarity index 100% rename from ui/blank/libs/ace/mode-alda.js rename to ui/arduino/libs/ace/mode-alda.js diff --git a/ui/blank/libs/ace/mode-apache_conf.js b/ui/arduino/libs/ace/mode-apache_conf.js similarity index 100% rename from ui/blank/libs/ace/mode-apache_conf.js rename to ui/arduino/libs/ace/mode-apache_conf.js diff --git a/ui/blank/libs/ace/mode-apex.js b/ui/arduino/libs/ace/mode-apex.js similarity index 100% rename from ui/blank/libs/ace/mode-apex.js rename to ui/arduino/libs/ace/mode-apex.js diff --git a/ui/blank/libs/ace/mode-applescript.js b/ui/arduino/libs/ace/mode-applescript.js similarity index 100% rename from ui/blank/libs/ace/mode-applescript.js rename to ui/arduino/libs/ace/mode-applescript.js diff --git a/ui/blank/libs/ace/mode-aql.js b/ui/arduino/libs/ace/mode-aql.js similarity index 100% rename from ui/blank/libs/ace/mode-aql.js rename to ui/arduino/libs/ace/mode-aql.js diff --git a/ui/blank/libs/ace/mode-asciidoc.js b/ui/arduino/libs/ace/mode-asciidoc.js similarity index 100% rename from ui/blank/libs/ace/mode-asciidoc.js rename to ui/arduino/libs/ace/mode-asciidoc.js diff --git a/ui/blank/libs/ace/mode-asl.js b/ui/arduino/libs/ace/mode-asl.js similarity index 100% rename from ui/blank/libs/ace/mode-asl.js rename to ui/arduino/libs/ace/mode-asl.js diff --git a/ui/blank/libs/ace/mode-assembly_x86.js b/ui/arduino/libs/ace/mode-assembly_x86.js similarity index 100% rename from ui/blank/libs/ace/mode-assembly_x86.js rename to ui/arduino/libs/ace/mode-assembly_x86.js diff --git a/ui/blank/libs/ace/mode-autohotkey.js b/ui/arduino/libs/ace/mode-autohotkey.js similarity index 100% rename from ui/blank/libs/ace/mode-autohotkey.js rename to ui/arduino/libs/ace/mode-autohotkey.js diff --git a/ui/blank/libs/ace/mode-batchfile.js b/ui/arduino/libs/ace/mode-batchfile.js similarity index 100% rename from ui/blank/libs/ace/mode-batchfile.js rename to ui/arduino/libs/ace/mode-batchfile.js diff --git a/ui/blank/libs/ace/mode-c9search.js b/ui/arduino/libs/ace/mode-c9search.js similarity index 100% rename from ui/blank/libs/ace/mode-c9search.js rename to ui/arduino/libs/ace/mode-c9search.js diff --git a/ui/blank/libs/ace/mode-c_cpp.js b/ui/arduino/libs/ace/mode-c_cpp.js similarity index 100% rename from ui/blank/libs/ace/mode-c_cpp.js rename to ui/arduino/libs/ace/mode-c_cpp.js diff --git a/ui/blank/libs/ace/mode-cirru.js b/ui/arduino/libs/ace/mode-cirru.js similarity index 100% rename from ui/blank/libs/ace/mode-cirru.js rename to ui/arduino/libs/ace/mode-cirru.js diff --git a/ui/blank/libs/ace/mode-clojure.js b/ui/arduino/libs/ace/mode-clojure.js similarity index 100% rename from ui/blank/libs/ace/mode-clojure.js rename to ui/arduino/libs/ace/mode-clojure.js diff --git a/ui/blank/libs/ace/mode-cobol.js b/ui/arduino/libs/ace/mode-cobol.js similarity index 100% rename from ui/blank/libs/ace/mode-cobol.js rename to ui/arduino/libs/ace/mode-cobol.js diff --git a/ui/blank/libs/ace/mode-coffee.js b/ui/arduino/libs/ace/mode-coffee.js similarity index 100% rename from ui/blank/libs/ace/mode-coffee.js rename to ui/arduino/libs/ace/mode-coffee.js diff --git a/ui/blank/libs/ace/mode-coldfusion.js b/ui/arduino/libs/ace/mode-coldfusion.js similarity index 100% rename from ui/blank/libs/ace/mode-coldfusion.js rename to ui/arduino/libs/ace/mode-coldfusion.js diff --git a/ui/blank/libs/ace/mode-crystal.js b/ui/arduino/libs/ace/mode-crystal.js similarity index 100% rename from ui/blank/libs/ace/mode-crystal.js rename to ui/arduino/libs/ace/mode-crystal.js diff --git a/ui/blank/libs/ace/mode-csharp.js b/ui/arduino/libs/ace/mode-csharp.js similarity index 100% rename from ui/blank/libs/ace/mode-csharp.js rename to ui/arduino/libs/ace/mode-csharp.js diff --git a/ui/blank/libs/ace/mode-csound_document.js b/ui/arduino/libs/ace/mode-csound_document.js similarity index 100% rename from ui/blank/libs/ace/mode-csound_document.js rename to ui/arduino/libs/ace/mode-csound_document.js diff --git a/ui/blank/libs/ace/mode-csound_orchestra.js b/ui/arduino/libs/ace/mode-csound_orchestra.js similarity index 100% rename from ui/blank/libs/ace/mode-csound_orchestra.js rename to ui/arduino/libs/ace/mode-csound_orchestra.js diff --git a/ui/blank/libs/ace/mode-csound_score.js b/ui/arduino/libs/ace/mode-csound_score.js similarity index 100% rename from ui/blank/libs/ace/mode-csound_score.js rename to ui/arduino/libs/ace/mode-csound_score.js diff --git a/ui/blank/libs/ace/mode-csp.js b/ui/arduino/libs/ace/mode-csp.js similarity index 100% rename from ui/blank/libs/ace/mode-csp.js rename to ui/arduino/libs/ace/mode-csp.js diff --git a/ui/blank/libs/ace/mode-css.js b/ui/arduino/libs/ace/mode-css.js similarity index 100% rename from ui/blank/libs/ace/mode-css.js rename to ui/arduino/libs/ace/mode-css.js diff --git a/ui/blank/libs/ace/mode-curly.js b/ui/arduino/libs/ace/mode-curly.js similarity index 100% rename from ui/blank/libs/ace/mode-curly.js rename to ui/arduino/libs/ace/mode-curly.js diff --git a/ui/blank/libs/ace/mode-d.js b/ui/arduino/libs/ace/mode-d.js similarity index 100% rename from ui/blank/libs/ace/mode-d.js rename to ui/arduino/libs/ace/mode-d.js diff --git a/ui/blank/libs/ace/mode-dart.js b/ui/arduino/libs/ace/mode-dart.js similarity index 100% rename from ui/blank/libs/ace/mode-dart.js rename to ui/arduino/libs/ace/mode-dart.js diff --git a/ui/blank/libs/ace/mode-diff.js b/ui/arduino/libs/ace/mode-diff.js similarity index 100% rename from ui/blank/libs/ace/mode-diff.js rename to ui/arduino/libs/ace/mode-diff.js diff --git a/ui/blank/libs/ace/mode-django.js b/ui/arduino/libs/ace/mode-django.js similarity index 100% rename from ui/blank/libs/ace/mode-django.js rename to ui/arduino/libs/ace/mode-django.js diff --git a/ui/blank/libs/ace/mode-dockerfile.js b/ui/arduino/libs/ace/mode-dockerfile.js similarity index 100% rename from ui/blank/libs/ace/mode-dockerfile.js rename to ui/arduino/libs/ace/mode-dockerfile.js diff --git a/ui/blank/libs/ace/mode-dot.js b/ui/arduino/libs/ace/mode-dot.js similarity index 100% rename from ui/blank/libs/ace/mode-dot.js rename to ui/arduino/libs/ace/mode-dot.js diff --git a/ui/blank/libs/ace/mode-drools.js b/ui/arduino/libs/ace/mode-drools.js similarity index 100% rename from ui/blank/libs/ace/mode-drools.js rename to ui/arduino/libs/ace/mode-drools.js diff --git a/ui/blank/libs/ace/mode-edifact.js b/ui/arduino/libs/ace/mode-edifact.js similarity index 100% rename from ui/blank/libs/ace/mode-edifact.js rename to ui/arduino/libs/ace/mode-edifact.js diff --git a/ui/blank/libs/ace/mode-eiffel.js b/ui/arduino/libs/ace/mode-eiffel.js similarity index 100% rename from ui/blank/libs/ace/mode-eiffel.js rename to ui/arduino/libs/ace/mode-eiffel.js diff --git a/ui/blank/libs/ace/mode-ejs.js b/ui/arduino/libs/ace/mode-ejs.js similarity index 100% rename from ui/blank/libs/ace/mode-ejs.js rename to ui/arduino/libs/ace/mode-ejs.js diff --git a/ui/blank/libs/ace/mode-elixir.js b/ui/arduino/libs/ace/mode-elixir.js similarity index 100% rename from ui/blank/libs/ace/mode-elixir.js rename to ui/arduino/libs/ace/mode-elixir.js diff --git a/ui/blank/libs/ace/mode-elm.js b/ui/arduino/libs/ace/mode-elm.js similarity index 100% rename from ui/blank/libs/ace/mode-elm.js rename to ui/arduino/libs/ace/mode-elm.js diff --git a/ui/blank/libs/ace/mode-erlang.js b/ui/arduino/libs/ace/mode-erlang.js similarity index 100% rename from ui/blank/libs/ace/mode-erlang.js rename to ui/arduino/libs/ace/mode-erlang.js diff --git a/ui/blank/libs/ace/mode-forth.js b/ui/arduino/libs/ace/mode-forth.js similarity index 100% rename from ui/blank/libs/ace/mode-forth.js rename to ui/arduino/libs/ace/mode-forth.js diff --git a/ui/blank/libs/ace/mode-fortran.js b/ui/arduino/libs/ace/mode-fortran.js similarity index 100% rename from ui/blank/libs/ace/mode-fortran.js rename to ui/arduino/libs/ace/mode-fortran.js diff --git a/ui/blank/libs/ace/mode-fsharp.js b/ui/arduino/libs/ace/mode-fsharp.js similarity index 100% rename from ui/blank/libs/ace/mode-fsharp.js rename to ui/arduino/libs/ace/mode-fsharp.js diff --git a/ui/blank/libs/ace/mode-fsl.js b/ui/arduino/libs/ace/mode-fsl.js similarity index 100% rename from ui/blank/libs/ace/mode-fsl.js rename to ui/arduino/libs/ace/mode-fsl.js diff --git a/ui/blank/libs/ace/mode-ftl.js b/ui/arduino/libs/ace/mode-ftl.js similarity index 100% rename from ui/blank/libs/ace/mode-ftl.js rename to ui/arduino/libs/ace/mode-ftl.js diff --git a/ui/blank/libs/ace/mode-gcode.js b/ui/arduino/libs/ace/mode-gcode.js similarity index 100% rename from ui/blank/libs/ace/mode-gcode.js rename to ui/arduino/libs/ace/mode-gcode.js diff --git a/ui/blank/libs/ace/mode-gherkin.js b/ui/arduino/libs/ace/mode-gherkin.js similarity index 100% rename from ui/blank/libs/ace/mode-gherkin.js rename to ui/arduino/libs/ace/mode-gherkin.js diff --git a/ui/blank/libs/ace/mode-gitignore.js b/ui/arduino/libs/ace/mode-gitignore.js similarity index 100% rename from ui/blank/libs/ace/mode-gitignore.js rename to ui/arduino/libs/ace/mode-gitignore.js diff --git a/ui/blank/libs/ace/mode-glsl.js b/ui/arduino/libs/ace/mode-glsl.js similarity index 100% rename from ui/blank/libs/ace/mode-glsl.js rename to ui/arduino/libs/ace/mode-glsl.js diff --git a/ui/blank/libs/ace/mode-gobstones.js b/ui/arduino/libs/ace/mode-gobstones.js similarity index 100% rename from ui/blank/libs/ace/mode-gobstones.js rename to ui/arduino/libs/ace/mode-gobstones.js diff --git a/ui/blank/libs/ace/mode-golang.js b/ui/arduino/libs/ace/mode-golang.js similarity index 100% rename from ui/blank/libs/ace/mode-golang.js rename to ui/arduino/libs/ace/mode-golang.js diff --git a/ui/blank/libs/ace/mode-graphqlschema.js b/ui/arduino/libs/ace/mode-graphqlschema.js similarity index 100% rename from ui/blank/libs/ace/mode-graphqlschema.js rename to ui/arduino/libs/ace/mode-graphqlschema.js diff --git a/ui/blank/libs/ace/mode-groovy.js b/ui/arduino/libs/ace/mode-groovy.js similarity index 100% rename from ui/blank/libs/ace/mode-groovy.js rename to ui/arduino/libs/ace/mode-groovy.js diff --git a/ui/blank/libs/ace/mode-haml.js b/ui/arduino/libs/ace/mode-haml.js similarity index 100% rename from ui/blank/libs/ace/mode-haml.js rename to ui/arduino/libs/ace/mode-haml.js diff --git a/ui/blank/libs/ace/mode-handlebars.js b/ui/arduino/libs/ace/mode-handlebars.js similarity index 100% rename from ui/blank/libs/ace/mode-handlebars.js rename to ui/arduino/libs/ace/mode-handlebars.js diff --git a/ui/blank/libs/ace/mode-haskell.js b/ui/arduino/libs/ace/mode-haskell.js similarity index 100% rename from ui/blank/libs/ace/mode-haskell.js rename to ui/arduino/libs/ace/mode-haskell.js diff --git a/ui/blank/libs/ace/mode-haskell_cabal.js b/ui/arduino/libs/ace/mode-haskell_cabal.js similarity index 100% rename from ui/blank/libs/ace/mode-haskell_cabal.js rename to ui/arduino/libs/ace/mode-haskell_cabal.js diff --git a/ui/blank/libs/ace/mode-haxe.js b/ui/arduino/libs/ace/mode-haxe.js similarity index 100% rename from ui/blank/libs/ace/mode-haxe.js rename to ui/arduino/libs/ace/mode-haxe.js diff --git a/ui/blank/libs/ace/mode-hjson.js b/ui/arduino/libs/ace/mode-hjson.js similarity index 100% rename from ui/blank/libs/ace/mode-hjson.js rename to ui/arduino/libs/ace/mode-hjson.js diff --git a/ui/blank/libs/ace/mode-html.js b/ui/arduino/libs/ace/mode-html.js similarity index 100% rename from ui/blank/libs/ace/mode-html.js rename to ui/arduino/libs/ace/mode-html.js diff --git a/ui/blank/libs/ace/mode-html_elixir.js b/ui/arduino/libs/ace/mode-html_elixir.js similarity index 100% rename from ui/blank/libs/ace/mode-html_elixir.js rename to ui/arduino/libs/ace/mode-html_elixir.js diff --git a/ui/blank/libs/ace/mode-html_ruby.js b/ui/arduino/libs/ace/mode-html_ruby.js similarity index 100% rename from ui/blank/libs/ace/mode-html_ruby.js rename to ui/arduino/libs/ace/mode-html_ruby.js diff --git a/ui/blank/libs/ace/mode-ini.js b/ui/arduino/libs/ace/mode-ini.js similarity index 100% rename from ui/blank/libs/ace/mode-ini.js rename to ui/arduino/libs/ace/mode-ini.js diff --git a/ui/blank/libs/ace/mode-io.js b/ui/arduino/libs/ace/mode-io.js similarity index 100% rename from ui/blank/libs/ace/mode-io.js rename to ui/arduino/libs/ace/mode-io.js diff --git a/ui/blank/libs/ace/mode-jack.js b/ui/arduino/libs/ace/mode-jack.js similarity index 100% rename from ui/blank/libs/ace/mode-jack.js rename to ui/arduino/libs/ace/mode-jack.js diff --git a/ui/blank/libs/ace/mode-jade.js b/ui/arduino/libs/ace/mode-jade.js similarity index 100% rename from ui/blank/libs/ace/mode-jade.js rename to ui/arduino/libs/ace/mode-jade.js diff --git a/ui/blank/libs/ace/mode-java.js b/ui/arduino/libs/ace/mode-java.js similarity index 100% rename from ui/blank/libs/ace/mode-java.js rename to ui/arduino/libs/ace/mode-java.js diff --git a/ui/blank/libs/ace/mode-javascript.js b/ui/arduino/libs/ace/mode-javascript.js similarity index 100% rename from ui/blank/libs/ace/mode-javascript.js rename to ui/arduino/libs/ace/mode-javascript.js diff --git a/ui/blank/libs/ace/mode-json.js b/ui/arduino/libs/ace/mode-json.js similarity index 100% rename from ui/blank/libs/ace/mode-json.js rename to ui/arduino/libs/ace/mode-json.js diff --git a/ui/blank/libs/ace/mode-json5.js b/ui/arduino/libs/ace/mode-json5.js similarity index 100% rename from ui/blank/libs/ace/mode-json5.js rename to ui/arduino/libs/ace/mode-json5.js diff --git a/ui/blank/libs/ace/mode-jsoniq.js b/ui/arduino/libs/ace/mode-jsoniq.js similarity index 100% rename from ui/blank/libs/ace/mode-jsoniq.js rename to ui/arduino/libs/ace/mode-jsoniq.js diff --git a/ui/blank/libs/ace/mode-jsp.js b/ui/arduino/libs/ace/mode-jsp.js similarity index 100% rename from ui/blank/libs/ace/mode-jsp.js rename to ui/arduino/libs/ace/mode-jsp.js diff --git a/ui/blank/libs/ace/mode-jssm.js b/ui/arduino/libs/ace/mode-jssm.js similarity index 100% rename from ui/blank/libs/ace/mode-jssm.js rename to ui/arduino/libs/ace/mode-jssm.js diff --git a/ui/blank/libs/ace/mode-jsx.js b/ui/arduino/libs/ace/mode-jsx.js similarity index 100% rename from ui/blank/libs/ace/mode-jsx.js rename to ui/arduino/libs/ace/mode-jsx.js diff --git a/ui/blank/libs/ace/mode-julia.js b/ui/arduino/libs/ace/mode-julia.js similarity index 100% rename from ui/blank/libs/ace/mode-julia.js rename to ui/arduino/libs/ace/mode-julia.js diff --git a/ui/blank/libs/ace/mode-kotlin.js b/ui/arduino/libs/ace/mode-kotlin.js similarity index 100% rename from ui/blank/libs/ace/mode-kotlin.js rename to ui/arduino/libs/ace/mode-kotlin.js diff --git a/ui/blank/libs/ace/mode-latex.js b/ui/arduino/libs/ace/mode-latex.js similarity index 100% rename from ui/blank/libs/ace/mode-latex.js rename to ui/arduino/libs/ace/mode-latex.js diff --git a/ui/blank/libs/ace/mode-less.js b/ui/arduino/libs/ace/mode-less.js similarity index 100% rename from ui/blank/libs/ace/mode-less.js rename to ui/arduino/libs/ace/mode-less.js diff --git a/ui/blank/libs/ace/mode-liquid.js b/ui/arduino/libs/ace/mode-liquid.js similarity index 100% rename from ui/blank/libs/ace/mode-liquid.js rename to ui/arduino/libs/ace/mode-liquid.js diff --git a/ui/blank/libs/ace/mode-lisp.js b/ui/arduino/libs/ace/mode-lisp.js similarity index 100% rename from ui/blank/libs/ace/mode-lisp.js rename to ui/arduino/libs/ace/mode-lisp.js diff --git a/ui/blank/libs/ace/mode-livescript.js b/ui/arduino/libs/ace/mode-livescript.js similarity index 100% rename from ui/blank/libs/ace/mode-livescript.js rename to ui/arduino/libs/ace/mode-livescript.js diff --git a/ui/blank/libs/ace/mode-logiql.js b/ui/arduino/libs/ace/mode-logiql.js similarity index 100% rename from ui/blank/libs/ace/mode-logiql.js rename to ui/arduino/libs/ace/mode-logiql.js diff --git a/ui/blank/libs/ace/mode-logtalk.js b/ui/arduino/libs/ace/mode-logtalk.js similarity index 100% rename from ui/blank/libs/ace/mode-logtalk.js rename to ui/arduino/libs/ace/mode-logtalk.js diff --git a/ui/blank/libs/ace/mode-lsl.js b/ui/arduino/libs/ace/mode-lsl.js similarity index 100% rename from ui/blank/libs/ace/mode-lsl.js rename to ui/arduino/libs/ace/mode-lsl.js diff --git a/ui/blank/libs/ace/mode-lua.js b/ui/arduino/libs/ace/mode-lua.js similarity index 100% rename from ui/blank/libs/ace/mode-lua.js rename to ui/arduino/libs/ace/mode-lua.js diff --git a/ui/blank/libs/ace/mode-luapage.js b/ui/arduino/libs/ace/mode-luapage.js similarity index 100% rename from ui/blank/libs/ace/mode-luapage.js rename to ui/arduino/libs/ace/mode-luapage.js diff --git a/ui/blank/libs/ace/mode-lucene.js b/ui/arduino/libs/ace/mode-lucene.js similarity index 100% rename from ui/blank/libs/ace/mode-lucene.js rename to ui/arduino/libs/ace/mode-lucene.js diff --git a/ui/blank/libs/ace/mode-makefile.js b/ui/arduino/libs/ace/mode-makefile.js similarity index 100% rename from ui/blank/libs/ace/mode-makefile.js rename to ui/arduino/libs/ace/mode-makefile.js diff --git a/ui/blank/libs/ace/mode-markdown.js b/ui/arduino/libs/ace/mode-markdown.js similarity index 100% rename from ui/blank/libs/ace/mode-markdown.js rename to ui/arduino/libs/ace/mode-markdown.js diff --git a/ui/blank/libs/ace/mode-mask.js b/ui/arduino/libs/ace/mode-mask.js similarity index 100% rename from ui/blank/libs/ace/mode-mask.js rename to ui/arduino/libs/ace/mode-mask.js diff --git a/ui/blank/libs/ace/mode-matlab.js b/ui/arduino/libs/ace/mode-matlab.js similarity index 100% rename from ui/blank/libs/ace/mode-matlab.js rename to ui/arduino/libs/ace/mode-matlab.js diff --git a/ui/blank/libs/ace/mode-maze.js b/ui/arduino/libs/ace/mode-maze.js similarity index 100% rename from ui/blank/libs/ace/mode-maze.js rename to ui/arduino/libs/ace/mode-maze.js diff --git a/ui/blank/libs/ace/mode-mediawiki.js b/ui/arduino/libs/ace/mode-mediawiki.js similarity index 100% rename from ui/blank/libs/ace/mode-mediawiki.js rename to ui/arduino/libs/ace/mode-mediawiki.js diff --git a/ui/blank/libs/ace/mode-mel.js b/ui/arduino/libs/ace/mode-mel.js similarity index 100% rename from ui/blank/libs/ace/mode-mel.js rename to ui/arduino/libs/ace/mode-mel.js diff --git a/ui/blank/libs/ace/mode-mixal.js b/ui/arduino/libs/ace/mode-mixal.js similarity index 100% rename from ui/blank/libs/ace/mode-mixal.js rename to ui/arduino/libs/ace/mode-mixal.js diff --git a/ui/blank/libs/ace/mode-mushcode.js b/ui/arduino/libs/ace/mode-mushcode.js similarity index 100% rename from ui/blank/libs/ace/mode-mushcode.js rename to ui/arduino/libs/ace/mode-mushcode.js diff --git a/ui/blank/libs/ace/mode-mysql.js b/ui/arduino/libs/ace/mode-mysql.js similarity index 100% rename from ui/blank/libs/ace/mode-mysql.js rename to ui/arduino/libs/ace/mode-mysql.js diff --git a/ui/blank/libs/ace/mode-nginx.js b/ui/arduino/libs/ace/mode-nginx.js similarity index 100% rename from ui/blank/libs/ace/mode-nginx.js rename to ui/arduino/libs/ace/mode-nginx.js diff --git a/ui/blank/libs/ace/mode-nim.js b/ui/arduino/libs/ace/mode-nim.js similarity index 100% rename from ui/blank/libs/ace/mode-nim.js rename to ui/arduino/libs/ace/mode-nim.js diff --git a/ui/blank/libs/ace/mode-nix.js b/ui/arduino/libs/ace/mode-nix.js similarity index 100% rename from ui/blank/libs/ace/mode-nix.js rename to ui/arduino/libs/ace/mode-nix.js diff --git a/ui/blank/libs/ace/mode-nsis.js b/ui/arduino/libs/ace/mode-nsis.js similarity index 100% rename from ui/blank/libs/ace/mode-nsis.js rename to ui/arduino/libs/ace/mode-nsis.js diff --git a/ui/blank/libs/ace/mode-nunjucks.js b/ui/arduino/libs/ace/mode-nunjucks.js similarity index 100% rename from ui/blank/libs/ace/mode-nunjucks.js rename to ui/arduino/libs/ace/mode-nunjucks.js diff --git a/ui/blank/libs/ace/mode-objectivec.js b/ui/arduino/libs/ace/mode-objectivec.js similarity index 100% rename from ui/blank/libs/ace/mode-objectivec.js rename to ui/arduino/libs/ace/mode-objectivec.js diff --git a/ui/blank/libs/ace/mode-ocaml.js b/ui/arduino/libs/ace/mode-ocaml.js similarity index 100% rename from ui/blank/libs/ace/mode-ocaml.js rename to ui/arduino/libs/ace/mode-ocaml.js diff --git a/ui/blank/libs/ace/mode-pascal.js b/ui/arduino/libs/ace/mode-pascal.js similarity index 100% rename from ui/blank/libs/ace/mode-pascal.js rename to ui/arduino/libs/ace/mode-pascal.js diff --git a/ui/blank/libs/ace/mode-perl.js b/ui/arduino/libs/ace/mode-perl.js similarity index 100% rename from ui/blank/libs/ace/mode-perl.js rename to ui/arduino/libs/ace/mode-perl.js diff --git a/ui/blank/libs/ace/mode-perl6.js b/ui/arduino/libs/ace/mode-perl6.js similarity index 100% rename from ui/blank/libs/ace/mode-perl6.js rename to ui/arduino/libs/ace/mode-perl6.js diff --git a/ui/blank/libs/ace/mode-pgsql.js b/ui/arduino/libs/ace/mode-pgsql.js similarity index 100% rename from ui/blank/libs/ace/mode-pgsql.js rename to ui/arduino/libs/ace/mode-pgsql.js diff --git a/ui/blank/libs/ace/mode-php.js b/ui/arduino/libs/ace/mode-php.js similarity index 100% rename from ui/blank/libs/ace/mode-php.js rename to ui/arduino/libs/ace/mode-php.js diff --git a/ui/blank/libs/ace/mode-php_laravel_blade.js b/ui/arduino/libs/ace/mode-php_laravel_blade.js similarity index 100% rename from ui/blank/libs/ace/mode-php_laravel_blade.js rename to ui/arduino/libs/ace/mode-php_laravel_blade.js diff --git a/ui/blank/libs/ace/mode-pig.js b/ui/arduino/libs/ace/mode-pig.js similarity index 100% rename from ui/blank/libs/ace/mode-pig.js rename to ui/arduino/libs/ace/mode-pig.js diff --git a/ui/blank/libs/ace/mode-plain_text.js b/ui/arduino/libs/ace/mode-plain_text.js similarity index 100% rename from ui/blank/libs/ace/mode-plain_text.js rename to ui/arduino/libs/ace/mode-plain_text.js diff --git a/ui/blank/libs/ace/mode-powershell.js b/ui/arduino/libs/ace/mode-powershell.js similarity index 100% rename from ui/blank/libs/ace/mode-powershell.js rename to ui/arduino/libs/ace/mode-powershell.js diff --git a/ui/blank/libs/ace/mode-praat.js b/ui/arduino/libs/ace/mode-praat.js similarity index 100% rename from ui/blank/libs/ace/mode-praat.js rename to ui/arduino/libs/ace/mode-praat.js diff --git a/ui/blank/libs/ace/mode-prisma.js b/ui/arduino/libs/ace/mode-prisma.js similarity index 100% rename from ui/blank/libs/ace/mode-prisma.js rename to ui/arduino/libs/ace/mode-prisma.js diff --git a/ui/blank/libs/ace/mode-prolog.js b/ui/arduino/libs/ace/mode-prolog.js similarity index 100% rename from ui/blank/libs/ace/mode-prolog.js rename to ui/arduino/libs/ace/mode-prolog.js diff --git a/ui/blank/libs/ace/mode-properties.js b/ui/arduino/libs/ace/mode-properties.js similarity index 100% rename from ui/blank/libs/ace/mode-properties.js rename to ui/arduino/libs/ace/mode-properties.js diff --git a/ui/blank/libs/ace/mode-protobuf.js b/ui/arduino/libs/ace/mode-protobuf.js similarity index 100% rename from ui/blank/libs/ace/mode-protobuf.js rename to ui/arduino/libs/ace/mode-protobuf.js diff --git a/ui/blank/libs/ace/mode-puppet.js b/ui/arduino/libs/ace/mode-puppet.js similarity index 100% rename from ui/blank/libs/ace/mode-puppet.js rename to ui/arduino/libs/ace/mode-puppet.js diff --git a/ui/blank/libs/ace/mode-python.js b/ui/arduino/libs/ace/mode-python.js similarity index 100% rename from ui/blank/libs/ace/mode-python.js rename to ui/arduino/libs/ace/mode-python.js diff --git a/ui/blank/libs/ace/mode-qml.js b/ui/arduino/libs/ace/mode-qml.js similarity index 100% rename from ui/blank/libs/ace/mode-qml.js rename to ui/arduino/libs/ace/mode-qml.js diff --git a/ui/blank/libs/ace/mode-r.js b/ui/arduino/libs/ace/mode-r.js similarity index 100% rename from ui/blank/libs/ace/mode-r.js rename to ui/arduino/libs/ace/mode-r.js diff --git a/ui/blank/libs/ace/mode-razor.js b/ui/arduino/libs/ace/mode-razor.js similarity index 100% rename from ui/blank/libs/ace/mode-razor.js rename to ui/arduino/libs/ace/mode-razor.js diff --git a/ui/blank/libs/ace/mode-rdoc.js b/ui/arduino/libs/ace/mode-rdoc.js similarity index 100% rename from ui/blank/libs/ace/mode-rdoc.js rename to ui/arduino/libs/ace/mode-rdoc.js diff --git a/ui/blank/libs/ace/mode-red.js b/ui/arduino/libs/ace/mode-red.js similarity index 100% rename from ui/blank/libs/ace/mode-red.js rename to ui/arduino/libs/ace/mode-red.js diff --git a/ui/blank/libs/ace/mode-redshift.js b/ui/arduino/libs/ace/mode-redshift.js similarity index 100% rename from ui/blank/libs/ace/mode-redshift.js rename to ui/arduino/libs/ace/mode-redshift.js diff --git a/ui/blank/libs/ace/mode-rhtml.js b/ui/arduino/libs/ace/mode-rhtml.js similarity index 100% rename from ui/blank/libs/ace/mode-rhtml.js rename to ui/arduino/libs/ace/mode-rhtml.js diff --git a/ui/blank/libs/ace/mode-rst.js b/ui/arduino/libs/ace/mode-rst.js similarity index 100% rename from ui/blank/libs/ace/mode-rst.js rename to ui/arduino/libs/ace/mode-rst.js diff --git a/ui/blank/libs/ace/mode-ruby.js b/ui/arduino/libs/ace/mode-ruby.js similarity index 100% rename from ui/blank/libs/ace/mode-ruby.js rename to ui/arduino/libs/ace/mode-ruby.js diff --git a/ui/blank/libs/ace/mode-rust.js b/ui/arduino/libs/ace/mode-rust.js similarity index 100% rename from ui/blank/libs/ace/mode-rust.js rename to ui/arduino/libs/ace/mode-rust.js diff --git a/ui/blank/libs/ace/mode-sass.js b/ui/arduino/libs/ace/mode-sass.js similarity index 100% rename from ui/blank/libs/ace/mode-sass.js rename to ui/arduino/libs/ace/mode-sass.js diff --git a/ui/blank/libs/ace/mode-scad.js b/ui/arduino/libs/ace/mode-scad.js similarity index 100% rename from ui/blank/libs/ace/mode-scad.js rename to ui/arduino/libs/ace/mode-scad.js diff --git a/ui/blank/libs/ace/mode-scala.js b/ui/arduino/libs/ace/mode-scala.js similarity index 100% rename from ui/blank/libs/ace/mode-scala.js rename to ui/arduino/libs/ace/mode-scala.js diff --git a/ui/blank/libs/ace/mode-scheme.js b/ui/arduino/libs/ace/mode-scheme.js similarity index 100% rename from ui/blank/libs/ace/mode-scheme.js rename to ui/arduino/libs/ace/mode-scheme.js diff --git a/ui/blank/libs/ace/mode-scss.js b/ui/arduino/libs/ace/mode-scss.js similarity index 100% rename from ui/blank/libs/ace/mode-scss.js rename to ui/arduino/libs/ace/mode-scss.js diff --git a/ui/blank/libs/ace/mode-sh.js b/ui/arduino/libs/ace/mode-sh.js similarity index 100% rename from ui/blank/libs/ace/mode-sh.js rename to ui/arduino/libs/ace/mode-sh.js diff --git a/ui/blank/libs/ace/mode-sjs.js b/ui/arduino/libs/ace/mode-sjs.js similarity index 100% rename from ui/blank/libs/ace/mode-sjs.js rename to ui/arduino/libs/ace/mode-sjs.js diff --git a/ui/blank/libs/ace/mode-slim.js b/ui/arduino/libs/ace/mode-slim.js similarity index 100% rename from ui/blank/libs/ace/mode-slim.js rename to ui/arduino/libs/ace/mode-slim.js diff --git a/ui/blank/libs/ace/mode-smarty.js b/ui/arduino/libs/ace/mode-smarty.js similarity index 100% rename from ui/blank/libs/ace/mode-smarty.js rename to ui/arduino/libs/ace/mode-smarty.js diff --git a/ui/blank/libs/ace/mode-snippets.js b/ui/arduino/libs/ace/mode-snippets.js similarity index 100% rename from ui/blank/libs/ace/mode-snippets.js rename to ui/arduino/libs/ace/mode-snippets.js diff --git a/ui/blank/libs/ace/mode-soy_template.js b/ui/arduino/libs/ace/mode-soy_template.js similarity index 100% rename from ui/blank/libs/ace/mode-soy_template.js rename to ui/arduino/libs/ace/mode-soy_template.js diff --git a/ui/blank/libs/ace/mode-space.js b/ui/arduino/libs/ace/mode-space.js similarity index 100% rename from ui/blank/libs/ace/mode-space.js rename to ui/arduino/libs/ace/mode-space.js diff --git a/ui/blank/libs/ace/mode-sparql.js b/ui/arduino/libs/ace/mode-sparql.js similarity index 100% rename from ui/blank/libs/ace/mode-sparql.js rename to ui/arduino/libs/ace/mode-sparql.js diff --git a/ui/blank/libs/ace/mode-sql.js b/ui/arduino/libs/ace/mode-sql.js similarity index 100% rename from ui/blank/libs/ace/mode-sql.js rename to ui/arduino/libs/ace/mode-sql.js diff --git a/ui/blank/libs/ace/mode-sqlserver.js b/ui/arduino/libs/ace/mode-sqlserver.js similarity index 100% rename from ui/blank/libs/ace/mode-sqlserver.js rename to ui/arduino/libs/ace/mode-sqlserver.js diff --git a/ui/blank/libs/ace/mode-stylus.js b/ui/arduino/libs/ace/mode-stylus.js similarity index 100% rename from ui/blank/libs/ace/mode-stylus.js rename to ui/arduino/libs/ace/mode-stylus.js diff --git a/ui/blank/libs/ace/mode-svg.js b/ui/arduino/libs/ace/mode-svg.js similarity index 100% rename from ui/blank/libs/ace/mode-svg.js rename to ui/arduino/libs/ace/mode-svg.js diff --git a/ui/blank/libs/ace/mode-swift.js b/ui/arduino/libs/ace/mode-swift.js similarity index 100% rename from ui/blank/libs/ace/mode-swift.js rename to ui/arduino/libs/ace/mode-swift.js diff --git a/ui/blank/libs/ace/mode-tcl.js b/ui/arduino/libs/ace/mode-tcl.js similarity index 100% rename from ui/blank/libs/ace/mode-tcl.js rename to ui/arduino/libs/ace/mode-tcl.js diff --git a/ui/blank/libs/ace/mode-terraform.js b/ui/arduino/libs/ace/mode-terraform.js similarity index 100% rename from ui/blank/libs/ace/mode-terraform.js rename to ui/arduino/libs/ace/mode-terraform.js diff --git a/ui/blank/libs/ace/mode-tex.js b/ui/arduino/libs/ace/mode-tex.js similarity index 100% rename from ui/blank/libs/ace/mode-tex.js rename to ui/arduino/libs/ace/mode-tex.js diff --git a/ui/blank/libs/ace/mode-text.js b/ui/arduino/libs/ace/mode-text.js similarity index 100% rename from ui/blank/libs/ace/mode-text.js rename to ui/arduino/libs/ace/mode-text.js diff --git a/ui/blank/libs/ace/mode-textile.js b/ui/arduino/libs/ace/mode-textile.js similarity index 100% rename from ui/blank/libs/ace/mode-textile.js rename to ui/arduino/libs/ace/mode-textile.js diff --git a/ui/blank/libs/ace/mode-toml.js b/ui/arduino/libs/ace/mode-toml.js similarity index 100% rename from ui/blank/libs/ace/mode-toml.js rename to ui/arduino/libs/ace/mode-toml.js diff --git a/ui/blank/libs/ace/mode-tsx.js b/ui/arduino/libs/ace/mode-tsx.js similarity index 100% rename from ui/blank/libs/ace/mode-tsx.js rename to ui/arduino/libs/ace/mode-tsx.js diff --git a/ui/blank/libs/ace/mode-turtle.js b/ui/arduino/libs/ace/mode-turtle.js similarity index 100% rename from ui/blank/libs/ace/mode-turtle.js rename to ui/arduino/libs/ace/mode-turtle.js diff --git a/ui/blank/libs/ace/mode-twig.js b/ui/arduino/libs/ace/mode-twig.js similarity index 100% rename from ui/blank/libs/ace/mode-twig.js rename to ui/arduino/libs/ace/mode-twig.js diff --git a/ui/blank/libs/ace/mode-typescript.js b/ui/arduino/libs/ace/mode-typescript.js similarity index 100% rename from ui/blank/libs/ace/mode-typescript.js rename to ui/arduino/libs/ace/mode-typescript.js diff --git a/ui/blank/libs/ace/mode-vala.js b/ui/arduino/libs/ace/mode-vala.js similarity index 100% rename from ui/blank/libs/ace/mode-vala.js rename to ui/arduino/libs/ace/mode-vala.js diff --git a/ui/blank/libs/ace/mode-vbscript.js b/ui/arduino/libs/ace/mode-vbscript.js similarity index 100% rename from ui/blank/libs/ace/mode-vbscript.js rename to ui/arduino/libs/ace/mode-vbscript.js diff --git a/ui/blank/libs/ace/mode-velocity.js b/ui/arduino/libs/ace/mode-velocity.js similarity index 100% rename from ui/blank/libs/ace/mode-velocity.js rename to ui/arduino/libs/ace/mode-velocity.js diff --git a/ui/blank/libs/ace/mode-verilog.js b/ui/arduino/libs/ace/mode-verilog.js similarity index 100% rename from ui/blank/libs/ace/mode-verilog.js rename to ui/arduino/libs/ace/mode-verilog.js diff --git a/ui/blank/libs/ace/mode-vhdl.js b/ui/arduino/libs/ace/mode-vhdl.js similarity index 100% rename from ui/blank/libs/ace/mode-vhdl.js rename to ui/arduino/libs/ace/mode-vhdl.js diff --git a/ui/blank/libs/ace/mode-visualforce.js b/ui/arduino/libs/ace/mode-visualforce.js similarity index 100% rename from ui/blank/libs/ace/mode-visualforce.js rename to ui/arduino/libs/ace/mode-visualforce.js diff --git a/ui/blank/libs/ace/mode-wollok.js b/ui/arduino/libs/ace/mode-wollok.js similarity index 100% rename from ui/blank/libs/ace/mode-wollok.js rename to ui/arduino/libs/ace/mode-wollok.js diff --git a/ui/blank/libs/ace/mode-xml.js b/ui/arduino/libs/ace/mode-xml.js similarity index 100% rename from ui/blank/libs/ace/mode-xml.js rename to ui/arduino/libs/ace/mode-xml.js diff --git a/ui/blank/libs/ace/mode-xquery.js b/ui/arduino/libs/ace/mode-xquery.js similarity index 100% rename from ui/blank/libs/ace/mode-xquery.js rename to ui/arduino/libs/ace/mode-xquery.js diff --git a/ui/blank/libs/ace/mode-yaml.js b/ui/arduino/libs/ace/mode-yaml.js similarity index 100% rename from ui/blank/libs/ace/mode-yaml.js rename to ui/arduino/libs/ace/mode-yaml.js diff --git a/ui/blank/libs/ace/mode-zeek.js b/ui/arduino/libs/ace/mode-zeek.js similarity index 100% rename from ui/blank/libs/ace/mode-zeek.js rename to ui/arduino/libs/ace/mode-zeek.js diff --git a/ui/blank/libs/ace/snippets/abap.js b/ui/arduino/libs/ace/snippets/abap.js similarity index 100% rename from ui/blank/libs/ace/snippets/abap.js rename to ui/arduino/libs/ace/snippets/abap.js diff --git a/ui/blank/libs/ace/snippets/abc.js b/ui/arduino/libs/ace/snippets/abc.js similarity index 100% rename from ui/blank/libs/ace/snippets/abc.js rename to ui/arduino/libs/ace/snippets/abc.js diff --git a/ui/blank/libs/ace/snippets/actionscript.js b/ui/arduino/libs/ace/snippets/actionscript.js similarity index 100% rename from ui/blank/libs/ace/snippets/actionscript.js rename to ui/arduino/libs/ace/snippets/actionscript.js diff --git a/ui/blank/libs/ace/snippets/ada.js b/ui/arduino/libs/ace/snippets/ada.js similarity index 100% rename from ui/blank/libs/ace/snippets/ada.js rename to ui/arduino/libs/ace/snippets/ada.js diff --git a/ui/blank/libs/ace/snippets/alda.js b/ui/arduino/libs/ace/snippets/alda.js similarity index 100% rename from ui/blank/libs/ace/snippets/alda.js rename to ui/arduino/libs/ace/snippets/alda.js diff --git a/ui/blank/libs/ace/snippets/apache_conf.js b/ui/arduino/libs/ace/snippets/apache_conf.js similarity index 100% rename from ui/blank/libs/ace/snippets/apache_conf.js rename to ui/arduino/libs/ace/snippets/apache_conf.js diff --git a/ui/blank/libs/ace/snippets/apex.js b/ui/arduino/libs/ace/snippets/apex.js similarity index 100% rename from ui/blank/libs/ace/snippets/apex.js rename to ui/arduino/libs/ace/snippets/apex.js diff --git a/ui/blank/libs/ace/snippets/applescript.js b/ui/arduino/libs/ace/snippets/applescript.js similarity index 100% rename from ui/blank/libs/ace/snippets/applescript.js rename to ui/arduino/libs/ace/snippets/applescript.js diff --git a/ui/blank/libs/ace/snippets/aql.js b/ui/arduino/libs/ace/snippets/aql.js similarity index 100% rename from ui/blank/libs/ace/snippets/aql.js rename to ui/arduino/libs/ace/snippets/aql.js diff --git a/ui/blank/libs/ace/snippets/asciidoc.js b/ui/arduino/libs/ace/snippets/asciidoc.js similarity index 100% rename from ui/blank/libs/ace/snippets/asciidoc.js rename to ui/arduino/libs/ace/snippets/asciidoc.js diff --git a/ui/blank/libs/ace/snippets/asl.js b/ui/arduino/libs/ace/snippets/asl.js similarity index 100% rename from ui/blank/libs/ace/snippets/asl.js rename to ui/arduino/libs/ace/snippets/asl.js diff --git a/ui/blank/libs/ace/snippets/assembly_x86.js b/ui/arduino/libs/ace/snippets/assembly_x86.js similarity index 100% rename from ui/blank/libs/ace/snippets/assembly_x86.js rename to ui/arduino/libs/ace/snippets/assembly_x86.js diff --git a/ui/blank/libs/ace/snippets/autohotkey.js b/ui/arduino/libs/ace/snippets/autohotkey.js similarity index 100% rename from ui/blank/libs/ace/snippets/autohotkey.js rename to ui/arduino/libs/ace/snippets/autohotkey.js diff --git a/ui/blank/libs/ace/snippets/batchfile.js b/ui/arduino/libs/ace/snippets/batchfile.js similarity index 100% rename from ui/blank/libs/ace/snippets/batchfile.js rename to ui/arduino/libs/ace/snippets/batchfile.js diff --git a/ui/blank/libs/ace/snippets/c9search.js b/ui/arduino/libs/ace/snippets/c9search.js similarity index 100% rename from ui/blank/libs/ace/snippets/c9search.js rename to ui/arduino/libs/ace/snippets/c9search.js diff --git a/ui/blank/libs/ace/snippets/c_cpp.js b/ui/arduino/libs/ace/snippets/c_cpp.js similarity index 100% rename from ui/blank/libs/ace/snippets/c_cpp.js rename to ui/arduino/libs/ace/snippets/c_cpp.js diff --git a/ui/blank/libs/ace/snippets/cirru.js b/ui/arduino/libs/ace/snippets/cirru.js similarity index 100% rename from ui/blank/libs/ace/snippets/cirru.js rename to ui/arduino/libs/ace/snippets/cirru.js diff --git a/ui/blank/libs/ace/snippets/clojure.js b/ui/arduino/libs/ace/snippets/clojure.js similarity index 100% rename from ui/blank/libs/ace/snippets/clojure.js rename to ui/arduino/libs/ace/snippets/clojure.js diff --git a/ui/blank/libs/ace/snippets/cobol.js b/ui/arduino/libs/ace/snippets/cobol.js similarity index 100% rename from ui/blank/libs/ace/snippets/cobol.js rename to ui/arduino/libs/ace/snippets/cobol.js diff --git a/ui/blank/libs/ace/snippets/coffee.js b/ui/arduino/libs/ace/snippets/coffee.js similarity index 100% rename from ui/blank/libs/ace/snippets/coffee.js rename to ui/arduino/libs/ace/snippets/coffee.js diff --git a/ui/blank/libs/ace/snippets/coldfusion.js b/ui/arduino/libs/ace/snippets/coldfusion.js similarity index 100% rename from ui/blank/libs/ace/snippets/coldfusion.js rename to ui/arduino/libs/ace/snippets/coldfusion.js diff --git a/ui/blank/libs/ace/snippets/crystal.js b/ui/arduino/libs/ace/snippets/crystal.js similarity index 100% rename from ui/blank/libs/ace/snippets/crystal.js rename to ui/arduino/libs/ace/snippets/crystal.js diff --git a/ui/blank/libs/ace/snippets/csharp.js b/ui/arduino/libs/ace/snippets/csharp.js similarity index 100% rename from ui/blank/libs/ace/snippets/csharp.js rename to ui/arduino/libs/ace/snippets/csharp.js diff --git a/ui/blank/libs/ace/snippets/csound_document.js b/ui/arduino/libs/ace/snippets/csound_document.js similarity index 100% rename from ui/blank/libs/ace/snippets/csound_document.js rename to ui/arduino/libs/ace/snippets/csound_document.js diff --git a/ui/blank/libs/ace/snippets/csound_orchestra.js b/ui/arduino/libs/ace/snippets/csound_orchestra.js similarity index 100% rename from ui/blank/libs/ace/snippets/csound_orchestra.js rename to ui/arduino/libs/ace/snippets/csound_orchestra.js diff --git a/ui/blank/libs/ace/snippets/csound_score.js b/ui/arduino/libs/ace/snippets/csound_score.js similarity index 100% rename from ui/blank/libs/ace/snippets/csound_score.js rename to ui/arduino/libs/ace/snippets/csound_score.js diff --git a/ui/blank/libs/ace/snippets/csp.js b/ui/arduino/libs/ace/snippets/csp.js similarity index 100% rename from ui/blank/libs/ace/snippets/csp.js rename to ui/arduino/libs/ace/snippets/csp.js diff --git a/ui/blank/libs/ace/snippets/css.js b/ui/arduino/libs/ace/snippets/css.js similarity index 100% rename from ui/blank/libs/ace/snippets/css.js rename to ui/arduino/libs/ace/snippets/css.js diff --git a/ui/blank/libs/ace/snippets/curly.js b/ui/arduino/libs/ace/snippets/curly.js similarity index 100% rename from ui/blank/libs/ace/snippets/curly.js rename to ui/arduino/libs/ace/snippets/curly.js diff --git a/ui/blank/libs/ace/snippets/d.js b/ui/arduino/libs/ace/snippets/d.js similarity index 100% rename from ui/blank/libs/ace/snippets/d.js rename to ui/arduino/libs/ace/snippets/d.js diff --git a/ui/blank/libs/ace/snippets/dart.js b/ui/arduino/libs/ace/snippets/dart.js similarity index 100% rename from ui/blank/libs/ace/snippets/dart.js rename to ui/arduino/libs/ace/snippets/dart.js diff --git a/ui/blank/libs/ace/snippets/diff.js b/ui/arduino/libs/ace/snippets/diff.js similarity index 100% rename from ui/blank/libs/ace/snippets/diff.js rename to ui/arduino/libs/ace/snippets/diff.js diff --git a/ui/blank/libs/ace/snippets/django.js b/ui/arduino/libs/ace/snippets/django.js similarity index 100% rename from ui/blank/libs/ace/snippets/django.js rename to ui/arduino/libs/ace/snippets/django.js diff --git a/ui/blank/libs/ace/snippets/dockerfile.js b/ui/arduino/libs/ace/snippets/dockerfile.js similarity index 100% rename from ui/blank/libs/ace/snippets/dockerfile.js rename to ui/arduino/libs/ace/snippets/dockerfile.js diff --git a/ui/blank/libs/ace/snippets/dot.js b/ui/arduino/libs/ace/snippets/dot.js similarity index 100% rename from ui/blank/libs/ace/snippets/dot.js rename to ui/arduino/libs/ace/snippets/dot.js diff --git a/ui/blank/libs/ace/snippets/drools.js b/ui/arduino/libs/ace/snippets/drools.js similarity index 100% rename from ui/blank/libs/ace/snippets/drools.js rename to ui/arduino/libs/ace/snippets/drools.js diff --git a/ui/blank/libs/ace/snippets/edifact.js b/ui/arduino/libs/ace/snippets/edifact.js similarity index 100% rename from ui/blank/libs/ace/snippets/edifact.js rename to ui/arduino/libs/ace/snippets/edifact.js diff --git a/ui/blank/libs/ace/snippets/eiffel.js b/ui/arduino/libs/ace/snippets/eiffel.js similarity index 100% rename from ui/blank/libs/ace/snippets/eiffel.js rename to ui/arduino/libs/ace/snippets/eiffel.js diff --git a/ui/blank/libs/ace/snippets/ejs.js b/ui/arduino/libs/ace/snippets/ejs.js similarity index 100% rename from ui/blank/libs/ace/snippets/ejs.js rename to ui/arduino/libs/ace/snippets/ejs.js diff --git a/ui/blank/libs/ace/snippets/elixir.js b/ui/arduino/libs/ace/snippets/elixir.js similarity index 100% rename from ui/blank/libs/ace/snippets/elixir.js rename to ui/arduino/libs/ace/snippets/elixir.js diff --git a/ui/blank/libs/ace/snippets/elm.js b/ui/arduino/libs/ace/snippets/elm.js similarity index 100% rename from ui/blank/libs/ace/snippets/elm.js rename to ui/arduino/libs/ace/snippets/elm.js diff --git a/ui/blank/libs/ace/snippets/erlang.js b/ui/arduino/libs/ace/snippets/erlang.js similarity index 100% rename from ui/blank/libs/ace/snippets/erlang.js rename to ui/arduino/libs/ace/snippets/erlang.js diff --git a/ui/blank/libs/ace/snippets/forth.js b/ui/arduino/libs/ace/snippets/forth.js similarity index 100% rename from ui/blank/libs/ace/snippets/forth.js rename to ui/arduino/libs/ace/snippets/forth.js diff --git a/ui/blank/libs/ace/snippets/fortran.js b/ui/arduino/libs/ace/snippets/fortran.js similarity index 100% rename from ui/blank/libs/ace/snippets/fortran.js rename to ui/arduino/libs/ace/snippets/fortran.js diff --git a/ui/blank/libs/ace/snippets/fsharp.js b/ui/arduino/libs/ace/snippets/fsharp.js similarity index 100% rename from ui/blank/libs/ace/snippets/fsharp.js rename to ui/arduino/libs/ace/snippets/fsharp.js diff --git a/ui/blank/libs/ace/snippets/fsl.js b/ui/arduino/libs/ace/snippets/fsl.js similarity index 100% rename from ui/blank/libs/ace/snippets/fsl.js rename to ui/arduino/libs/ace/snippets/fsl.js diff --git a/ui/blank/libs/ace/snippets/ftl.js b/ui/arduino/libs/ace/snippets/ftl.js similarity index 100% rename from ui/blank/libs/ace/snippets/ftl.js rename to ui/arduino/libs/ace/snippets/ftl.js diff --git a/ui/blank/libs/ace/snippets/gcode.js b/ui/arduino/libs/ace/snippets/gcode.js similarity index 100% rename from ui/blank/libs/ace/snippets/gcode.js rename to ui/arduino/libs/ace/snippets/gcode.js diff --git a/ui/blank/libs/ace/snippets/gherkin.js b/ui/arduino/libs/ace/snippets/gherkin.js similarity index 100% rename from ui/blank/libs/ace/snippets/gherkin.js rename to ui/arduino/libs/ace/snippets/gherkin.js diff --git a/ui/blank/libs/ace/snippets/gitignore.js b/ui/arduino/libs/ace/snippets/gitignore.js similarity index 100% rename from ui/blank/libs/ace/snippets/gitignore.js rename to ui/arduino/libs/ace/snippets/gitignore.js diff --git a/ui/blank/libs/ace/snippets/glsl.js b/ui/arduino/libs/ace/snippets/glsl.js similarity index 100% rename from ui/blank/libs/ace/snippets/glsl.js rename to ui/arduino/libs/ace/snippets/glsl.js diff --git a/ui/blank/libs/ace/snippets/gobstones.js b/ui/arduino/libs/ace/snippets/gobstones.js similarity index 100% rename from ui/blank/libs/ace/snippets/gobstones.js rename to ui/arduino/libs/ace/snippets/gobstones.js diff --git a/ui/blank/libs/ace/snippets/golang.js b/ui/arduino/libs/ace/snippets/golang.js similarity index 100% rename from ui/blank/libs/ace/snippets/golang.js rename to ui/arduino/libs/ace/snippets/golang.js diff --git a/ui/blank/libs/ace/snippets/graphqlschema.js b/ui/arduino/libs/ace/snippets/graphqlschema.js similarity index 100% rename from ui/blank/libs/ace/snippets/graphqlschema.js rename to ui/arduino/libs/ace/snippets/graphqlschema.js diff --git a/ui/blank/libs/ace/snippets/groovy.js b/ui/arduino/libs/ace/snippets/groovy.js similarity index 100% rename from ui/blank/libs/ace/snippets/groovy.js rename to ui/arduino/libs/ace/snippets/groovy.js diff --git a/ui/blank/libs/ace/snippets/haml.js b/ui/arduino/libs/ace/snippets/haml.js similarity index 100% rename from ui/blank/libs/ace/snippets/haml.js rename to ui/arduino/libs/ace/snippets/haml.js diff --git a/ui/blank/libs/ace/snippets/handlebars.js b/ui/arduino/libs/ace/snippets/handlebars.js similarity index 100% rename from ui/blank/libs/ace/snippets/handlebars.js rename to ui/arduino/libs/ace/snippets/handlebars.js diff --git a/ui/blank/libs/ace/snippets/haskell.js b/ui/arduino/libs/ace/snippets/haskell.js similarity index 100% rename from ui/blank/libs/ace/snippets/haskell.js rename to ui/arduino/libs/ace/snippets/haskell.js diff --git a/ui/blank/libs/ace/snippets/haskell_cabal.js b/ui/arduino/libs/ace/snippets/haskell_cabal.js similarity index 100% rename from ui/blank/libs/ace/snippets/haskell_cabal.js rename to ui/arduino/libs/ace/snippets/haskell_cabal.js diff --git a/ui/blank/libs/ace/snippets/haxe.js b/ui/arduino/libs/ace/snippets/haxe.js similarity index 100% rename from ui/blank/libs/ace/snippets/haxe.js rename to ui/arduino/libs/ace/snippets/haxe.js diff --git a/ui/blank/libs/ace/snippets/hjson.js b/ui/arduino/libs/ace/snippets/hjson.js similarity index 100% rename from ui/blank/libs/ace/snippets/hjson.js rename to ui/arduino/libs/ace/snippets/hjson.js diff --git a/ui/blank/libs/ace/snippets/html.js b/ui/arduino/libs/ace/snippets/html.js similarity index 100% rename from ui/blank/libs/ace/snippets/html.js rename to ui/arduino/libs/ace/snippets/html.js diff --git a/ui/blank/libs/ace/snippets/html_elixir.js b/ui/arduino/libs/ace/snippets/html_elixir.js similarity index 100% rename from ui/blank/libs/ace/snippets/html_elixir.js rename to ui/arduino/libs/ace/snippets/html_elixir.js diff --git a/ui/blank/libs/ace/snippets/html_ruby.js b/ui/arduino/libs/ace/snippets/html_ruby.js similarity index 100% rename from ui/blank/libs/ace/snippets/html_ruby.js rename to ui/arduino/libs/ace/snippets/html_ruby.js diff --git a/ui/blank/libs/ace/snippets/ini.js b/ui/arduino/libs/ace/snippets/ini.js similarity index 100% rename from ui/blank/libs/ace/snippets/ini.js rename to ui/arduino/libs/ace/snippets/ini.js diff --git a/ui/blank/libs/ace/snippets/io.js b/ui/arduino/libs/ace/snippets/io.js similarity index 100% rename from ui/blank/libs/ace/snippets/io.js rename to ui/arduino/libs/ace/snippets/io.js diff --git a/ui/blank/libs/ace/snippets/jack.js b/ui/arduino/libs/ace/snippets/jack.js similarity index 100% rename from ui/blank/libs/ace/snippets/jack.js rename to ui/arduino/libs/ace/snippets/jack.js diff --git a/ui/blank/libs/ace/snippets/jade.js b/ui/arduino/libs/ace/snippets/jade.js similarity index 100% rename from ui/blank/libs/ace/snippets/jade.js rename to ui/arduino/libs/ace/snippets/jade.js diff --git a/ui/blank/libs/ace/snippets/java.js b/ui/arduino/libs/ace/snippets/java.js similarity index 100% rename from ui/blank/libs/ace/snippets/java.js rename to ui/arduino/libs/ace/snippets/java.js diff --git a/ui/blank/libs/ace/snippets/javascript.js b/ui/arduino/libs/ace/snippets/javascript.js similarity index 100% rename from ui/blank/libs/ace/snippets/javascript.js rename to ui/arduino/libs/ace/snippets/javascript.js diff --git a/ui/blank/libs/ace/snippets/json.js b/ui/arduino/libs/ace/snippets/json.js similarity index 100% rename from ui/blank/libs/ace/snippets/json.js rename to ui/arduino/libs/ace/snippets/json.js diff --git a/ui/blank/libs/ace/snippets/json5.js b/ui/arduino/libs/ace/snippets/json5.js similarity index 100% rename from ui/blank/libs/ace/snippets/json5.js rename to ui/arduino/libs/ace/snippets/json5.js diff --git a/ui/blank/libs/ace/snippets/jsoniq.js b/ui/arduino/libs/ace/snippets/jsoniq.js similarity index 100% rename from ui/blank/libs/ace/snippets/jsoniq.js rename to ui/arduino/libs/ace/snippets/jsoniq.js diff --git a/ui/blank/libs/ace/snippets/jsp.js b/ui/arduino/libs/ace/snippets/jsp.js similarity index 100% rename from ui/blank/libs/ace/snippets/jsp.js rename to ui/arduino/libs/ace/snippets/jsp.js diff --git a/ui/blank/libs/ace/snippets/jssm.js b/ui/arduino/libs/ace/snippets/jssm.js similarity index 100% rename from ui/blank/libs/ace/snippets/jssm.js rename to ui/arduino/libs/ace/snippets/jssm.js diff --git a/ui/blank/libs/ace/snippets/jsx.js b/ui/arduino/libs/ace/snippets/jsx.js similarity index 100% rename from ui/blank/libs/ace/snippets/jsx.js rename to ui/arduino/libs/ace/snippets/jsx.js diff --git a/ui/blank/libs/ace/snippets/julia.js b/ui/arduino/libs/ace/snippets/julia.js similarity index 100% rename from ui/blank/libs/ace/snippets/julia.js rename to ui/arduino/libs/ace/snippets/julia.js diff --git a/ui/blank/libs/ace/snippets/kotlin.js b/ui/arduino/libs/ace/snippets/kotlin.js similarity index 100% rename from ui/blank/libs/ace/snippets/kotlin.js rename to ui/arduino/libs/ace/snippets/kotlin.js diff --git a/ui/blank/libs/ace/snippets/latex.js b/ui/arduino/libs/ace/snippets/latex.js similarity index 100% rename from ui/blank/libs/ace/snippets/latex.js rename to ui/arduino/libs/ace/snippets/latex.js diff --git a/ui/blank/libs/ace/snippets/less.js b/ui/arduino/libs/ace/snippets/less.js similarity index 100% rename from ui/blank/libs/ace/snippets/less.js rename to ui/arduino/libs/ace/snippets/less.js diff --git a/ui/blank/libs/ace/snippets/liquid.js b/ui/arduino/libs/ace/snippets/liquid.js similarity index 100% rename from ui/blank/libs/ace/snippets/liquid.js rename to ui/arduino/libs/ace/snippets/liquid.js diff --git a/ui/blank/libs/ace/snippets/lisp.js b/ui/arduino/libs/ace/snippets/lisp.js similarity index 100% rename from ui/blank/libs/ace/snippets/lisp.js rename to ui/arduino/libs/ace/snippets/lisp.js diff --git a/ui/blank/libs/ace/snippets/livescript.js b/ui/arduino/libs/ace/snippets/livescript.js similarity index 100% rename from ui/blank/libs/ace/snippets/livescript.js rename to ui/arduino/libs/ace/snippets/livescript.js diff --git a/ui/blank/libs/ace/snippets/logiql.js b/ui/arduino/libs/ace/snippets/logiql.js similarity index 100% rename from ui/blank/libs/ace/snippets/logiql.js rename to ui/arduino/libs/ace/snippets/logiql.js diff --git a/ui/blank/libs/ace/snippets/logtalk.js b/ui/arduino/libs/ace/snippets/logtalk.js similarity index 100% rename from ui/blank/libs/ace/snippets/logtalk.js rename to ui/arduino/libs/ace/snippets/logtalk.js diff --git a/ui/blank/libs/ace/snippets/lsl.js b/ui/arduino/libs/ace/snippets/lsl.js similarity index 100% rename from ui/blank/libs/ace/snippets/lsl.js rename to ui/arduino/libs/ace/snippets/lsl.js diff --git a/ui/blank/libs/ace/snippets/lua.js b/ui/arduino/libs/ace/snippets/lua.js similarity index 100% rename from ui/blank/libs/ace/snippets/lua.js rename to ui/arduino/libs/ace/snippets/lua.js diff --git a/ui/blank/libs/ace/snippets/luapage.js b/ui/arduino/libs/ace/snippets/luapage.js similarity index 100% rename from ui/blank/libs/ace/snippets/luapage.js rename to ui/arduino/libs/ace/snippets/luapage.js diff --git a/ui/blank/libs/ace/snippets/lucene.js b/ui/arduino/libs/ace/snippets/lucene.js similarity index 100% rename from ui/blank/libs/ace/snippets/lucene.js rename to ui/arduino/libs/ace/snippets/lucene.js diff --git a/ui/blank/libs/ace/snippets/makefile.js b/ui/arduino/libs/ace/snippets/makefile.js similarity index 100% rename from ui/blank/libs/ace/snippets/makefile.js rename to ui/arduino/libs/ace/snippets/makefile.js diff --git a/ui/blank/libs/ace/snippets/markdown.js b/ui/arduino/libs/ace/snippets/markdown.js similarity index 100% rename from ui/blank/libs/ace/snippets/markdown.js rename to ui/arduino/libs/ace/snippets/markdown.js diff --git a/ui/blank/libs/ace/snippets/mask.js b/ui/arduino/libs/ace/snippets/mask.js similarity index 100% rename from ui/blank/libs/ace/snippets/mask.js rename to ui/arduino/libs/ace/snippets/mask.js diff --git a/ui/blank/libs/ace/snippets/matlab.js b/ui/arduino/libs/ace/snippets/matlab.js similarity index 100% rename from ui/blank/libs/ace/snippets/matlab.js rename to ui/arduino/libs/ace/snippets/matlab.js diff --git a/ui/blank/libs/ace/snippets/maze.js b/ui/arduino/libs/ace/snippets/maze.js similarity index 100% rename from ui/blank/libs/ace/snippets/maze.js rename to ui/arduino/libs/ace/snippets/maze.js diff --git a/ui/blank/libs/ace/snippets/mediawiki.js b/ui/arduino/libs/ace/snippets/mediawiki.js similarity index 100% rename from ui/blank/libs/ace/snippets/mediawiki.js rename to ui/arduino/libs/ace/snippets/mediawiki.js diff --git a/ui/blank/libs/ace/snippets/mel.js b/ui/arduino/libs/ace/snippets/mel.js similarity index 100% rename from ui/blank/libs/ace/snippets/mel.js rename to ui/arduino/libs/ace/snippets/mel.js diff --git a/ui/blank/libs/ace/snippets/mixal.js b/ui/arduino/libs/ace/snippets/mixal.js similarity index 100% rename from ui/blank/libs/ace/snippets/mixal.js rename to ui/arduino/libs/ace/snippets/mixal.js diff --git a/ui/blank/libs/ace/snippets/mushcode.js b/ui/arduino/libs/ace/snippets/mushcode.js similarity index 100% rename from ui/blank/libs/ace/snippets/mushcode.js rename to ui/arduino/libs/ace/snippets/mushcode.js diff --git a/ui/blank/libs/ace/snippets/mysql.js b/ui/arduino/libs/ace/snippets/mysql.js similarity index 100% rename from ui/blank/libs/ace/snippets/mysql.js rename to ui/arduino/libs/ace/snippets/mysql.js diff --git a/ui/blank/libs/ace/snippets/nginx.js b/ui/arduino/libs/ace/snippets/nginx.js similarity index 100% rename from ui/blank/libs/ace/snippets/nginx.js rename to ui/arduino/libs/ace/snippets/nginx.js diff --git a/ui/blank/libs/ace/snippets/nim.js b/ui/arduino/libs/ace/snippets/nim.js similarity index 100% rename from ui/blank/libs/ace/snippets/nim.js rename to ui/arduino/libs/ace/snippets/nim.js diff --git a/ui/blank/libs/ace/snippets/nix.js b/ui/arduino/libs/ace/snippets/nix.js similarity index 100% rename from ui/blank/libs/ace/snippets/nix.js rename to ui/arduino/libs/ace/snippets/nix.js diff --git a/ui/blank/libs/ace/snippets/nsis.js b/ui/arduino/libs/ace/snippets/nsis.js similarity index 100% rename from ui/blank/libs/ace/snippets/nsis.js rename to ui/arduino/libs/ace/snippets/nsis.js diff --git a/ui/blank/libs/ace/snippets/nunjucks.js b/ui/arduino/libs/ace/snippets/nunjucks.js similarity index 100% rename from ui/blank/libs/ace/snippets/nunjucks.js rename to ui/arduino/libs/ace/snippets/nunjucks.js diff --git a/ui/blank/libs/ace/snippets/objectivec.js b/ui/arduino/libs/ace/snippets/objectivec.js similarity index 100% rename from ui/blank/libs/ace/snippets/objectivec.js rename to ui/arduino/libs/ace/snippets/objectivec.js diff --git a/ui/blank/libs/ace/snippets/ocaml.js b/ui/arduino/libs/ace/snippets/ocaml.js similarity index 100% rename from ui/blank/libs/ace/snippets/ocaml.js rename to ui/arduino/libs/ace/snippets/ocaml.js diff --git a/ui/blank/libs/ace/snippets/pascal.js b/ui/arduino/libs/ace/snippets/pascal.js similarity index 100% rename from ui/blank/libs/ace/snippets/pascal.js rename to ui/arduino/libs/ace/snippets/pascal.js diff --git a/ui/blank/libs/ace/snippets/perl.js b/ui/arduino/libs/ace/snippets/perl.js similarity index 100% rename from ui/blank/libs/ace/snippets/perl.js rename to ui/arduino/libs/ace/snippets/perl.js diff --git a/ui/blank/libs/ace/snippets/perl6.js b/ui/arduino/libs/ace/snippets/perl6.js similarity index 100% rename from ui/blank/libs/ace/snippets/perl6.js rename to ui/arduino/libs/ace/snippets/perl6.js diff --git a/ui/blank/libs/ace/snippets/pgsql.js b/ui/arduino/libs/ace/snippets/pgsql.js similarity index 100% rename from ui/blank/libs/ace/snippets/pgsql.js rename to ui/arduino/libs/ace/snippets/pgsql.js diff --git a/ui/blank/libs/ace/snippets/php.js b/ui/arduino/libs/ace/snippets/php.js similarity index 100% rename from ui/blank/libs/ace/snippets/php.js rename to ui/arduino/libs/ace/snippets/php.js diff --git a/ui/blank/libs/ace/snippets/php_laravel_blade.js b/ui/arduino/libs/ace/snippets/php_laravel_blade.js similarity index 100% rename from ui/blank/libs/ace/snippets/php_laravel_blade.js rename to ui/arduino/libs/ace/snippets/php_laravel_blade.js diff --git a/ui/blank/libs/ace/snippets/pig.js b/ui/arduino/libs/ace/snippets/pig.js similarity index 100% rename from ui/blank/libs/ace/snippets/pig.js rename to ui/arduino/libs/ace/snippets/pig.js diff --git a/ui/blank/libs/ace/snippets/plain_text.js b/ui/arduino/libs/ace/snippets/plain_text.js similarity index 100% rename from ui/blank/libs/ace/snippets/plain_text.js rename to ui/arduino/libs/ace/snippets/plain_text.js diff --git a/ui/blank/libs/ace/snippets/powershell.js b/ui/arduino/libs/ace/snippets/powershell.js similarity index 100% rename from ui/blank/libs/ace/snippets/powershell.js rename to ui/arduino/libs/ace/snippets/powershell.js diff --git a/ui/blank/libs/ace/snippets/praat.js b/ui/arduino/libs/ace/snippets/praat.js similarity index 100% rename from ui/blank/libs/ace/snippets/praat.js rename to ui/arduino/libs/ace/snippets/praat.js diff --git a/ui/blank/libs/ace/snippets/prisma.js b/ui/arduino/libs/ace/snippets/prisma.js similarity index 100% rename from ui/blank/libs/ace/snippets/prisma.js rename to ui/arduino/libs/ace/snippets/prisma.js diff --git a/ui/blank/libs/ace/snippets/prolog.js b/ui/arduino/libs/ace/snippets/prolog.js similarity index 100% rename from ui/blank/libs/ace/snippets/prolog.js rename to ui/arduino/libs/ace/snippets/prolog.js diff --git a/ui/blank/libs/ace/snippets/properties.js b/ui/arduino/libs/ace/snippets/properties.js similarity index 100% rename from ui/blank/libs/ace/snippets/properties.js rename to ui/arduino/libs/ace/snippets/properties.js diff --git a/ui/blank/libs/ace/snippets/protobuf.js b/ui/arduino/libs/ace/snippets/protobuf.js similarity index 100% rename from ui/blank/libs/ace/snippets/protobuf.js rename to ui/arduino/libs/ace/snippets/protobuf.js diff --git a/ui/blank/libs/ace/snippets/puppet.js b/ui/arduino/libs/ace/snippets/puppet.js similarity index 100% rename from ui/blank/libs/ace/snippets/puppet.js rename to ui/arduino/libs/ace/snippets/puppet.js diff --git a/ui/blank/libs/ace/snippets/python.js b/ui/arduino/libs/ace/snippets/python.js similarity index 100% rename from ui/blank/libs/ace/snippets/python.js rename to ui/arduino/libs/ace/snippets/python.js diff --git a/ui/blank/libs/ace/snippets/qml.js b/ui/arduino/libs/ace/snippets/qml.js similarity index 100% rename from ui/blank/libs/ace/snippets/qml.js rename to ui/arduino/libs/ace/snippets/qml.js diff --git a/ui/blank/libs/ace/snippets/r.js b/ui/arduino/libs/ace/snippets/r.js similarity index 100% rename from ui/blank/libs/ace/snippets/r.js rename to ui/arduino/libs/ace/snippets/r.js diff --git a/ui/blank/libs/ace/snippets/razor.js b/ui/arduino/libs/ace/snippets/razor.js similarity index 100% rename from ui/blank/libs/ace/snippets/razor.js rename to ui/arduino/libs/ace/snippets/razor.js diff --git a/ui/blank/libs/ace/snippets/rdoc.js b/ui/arduino/libs/ace/snippets/rdoc.js similarity index 100% rename from ui/blank/libs/ace/snippets/rdoc.js rename to ui/arduino/libs/ace/snippets/rdoc.js diff --git a/ui/blank/libs/ace/snippets/red.js b/ui/arduino/libs/ace/snippets/red.js similarity index 100% rename from ui/blank/libs/ace/snippets/red.js rename to ui/arduino/libs/ace/snippets/red.js diff --git a/ui/blank/libs/ace/snippets/redshift.js b/ui/arduino/libs/ace/snippets/redshift.js similarity index 100% rename from ui/blank/libs/ace/snippets/redshift.js rename to ui/arduino/libs/ace/snippets/redshift.js diff --git a/ui/blank/libs/ace/snippets/rhtml.js b/ui/arduino/libs/ace/snippets/rhtml.js similarity index 100% rename from ui/blank/libs/ace/snippets/rhtml.js rename to ui/arduino/libs/ace/snippets/rhtml.js diff --git a/ui/blank/libs/ace/snippets/rst.js b/ui/arduino/libs/ace/snippets/rst.js similarity index 100% rename from ui/blank/libs/ace/snippets/rst.js rename to ui/arduino/libs/ace/snippets/rst.js diff --git a/ui/blank/libs/ace/snippets/ruby.js b/ui/arduino/libs/ace/snippets/ruby.js similarity index 100% rename from ui/blank/libs/ace/snippets/ruby.js rename to ui/arduino/libs/ace/snippets/ruby.js diff --git a/ui/blank/libs/ace/snippets/rust.js b/ui/arduino/libs/ace/snippets/rust.js similarity index 100% rename from ui/blank/libs/ace/snippets/rust.js rename to ui/arduino/libs/ace/snippets/rust.js diff --git a/ui/blank/libs/ace/snippets/sass.js b/ui/arduino/libs/ace/snippets/sass.js similarity index 100% rename from ui/blank/libs/ace/snippets/sass.js rename to ui/arduino/libs/ace/snippets/sass.js diff --git a/ui/blank/libs/ace/snippets/scad.js b/ui/arduino/libs/ace/snippets/scad.js similarity index 100% rename from ui/blank/libs/ace/snippets/scad.js rename to ui/arduino/libs/ace/snippets/scad.js diff --git a/ui/blank/libs/ace/snippets/scala.js b/ui/arduino/libs/ace/snippets/scala.js similarity index 100% rename from ui/blank/libs/ace/snippets/scala.js rename to ui/arduino/libs/ace/snippets/scala.js diff --git a/ui/blank/libs/ace/snippets/scheme.js b/ui/arduino/libs/ace/snippets/scheme.js similarity index 100% rename from ui/blank/libs/ace/snippets/scheme.js rename to ui/arduino/libs/ace/snippets/scheme.js diff --git a/ui/blank/libs/ace/snippets/scss.js b/ui/arduino/libs/ace/snippets/scss.js similarity index 100% rename from ui/blank/libs/ace/snippets/scss.js rename to ui/arduino/libs/ace/snippets/scss.js diff --git a/ui/blank/libs/ace/snippets/sh.js b/ui/arduino/libs/ace/snippets/sh.js similarity index 100% rename from ui/blank/libs/ace/snippets/sh.js rename to ui/arduino/libs/ace/snippets/sh.js diff --git a/ui/blank/libs/ace/snippets/sjs.js b/ui/arduino/libs/ace/snippets/sjs.js similarity index 100% rename from ui/blank/libs/ace/snippets/sjs.js rename to ui/arduino/libs/ace/snippets/sjs.js diff --git a/ui/blank/libs/ace/snippets/slim.js b/ui/arduino/libs/ace/snippets/slim.js similarity index 100% rename from ui/blank/libs/ace/snippets/slim.js rename to ui/arduino/libs/ace/snippets/slim.js diff --git a/ui/blank/libs/ace/snippets/smarty.js b/ui/arduino/libs/ace/snippets/smarty.js similarity index 100% rename from ui/blank/libs/ace/snippets/smarty.js rename to ui/arduino/libs/ace/snippets/smarty.js diff --git a/ui/blank/libs/ace/snippets/snippets.js b/ui/arduino/libs/ace/snippets/snippets.js similarity index 100% rename from ui/blank/libs/ace/snippets/snippets.js rename to ui/arduino/libs/ace/snippets/snippets.js diff --git a/ui/blank/libs/ace/snippets/soy_template.js b/ui/arduino/libs/ace/snippets/soy_template.js similarity index 100% rename from ui/blank/libs/ace/snippets/soy_template.js rename to ui/arduino/libs/ace/snippets/soy_template.js diff --git a/ui/blank/libs/ace/snippets/space.js b/ui/arduino/libs/ace/snippets/space.js similarity index 100% rename from ui/blank/libs/ace/snippets/space.js rename to ui/arduino/libs/ace/snippets/space.js diff --git a/ui/blank/libs/ace/snippets/sparql.js b/ui/arduino/libs/ace/snippets/sparql.js similarity index 100% rename from ui/blank/libs/ace/snippets/sparql.js rename to ui/arduino/libs/ace/snippets/sparql.js diff --git a/ui/blank/libs/ace/snippets/sql.js b/ui/arduino/libs/ace/snippets/sql.js similarity index 100% rename from ui/blank/libs/ace/snippets/sql.js rename to ui/arduino/libs/ace/snippets/sql.js diff --git a/ui/blank/libs/ace/snippets/sqlserver.js b/ui/arduino/libs/ace/snippets/sqlserver.js similarity index 100% rename from ui/blank/libs/ace/snippets/sqlserver.js rename to ui/arduino/libs/ace/snippets/sqlserver.js diff --git a/ui/blank/libs/ace/snippets/stylus.js b/ui/arduino/libs/ace/snippets/stylus.js similarity index 100% rename from ui/blank/libs/ace/snippets/stylus.js rename to ui/arduino/libs/ace/snippets/stylus.js diff --git a/ui/blank/libs/ace/snippets/svg.js b/ui/arduino/libs/ace/snippets/svg.js similarity index 100% rename from ui/blank/libs/ace/snippets/svg.js rename to ui/arduino/libs/ace/snippets/svg.js diff --git a/ui/blank/libs/ace/snippets/swift.js b/ui/arduino/libs/ace/snippets/swift.js similarity index 100% rename from ui/blank/libs/ace/snippets/swift.js rename to ui/arduino/libs/ace/snippets/swift.js diff --git a/ui/blank/libs/ace/snippets/tcl.js b/ui/arduino/libs/ace/snippets/tcl.js similarity index 100% rename from ui/blank/libs/ace/snippets/tcl.js rename to ui/arduino/libs/ace/snippets/tcl.js diff --git a/ui/blank/libs/ace/snippets/terraform.js b/ui/arduino/libs/ace/snippets/terraform.js similarity index 100% rename from ui/blank/libs/ace/snippets/terraform.js rename to ui/arduino/libs/ace/snippets/terraform.js diff --git a/ui/blank/libs/ace/snippets/tex.js b/ui/arduino/libs/ace/snippets/tex.js similarity index 100% rename from ui/blank/libs/ace/snippets/tex.js rename to ui/arduino/libs/ace/snippets/tex.js diff --git a/ui/blank/libs/ace/snippets/text.js b/ui/arduino/libs/ace/snippets/text.js similarity index 100% rename from ui/blank/libs/ace/snippets/text.js rename to ui/arduino/libs/ace/snippets/text.js diff --git a/ui/blank/libs/ace/snippets/textile.js b/ui/arduino/libs/ace/snippets/textile.js similarity index 100% rename from ui/blank/libs/ace/snippets/textile.js rename to ui/arduino/libs/ace/snippets/textile.js diff --git a/ui/blank/libs/ace/snippets/toml.js b/ui/arduino/libs/ace/snippets/toml.js similarity index 100% rename from ui/blank/libs/ace/snippets/toml.js rename to ui/arduino/libs/ace/snippets/toml.js diff --git a/ui/blank/libs/ace/snippets/tsx.js b/ui/arduino/libs/ace/snippets/tsx.js similarity index 100% rename from ui/blank/libs/ace/snippets/tsx.js rename to ui/arduino/libs/ace/snippets/tsx.js diff --git a/ui/blank/libs/ace/snippets/turtle.js b/ui/arduino/libs/ace/snippets/turtle.js similarity index 100% rename from ui/blank/libs/ace/snippets/turtle.js rename to ui/arduino/libs/ace/snippets/turtle.js diff --git a/ui/blank/libs/ace/snippets/twig.js b/ui/arduino/libs/ace/snippets/twig.js similarity index 100% rename from ui/blank/libs/ace/snippets/twig.js rename to ui/arduino/libs/ace/snippets/twig.js diff --git a/ui/blank/libs/ace/snippets/typescript.js b/ui/arduino/libs/ace/snippets/typescript.js similarity index 100% rename from ui/blank/libs/ace/snippets/typescript.js rename to ui/arduino/libs/ace/snippets/typescript.js diff --git a/ui/blank/libs/ace/snippets/vala.js b/ui/arduino/libs/ace/snippets/vala.js similarity index 100% rename from ui/blank/libs/ace/snippets/vala.js rename to ui/arduino/libs/ace/snippets/vala.js diff --git a/ui/blank/libs/ace/snippets/vbscript.js b/ui/arduino/libs/ace/snippets/vbscript.js similarity index 100% rename from ui/blank/libs/ace/snippets/vbscript.js rename to ui/arduino/libs/ace/snippets/vbscript.js diff --git a/ui/blank/libs/ace/snippets/velocity.js b/ui/arduino/libs/ace/snippets/velocity.js similarity index 100% rename from ui/blank/libs/ace/snippets/velocity.js rename to ui/arduino/libs/ace/snippets/velocity.js diff --git a/ui/blank/libs/ace/snippets/verilog.js b/ui/arduino/libs/ace/snippets/verilog.js similarity index 100% rename from ui/blank/libs/ace/snippets/verilog.js rename to ui/arduino/libs/ace/snippets/verilog.js diff --git a/ui/blank/libs/ace/snippets/vhdl.js b/ui/arduino/libs/ace/snippets/vhdl.js similarity index 100% rename from ui/blank/libs/ace/snippets/vhdl.js rename to ui/arduino/libs/ace/snippets/vhdl.js diff --git a/ui/blank/libs/ace/snippets/visualforce.js b/ui/arduino/libs/ace/snippets/visualforce.js similarity index 100% rename from ui/blank/libs/ace/snippets/visualforce.js rename to ui/arduino/libs/ace/snippets/visualforce.js diff --git a/ui/blank/libs/ace/snippets/wollok.js b/ui/arduino/libs/ace/snippets/wollok.js similarity index 100% rename from ui/blank/libs/ace/snippets/wollok.js rename to ui/arduino/libs/ace/snippets/wollok.js diff --git a/ui/blank/libs/ace/snippets/xml.js b/ui/arduino/libs/ace/snippets/xml.js similarity index 100% rename from ui/blank/libs/ace/snippets/xml.js rename to ui/arduino/libs/ace/snippets/xml.js diff --git a/ui/blank/libs/ace/snippets/xquery.js b/ui/arduino/libs/ace/snippets/xquery.js similarity index 100% rename from ui/blank/libs/ace/snippets/xquery.js rename to ui/arduino/libs/ace/snippets/xquery.js diff --git a/ui/blank/libs/ace/snippets/yaml.js b/ui/arduino/libs/ace/snippets/yaml.js similarity index 100% rename from ui/blank/libs/ace/snippets/yaml.js rename to ui/arduino/libs/ace/snippets/yaml.js diff --git a/ui/blank/libs/ace/snippets/zeek.js b/ui/arduino/libs/ace/snippets/zeek.js similarity index 100% rename from ui/blank/libs/ace/snippets/zeek.js rename to ui/arduino/libs/ace/snippets/zeek.js diff --git a/ui/blank/libs/ace/theme-ambiance.js b/ui/arduino/libs/ace/theme-ambiance.js similarity index 100% rename from ui/blank/libs/ace/theme-ambiance.js rename to ui/arduino/libs/ace/theme-ambiance.js diff --git a/ui/blank/libs/ace/theme-chaos.js b/ui/arduino/libs/ace/theme-chaos.js similarity index 100% rename from ui/blank/libs/ace/theme-chaos.js rename to ui/arduino/libs/ace/theme-chaos.js diff --git a/ui/blank/libs/ace/theme-chrome.js b/ui/arduino/libs/ace/theme-chrome.js similarity index 100% rename from ui/blank/libs/ace/theme-chrome.js rename to ui/arduino/libs/ace/theme-chrome.js diff --git a/ui/blank/libs/ace/theme-clouds.js b/ui/arduino/libs/ace/theme-clouds.js similarity index 100% rename from ui/blank/libs/ace/theme-clouds.js rename to ui/arduino/libs/ace/theme-clouds.js diff --git a/ui/blank/libs/ace/theme-clouds_midnight.js b/ui/arduino/libs/ace/theme-clouds_midnight.js similarity index 100% rename from ui/blank/libs/ace/theme-clouds_midnight.js rename to ui/arduino/libs/ace/theme-clouds_midnight.js diff --git a/ui/blank/libs/ace/theme-cobalt.js b/ui/arduino/libs/ace/theme-cobalt.js similarity index 100% rename from ui/blank/libs/ace/theme-cobalt.js rename to ui/arduino/libs/ace/theme-cobalt.js diff --git a/ui/blank/libs/ace/theme-crimson_editor.js b/ui/arduino/libs/ace/theme-crimson_editor.js similarity index 100% rename from ui/blank/libs/ace/theme-crimson_editor.js rename to ui/arduino/libs/ace/theme-crimson_editor.js diff --git a/ui/blank/libs/ace/theme-dawn.js b/ui/arduino/libs/ace/theme-dawn.js similarity index 100% rename from ui/blank/libs/ace/theme-dawn.js rename to ui/arduino/libs/ace/theme-dawn.js diff --git a/ui/blank/libs/ace/theme-dracula.js b/ui/arduino/libs/ace/theme-dracula.js similarity index 100% rename from ui/blank/libs/ace/theme-dracula.js rename to ui/arduino/libs/ace/theme-dracula.js diff --git a/ui/blank/libs/ace/theme-dreamweaver.js b/ui/arduino/libs/ace/theme-dreamweaver.js similarity index 100% rename from ui/blank/libs/ace/theme-dreamweaver.js rename to ui/arduino/libs/ace/theme-dreamweaver.js diff --git a/ui/blank/libs/ace/theme-eclipse.js b/ui/arduino/libs/ace/theme-eclipse.js similarity index 100% rename from ui/blank/libs/ace/theme-eclipse.js rename to ui/arduino/libs/ace/theme-eclipse.js diff --git a/ui/blank/libs/ace/theme-github.js b/ui/arduino/libs/ace/theme-github.js similarity index 100% rename from ui/blank/libs/ace/theme-github.js rename to ui/arduino/libs/ace/theme-github.js diff --git a/ui/blank/libs/ace/theme-gob.js b/ui/arduino/libs/ace/theme-gob.js similarity index 100% rename from ui/blank/libs/ace/theme-gob.js rename to ui/arduino/libs/ace/theme-gob.js diff --git a/ui/blank/libs/ace/theme-gruvbox.js b/ui/arduino/libs/ace/theme-gruvbox.js similarity index 100% rename from ui/blank/libs/ace/theme-gruvbox.js rename to ui/arduino/libs/ace/theme-gruvbox.js diff --git a/ui/blank/libs/ace/theme-idle_fingers.js b/ui/arduino/libs/ace/theme-idle_fingers.js similarity index 100% rename from ui/blank/libs/ace/theme-idle_fingers.js rename to ui/arduino/libs/ace/theme-idle_fingers.js diff --git a/ui/blank/libs/ace/theme-iplastic.js b/ui/arduino/libs/ace/theme-iplastic.js similarity index 100% rename from ui/blank/libs/ace/theme-iplastic.js rename to ui/arduino/libs/ace/theme-iplastic.js diff --git a/ui/blank/libs/ace/theme-katzenmilch.js b/ui/arduino/libs/ace/theme-katzenmilch.js similarity index 100% rename from ui/blank/libs/ace/theme-katzenmilch.js rename to ui/arduino/libs/ace/theme-katzenmilch.js diff --git a/ui/blank/libs/ace/theme-kr_theme.js b/ui/arduino/libs/ace/theme-kr_theme.js similarity index 100% rename from ui/blank/libs/ace/theme-kr_theme.js rename to ui/arduino/libs/ace/theme-kr_theme.js diff --git a/ui/blank/libs/ace/theme-kuroir.js b/ui/arduino/libs/ace/theme-kuroir.js similarity index 100% rename from ui/blank/libs/ace/theme-kuroir.js rename to ui/arduino/libs/ace/theme-kuroir.js diff --git a/ui/blank/libs/ace/theme-merbivore.js b/ui/arduino/libs/ace/theme-merbivore.js similarity index 100% rename from ui/blank/libs/ace/theme-merbivore.js rename to ui/arduino/libs/ace/theme-merbivore.js diff --git a/ui/blank/libs/ace/theme-merbivore_soft.js b/ui/arduino/libs/ace/theme-merbivore_soft.js similarity index 100% rename from ui/blank/libs/ace/theme-merbivore_soft.js rename to ui/arduino/libs/ace/theme-merbivore_soft.js diff --git a/ui/blank/libs/ace/theme-mono_industrial.js b/ui/arduino/libs/ace/theme-mono_industrial.js similarity index 100% rename from ui/blank/libs/ace/theme-mono_industrial.js rename to ui/arduino/libs/ace/theme-mono_industrial.js diff --git a/ui/blank/libs/ace/theme-monokai.js b/ui/arduino/libs/ace/theme-monokai.js similarity index 100% rename from ui/blank/libs/ace/theme-monokai.js rename to ui/arduino/libs/ace/theme-monokai.js diff --git a/ui/blank/libs/ace/theme-nord_dark.js b/ui/arduino/libs/ace/theme-nord_dark.js similarity index 100% rename from ui/blank/libs/ace/theme-nord_dark.js rename to ui/arduino/libs/ace/theme-nord_dark.js diff --git a/ui/blank/libs/ace/theme-pastel_on_dark.js b/ui/arduino/libs/ace/theme-pastel_on_dark.js similarity index 100% rename from ui/blank/libs/ace/theme-pastel_on_dark.js rename to ui/arduino/libs/ace/theme-pastel_on_dark.js diff --git a/ui/blank/libs/ace/theme-solarized_dark.js b/ui/arduino/libs/ace/theme-solarized_dark.js similarity index 100% rename from ui/blank/libs/ace/theme-solarized_dark.js rename to ui/arduino/libs/ace/theme-solarized_dark.js diff --git a/ui/blank/libs/ace/theme-solarized_light.js b/ui/arduino/libs/ace/theme-solarized_light.js similarity index 100% rename from ui/blank/libs/ace/theme-solarized_light.js rename to ui/arduino/libs/ace/theme-solarized_light.js diff --git a/ui/blank/libs/ace/theme-sqlserver.js b/ui/arduino/libs/ace/theme-sqlserver.js similarity index 100% rename from ui/blank/libs/ace/theme-sqlserver.js rename to ui/arduino/libs/ace/theme-sqlserver.js diff --git a/ui/blank/libs/ace/theme-terminal.js b/ui/arduino/libs/ace/theme-terminal.js similarity index 100% rename from ui/blank/libs/ace/theme-terminal.js rename to ui/arduino/libs/ace/theme-terminal.js diff --git a/ui/blank/libs/ace/theme-textmate.js b/ui/arduino/libs/ace/theme-textmate.js similarity index 100% rename from ui/blank/libs/ace/theme-textmate.js rename to ui/arduino/libs/ace/theme-textmate.js diff --git a/ui/blank/libs/ace/theme-tomorrow.js b/ui/arduino/libs/ace/theme-tomorrow.js similarity index 100% rename from ui/blank/libs/ace/theme-tomorrow.js rename to ui/arduino/libs/ace/theme-tomorrow.js diff --git a/ui/blank/libs/ace/theme-tomorrow_night.js b/ui/arduino/libs/ace/theme-tomorrow_night.js similarity index 100% rename from ui/blank/libs/ace/theme-tomorrow_night.js rename to ui/arduino/libs/ace/theme-tomorrow_night.js diff --git a/ui/blank/libs/ace/theme-tomorrow_night_blue.js b/ui/arduino/libs/ace/theme-tomorrow_night_blue.js similarity index 100% rename from ui/blank/libs/ace/theme-tomorrow_night_blue.js rename to ui/arduino/libs/ace/theme-tomorrow_night_blue.js diff --git a/ui/blank/libs/ace/theme-tomorrow_night_bright.js b/ui/arduino/libs/ace/theme-tomorrow_night_bright.js similarity index 100% rename from ui/blank/libs/ace/theme-tomorrow_night_bright.js rename to ui/arduino/libs/ace/theme-tomorrow_night_bright.js diff --git a/ui/blank/libs/ace/theme-tomorrow_night_eighties.js b/ui/arduino/libs/ace/theme-tomorrow_night_eighties.js similarity index 100% rename from ui/blank/libs/ace/theme-tomorrow_night_eighties.js rename to ui/arduino/libs/ace/theme-tomorrow_night_eighties.js diff --git a/ui/blank/libs/ace/theme-twilight.js b/ui/arduino/libs/ace/theme-twilight.js similarity index 100% rename from ui/blank/libs/ace/theme-twilight.js rename to ui/arduino/libs/ace/theme-twilight.js diff --git a/ui/blank/libs/ace/theme-vibrant_ink.js b/ui/arduino/libs/ace/theme-vibrant_ink.js similarity index 100% rename from ui/blank/libs/ace/theme-vibrant_ink.js rename to ui/arduino/libs/ace/theme-vibrant_ink.js diff --git a/ui/blank/libs/ace/theme-xcode.js b/ui/arduino/libs/ace/theme-xcode.js similarity index 100% rename from ui/blank/libs/ace/theme-xcode.js rename to ui/arduino/libs/ace/theme-xcode.js diff --git a/ui/blank/libs/ace/worker-base.js b/ui/arduino/libs/ace/worker-base.js similarity index 100% rename from ui/blank/libs/ace/worker-base.js rename to ui/arduino/libs/ace/worker-base.js diff --git a/ui/blank/libs/ace/worker-coffee.js b/ui/arduino/libs/ace/worker-coffee.js similarity index 100% rename from ui/blank/libs/ace/worker-coffee.js rename to ui/arduino/libs/ace/worker-coffee.js diff --git a/ui/blank/libs/ace/worker-css.js b/ui/arduino/libs/ace/worker-css.js similarity index 100% rename from ui/blank/libs/ace/worker-css.js rename to ui/arduino/libs/ace/worker-css.js diff --git a/ui/blank/libs/ace/worker-html.js b/ui/arduino/libs/ace/worker-html.js similarity index 100% rename from ui/blank/libs/ace/worker-html.js rename to ui/arduino/libs/ace/worker-html.js diff --git a/ui/blank/libs/ace/worker-javascript.js b/ui/arduino/libs/ace/worker-javascript.js similarity index 100% rename from ui/blank/libs/ace/worker-javascript.js rename to ui/arduino/libs/ace/worker-javascript.js diff --git a/ui/blank/libs/ace/worker-json.js b/ui/arduino/libs/ace/worker-json.js similarity index 100% rename from ui/blank/libs/ace/worker-json.js rename to ui/arduino/libs/ace/worker-json.js diff --git a/ui/blank/libs/ace/worker-lua.js b/ui/arduino/libs/ace/worker-lua.js similarity index 100% rename from ui/blank/libs/ace/worker-lua.js rename to ui/arduino/libs/ace/worker-lua.js diff --git a/ui/blank/libs/ace/worker-php.js b/ui/arduino/libs/ace/worker-php.js similarity index 100% rename from ui/blank/libs/ace/worker-php.js rename to ui/arduino/libs/ace/worker-php.js diff --git a/ui/blank/libs/ace/worker-xml.js b/ui/arduino/libs/ace/worker-xml.js similarity index 100% rename from ui/blank/libs/ace/worker-xml.js rename to ui/arduino/libs/ace/worker-xml.js diff --git a/ui/blank/libs/ace/worker-xquery.js b/ui/arduino/libs/ace/worker-xquery.js similarity index 100% rename from ui/blank/libs/ace/worker-xquery.js rename to ui/arduino/libs/ace/worker-xquery.js diff --git a/ui/blank/libs/lib_build.js b/ui/arduino/libs/build_choo.js similarity index 100% rename from ui/blank/libs/lib_build.js rename to ui/arduino/libs/build_choo.js diff --git a/ui/blank/libs/lib.js b/ui/arduino/libs/choo.js similarity index 97% rename from ui/blank/libs/lib.js rename to ui/arduino/libs/choo.js index e666936..cf74c54 100644 --- a/ui/blank/libs/lib.js +++ b/ui/arduino/libs/choo.js @@ -1,6 +1,11 @@ (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i libs/choo.js" + }, + "license": "MIT", + "dependencies": { + "browserify": "^17.0.0", + "choo": "^7.1.0" + } +} diff --git a/ui/arduino/store.js b/ui/arduino/store.js new file mode 100644 index 0000000..2d1d9b6 --- /dev/null +++ b/ui/arduino/store.js @@ -0,0 +1,330 @@ +const log = console.log +const DEFAULT_PANEL_HEIGHT = '25rem' + +function resizeEditor(state) { + const el = state.cache(AceEditor, 'editor').element + if (state.isTerminalOpen || state.isFilesOpen) { + el.style.height = `calc(100% - ${state.panelHeight || DEFAULT_PANEL_HEIGHT})` + } else { + el.style.height = '100%' + } +} + +function store(state, emitter) { + const serial = window.BridgeSerial + const disk = window.BridgeDisk + + state.ports = [] + state.diskFiles = [] + state.serialFiles = [] + state.selectedFile = null + state.selectedDevice = 'disk' + + state.diskPath = null + state.serialPath = null + + state.isConnected = false + state.isPortDialogOpen = false + state.isNewFileDialogOpen = false + state.isTerminalOpen = false + state.isFilesOpen = false + + state.messageText = 'Disconnected' + state.isShowingMessage = true + state.messageTimeout = 0 + + state.isTerminalBound = false // XXX + state.panelHeight = null + + // SERIAL CONNECTION + emitter.on('load-ports', async () => { + log('load-ports') + state.ports = await serial.loadPorts() + emitter.emit('render') + }) + emitter.on('open-port-dialog', async () => { + log('open-port-dialog') + emitter.emit('disconnect') + state.ports = await serial.loadPorts() + state.isPortDialogOpen = true + emitter.emit('render') + }) + emitter.on('close-port-dialog', async () => { + log('close-port-dialog') + state.isPortDialogOpen = false + emitter.emit('render') + }) + + emitter.on('disconnect', () => { + log('disconnect') + if (state.isConnected) { + emitter.emit('message', 'Disconnected') + } + state.isConnected = false + state.serialPath = null + state.isTerminalOpen = false + state.serialFiles = [] + emitter.emit('render') + }) + emitter.on('connect', async (path) => { + log('connect') + state.serialPath = path + await serial.connect(path) + emitter.emit('message', 'Connected', 150) + await serial.stop() + + let term = state.cache(XTerm, 'terminal').term + if (!state.isTerminalBound) { + state.isTerminalBound = true + term.onData((data) => { + serial.eval(data) + term.scrollToBottom() + }) + } + serial.onData((data) => { + term.write(data) + term.scrollToBottom() + }) + serial.onDisconnect(() => emitter.emit('disconnect')) + state.isConnected = true + emitter.emit('update-files') + emitter.emit('close-port-dialog') + emitter.emit('show-terminal') + emitter.emit('render') + }) + + // CODE EXECUTION + emitter.on('run', async () => { + log('run') + if (!state.isTerminalOpen) emitter.emit('show-terminal') + let editor = state.cache(AceEditor, 'editor').editor + let code = editor.getValue() + await serial.run(code) + emitter.emit('render') + }) + emitter.on('stop', async () => { + log('stop') + await serial.stop() + emitter.emit('render') + }) + emitter.on('reset', async () => { + log('reset') + await serial.reset() + emitter.emit('update-files') + emitter.emit('render') + }) + + // FILE MANAGEMENT + emitter.on('open-new-file-dialog', () => { + log('open-new-file-dialog') + state.isNewFileDialogOpen = true + emitter.emit('render') + }) + emitter.on('close-new-file-dialog', () => { + log('close-new-file-dialog') + state.isNewFileDialogOpen = false + emitter.emit('render') + }) + emitter.on('new-file', (dev) => { + log('select-device', dev) + state.selectedDevice = dev + let editor = state.cache(AceEditor, 'editor').editor + state.selectedFile = 'undefined' + editor.setValue('') + emitter.emit('close-new-file-dialog') + emitter.emit('render') + }) + emitter.on('save', async () => { + log('save') + let editor = state.cache(AceEditor, 'editor').editor + let contents = editor.getValue() + let filename = state.selectedFile || 'undefined' + + if (state.selectedDevice === 'serial') { + await serial.saveFileContent(filename, contents) + } + + if (state.selectedDevice === 'disk' && state.diskPath) { + await disk.saveFileContent(state.diskPath, filename, contents) + } + + emitter.emit('update-files') + }) + emitter.on('remove', async () => { + log('remove') + if (state.selectedDevice === 'serial') { + await serial.removeFile(state.selectedFile) + } + if (state.selectedDevice === 'disk') { + await disk.removeFile(state.diskPath, state.selectedFile) + } + emitter.emit('update-files') + emitter.emit('render') + }) + emitter.on('select-file', async (device, filename) => { + log('select-file') + state.selectedDevice = device + state.selectedFile = filename + + let content = '' + if (state.selectedDevice === 'serial') { + content = await serial.loadFile(filename) + content = content.replace(//g, ``) // XXX: Remove character that breaks execution + } + + if (state.selectedDevice === 'disk') { + content = await disk.loadFile(state.diskPath, filename) + } + + let editor = state.cache(AceEditor, 'editor').editor + editor.setValue(content) + + emitter.emit('render') + }) + emitter.on('open-folder', async () => { + log('open-folder') + let { folder, files } = await disk.openFolder() + state.diskPath = folder + state.diskFiles = files + if (!state.isFilesOpen) emitter.emit('show-files') + emitter.emit('render') + }) + emitter.on('update-files', async () => { + log('update-files') + if (state.isConnected) { + await serial.stop() + try { + state.serialFiles = await serial.listFiles() + state.serialFiles = state.serialFiles.filter( + f => f.indexOf('.') !== -1 // Only files with extensions + ) + state.serialFiles = state.serialFiles.filter( + f => f.indexOf('.') !== 0 // No dot files + ) + } catch (e) { + console.log('error', e) + } + } + if (state.diskPath) { + try { + state.diskFiles = await disk.listFiles(state.diskPath) + } catch (e) { + console.log('error', e) + } + } + emitter.emit('render') + }) + emitter.on('upload', async () => { + log('upload') + emitter.emit('message', 'Uploading file... Please wait') + await serial.uploadFile(state.diskPath, state.selectedFile) + emitter.emit('message', 'File uploaded!', 500) + emitter.emit('update-files') + emitter.emit('render') + }) + emitter.on('download', async () => { + log('download') + emitter.emit('message', 'Downloading file... Please wait') + await serial.downloadFile(state.diskPath, state.selectedFile) + emitter.emit('message', 'File downloaded!', 500) + emitter.emit('update-files') + emitter.emit('render') + }) + + // PANEL MANAGEMENT + emitter.on('show-terminal', () => { + log('show-terminal') + if (state.panelHeight === null) state.panelHeight = DEFAULT_PANEL_HEIGHT + state.isTerminalOpen = !state.isTerminalOpen + state.isFilesOpen = false + emitter.emit('render') + resizeEditor(state) + }) + emitter.on('show-files', () => { + log('show-files') + if (state.panelHeight === null) state.panelHeight = DEFAULT_PANEL_HEIGHT + state.isTerminalOpen = false + state.isFilesOpen = !state.isFilesOpen + emitter.emit('update-files') + emitter.emit('render') + resizeEditor(state) + }) + emitter.on('close-panel', () => { + log('close-panel') + state.isTerminalOpen = false + state.isFilesOpen = false + emitter.emit('render') + resizeEditor(state) + }) + emitter.on('start-resizing-panel', () => { + log('start-resizing-panel') + function handleMouseMove(e) { + let height = window.innerHeight - e.clientY + state.panelHeight = `${height}px` + emitter.emit('render') + resizeEditor(state) + } + window.addEventListener('mousemove', handleMouseMove) + window.addEventListener('mouseup', (e) => { + window.removeEventListener('mousemove', handleMouseMove) + }, { once: true }) + }) + + emitter.on('clean-terminal', () => { + state.cache(XTerm, 'terminal').term.clear() + }) + + // NAMING/RENAMING FILE + emitter.on('save-filename', async (filename) => { + log('save-filename', filename) + let oldFilename = state.selectedFile + state.selectedFile = filename + + let editor = state.cache(AceEditor, 'editor').editor + let contents = editor.getValue() + + if (state.selectedDevice === 'serial') { + if (state.serialFiles.indexOf(oldFilename) !== -1) { + // If old name exists, rename file + await serial.renameFile(oldFilename, filename) + } else { + // If old name doesn't exist create new file + await serial.saveFileContent(filename, contents) + } + } + + if (state.diskPath !== null && state.selectedDevice === 'disk') { + + if (state.diskFiles.indexOf(oldFilename) !== -1) { + // If old name exists, rename file + await disk.renameFile(state.diskPath, oldFilename, filename) + } else { + // If old name doesn't exist create new file + await disk.saveFileContent(state.diskPath, filename, contents) + } + } + + emitter.emit('update-files') + emitter.emit('render') + }) + + emitter.on('message', (text, timeout) => { + log('message', text) + state.messageText = text + state.isShowingMessage = true + if (timeout) { + clearInterval(state.messageTimeout) + state.messageTimeout = setTimeout(() => { + state.isShowingMessage = false + emitter.emit('render') + }, timeout) + } + emitter.emit('render') + }) + + window.addEventListener('resize', () => { + console.log('resize window') + state.cache(AceEditor, 'editor').render() + }) + +} diff --git a/ui/arduino/theme.css b/ui/arduino/theme.css new file mode 100644 index 0000000..e5e953d --- /dev/null +++ b/ui/arduino/theme.css @@ -0,0 +1,298 @@ +@import url('https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@400;700&display=swap'); + +:root { + --teal: #008184; + --white: rgb(255, 255, 255); + --white-faded: rgba(255, 255, 255, 0.8); + --black: #000; + --yellow: #f9c400; + font-size: 18px; +} + +* { + box-sizing: border-box; + font-family: 'Roboto Mono', monospace; +} + +body { + width: 100vw; + height: 100vh; + overflow: hidden; + position: relative; + font-family: monospace; + box-sizing: border-box; + margin: 0; + padding: 0; + font-size: 1rem; +} + +ul { + list-style: none; + margin: 0; + padding: 0; +} + +img { + max-width: 100%; + max-height: 100%; +} + +#app { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; +} + +/* TOOLBAR */ +#toolbar { + width: 100%; + display: flex; + flex-direction: row; + background: var(--teal); + padding: 0.5rem 0.5rem 0.75rem 0.5rem; +} + +.toolbar-button-wrapper { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + margin: 0 0.2rem; +} + +.toolbar-button-wrapper.selected .toolbar-button { + background: none; + box-shadow: 0 0 0 0.15rem var(--white); +} +.toolbar-button-wrapper.selected .toolbar-button img { + filter: invert(1); +} +.toolbar-button-wrapper.selected .toolbar-label { + font-weight: bold; +} +.toolbar-button-wrapper.disabled { + opacity: 0.5; + pointer-events: none; +} + +.toolbar-button { + border: none; + cursor: pointer !important; + align-items: center; + justify-content: center; + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin: 0.5rem; + width: 2.5rem; + height: 2.5rem; + border-radius: 100%; + background: var(--white-faded); +} + +.toolbar-button[disabled] { + pointer-events: none; + background: var(--white-faded); +} +.toolbar-button:hover, +.toolbar-button:active { + background: var(--white); +} + +.toolbar-button img { + width: 90%; + height: 90%; + margin-top: 0.1rem; +} + +.toolbar-label { + font-size: 0.75rem; + color: var(--white); +} + +.toolbar-spacing { + width: 1rem; +} + +/* PORT DIALOG */ +#backdrop { + display: flex; + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 99; + background: rgba(236, 241, 241, 0.5); +} +#dialog { + margin: auto; + width: 80%; + height: auto; + background: var(--white); + padding: 2rem; + font-size: 1.25rem; + box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12),0 1px 5px 0 rgba(0,0,0,0.2); +} +#dialog ul li { + padding: 0.5rem; + cursor: pointer; +} +#dialog ul li:hover { + background: var(--teal); + color: var(--white); + border-radius: 0.25rem; +} + +/* EDITOR */ +#editor { + height: 100%; + font-family: monospace; +} + +.editor-filename { + width: 100%; + display: flex; + flex-direction: row; + align-items: center; + font-size: 1rem; + background: var(--color-4); +} +.editor-filename img { + max-height: 100%; + padding: 0.5rem; +} +.editor-filename input { + width: 100%; + border: none; +} + +/* PANEL */ +#panel { + overflow: hidden; +} +#panel.open { + position: fixed; + bottom: 0; + left: 0; + right: 0; + height: 50%; + z-index: 99; +} +#panel #handle { + position: relative; + height: 2rem; + background: var(--teal); + cursor: n-resize; + display: flex; + flex-direction: row; + justify-content: flex-end; + align-items: center; +} + +#panel #handle .panel-button { + border: none; + cursor: pointer !important; + align-items: center; + justify-content: center; + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + width: 1.5rem; + height: 1.5rem; + line-height: 1rem; + background: var(--white-faded); + margin: 0 0.25rem; +} + +#terminal { + overflow: hidden; + width: 100vw; + height: 100%; + background: black; +} + +#files { + width: 100%; + height: calc(100% - 2rem); + background: var(--white); + display: flex; + flex-direction: row; + padding: 1rem; + overflow: hidden; +} + +#files .file-list { + width: 100%; + display: flex; + flex-direction: column; + padding: 1rem; + width: 45%; +} + +#files .file-list .path { + height: 2.5rem; + color: var(--black); + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +#files .toolbar-label { + color: var(--black); +} + +#files .file-list ul { + border: solid 0.1rem var(--teal); + width: 100%; + height: 100%; + padding: 0.5rem; + background: var(--white); + overflow-x: none; + overflow-y: scroll; +} +#files .file-list ul li { + padding: 0.5rem 1rem; + cursor: pointer; +} +#files .file-list ul li.selected { + background: var(--teal); + color: var(--white); +} +#files .file-list ul li:hover { + background: var(--teal); + color: var(--white); +} + +#files .file-controls { + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 10%; +} + +#message { + position: fixed; + bottom: 1rem; + width: 100%; + max-width: 80%; + padding: 1rem; + background: var(--yellow); + z-index: 9999; + text-align: center; + left: 50%; + transform: translate(-50%, 100%); + opacity: 0; + transition: all 0.25s; +} +#message.show { + opacity: 1; + transform: translate(-50%, 0%); +} diff --git a/ui/blank/app.js b/ui/blank/app.js deleted file mode 100644 index 20f29dd..0000000 --- a/ui/blank/app.js +++ /dev/null @@ -1,17 +0,0 @@ -function App(state, emit) { - return html` -
    - ${Toolbar(state, emit)} - ${Editor(state, emit)} - ${Panel(state, emit)} - ${state.isPortDialogOpen ? PortDialog(state, emit) : null} -
    - ` -} - -window.addEventListener('load', () => { - let app = Choo() - app.use(store); - app.route('*', App) - app.mount('#app') -}) diff --git a/ui/blank/components/buttons.js b/ui/blank/components/buttons.js deleted file mode 100644 index 1a6e83d..0000000 --- a/ui/blank/components/buttons.js +++ /dev/null @@ -1,26 +0,0 @@ -function Button(props, children) { - const { className = '', onclick = () => false, disabled = false } = props - return html` - ` -} - -function RoundButton(props, children) { - props.className += ' round' - return Button(props, children) -} - -function SquareButton(props, children) { - props.className += ' square' - return Button(props, children) -} - -function TinyButton(props, children) { - props.className += ' tiny' - return Button(props, children) -} diff --git a/ui/blank/components/editor.js b/ui/blank/components/editor.js deleted file mode 100644 index 2d5abcf..0000000 --- a/ui/blank/components/editor.js +++ /dev/null @@ -1,68 +0,0 @@ - -function Editor(state, emit) { - const diskIcon = Image({ src: 'icons/folder.png' }) - const serialIcon = Image({ src: 'icons/developer_board.png' }) - let icon = null - if (state.selectedDevice === 'serial') icon = serialIcon - if (state.selectedDevice === 'disk') icon = diskIcon - - let fileName = html` -
    emit('start-renaming-file')}> - ${state.selectedFile || 'untitled'} -
    - ` - if (state.renamingFile) { - let input = html` - emit('end-renaming-file', e.target.value)} - onblur=${(e) => emit('end-renaming-file', e.target.value)} - /> - ` - fileName = html` -
    emit('start-renaming-file')}> - ${input} -
    - ` - setTimeout(() => { - input.focus() - input.select() - }, 50) - } - - - return html` -
    -
    ${icon}
    - ${fileName} -
    - ${state.cache(AceEditor, 'editor').render()} - ` -} - -class AceEditor extends Component { - constructor() { - super() - this.editor = null - } - - load(element) { - this.editor = ace.edit("editor") - this.editor.setFontSize(14) - this.editor.setTheme("ace/theme/github") - this.editor.session.setMode("ace/mode/python") - } - - createElement(content) { - return html`
    ` - } - - update(newContent) { - if (newContent) { - this.editor.setValue(newContent) - } - return false - } -} diff --git a/ui/blank/components/filebrowser.js b/ui/blank/components/filebrowser.js deleted file mode 100644 index b5cca16..0000000 --- a/ui/blank/components/filebrowser.js +++ /dev/null @@ -1,81 +0,0 @@ -function FileBrowser(state, emit) { - function BoardFile(file) { - let selectedClass = '' - if (state.selectedDevice === 'board' && state.selectedFile === file) { - selectedClass = 'selected' - } - return html` -
  • emit('select-board-file', file)} - > - ${file} -
  • - ` - } - function DiskFile(file) { - let selectedClass = '' - if (state.selectedDevice === 'disk' && state.selectedFile === file) { - selectedClass = 'selected' - } - return html` -
  • emit('select-disk-file', file)} - > - ${file} -
  • - ` - } - - let canSendToBoard = state.selectedDevice === 'disk' - && state.connected === true - && state.selectedFile - && state.diskFolder - let canSendToDisk = state.selectedDevice === 'board' - && state.connected === true - && state.selectedFile - && state.diskFolder - - let sendToBoardButton = SquareButton( - { - onclick: () => emit('send-file-to-board'), - disabled: !canSendToBoard - }, - Image({src: 'icons/left.png'}) - ) - let sendToDiskButton = SquareButton( - { - onclick: () => emit('send-file-to-disk'), - disabled: !canSendToDisk - }, - Image({src: 'icons/right.png'}) - ) - let removeButton = SquareButton( - { - onclick: () => emit('remove-file'), - disabled: !state.selectedFile - }, - Image({src: 'icons/delete.png'}) - ) - - return html` -
    -
    -
      - ${state.boardFiles.map(BoardFile)} -
    -
    -
    - ${sendToBoardButton} - ${sendToDiskButton} - ${removeButton} -
    -
    -
      - ${state.diskFiles.map(DiskFile)} -
    -
    -
    - ` -} diff --git a/ui/blank/components/image.js b/ui/blank/components/image.js deleted file mode 100644 index a95a1f7..0000000 --- a/ui/blank/components/image.js +++ /dev/null @@ -1,4 +0,0 @@ -function Image(props) { - let { src } = props - return html`` -} diff --git a/ui/blank/components/panel.js b/ui/blank/components/panel.js deleted file mode 100644 index 0711906..0000000 --- a/ui/blank/components/panel.js +++ /dev/null @@ -1,83 +0,0 @@ -function Panel(state, emit) { - let isTerminalSelected = (state.panel === 'terminal') && !state.panelCollapsed - let isFilesSelected = (state.panel === 'files') && !state.panelCollapsed - - // Dragging event handlers - function onMouseDown(e) { - if (e.target.id !== 'bar') return - window.addEventListener('mousemove', onMouseMove) - window.addEventListener('mouseup', onMouseUp, { once: true }) - } - function onMouseMove(e) { - emit('resize-panel', e.clientY) - } - function onMouseUp(e) { - window.removeEventListener('mousemove', onMouseMove) - } - - // Panel selection handlers - function togglePanel() { - emit('toggle-panel') - } - function selectFiles() { - if (state.panel === 'files') { - emit('toggle-panel') - } else { - if (state.panelCollapsed) { - emit('toggle-panel') - } - emit('select-panel', 'files') - } - } - function selectTerminal() { - if (state.panel === 'terminal') { - emit('toggle-panel') - } else { - if (state.panelCollapsed) { - emit('toggle-panel') - } - emit('select-panel', 'terminal') - } - } - - // Bar buttons - let fileButton = SquareButton( - { onclick: selectFiles, className: isFilesSelected ? 'active' : 'inactive'}, - Image({ src: 'icons/folder.png' }) - ) - let terminalButton = SquareButton( - { onclick: selectTerminal , className: isTerminalSelected ? 'active' : 'inactive' }, - Image( { src: 'icons/developer_board.png' } ) - ) - - let panelHeight = state.panelCollapsed ? 0 : state.panelHeight - let background = isTerminalSelected ? 'black' : 'gray' - - if (state.panelCollapsed) { - return html` -
    - ${fileButton} - ${terminalButton} -
    - ` - } else { - return html` -
    - ${fileButton} - ${terminalButton} -
    -
    - ${isTerminalSelected ? state.cache(XTerm, 'terminal').render() : null} - ${isFilesSelected ? FileBrowser(state, emit) : null} -
    - ` - } -} diff --git a/ui/blank/components/toolbar.js b/ui/blank/components/toolbar.js deleted file mode 100644 index 21166dd..0000000 --- a/ui/blank/components/toolbar.js +++ /dev/null @@ -1,51 +0,0 @@ -function Toolbar(state, emit) { - const runButton = RoundButton( - { onclick: () => emit('run'), disabled: !state.connected }, - Image({src: 'icons/play_arrow.png'}) - ) - const stopButton = RoundButton( - { onclick: () => emit('stop'), disabled: !state.connected }, - Image({src: 'icons/stop.png'}) - ) - const resetButton = RoundButton( - { onclick: () => emit('reset'), disabled: !state.connected }, - Image({src: 'icons/reset.png'}) - ) - const connectButton = RoundButton( - { onclick: () => emit('open-port-dialog') }, - Image({src: 'icons/cable.png'}) - ) - - const newButton = RoundButton( - { onclick: () => emit('new-file') }, - Image({src: 'icons/add.png'}) - ) - const openFolderButton = RoundButton( - { onclick: () => emit('open-disk-folder') }, - Image({src: 'icons/folder.png'}) - ) - const canSave = (state.selectedDevice === 'board' && state.connected) - || (state.selectedDevice === 'disk' && state.diskFolder) - const saveButton = RoundButton( - { onclick: () => emit('save-file'), disabled: !canSave }, - Image({ src: 'icons/sd_storage.png' }) - ) - - return html` -
    -
    - ${runButton} - ${stopButton} - ${resetButton} -
    -
    - ${newButton} - ${openFolderButton} - ${saveButton} -
    -
    - ${connectButton} -
    -
    - ` -} diff --git a/ui/blank/icons/add.png b/ui/blank/icons/add.png deleted file mode 100644 index 9de6c70..0000000 Binary files a/ui/blank/icons/add.png and /dev/null differ diff --git a/ui/blank/icons/cable.png b/ui/blank/icons/cable.png deleted file mode 100644 index 46837eb..0000000 Binary files a/ui/blank/icons/cable.png and /dev/null differ diff --git a/ui/blank/icons/delete.png b/ui/blank/icons/delete.png deleted file mode 100644 index 4bd2c00..0000000 Binary files a/ui/blank/icons/delete.png and /dev/null differ diff --git a/ui/blank/icons/developer_board.png b/ui/blank/icons/developer_board.png deleted file mode 100644 index be5a101..0000000 Binary files a/ui/blank/icons/developer_board.png and /dev/null differ diff --git a/ui/blank/icons/edit.png b/ui/blank/icons/edit.png deleted file mode 100644 index 7ab2f91..0000000 Binary files a/ui/blank/icons/edit.png and /dev/null differ diff --git a/ui/blank/icons/folder.png b/ui/blank/icons/folder.png deleted file mode 100644 index b523b3f..0000000 Binary files a/ui/blank/icons/folder.png and /dev/null differ diff --git a/ui/blank/icons/left.png b/ui/blank/icons/left.png deleted file mode 100644 index a8e9622..0000000 Binary files a/ui/blank/icons/left.png and /dev/null differ diff --git a/ui/blank/icons/play_arrow.png b/ui/blank/icons/play_arrow.png deleted file mode 100644 index 7e8210c..0000000 Binary files a/ui/blank/icons/play_arrow.png and /dev/null differ diff --git a/ui/blank/icons/reset.png b/ui/blank/icons/reset.png deleted file mode 100644 index fb36510..0000000 Binary files a/ui/blank/icons/reset.png and /dev/null differ diff --git a/ui/blank/icons/right.png b/ui/blank/icons/right.png deleted file mode 100644 index 7d2996e..0000000 Binary files a/ui/blank/icons/right.png and /dev/null differ diff --git a/ui/blank/icons/sd_storage.png b/ui/blank/icons/sd_storage.png deleted file mode 100644 index e53111d..0000000 Binary files a/ui/blank/icons/sd_storage.png and /dev/null differ diff --git a/ui/blank/icons/sim_card.png b/ui/blank/icons/sim_card.png deleted file mode 100644 index 08f8ddd..0000000 Binary files a/ui/blank/icons/sim_card.png and /dev/null differ diff --git a/ui/blank/icons/stop.png b/ui/blank/icons/stop.png deleted file mode 100644 index f933a89..0000000 Binary files a/ui/blank/icons/stop.png and /dev/null differ diff --git a/ui/blank/index.html b/ui/blank/index.html deleted file mode 100644 index f0c8252..0000000 --- a/ui/blank/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - Arduino MicroPython Lab - - - - - - - - - - - - - - - - - - - - - - -
    - - diff --git a/ui/blank/package.json b/ui/blank/package.json deleted file mode 100644 index d95699c..0000000 --- a/ui/blank/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "blank", - "version": "1.0.0", - "description": "", - "main": "app.js", - "scripts": { - "build-lib": "browserify build_lib.js > lib" - }, - "author": "", - "license": "ISC", - "dependencies": { - "browserify": "^17.0.0", - "choo": "^7.1.0" - } -} diff --git a/ui/blank/store.js b/ui/blank/store.js deleted file mode 100644 index 8ea4e0f..0000000 --- a/ui/blank/store.js +++ /dev/null @@ -1,324 +0,0 @@ -function store(state, emitter) { - state.connected = false - state.executing = false - - state.isPortDialogOpen = false - state.ports = [] - state.panel = 'terminal' // terminal | files - state.panelHeight = 200 - state.panelCollapsed = true - - state.selectedFile = null - state.selectedDevice = 'disk' // disk | board - state.diskFolder = null - state.renamingFile = false - - state.diskFiles = [] - state.boardFiles = [] - - emitter.on('open-port-dialog', () => { - console.log('open-port-dialog') - if (state.connected) { - window.serialBus.emit('disconnect') - } - window.serialBus.emit('load-ports') - state.isPortDialogOpen = true - emitter.emit('render') - }) - emitter.on('close-port-dialog', () => { - console.log('close-port-dialog') - state.isPortDialogOpen = false - emitter.emit('render') - }) - emitter.on('toggle-port-dialog', () => { - console.log('toggle-port-dialog') - state.isPortDialogOpen = !state.isPortDialogOpen - emitter.emit('render') - }) - emitter.on('connect', (port) => { - console.log('connect', port) - window.serialBus.emit('connect', port.path) - }) - emitter.on('resize-panel', (clientY) => { - console.log('resize-panel') - // Get DOM references - let bar = document.querySelector('#bar') - // Get current bar size - let barBounds = bar.getBoundingClientRect() - state.panelHeight = Math.max( - window.innerHeight - clientY - (barBounds.height*0.5), - barBounds.height - ) - emitter.emit('render') - }) - emitter.on('select-panel', (panel) => { - console.log('select-panel', panel) - state.panel = panel - if (state.panel === 'files') { - emitter.emit('update-files') - } - emitter.emit('render') - }) - emitter.on('toggle-panel', () => { - console.log('toggle-panel') - state.panelCollapsed = !state.panelCollapsed - emitter.emit('render') - }) - emitter.on('terminal-input', (k) => { - if (state.connected) { - window.serialBus.emit('write', k) - } - }) - emitter.on('run', () => { - console.log('run') - let editor = state.cache(AceEditor, 'editor').editor - state.panelCollapsed = false - state.panel = 'terminal' - emitter.emit('render') - window.serialBus.emit('run', editor.getValue()) - }) - emitter.on('stop', () => { - console.log('stop') - state.panelCollapsed = false - state.panel = 'terminal' - emitter.emit('render') - window.serialBus.emit('stop') - }) - emitter.on('reset', () => { - console.log('reset') - state.panelCollapsed = false - state.panel = 'terminal' - emitter.emit('render') - window.serialBus.emit('reset') - }) - - emitter.on('list-board-folder', () => { - console.log('list-board-folder') - let outputBuffer = '' - function parseData(o) { - outputBuffer += o - rawMessage = extractREPLMessage(outputBuffer) - if (rawMessage) { - // console.log('raw message', rawMessage, outputBuffer) - // Prepare to parse JSON - rawMessage = rawMessage.replace(/'/g, `"`) - try { - let jsonMessage = JSON.parse(rawMessage) - state.boardFiles = jsonMessage - emitter.emit('render') - } catch(e) {} - window.serialBus.off('data', parseData) - } - } - window.serialBus.on('data', parseData) - window.serialBus.emit('list-files') - }) - emitter.on('select-board-file', (file) => { - console.log('select-board-file') - - state.selectedDevice = 'board' - state.selectedFile = file - - let outputBuffer = '' - function parseData(o) { - outputBuffer += o - rawMessage = extractREPLMessage(outputBuffer) - if (rawMessage) { - state.cache(AceEditor, 'editor').editor.setValue(rawMessage) - window.serialBus.off('data', parseData) - } - } - window.serialBus.on('data', parseData) - window.serialBus.emit('load-file', file) - emitter.emit('render') - }) - - emitter.on('open-disk-folder', () => { - window.diskBus.emit('open-folder') - }) - emitter.on('select-disk-file', (file) => { - console.log('select-disk-file', file) - state.selectedDevice = 'disk' - state.selectedFile = file - window.diskBus.emit( - 'load-file', - { - folder: state.diskFolder, - filename: state.selectedFile - } - ) - emitter.emit('render') - }) - - emitter.on('save-file', () => { - console.log('save-file') - let editor = state.cache(AceEditor, 'editor').editor - - // If no filename is given, defaults to untitled - if (!state.selectedFile) { - state.selectedFile = 'untitled' - } - - if (state.selectedDevice === 'disk') { - window.diskBus.emit( 'save-file', { - folder: state.diskFolder, - filename: state.selectedFile, - content: editor.getValue() - }) - } - - if (state.selectedDevice === 'board') { - window.serialBus.emit('save-file', state.selectedFile, editor.getValue()) - } - }) - emitter.on('remove-file', () => { - console.log('remove-file') - if (state.selectedDevice === 'disk') { - window.diskBus.emit( - 'remove-file', - { - folder: state.diskFolder, - filename: state.selectedFile - } - ) - } - - if (state.selectedDevice === 'board') { - window.serialBus.emit('remove-file', state.selectedFile) - state.selectedFile = null - setTimeout(() => emitter.emit('list-board-folder'), 100) - } - }) - emitter.on('new-file', () => { - console.log('new-file') - state.selectedFile = null - state.cache(AceEditor, 'editor').editor.setValue('') - emitter.emit('render') - }) - emitter.on('update-files', () => { - if (state.connected) emitter.emit('list-board-folder') - if (state.diskFolder) window.diskBus.emit('update-folder', state.diskFolder) - }) - - emitter.on('start-renaming-file', () => { - console.log('start-renaming-file') - state.renamingFile = true - emitter.emit('render') - }) - emitter.on('end-renaming-file', (filename) => { - console.log('end-renaming-file', filename) - if (state.selectedDevice === 'disk') { - window.diskBus.emit( - 'rename-file', - { - folder: state.diskFolder, - filename: state.selectedFile, - newFilename: filename - } - ) - } - if (state.selectedDevice === 'board') { - window.serialBus.emit('rename-file', state.selectedFile, filename) - state.selectedFile = filename - state.renamingFile = false - emitter.emit('render') - setTimeout(() => emitter.emit('update-files'), 100) - } - - }) - - emitter.on('send-file-to-disk', () => { - console.log('send-file-to-disk') - let editor = state.cache(AceEditor, 'editor').editor - window.diskBus.emit( - 'save-file', - { - folder: state.diskFolder, - filename: state.selectedFile, - content: editor.getValue() - } - ) - emitter.emit('update-files') - }) - emitter.on('send-file-to-board', () => { - console.log('send-file-to-board') - let editor = state.cache(AceEditor, 'editor').editor - window.serialBus.emit('save-file', state.selectedFile, editor.getValue()) - }) - - window.serialBus.on('connected', (port) => { - console.log('serialBus', 'connected', port) - state.connected = true - state.panelCollapsed = false - emitter.emit('close-port-dialog') - emitter.emit('list-board-folder') - emitter.emit('render') - }) - window.serialBus.on('ports', (ports) => { - console.log('serialBus', 'ports', ports) - state.ports = ports - emitter.emit('render') - }) - window.serialBus.on('data', (data) => { - let buffer = Buffer.from(data) - state.cache(XTerm, 'terminal').term.write(buffer) - state.cache(XTerm, 'terminal').term.scrollToBottom() - }) - window.serialBus.on('file-saved', () => { - setTimeout(() => emitter.emit('update-files'), 100) - }) - - window.diskBus.on('folder-opened', ({ folder, files }) => { - console.log('diskBus', 'folder-opened', folder, files) - state.diskFiles = files - state.diskFolder = folder - state.selectedDevice = 'disk' - state.panelCollapsed = false - emitter.emit('select-panel', 'files') - }) - window.diskBus.on('folder-updated', ({ folder, files }) => { - state.diskFiles = files - emitter.emit('render') - }) - window.diskBus.on('file-loaded', (fileContent) => { - console.log('diskBus', 'file-loaded', fileContent) - let code = new TextDecoder().decode(fileContent) - state.cache(AceEditor, 'editor').editor.setValue(code) - }) - window.diskBus.on('file-saved', () => { - console.log('diskBus', 'file-saved') - window.diskBus.emit('update-folder', state.diskFolder) - }) - window.diskBus.on('file-removed', () => { - console.log('diskBus', 'file-removed') - state.selectedFile = null - state.cache(AceEditor, 'editor').editor.setValue('') - window.diskBus.emit('update-folder', state.diskFolder) - }) - window.diskBus.on('file-renamed', (filename) => { - state.renamingFile = false - state.selectedFile = filename - if (state.diskFolder) { - window.diskBus.emit('update-folder', state.diskFolder) - } else { - emitter.emit('render') - } - }) -} - -/* - * This function extracts the raw content between and - * Returns false if and are not found - */ -function extractREPLMessage(buffer) { - let beginIndex = buffer.lastIndexOf('') - let endIndex = buffer.lastIndexOf('') - if (beginIndex !== -1 && endIndex !== -1) { - return buffer.substring( - beginIndex + ('').length, - endIndex - ) - } else { - return false - } -} diff --git a/ui/blank/theme.css b/ui/blank/theme.css deleted file mode 100644 index 261eff7..0000000 --- a/ui/blank/theme.css +++ /dev/null @@ -1,262 +0,0 @@ -:root { - --color-0: #000000; - --color-1: #DFDFDF; - --color-2: #F0F0F0; - --color-3: #FFFFFF; - font-size: 2vh; -} - -* { - box-sizing: border-box; -} - -body { - width: 100vw; - height: 100vh; - overflow: hidden; - position: relative; - display: flex; - font-family: monospace; - box-sizing: border-box; - margin: 0; - padding: 0; - font-size: 1rem; -} - -ul { - list-style: none; - margin: 0; - padding: 0; -} - -img { - max-width: 100%; - max-height: 100%; -} - -.row { - display: flex; - flex-direction: row; -} - -.column { - display: flex; - flex-direction: column; -} - -.fill { - width: 100%; - height: 100%; -} -.fill-vertical { - height: 100%; -} -.fill-horizontal { - width: 100%; -} - -.align-start { - align-items: flex-start; -} -.align-end { - align-items: flex-end; -} -.align-center { - align-items: center; -} -.justify-start { - justify-content: flex-start; -} -.justify-end { - justify-content: flex-end; -} -.justify-center { - justify-content: center; -} - -.hidden { - display: none !important; -} - -.black { - background: var(--color-0); - color: var(--color-3); -} -.gray { - background: var(--color-1); -} -.lightgray { - background: var(--color-2); -} -.white { - background: var(--color-3); -} - -button { - border: none; - background: var(--color-3); - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12),0 1px 5px 0 rgba(0,0,0,0.2); - cursor: pointer !important; - align-items: center; - justify-content: center; - outline: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - margin: 0; - padding: 0.25rem; -} -button[disabled] { - opacity: 0.5; - pointer-events: none; - box-shadow: none; -} -button:active { - box-shadow: none; - background: var(--color-3); -} -button.active { - background: var(--color-3); -} -button.inactive { - background: var(--color-1); - box-shadow: none; -} -button img { - max-width: 60%; - max-height: 60%; -} - -button.round { - width: 3.5rem; - height: 3.5rem; - border-radius: 100%; -} -button.square { - width: 2rem; - height: 2rem; -} -button.tiny { - width: 1rem; - height: 1rem; - font-size: 0.75rem; -} - -#app { - width: 100%; - height: 100%; -} - -#toolbar { - padding: 1rem 0.5rem; -} -#toolbar button { - margin: 0 0.5rem; -} - -#file-header { - padding: 0.5rem 1rem; -} -#file-header .device-icon { - width: 1.5rem; - height: 1.5rem; -} -#file-header .file-name { - padding: 0 1rem; - width: 100%; - height: 100%; - cursor: pointer; -} - -#file-header input { - border: none; - outline: none; - font-family: monospace; - font-size: 1rem; - height: 100%; - width: 100%; -} - -#bar { - height: 3rem; - padding: 0.5rem; -} -#bar.disabled { - cursor: auto; -} -#bar button { - margin: 0 0.25rem; -} -#bar.resizable { - cursor: row-resize; -} - -#terminal { - border: solid 0.2rem var(--color-1); -} - -#board-files, -#system-files { - background: var(--color-1); - padding: 0 1rem 1.0rem 1.0rem; -} -#board-files ul, -#system-files ul { - padding: 0.25rem 1.0rem; -} - -#files ul { - overflow-x: hidden; - overflow-y: scroll; -} -#files ul li { - cursor: pointer; - padding: 0.25rem 0; -} -#files ul li:hover { - background: var(--color-2); -} -#files ul li.selected { - background: var(--color-1); -} - -#file-actions { - width: 5rem; -} -#file-actions button { - margin: 0.25rem 0; -} - -#backdrop { - display: flex; - position: fixed; - top: 0; - bottom: 0; - left: 0; - right: 0; - z-index: 99; - background: rgba(255, 255, 255, 0.5); -} -#dialog { - margin: auto; - width: 80%; - height: auto; - background: var(--color-3); - padding: 2rem; - font-size: 1.25rem; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12),0 1px 5px 0 rgba(0,0,0,0.2); -} -#dialog ul li { - padding: 0.5rem; - cursor: pointer; -} -#dialog ul li:hover { - background: var(--color-1); - border-radius: 0.25rem; -} - -#terminal { - padding: 0.5rem 1rem; - overflow: hidden; -}