From 013ad881d30fad3b0cc6a79193e6fb2d763a09ab Mon Sep 17 00:00:00 2001 From: grey Date: Thu, 18 Aug 2022 22:00:24 +0200 Subject: [PATCH] - add gui electron application ! sometimes the tray icon does not open it's context menu --- README.MD | 4 +- electronAssets/background.svg | 2 + electronAssets/index2.html | 222 +++++ electronAssets/window.js | 33 + electronAssets/windowPreload.js | 12 + index.js | 7 +- log-journal.json | 2 +- newStartHandler.js | 191 ++++ package-lock.json | 1643 ++++++++++++++++++++++++++++++- package.json | 9 +- static/logo/faviconLogo.png | Bin 0 -> 38708 bytes 11 files changed, 2115 insertions(+), 10 deletions(-) create mode 100644 electronAssets/background.svg create mode 100644 electronAssets/index2.html create mode 100644 electronAssets/window.js create mode 100644 electronAssets/windowPreload.js create mode 100644 newStartHandler.js create mode 100644 static/logo/faviconLogo.png diff --git a/README.MD b/README.MD index 9534b0c..b41510c 100644 --- a/README.MD +++ b/README.MD @@ -11,8 +11,10 @@ You can download complete binaries from the release tab. ## Development build 1. Download the repository 2. `npm install` to install dependecies -3. `node index.js` to launch +3. `npm start` to launch +### Startup Arguments +One can pass a `--headless` argument to start the server in headless mode. This will disable the GUI. ## Packaging This is more a comment for the future version of me. There is one command for packaging using nexe. ```bash diff --git a/electronAssets/background.svg b/electronAssets/background.svg new file mode 100644 index 0000000..3811343 --- /dev/null +++ b/electronAssets/background.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/electronAssets/index2.html b/electronAssets/index2.html new file mode 100644 index 0000000..1f52218 --- /dev/null +++ b/electronAssets/index2.html @@ -0,0 +1,222 @@ + + + + + openCountdown + + + + +
+
+ +
model_text (version_etc)
+
+
+

Status

+
URL
+
+
+

+

+ + +

+
+ + + +
+
+
+ + + \ No newline at end of file diff --git a/electronAssets/window.js b/electronAssets/window.js new file mode 100644 index 0000000..91a4f34 --- /dev/null +++ b/electronAssets/window.js @@ -0,0 +1,33 @@ +document.getElementById('launch').addEventListener('click', function () { + api.send('skeleton-launch-gui') +}) + +document.getElementById('hide').addEventListener('click', function () { + api.send('skeleton-minimize') +}) + +document.getElementById('close').addEventListener('click', function () { + api.send('skeleton-close') +}) + +api.receive('info', function (info) { + document.getElementById('status').innerHTML = info.appStatus + document.getElementById('url').innerHTML = info.appURL + document.getElementById('model').innerHTML = `${info.appName}` + document.getElementById('ift').checked = info.startMinimised + document.getElementById('ifp').value = configObject.port + document.title = info.appName +}) +api.send('info') + +document.getElementById('ifpb').addEventListener('click', function () { + var e = document.getElementById('ifp') + api.send('skeleton-bind-port', e.value) +}) + +document.getElementById('ift').addEventListener('click', function () { + var e = document.getElementById('ift') + api.send('skeleton-start-minimised', e.checked) +}) + +api.send('skeleton-ready') \ No newline at end of file diff --git a/electronAssets/windowPreload.js b/electronAssets/windowPreload.js new file mode 100644 index 0000000..6a5ea2b --- /dev/null +++ b/electronAssets/windowPreload.js @@ -0,0 +1,12 @@ +const { contextBridge, ipcRenderer } = require('electron') + +contextBridge.exposeInMainWorld('api', { + send: (channel, data) => { + // whitelist channels + ipcRenderer.send(channel, data) + }, + receive: (channel, func) => { + // Deliberately strip event as it includes `sender` + ipcRenderer.on(channel, (event, ...args) => func(...args)) + }, +}) \ No newline at end of file diff --git a/index.js b/index.js index ceadaa5..0aefbe7 100644 --- a/index.js +++ b/index.js @@ -73,11 +73,12 @@ currentState = { srvTime: 0, enableColoredText: true, debug: false, - sessionToken: Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15) + sessionToken: Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15), }; let configObject = { - language: "en_uk" + language: "en_uk", + port: 3000 } if(!fs.existsSync("config.json")) { fs.writeFileSync("config.json", "{}"); @@ -463,7 +464,7 @@ app.use(function (req, res, next) { loggy.log("Starting server", "info", "Server"); -const port = 3006; +const port = configObject.port; process.on('SIGINT', function () { loggy.log("Caught interrupt signal and shutting down gracefully", "info", "Shutdown"); diff --git a/log-journal.json b/log-journal.json index f20cc2a..0fbdfd7 100644 --- a/log-journal.json +++ b/log-journal.json @@ -1 +1 @@ -[{"timestamp":"2022-08-18 16:11:01.607","level":"info","module":"Logging","message":"2022-08-18 16:11:01.607 [info] [Logging] Logging initialized"},{"timestamp":"2022-08-18 16:11:01.608","level":"info","module":"Server","message":"2022-08-18 16:11:01.608 [info] [Server] Preparing server"},{"timestamp":"2022-08-18 16:11:01.609","level":"info","module":"Server","message":"2022-08-18 16:11:01.609 [info] [Server] Preparing static routes"},{"timestamp":"2022-08-18 16:11:01.610","level":"info","module":"Server","message":"2022-08-18 16:11:01.610 [info] [Server] Preparing middlewares"},{"timestamp":"2022-08-18 16:11:01.611","level":"info","module":"Config","message":"2022-08-18 16:11:01.611 [info] [Config] Loading config"},{"timestamp":"2022-08-18 16:11:01.612","level":"info","module":"Language","message":"2022-08-18 16:11:01.612 [info] [Language] Searching for languages"},{"timestamp":"2022-08-18 16:11:01.612","level":"info","module":"Language","message":"2022-08-18 16:11:01.612 [info] [Language] Found 3 languages"},{"timestamp":"2022-08-18 16:11:01.612","level":"info","module":"Language","message":"2022-08-18 16:11:01.612 [info] [Language] Reading language file"},{"timestamp":"2022-08-18 16:11:01.612","level":"info","module":"Websocket","message":"2022-08-18 16:11:01.612 [info] [Websocket] Preparing websocket"},{"timestamp":"2022-08-18 16:11:01.613","level":"info","module":"Server","message":"2022-08-18 16:11:01.613 [info] [Server] Preparing routes"},{"timestamp":"2022-08-18 16:11:01.614","level":"info","module":"Server","message":"2022-08-18 16:11:01.614 [info] [Server] Starting server"},{"timestamp":"2022-08-18 16:13:27.222","level":"error","module":"Security","message":"2022-08-18 16:13:27.222 [error] [Security] Attempt to access restricted asset file mdbootstrap/js/mdb.min.js"},{"timestamp":"2022-08-18 16:13:27.674","level":"error","module":"Security","message":"2022-08-18 16:13:27.674 [error] [Security] Attempt to access restricted asset file mdbootstrap/js/mdb.min.js"},{"timestamp":"2022-08-18 16:13:46.931","level":"info","module":"Shutdown","message":"2022-08-18 16:13:46.931 [info] [Shutdown] Caught interrupt signal and shutting down gracefully"}] \ No newline at end of file +[{"timestamp":"2022-08-18 16:19:06.649","level":"info","module":"Logging","message":"2022-08-18 16:19:06.649 [info] [Logging] Logging initialized"},{"timestamp":"2022-08-18 16:19:06.651","level":"info","module":"Server","message":"2022-08-18 16:19:06.651 [info] [Server] Preparing server"},{"timestamp":"2022-08-18 16:19:06.652","level":"info","module":"Server","message":"2022-08-18 16:19:06.652 [info] [Server] Preparing static routes"},{"timestamp":"2022-08-18 16:19:06.654","level":"info","module":"Server","message":"2022-08-18 16:19:06.654 [info] [Server] Preparing middlewares"},{"timestamp":"2022-08-18 16:19:06.655","level":"info","module":"Config","message":"2022-08-18 16:19:06.655 [info] [Config] Loading config"},{"timestamp":"2022-08-18 16:19:06.658","level":"info","module":"Language","message":"2022-08-18 16:19:06.658 [info] [Language] Searching for languages"},{"timestamp":"2022-08-18 16:19:06.659","level":"info","module":"Language","message":"2022-08-18 16:19:06.659 [info] [Language] Found 3 languages"},{"timestamp":"2022-08-18 16:19:06.659","level":"info","module":"Language","message":"2022-08-18 16:19:06.659 [info] [Language] Reading language file"},{"timestamp":"2022-08-18 16:19:06.675","level":"info","module":"Websocket","message":"2022-08-18 16:19:06.675 [info] [Websocket] Preparing websocket"},{"timestamp":"2022-08-18 16:19:06.675","level":"info","module":"Server","message":"2022-08-18 16:19:06.675 [info] [Server] Preparing routes"},{"timestamp":"2022-08-18 16:19:06.678","level":"info","module":"Server","message":"2022-08-18 16:19:06.678 [info] [Server] Starting server"},{"timestamp":"2022-08-18 16:22:57.338","level":"info","module":"Shutdown","message":"2022-08-18 16:22:57.338 [info] [Shutdown] Caught interrupt signal and shutting down gracefully"}] \ No newline at end of file diff --git a/newStartHandler.js b/newStartHandler.js new file mode 100644 index 0000000..a4001bb --- /dev/null +++ b/newStartHandler.js @@ -0,0 +1,191 @@ +const { app, BrowserWindow, ipcMain, Tray, Menu, nativeImage, MenuItem, dialog } = require('electron') +const path = require('path') +const fs = require('fs') +const _ = require("underscore") +const open = require('open'); +const childProcess = require('child_process'); + +const packageJson = JSON.parse(fs.readFileSync("package.json")) + +// a minimal config +let configObject = { + language: "en_uk", + startMinimised: false, + port: 3000 +} +if (!fs.existsSync("config.json")) { + fs.writeFileSync("config.json", "{}"); +} +const tempJsonText = JSON.parse(fs.readFileSync("config.json", "utf8")); +configObject = _.extend(configObject, tempJsonText); +fs.writeFileSync("config.json", JSON.stringify(configObject)); + +const processArgs = process.argv; +// Check if --headless is passed as an argument +if (processArgs.includes("--headless")) { + startServer() + +} else { + // Start electron + app.whenReady().then(() => { + startServer() + createTray() + createWindow() + }) + + ipcMain.on('info', function () { + if (win) { + win.webContents.send('info', { "appStatus": "Testing", "appURL": "http://127.0.0.1:" + configObject.port, "appName": "openCountdown " + packageJson.version, "startMinimised": configObject.startMinimised, "port": configObject.port }) + } + }) + + ipcMain.on('skeleton-close', function (req, cb) { + trayQuit() + }) + + ipcMain.on('skeleton-minimize', function (req, cb) { + win.hide() + }) + + ipcMain.on('skeleton-launch-gui', function () { + launchUI() + }) + + ipcMain.on('skeleton-start-minimised', function (e, msg) { + configObject.startMinimised = msg + fs.writeFileSync("config.json", JSON.stringify(configObject)); + }) + + ipcMain.on('skeleton-bind-port', function (e, msg) { + configObject.port = msg + console.log("Update port") + fs.writeFileSync("config.json", JSON.stringify(configObject)); + dialog.showMessageBoxSync({ + message: "Port changed. Restart openCountdown to apply change.", + buttons: ["OK"]}) + }) +} + +var win, tray = null; + + +const createWindow = () => { + win = new BrowserWindow({ + width: 370, + height: 500, + transparent: true, + frame: false, + resizable: false, + icon: path.join(__dirname, 'static/logo/faviconLogo.svg'), + webPreferences: { + pageVisibility: true, + nodeIntegration: true, + contextIsolation: true, + preload: path.join(__dirname, 'electronAssets/windowPreload.js'), + } + }) + + + + + win.loadFile('electronAssets/index2.html') + if (configObject.startMinimised) { + win.hide() + } +} + +function createTray() { + tray = new Tray('static/logo/faviconLogo.png') + tray.setIgnoreDoubleClickEvents(true) + + const menu = new Menu() + menu.append( + new MenuItem({ + label: 'Show window', + click: showScreen, + }) + ) + menu.append( + new MenuItem({ + label: 'Launch GUI', + click: launchUI, + }) + ) + menu.append( + new MenuItem({ + label: 'Quit', + accelerator: 'Command+Q', + click: trayQuit, + }) + ) + + tray.setToolTip('openCountdown ' + packageJson.version) + tray.setContextMenu(menu) + + tray.on('click', function (e) { + if (win.isVisible()) { + win.hide() + } else { + win.show() + } + }); +} + +function showScreen(){ + win.show() +} + +function launchUI(){ + open("http://127.0.0.1:" + configObject.port) +} + +function trayQuit(){ + let options = { + buttons: ["Yes","No"], + message: "Do you really want to quit openCountdown?" + } + let response = dialog.showMessageBoxSync(options) + if(response == 0){ + srvProc.kill("SIGINT") + setTimeout(app.quit, 1000) + } +} + + +// taken from https://stackoverflow.com/a/22649812/11317151 +function runScript(scriptPath, callback, valueCb) { + + // keep track of whether callback has been invoked to prevent multiple invocations + var invoked = false; + + var process = childProcess.fork(scriptPath); + + valueCb(process) + // listen for errors as they may prevent the exit event from firing + process.on('error', function (err) { + if (invoked) return; + invoked = true; + callback(err); + }); + // execute the callback once the process has finished running + process.on('exit', function (code) { + if (invoked) return; + invoked = true; + // var err = code === 0 ? null : new Error('exit code ' + code); + callback(code); + }); + + +} + +srvProc = null; + +function setServer(process){ + srvProc = process +} + +function startServer(){ + runScript(path.join(__dirname, 'index.js'), function (err) { + if (err) throw err; + }, setServer) +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index ed9888b..2140a9e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "opencountdown", - "version": "1.0.2", + "version": "1.0.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "opencountdown", - "version": "1.0.2", + "version": "1.0.3", "license": "LGPL-3.0", "dependencies": { "body-parser": "^1.19.2", @@ -22,8 +22,66 @@ "js-cookie": "^3.0.1", "less": "^3.13", "mdbootstrap": "^4.20.0", + "open": "^8.4.0", "underscore": "^1.13.3", "ws": "^8.5.0" + }, + "devDependencies": { + "electron": "^20.0.3" + } + }, + "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/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@electron/get/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==", + "dev": true + }, + "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/@popperjs/core": { @@ -36,6 +94,43 @@ "url": "https://opencollective.com/popperjs" } }, + "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/@types/node": { + "version": "16.11.49", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.49.tgz", + "integrity": "sha512-Abq9fBviLV93OiXMu+f6r0elxCzRwc0RC5f99cU892uBITL44pTvgvEqlRlPRi8EGcO1z7Cp8A4d0s/p3J/+Nw==", + "dev": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -73,6 +168,13 @@ "node": ">= 0.8" } }, + "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/bootstrap": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", @@ -98,6 +200,15 @@ "node": ">=10" } }, + "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/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -106,6 +217,45 @@ "node": ">= 0.8" } }, + "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/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/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/colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", @@ -114,6 +264,17 @@ "node": ">=0.1.90" } }, + "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/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -174,6 +335,49 @@ "ms": "2.0.0" } }, + "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/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-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "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/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -187,11 +391,42 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "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/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/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, + "node_modules/electron": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/electron/-/electron-20.0.3.tgz", + "integrity": "sha512-Yx0a/SGgus/XqDAoMMs165JUikgE5vBmQpNJ+0XMDG/IYFj6TNNzfY2ATI+t171JjhKKO+MYPO8xqyZdFRoIDw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@electron/get": "^1.14.1", + "@types/node": "^16.11.26", + "extract-zip": "^2.0.1" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + } + }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -200,6 +435,24 @@ "node": ">= 0.8" } }, + "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/errno": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", @@ -212,11 +465,31 @@ "errno": "cli.js" } }, + "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/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, + "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/eta": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.3.tgz", @@ -276,6 +549,58 @@ "node": ">= 0.10.0" } }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/extract-zip/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==", + "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/finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -314,11 +639,207 @@ "node": ">= 0.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/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/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": "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/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-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/got/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/graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "optional": true + "devOptional": 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-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/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-errors": { "version": "1.8.1", @@ -363,6 +884,13 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "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, + "optional": true + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -371,11 +899,36 @@ "node": ">= 0.10" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-what": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jquery": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", @@ -389,6 +942,37 @@ "node": ">=12" } }, + "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-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/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/less": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/less/-/less-3.13.1.tgz", @@ -413,6 +997,35 @@ "source-map": "~0.6.0" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "optional": true + }, + "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, + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -426,6 +1039,19 @@ "node": ">=6" } }, + "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/mdbootstrap": { "version": "4.20.0", "resolved": "https://registry.npmjs.org/mdbootstrap/-/mdbootstrap-4.20.0.tgz", @@ -482,6 +1108,15 @@ "node": ">= 0.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/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -501,6 +1136,49 @@ "node": ">= 0.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/npm-conf/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/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/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -512,6 +1190,40 @@ "node": ">= 0.8" } }, + "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/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "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/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -525,6 +1237,12 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "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": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -534,6 +1252,31 @@ "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/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/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/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -552,6 +1295,16 @@ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "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/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", @@ -585,6 +1338,33 @@ "node": ">= 0.8" } }, + "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/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.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -618,6 +1398,13 @@ "semver": "bin/semver" } }, + "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/send": { "version": "0.17.2", "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", @@ -646,6 +1433,22 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "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/serve-static": { "version": "1.14.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", @@ -674,6 +1477,13 @@ "node": ">=0.10.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/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -682,6 +1492,50 @@ "node": ">= 0.6" } }, + "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/sumchecker/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/sumchecker/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==", + "dev": true + }, + "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/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -695,6 +1549,29 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, + "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/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -712,6 +1589,15 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.3.tgz", "integrity": "sha512-QvjkYpiD+dJJraRA8+dGAU4i7aBbb2s0S3jA45TFOvg2VgqvdCDd/3N6CqA8gluk1W91GLoXg5enMUx560QzuA==" }, + "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/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -720,6 +1606,18 @@ "node": ">= 0.8" } }, + "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/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -736,6 +1634,12 @@ "node": ">= 0.8" } }, + "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/ws": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", @@ -755,15 +1659,103 @@ "optional": true } } + }, + "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, + "optional": true + }, + "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": { + "@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, + "requires": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "global-agent": "^3.0.0", + "global-tunnel-ng": "^2.7.1", + "got": "^9.6.0", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "@popperjs/core": { "version": "2.11.2", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.2.tgz", "integrity": "sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==", "peer": true }, + "@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 + }, + "@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, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/node": { + "version": "16.11.49", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.49.tgz", + "integrity": "sha512-Abq9fBviLV93OiXMu+f6r0elxCzRwc0RC5f99cU892uBITL44pTvgvEqlRlPRi8EGcO1z7Cp8A4d0s/p3J/+Nw==", + "dev": true + }, + "@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -795,6 +1787,13 @@ "type-is": "~1.6.18" } }, + "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 + }, "bootstrap": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", @@ -811,16 +1810,65 @@ "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.8.1.tgz", "integrity": "sha512-IXUqislddPJfwq6H+2nTkHyr9epO9h6u1AG0OZCx616w+TgzeoCjfmI3qJMQqt1J586gN2IxzB4M99Ip4sTZ1w==" }, + "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 + }, "bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, + "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, + "requires": { + "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" + }, + "dependencies": { + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "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, + "requires": { + "mimic-response": "^1.0.0" + } + }, "colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" }, + "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, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, "content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -865,6 +1913,37 @@ "ms": "2.0.0" } }, + "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, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "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 + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" + }, + "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, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -875,16 +1954,55 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "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 + }, + "duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "dev": true + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, + "electron": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/electron/-/electron-20.0.3.tgz", + "integrity": "sha512-Yx0a/SGgus/XqDAoMMs165JUikgE5vBmQpNJ+0XMDG/IYFj6TNNzfY2ATI+t171JjhKKO+MYPO8xqyZdFRoIDw==", + "dev": true, + "requires": { + "@electron/get": "^1.14.1", + "@types/node": "^16.11.26", + "extract-zip": "^2.0.1" + } + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "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" + } + }, + "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 + }, "errno": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", @@ -894,11 +2012,25 @@ "prr": "~1.0.1" } }, + "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 + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, + "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 + }, "eta": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.3.tgz", @@ -946,6 +2078,44 @@ "vary": "~1.1.2" } }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "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, + "requires": { + "pend": "~1.2.0" + } + }, "finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -975,12 +2145,164 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "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, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "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 + }, + "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, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "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, + "requires": { + "pump": "^3.0.0" + } + }, + "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, + "requires": { + "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" + }, + "dependencies": { + "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, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "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, + "requires": { + "encodeurl": "^1.0.2", + "lodash": "^4.17.10", + "npm-conf": "^1.1.3", + "tunnel": "^0.0.6" + } + }, + "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, + "requires": { + "define-properties": "^1.1.3" + } + }, + "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, + "requires": { + "@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" + }, + "dependencies": { + "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, + "requires": { + "pump": "^3.0.0" + } + } + } + }, "graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "devOptional": true + }, + "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, + "requires": { + "function-bind": "^1.1.1" + } + }, + "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, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "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 }, + "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 + }, "http-errors": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", @@ -1012,16 +2334,36 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "optional": true + }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + }, "is-what": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, "jquery": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", @@ -1032,6 +2374,37 @@ "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.1.tgz", "integrity": "sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==" }, + "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 + }, + "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 + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "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, + "requires": { + "json-buffer": "3.0.0" + } + }, "less": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/less/-/less-3.13.1.tgz", @@ -1048,6 +2421,29 @@ "tslib": "^1.10.0" } }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "optional": true + }, + "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 + }, + "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, + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -1058,6 +2454,16 @@ "semver": "^5.6.0" } }, + "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, + "requires": { + "escape-string-regexp": "^4.0.0" + } + }, "mdbootstrap": { "version": "4.20.0", "resolved": "https://registry.npmjs.org/mdbootstrap/-/mdbootstrap-4.20.0.tgz", @@ -1096,6 +2502,12 @@ "mime-db": "1.51.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 + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -1112,6 +2524,39 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, + "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 + }, + "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, + "requires": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -1120,6 +2565,31 @@ "ee-first": "1.1.1" } }, + "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, + "requires": { + "wrappy": "1" + } + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "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 + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -1130,12 +2600,37 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "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 + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "optional": true }, + "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 + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "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 + }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -1151,6 +2646,16 @@ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "optional": 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" + } + }, "qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", @@ -1172,6 +2677,30 @@ "unpipe": "1.0.0" } }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "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, + "requires": { + "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" + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1188,6 +2717,13 @@ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "optional": true }, + "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 + }, "send": { "version": "0.17.2", "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", @@ -1215,6 +2751,16 @@ } } }, + "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, + "requires": { + "type-fest": "^0.13.1" + } + }, "serve-static": { "version": "1.14.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", @@ -1237,11 +2783,50 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "optional": true }, + "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 + }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, + "sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dev": true, + "requires": { + "debug": "^4.1.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "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 + }, "toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -1252,6 +2837,20 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "optional": true + }, + "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 + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -1266,11 +2865,26 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.3.tgz", "integrity": "sha512-QvjkYpiD+dJJraRA8+dGAU4i7aBbb2s0S3jA45TFOvg2VgqvdCDd/3N6CqA8gluk1W91GLoXg5enMUx560QzuA==" }, + "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 + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, + "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, + "requires": { + "prepend-http": "^2.0.0" + } + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -1281,11 +2895,34 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, + "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 + }, "ws": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", "requires": {} + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "optional": true + }, + "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, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } } } } diff --git a/package.json b/package.json index eaec627..6f043b5 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,12 @@ { "name": "opencountdown", - "version": "1.0.2", + "version": "1.0.3", "description": "An opensource countdown", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "build": "nexe index.js --build" + "build": "nexe index.js --build", + "start": "electron newStartHandler.js" }, "author": "TheGreydiamond", "license": "LGPL-3.0", @@ -23,7 +24,11 @@ "js-cookie": "^3.0.1", "less": "^3.13", "mdbootstrap": "^4.20.0", + "open": "^8.4.0", "underscore": "^1.13.3", "ws": "^8.5.0" + }, + "devDependencies": { + "electron": "^20.0.3" } } diff --git a/static/logo/faviconLogo.png b/static/logo/faviconLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..13fa743b5d54fb039db0ce522a3a0e394c0d069e GIT binary patch literal 38708 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

Wf{JAjcc<0Wk7wu8A(K(I5yE{FRf~-E;!r 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 s(oYC$0l*Q8hEB)6IE~Wrzk?QIq8^^F