diff --git a/.gitignore b/.gitignore index bcbf80a..af1208c 100644 --- a/.gitignore +++ b/.gitignore @@ -70,6 +70,10 @@ yarn-error.log .pnp.js # Yarn Integrity file .yarn-integrity +*.pyc +build -build \ No newline at end of file +# Ignore virtual environments +venv/ +/resources/python/vex/__pycache__ diff --git a/Neuroscope-EMG.lnk b/Neuroscope-EMG.lnk new file mode 100644 index 0000000..3d44cb2 Binary files /dev/null and b/Neuroscope-EMG.lnk differ diff --git a/Neuroscope.bat b/Neuroscope.bat new file mode 100644 index 0000000..725e10a --- /dev/null +++ b/Neuroscope.bat @@ -0,0 +1,14 @@ +@echo off +setlocal + +REM This script should be placed inside the neuroscope-emg folder + +echo Starting Neuroscope EMG... + +REM Activate virtual environment +call venv\Scripts\activate.bat + +REM Start the application +yarn serve + +pause diff --git a/README.md b/README.md index e05930a..4c550bc 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,301 @@ -# Readme +# Neuroscope -TODO +Neuroscope is an Electron-based application for real-time EEG/BCI signal visualization, feature extraction, and device connectivity using Bluetooth-enabled headsets like **OpenBCI Ganglion**. It features a Blockly-based visual programming interface for custom workflows and supports VEX and Ganglion devices. -Project builds on [this boiler plate](https://github.com/a133xz/electron-vuejs-parcel-boilerplate). +--- + +## Features + +- **EEG Device Support:** Connect to OpenBCI Ganglion headsets via Bluetooth. +- **Real-Time Visualization:** View EEG and telemetry data live. +- **Blockly Programming:** Drag-and-drop blocks for custom signal processing and logic. +- **Extensible:** Easily add new blocks or device integrations. + +--- + +## Getting Started + +### Prerequisites + +- [Node.js](https://nodejs.org/) (v14+ recommended) +- npm or yarn +- Python 3.x (for some optional features) +- Python package: `websockets` (optional, only if using WebSocket features) +- A supported EEG device (OpenBCI Ganglion) + +### Installation + +1. **Clone the repository:** + ```sh + git clone https://github.com/yourusername/neuroscope.git + cd neuroscope + ``` + +2. **Install Node dependencies:** + ```sh + yarn install + # or + npm install + ``` + +3. *(Optional, only if using Python WebSocket features)* + **Install Python dependencies:** + ```sh + pip install websockets + ``` + +--- + +## Running the Application + +1. **Start the Electron Application** + ```sh + yarn serve + # or + npm run serve + ``` + + This will launch the Electron app. In development mode, it will open with hot-reloading and developer tools enabled. + +2. **Connect Your EEG Device** + - Click the **Bluetooth** button in the UI. + - Select your **Ganglion** device from the list. + - Wait for the connection confirmation. + +--- + +## Usage + +- **Signal Visualization:** + EEG channels are displayed in real time. You can view raw and filtered signals, as well as extracted features (alpha, beta, etc.). + +- **Blockly Programming:** + Use the Blockly interface to create custom workflows. Drag and drop blocks for signal processing and feature extraction. + +--- + +## Troubleshooting + +- **Bluetooth Issues:** + Make sure your Ganglion device is powered on and not paired with another app. On Windows, you may need to grant Bluetooth permissions. +- **Missing Dependencies:** + If you see errors about missing modules, re-run `yarn install` or `npm install`. +- **Electron Fails to Start:** + Make sure you are using a compatible Node.js version and have all dependencies installed. + +--- + +## Development + +- **Hot Reload:** + The app reloads automatically in development mode. +- **Main Process:** + See `src/main/index.js` for Electron main process logic. +- **Renderer Process:** + See `src/renderer/js/` for UI and signal processing code. +- **Blockly Blocks:** + Custom blocks are defined in `src/renderer/js/customblock.js`. + +--- + +## Adding a New Blockly Block (Example: VEX Kicker) + +Below is the standard end-to-end pattern for introducing a new action block that can run both inside the js-interpreter (live run) and via generated JavaScript. + +### 1. Define the Block (UI + Generator) +File: `src/renderer/js/customblock.js` + +Add JSON spec and a generator. Example: + +```javascript +// Block definition +var vexKicker = { + type: "vex_kicker", + message0: "kicker %1", + args0: [ + { type: "field_dropdown", name: "ACTION", options: [ + ["Kick Hard", "HARD"], + ["Kick Soft", "SOFT"], + ["Place", "PLACE"] + ]} + ], + previousStatement: null, + nextStatement: null, + colour: 70 +}; + +Blockly.Blocks["vex_kicker"] = { init() { this.jsonInit(vexKicker); } }; + +javascriptGenerator.forBlock["vex_kicker"] = function(block){ + const action = block.getFieldValue("ACTION").toLowerCase(); + return `vex_kicker("${action}");\n`; +}; +``` + +Why call `vex_kicker(...)`? Because wrapper functions are exposed to BOTH generated code and interpreter, keeping one unified runtime path. + +### 2. Add Block to a Category +File: `src/renderer/js/categories.js` + +Insert the block name in the appropriate category `modules` array (e.g. `cat_vex`). + +```javascript + cat_vex: { + name: "VEX", + colour: 70, + modules: [ "vex_forward", "vex_back", "vex_left", "vex_right", "vex_kicker", "vex_turn_left", "vex_turn_right" ] + } +``` + +### 3. Provide a Wrapper Function +File: `src/renderer/js/wrapper-functions.js` + +Create a method inside `WrapperFunctions`: + +```javascript +vex_kicker(kind){ + const k = String(kind||"").toLowerCase(); + if(window.electronAPI?.vexKicker){ + window.electronAPI.vexKicker(k); + } else { + window.electronAPI.sendCommand({ action:"kicker", type:k }); + } +} +``` + +### 4. Expose Wrapper in Interpreter +File: `src/renderer/js/interpreter-api.js` + +Add it to `nativeFunctions`: + +```javascript +vex_kicker: this.wrapperFunctions.vex_kicker, +``` + +### 5. IPC Bridge (Renderer → Main) +File: `src/main/preload.js` + +Expose a safe function: + +```javascript +vexKicker: (type) => ipcRenderer.send("vex-kicker", type), +``` + +### 6. Main Process Handler +File: `src/main/index.js` + +Listen and forward to Python server: + +```javascript +ipcMain.on("vex-kicker", (event, type) => { + const t = String(type||"").toLowerCase(); + console.log(`[VEX] Kicker action: ${t}`); + sendCommand({ action:"kicker", type:t }); +}); +``` + +### 7. Python Server Action (If New Action Not Yet Supported) +File: `resources/python/VEXServer.py` + +Add an `elif action == "kicker":` block parsing `type` and invoking underlying AIM API (`robot.kicker.kick(...)` or `robot.kicker.place()`). + +### 8. Test +1. Run `yarn serve`. +2. Drag the new block into the workspace. +3. Run the program. +4. Watch terminal for `[VEX] Kicker action: hard` and Python side confirmation. + +### Summary Flow +Block → Generator → Wrapper → Interpreter (or generated JS) → `electronAPI.vexKicker` → IPC → Main → WebSocket → Python → Robot. + +--- + +## Building a Distribution (Production Build) + +The project ships JavaScript (Electron + Vue) and a Python WebSocket server (VEXServer). The bundled installer needs both. + +### Prerequisites +1. Node/Yarn installed. +2. Python 3.x installed. +3. Virtual environment `.venv` created (recommended): + ```powershell + python -m venv .venv + .venv\Scripts\activate + pip install -r requirements.txt + ``` + +### Build Steps + +You can run each step or use the shortcut: + +| Step | Script | Purpose | +|------|--------|---------| +| 1 | `yarn build` | Builds renderer (Parcel) into `build/renderer` | +| 2 | `yarn python:build` | PyInstaller builds `dist/VEXServer.exe` from `VEXServer.spec` | +| 3 | `yarn electron:build` | Uses `electron-builder` to package the app (looks at `package.json` build config) | +| All-in-one | `yarn build:local` | Runs 1+2+3 sequentially | + +Recommended single command: + +```powershell +yarn build:local +``` + +### Output Locations +- Electron build artifacts: `dist/` (depends on electron-builder target; on Windows an unpacked dir plus resources) +- Python binary: `dist/VEXServer.exe` (copied into final app via `extraResources` in `package.json`) + +### Changing Product/App Name +Edit in `package.json`: +```json +"name": "vex-emg-control", +"build": { "productName": "VEX EMG Control", "appId": "com.htlab.vex-emg-control" } +``` +Optionally set BrowserWindow title in `src/main/index.js`: +```javascript +title: "VEX EMG Control" +``` + +### Signing / Distribution (Future) +- For Windows code-signing, add certificate config to `electron-builder`. +- For auto-update, integrate a release server (GitHub Releases or custom). Not yet configured here. + +### Common Build Issues +| Symptom | Cause | Fix | +|---------|-------|-----| +| Python exe missing | PyInstaller failed | Activate venv & rerun `yarn python:build` | +| WebSocket not connecting | Robot not reachable | Confirm network / IP (AP mode `192.168.4.1`) | +| Port 3002 already used | Stale dev process | Kill previous Electron/Parcel instance | + +### Quick Test After Build +1. Run the packaged app from `dist/`. +2. Observe Python server starts (console log: `Python WebSocket server is ready`). +3. Drag a block (e.g., `vex_forward`) and run; confirm log output and robot motion. + +--- + +## Contributing + +1. Fork & branch: `feat/new-block`. +2. Add block + wrapper + IPC. +3. Add docs section if introducing a new device pattern. +4. Run `yarn serve` and test. +5. Open PR. + +--- + +--- + +## License + +MIT License. See [LICENSE](LICENSE) for details. + +--- + +## Acknowledgements + +- [OpenBCI Ganglion](https://shop.openbci.com/products/ganglion-board) +- [Blockly](https://developers.google.com/blockly) +- [Electron](https://www.electronjs.org/) + +--- \ No newline at end of file diff --git a/VEXServer.spec b/VEXServer.spec new file mode 100644 index 0000000..9806bbb --- /dev/null +++ b/VEXServer.spec @@ -0,0 +1,74 @@ +# -*- mode: python ; coding: utf-8 -*- + +import os +import sys +from PyInstaller.utils.hooks import collect_submodules, collect_data_files + +# Get the current directory (where the .spec file is located) +# SPECPATH might resolve incorrectly, so we use the actual working directory +spec_root = os.getcwd() +print(f'[PYINSTALLER] Working directory (spec_root): {spec_root}') + +# Add the resources/python directory to the path +sys.path.insert(0, os.path.join(spec_root, 'resources', 'python')) + +# Collect all submodules and data files for websockets and related packages +hiddenimports = [] +hiddenimports += collect_submodules('websockets') +hiddenimports += collect_submodules('websocket') +hiddenimports += collect_submodules('ssl') +hiddenimports += collect_submodules('asyncio') +hiddenimports += collect_submodules('vex') + +# Collect data files +datas = [] +datas += collect_data_files('websockets') + +# Include the vex module folder with settings.json and all Python files +# Use os.path.abspath to ensure we get the correct path relative to the spec file +vex_source = os.path.join(spec_root, 'resources', 'python', 'vex') +if os.path.exists(vex_source): + datas.append((vex_source, 'vex')) + print(f'[PYINSTALLER] Including vex module from: {vex_source}') +else: + print(f'[PYINSTALLER] WARNING: vex module not found at: {vex_source}') + +a = Analysis( + ['resources/python/VEXServer.py'], + pathex=[], + binaries=[], + datas=datas, + hiddenimports=hiddenimports, + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + win_no_prefer_redirects=False, + win_private_assemblies=False, + cipher=None, + noarchive=False, +) + +pyz = PYZ(a.pure, a.zipped_data, cipher=None) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.zipfiles, + a.datas, + [], + name='VEXServer', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) \ No newline at end of file diff --git a/block-text-demo.html b/block-text-demo.html new file mode 100644 index 0000000..9b36784 --- /dev/null +++ b/block-text-demo.html @@ -0,0 +1,254 @@ + + + + + NeuroScope Block-to-Text Converter Demo + + + + +
+

🚀 NeuroScope Block-to-Text Converter Demo

+

This demo shows how visual blocks can be converted to readable Python-like text code.

+ +
+

📝 Example Conversion

+
+ Visual Blocks (simulated):
+ 📦 Print "Starting EMG analysis"
+ 📦 Get Alpha Power from signal
+ 📦 If alpha_power > 0.7
+     📦 VEX Move Forward 10
+     📦 Print "High alpha detected!"
+ 📦 Wait 2 seconds
+ 📦 Print "Analysis complete" +
+ +
+ + + +
+ +

Generated Python Code:

+
Click "Convert" to see the generated code...
+
+ +
+

🧪 Test Results

+
Running tests...
+
+
+ + + + + \ No newline at end of file diff --git a/neuroIcon.ico b/neuroIcon.ico new file mode 100644 index 0000000..8d6aebf Binary files /dev/null and b/neuroIcon.ico differ diff --git a/package-lock.json b/package-lock.json index 9fc72ba..e9d1f37 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,20 @@ { "name": "electron-vuejs-parcel", - "version": "1.0.11", + "version": "1.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "electron-vuejs-parcel", - "version": "1.0.11", + "version": "1.3.0", "license": "MIT", "dependencies": { + "blockly": "^10.4.3", "d3": "^7.9.0", - "rxjs": "^7.8.1" + "js-interpreter": "^5.1.1", + "rxjs": "^7.8.1", + "wait-on": "^5.3.0", + "ws": "^8.18.2" }, "devDependencies": { "@parcel/transformer-sass": "2.0.0-beta.3.1", @@ -26,8 +30,7 @@ "prettier": "^2.3.1", "sass": "^1.35.1", "typescript": "^4.3.2", - "vue": "^3.0.0", - "wait-on": "^5.0.0" + "vue": "^3.0.0" } }, "node_modules/@babel/code-frame": { @@ -86,8 +89,6 @@ }, "node_modules/@babel/core/node_modules/json5": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "license": "MIT", "dependencies": { @@ -102,8 +103,6 @@ }, "node_modules/@babel/core/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, "license": "ISC", "bin": { @@ -112,8 +111,6 @@ }, "node_modules/@babel/core/node_modules/source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -137,8 +134,6 @@ }, "node_modules/@babel/generator/node_modules/source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -166,8 +161,6 @@ }, "node_modules/@babel/helper-compilation-targets/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, "license": "ISC", "bin": { @@ -378,8 +371,6 @@ }, "node_modules/@babel/highlight/node_modules/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, "license": "MIT", "dependencies": { @@ -391,8 +382,6 @@ }, "node_modules/@babel/highlight/node_modules/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, "license": "MIT", "dependencies": { @@ -406,8 +395,6 @@ }, "node_modules/@babel/highlight/node_modules/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, "license": "MIT", "dependencies": { @@ -501,8 +488,6 @@ }, "node_modules/@babel/traverse/node_modules/globals": { "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, "license": "MIT", "engines": { @@ -565,8 +550,6 @@ }, "node_modules/@electron/get/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, "license": "MIT", "dependencies": { @@ -580,8 +563,6 @@ }, "node_modules/@electron/get/node_modules/jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "license": "MIT", "optionalDependencies": { @@ -590,8 +571,6 @@ }, "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, "license": "ISC", "bin": { @@ -600,8 +579,6 @@ }, "node_modules/@electron/get/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, "license": "MIT", "engines": { @@ -627,8 +604,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, "license": "MIT", "dependencies": { @@ -645,14 +620,12 @@ "version": "9.2.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/@hapi/topo": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" @@ -706,8 +679,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -1015,8 +986,6 @@ }, "node_modules/@parcel/fs-write-stream-atomic/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, "license": "MIT", "dependencies": { @@ -1031,15 +1000,11 @@ }, "node_modules/@parcel/fs-write-stream-atomic/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, "license": "MIT" }, "node_modules/@parcel/fs-write-stream-atomic/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, "license": "MIT", "dependencies": { @@ -1141,8 +1106,6 @@ }, "node_modules/@parcel/node-libs-browser/node_modules/punycode": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true, "license": "MIT" }, @@ -1170,8 +1133,6 @@ }, "node_modules/@parcel/node-resolver-core/node_modules/braces": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "license": "MIT", "dependencies": { @@ -1192,8 +1153,6 @@ }, "node_modules/@parcel/node-resolver-core/node_modules/braces/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "license": "MIT", "dependencies": { @@ -1205,8 +1164,6 @@ }, "node_modules/@parcel/node-resolver-core/node_modules/braces/node_modules/is-extendable": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true, "license": "MIT", "engines": { @@ -1215,8 +1172,6 @@ }, "node_modules/@parcel/node-resolver-core/node_modules/define-property": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1229,8 +1184,6 @@ }, "node_modules/@parcel/node-resolver-core/node_modules/extend-shallow": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "license": "MIT", "dependencies": { @@ -1243,8 +1196,6 @@ }, "node_modules/@parcel/node-resolver-core/node_modules/fill-range": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "license": "MIT", "dependencies": { @@ -1259,8 +1210,6 @@ }, "node_modules/@parcel/node-resolver-core/node_modules/fill-range/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "license": "MIT", "dependencies": { @@ -1272,8 +1221,6 @@ }, "node_modules/@parcel/node-resolver-core/node_modules/fill-range/node_modules/is-extendable": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true, "license": "MIT", "engines": { @@ -1282,8 +1229,6 @@ }, "node_modules/@parcel/node-resolver-core/node_modules/is-extendable": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "license": "MIT", "dependencies": { @@ -1295,8 +1240,6 @@ }, "node_modules/@parcel/node-resolver-core/node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "license": "MIT", "engines": { @@ -1305,8 +1248,6 @@ }, "node_modules/@parcel/node-resolver-core/node_modules/micromatch": { "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "license": "MIT", "dependencies": { @@ -1330,8 +1271,6 @@ }, "node_modules/@parcel/node-resolver-core/node_modules/to-regex-range": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "license": "MIT", "dependencies": { @@ -1365,8 +1304,6 @@ }, "node_modules/@parcel/optimizer-cssnano/node_modules/postcss": { "version": "8.3.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", - "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", "dev": true, "license": "MIT", "dependencies": { @@ -1458,8 +1395,6 @@ }, "node_modules/@parcel/package-manager/node_modules/cross-spawn": { "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1475,8 +1410,6 @@ }, "node_modules/@parcel/package-manager/node_modules/path-key": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true, "license": "MIT", "engines": { @@ -1485,8 +1418,6 @@ }, "node_modules/@parcel/package-manager/node_modules/shebang-command": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "license": "MIT", "dependencies": { @@ -1498,8 +1429,6 @@ }, "node_modules/@parcel/package-manager/node_modules/shebang-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true, "license": "MIT", "engines": { @@ -1508,8 +1437,6 @@ }, "node_modules/@parcel/package-manager/node_modules/which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "license": "ISC", "dependencies": { @@ -1543,8 +1470,6 @@ }, "node_modules/@parcel/packager-css/node_modules/postcss": { "version": "8.3.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", - "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", "dev": true, "license": "MIT", "dependencies": { @@ -1692,6 +1617,26 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/@parcel/reporter-dev-server/node_modules/ws": { + "version": "7.5.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/@parcel/resolver-default": { "version": "2.0.0-beta.3.1", "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.0.0-beta.3.1.tgz", @@ -1839,8 +1784,6 @@ }, "node_modules/@parcel/transformer-css/node_modules/postcss": { "version": "8.3.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", - "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", "dev": true, "license": "MIT", "dependencies": { @@ -1858,8 +1801,6 @@ }, "node_modules/@parcel/transformer-css/node_modules/postcss-value-parser": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true, "license": "MIT" }, @@ -1935,8 +1876,6 @@ }, "node_modules/@parcel/transformer-json/node_modules/json5": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "license": "MIT", "dependencies": { @@ -1976,8 +1915,6 @@ }, "node_modules/@parcel/transformer-postcss/node_modules/postcss-value-parser": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true, "license": "MIT" }, @@ -2177,7 +2114,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz", "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" @@ -2187,14 +2123,12 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/@sideway/pinpoint": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/@sindresorhus/is": { @@ -2230,6 +2164,15 @@ "node": ">=10" } }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, "node_modules/@types/cacheable-request": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", @@ -2340,8 +2283,6 @@ }, "node_modules/@types/yargs": { "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2350,15 +2291,11 @@ }, "node_modules/@types/yargs-parser": { "version": "20.2.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", - "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", "dev": true, "license": "MIT" }, "node_modules/@types/yauzl": { "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, "license": "MIT", "optional": true, @@ -2368,8 +2305,6 @@ }, "node_modules/@vue/compiler-core": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.1.2.tgz", - "integrity": "sha512-nHmq7vLjq/XM2IMbZUcKWoH5sPXa2uR/nIKZtjbK5F3TcbnYE/zKsrSUR9WZJ03unlwotNBX1OyxVt9HbWD7/Q==", "dev": true, "license": "MIT", "dependencies": { @@ -2382,8 +2317,6 @@ }, "node_modules/@vue/compiler-dom": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.1.2.tgz", - "integrity": "sha512-k2+SWcWH0jL6WQAX7Or2ONqu5MbtTgTO0dJrvebQYzgqaKMXNI90RNeWeCxS4BnNFMDONpHBeFgbwbnDWIkmRg==", "dev": true, "license": "MIT", "dependencies": { @@ -2393,8 +2326,6 @@ }, "node_modules/@vue/compiler-sfc": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.1.2.tgz", - "integrity": "sha512-SeG/2+DvwejQ7oAiSx8BrDh5qOdqCYHGClPiTvVIHTfSIHiS2JjMbCANdDCjHkTOh/O7WZzo2JhdKm98bRBxTw==", "dev": true, "license": "MIT", "dependencies": { @@ -2422,8 +2353,6 @@ }, "node_modules/@vue/compiler-sfc/node_modules/icss-utils": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, "license": "ISC", "engines": { @@ -2435,8 +2364,6 @@ }, "node_modules/@vue/compiler-sfc/node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "license": "ISC", "dependencies": { @@ -2445,8 +2372,6 @@ }, "node_modules/@vue/compiler-sfc/node_modules/postcss": { "version": "8.3.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", - "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", "dev": true, "license": "MIT", "dependencies": { @@ -2464,8 +2389,6 @@ }, "node_modules/@vue/compiler-sfc/node_modules/postcss-modules": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.1.3.tgz", - "integrity": "sha512-dBT39hrXe4OAVYJe/2ZuIZ9BzYhOe7t+IhedYeQ2OxKwDpAGlkEN/fR0fGnrbx4BvgbMReRX4hCubYK9cE/pJQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2484,8 +2407,6 @@ }, "node_modules/@vue/compiler-sfc/node_modules/postcss-modules-extract-imports": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true, "license": "ISC", "engines": { @@ -2497,8 +2418,6 @@ }, "node_modules/@vue/compiler-sfc/node_modules/postcss-modules-local-by-default": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2515,8 +2434,6 @@ }, "node_modules/@vue/compiler-sfc/node_modules/postcss-modules-scope": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, "license": "ISC", "dependencies": { @@ -2531,8 +2448,6 @@ }, "node_modules/@vue/compiler-sfc/node_modules/postcss-modules-values": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, "license": "ISC", "dependencies": { @@ -2547,22 +2462,16 @@ }, "node_modules/@vue/compiler-sfc/node_modules/postcss-value-parser": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true, "license": "MIT" }, "node_modules/@vue/compiler-sfc/node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "license": "ISC" }, "node_modules/@vue/compiler-ssr": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.1.2.tgz", - "integrity": "sha512-BwXo9LFk5OSWdMyZQ4bX1ELHX0Z/9F+ld/OaVnpUPzAZCHslBYLvyKUVDwv2C/lpLjRffpC2DOUEdl1+RP1aGg==", "dev": true, "license": "MIT", "dependencies": { @@ -2572,8 +2481,6 @@ }, "node_modules/@vue/reactivity": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.2.tgz", - "integrity": "sha512-glJzJoN2xE7I2lRvwKM5u1BHRPTd1yc8iaf//Lai/78/uYAvE5DXp5HzWRFOwMlbRvMGJHIQjOqoxj87cDAaag==", "dev": true, "license": "MIT", "dependencies": { @@ -2582,8 +2489,6 @@ }, "node_modules/@vue/runtime-core": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.1.2.tgz", - "integrity": "sha512-gsPZG4dRIkixuuKmoj4P9IHgfT0yaFLcqWOM5F/bCk0nxQn1XtxH8oUehWuET726KhbukvDoJfe9G2CKviy80w==", "dev": true, "license": "MIT", "dependencies": { @@ -2593,8 +2498,6 @@ }, "node_modules/@vue/runtime-dom": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.1.2.tgz", - "integrity": "sha512-QvINxjLucEZFzp5f0NVu7JqWYCv5TKQfkH2FDs/N6QNE4iKcYtKrWdT0HKfABnVXG28Znqv6rIH0dH4ZAOwxpA==", "dev": true, "license": "MIT", "dependencies": { @@ -2605,8 +2508,6 @@ }, "node_modules/@vue/shared": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.2.tgz", - "integrity": "sha512-EmH/poaDWBPJaPILXNI/1fvUbArJQmmTyVCwvvyDYDFnkPoTclAbHRAtyIvqfez7jybTDn077HTNILpxlsoWhg==", "dev": true, "license": "MIT" }, @@ -2618,23 +2519,16 @@ "license": "MIT" }, "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true, + "version": "2.0.6", "license": "BSD-3-Clause" }, "node_modules/abortcontroller-polyfill": { "version": "1.7.3", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz", - "integrity": "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==", "dev": true, "license": "MIT" }, "node_modules/acorn": { "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true, "license": "MIT", "bin": { @@ -2646,8 +2540,6 @@ }, "node_modules/acorn-globals": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", "dev": true, "license": "MIT", "dependencies": { @@ -2657,18 +2549,24 @@ }, "node_modules/acorn-walk": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", "dev": true, "license": "MIT", "engines": { "node": ">=0.4.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "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, "license": "MIT", "dependencies": { @@ -2684,8 +2582,6 @@ }, "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, "license": "MIT", "peerDependencies": { @@ -2694,15 +2590,11 @@ }, "node_modules/alphanum-sort": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", "dev": true, "license": "MIT" }, "node_modules/ansi-align": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", "dev": true, "license": "ISC", "dependencies": { @@ -2711,8 +2603,6 @@ }, "node_modules/ansi-align/node_modules/ansi-regex": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true, "license": "MIT", "engines": { @@ -2721,15 +2611,19 @@ }, "node_modules/ansi-align/node_modules/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, "license": "MIT" }, + "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/ansi-align/node_modules/string-width": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "license": "MIT", "dependencies": { @@ -2743,8 +2637,6 @@ }, "node_modules/ansi-align/node_modules/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, "license": "MIT", "dependencies": { @@ -2756,8 +2648,6 @@ }, "node_modules/ansi-html": { "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", "dev": true, "engines": [ "node >= 0.8.0" @@ -2769,8 +2659,6 @@ }, "node_modules/ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, "license": "MIT", "engines": { @@ -2779,8 +2667,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -2795,8 +2681,6 @@ }, "node_modules/ansi-styles/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, "license": "MIT", "dependencies": { @@ -2808,8 +2692,6 @@ }, "node_modules/anymatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "license": "ISC", "dependencies": { @@ -2822,15 +2704,11 @@ }, "node_modules/app-builder-bin": { "version": "3.5.13", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-3.5.13.tgz", - "integrity": "sha512-ighVe9G+bT1ENGdp9ecO1P+94vv/f+FUwaI+XkNzeg9bYF8Oi3BQ+mJuxS00UgyHs8luuOzjzC+qnAtdb43Mpg==", "dev": true, "license": "MIT" }, "node_modules/app-builder-lib": { "version": "22.11.7", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.11.7.tgz", - "integrity": "sha512-pS9/cR4/TnNZVAHZECiSvvwTBzbwblj7KBBZkMKDG57nibq0I1XY8zAaYeHFdlYTyrRcz9JUXbAqJKezya7UFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2864,8 +2742,6 @@ }, "node_modules/app-builder-lib/node_modules/debug": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "license": "MIT", "dependencies": { @@ -2882,8 +2758,6 @@ }, "node_modules/app-builder-lib/node_modules/ejs": { "version": "3.1.6", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", - "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2898,8 +2772,6 @@ }, "node_modules/app-builder-lib/node_modules/semver": { "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "license": "ISC", "dependencies": { @@ -2914,15 +2786,11 @@ }, "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, "license": "Python-2.0" }, "node_modules/arr-diff": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true, "license": "MIT", "engines": { @@ -2931,8 +2799,6 @@ }, "node_modules/arr-flatten": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true, "license": "MIT", "engines": { @@ -2941,8 +2807,6 @@ }, "node_modules/arr-union": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true, "license": "MIT", "engines": { @@ -2951,15 +2815,11 @@ }, "node_modules/array-equal": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", "dev": true, "license": "MIT" }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "license": "MIT", "engines": { @@ -2968,8 +2828,6 @@ }, "node_modules/array-unique": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true, "license": "MIT", "engines": { @@ -2978,8 +2836,6 @@ }, "node_modules/asar": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/asar/-/asar-3.0.3.tgz", - "integrity": "sha512-k7zd+KoR+n8pl71PvgElcoKHrVNiSXtw7odKbyNpmgKe7EGRF9Pnu3uLOukD37EvavKwVFxOUpqXTIZC5B5Pmw==", "dev": true, "license": "MIT", "dependencies": { @@ -3000,8 +2856,6 @@ }, "node_modules/asar/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, "license": "MIT", "engines": { @@ -3010,8 +2864,6 @@ }, "node_modules/asn1": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, "license": "MIT", "dependencies": { @@ -3020,8 +2872,6 @@ }, "node_modules/asn1.js": { "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, "license": "MIT", "dependencies": { @@ -3033,8 +2883,6 @@ }, "node_modules/assert": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", "dev": true, "license": "MIT", "dependencies": { @@ -3046,8 +2894,6 @@ }, "node_modules/assert-plus": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true, "license": "MIT", "engines": { @@ -3056,8 +2902,6 @@ }, "node_modules/assign-symbols": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true, "license": "MIT", "engines": { @@ -3066,8 +2910,6 @@ }, "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, "license": "MIT", "engines": { @@ -3076,8 +2918,6 @@ }, "node_modules/astring": { "version": "1.7.5", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.7.5.tgz", - "integrity": "sha512-lobf6RWXb8c4uZ7Mdq0U12efYmpD1UFnyOWVJPTa3ukqZrMopav+2hdNu0hgBF0JIBFK9QgrBDfwYvh3DFJDAA==", "dev": true, "license": "MIT", "bin": { @@ -3086,15 +2926,11 @@ }, "node_modules/async": { "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", "dev": true, "license": "MIT" }, "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, "license": "MIT", "engines": { @@ -3103,22 +2939,15 @@ }, "node_modules/async-limiter": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true, "license": "MIT" }, "node_modules/asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true, "license": "MIT" }, "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, "license": "ISC", "engines": { @@ -3127,8 +2956,6 @@ }, "node_modules/atob": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true, "license": "(MIT OR Apache-2.0)", "bin": { @@ -3140,8 +2967,6 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz", - "integrity": "sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==", "dev": true, "license": "MIT", "engines": { @@ -3153,8 +2978,6 @@ }, "node_modules/aws-sign2": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "dev": true, "license": "Apache-2.0", "engines": { @@ -3163,16 +2986,11 @@ }, "node_modules/aws4": { "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true, "license": "MIT" }, "node_modules/axios": { "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", - "dev": true, "license": "MIT", "dependencies": { "follow-redirects": "^1.10.0" @@ -3180,15 +2998,11 @@ }, "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, "license": "MIT" }, "node_modules/base": { "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "license": "MIT", "dependencies": { @@ -3206,8 +3020,6 @@ }, "node_modules/base-x": { "version": "3.0.8", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", - "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", "dev": true, "license": "MIT", "dependencies": { @@ -3216,8 +3028,6 @@ }, "node_modules/base/node_modules/define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "license": "MIT", "dependencies": { @@ -3229,8 +3039,6 @@ }, "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": [ { @@ -3250,8 +3058,6 @@ }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -3260,8 +3066,6 @@ }, "node_modules/big.js": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, "license": "MIT", "engines": { @@ -3270,8 +3074,6 @@ }, "node_modules/binary-extensions": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, "license": "MIT", "engines": { @@ -3280,8 +3082,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -3290,17 +3090,20 @@ "readable-stream": "^3.4.0" } }, + "node_modules/blockly": { + "version": "10.4.3", + "license": "Apache-2.0", + "dependencies": { + "jsdom": "22.1.0" + } + }, "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, "license": "MIT" }, "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, "license": "MIT", "dependencies": { @@ -3309,30 +3112,22 @@ }, "node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true, "license": "MIT" }, "node_modules/boolbase": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true, "license": "ISC" }, "node_modules/boolean": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.1.2.tgz", - "integrity": "sha512-YN6UmV0FfLlBVvRvNPx3pz5W/mUoYB24J4WSXOKP/OOJpi+Oq6WYqPaNTHzjI0QzwWtnvEd5CGYyQPgp1jFxnw==", "dev": true, "license": "MIT", "optional": true }, "node_modules/boxen": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", - "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", "dev": true, "license": "MIT", "dependencies": { @@ -3354,8 +3149,6 @@ }, "node_modules/boxen/node_modules/camelcase": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true, "license": "MIT", "engines": { @@ -3367,8 +3160,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -3378,8 +3169,6 @@ }, "node_modules/braces": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "license": "MIT", "dependencies": { @@ -3391,22 +3180,16 @@ }, "node_modules/brorand": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true, "license": "MIT" }, "node_modules/browser-process-hrtime": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/browserify-aes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "license": "MIT", "dependencies": { @@ -3420,8 +3203,6 @@ }, "node_modules/browserify-cipher": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "license": "MIT", "dependencies": { @@ -3432,8 +3213,6 @@ }, "node_modules/browserify-des": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "license": "MIT", "dependencies": { @@ -3445,8 +3224,6 @@ }, "node_modules/browserify-rsa": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, "license": "MIT", "dependencies": { @@ -3456,15 +3233,11 @@ }, "node_modules/browserify-rsa/node_modules/bn.js": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", "dev": true, "license": "MIT" }, "node_modules/browserify-sign": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, "license": "ISC", "dependencies": { @@ -3481,15 +3254,11 @@ }, "node_modules/browserify-sign/node_modules/bn.js": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", "dev": true, "license": "MIT" }, "node_modules/browserify-zlib": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "license": "MIT", "dependencies": { @@ -3498,8 +3267,6 @@ }, "node_modules/browserslist": { "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3522,8 +3289,6 @@ }, "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": [ { @@ -3547,8 +3312,6 @@ }, "node_modules/buffer-crc32": { "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", "dev": true, "license": "MIT", "engines": { @@ -3557,8 +3320,6 @@ }, "node_modules/buffer-equal": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", "dev": true, "license": "MIT", "engines": { @@ -3567,22 +3328,16 @@ }, "node_modules/buffer-from": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true, "license": "MIT" }, "node_modules/buffer-xor": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true, "license": "MIT" }, "node_modules/builder-util": { "version": "22.11.7", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.11.7.tgz", - "integrity": "sha512-ihqUe5ey82LM9qqQe0/oIcaSm9w+B9UjcsWJZxJliTBsbU+sErOpDFpHW+sim0veiTF/EIcGUh9HoduWw+l9FA==", "dev": true, "license": "MIT", "dependencies": { @@ -3604,8 +3359,6 @@ }, "node_modules/builder-util-runtime": { "version": "8.7.7", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.7.tgz", - "integrity": "sha512-RUfoXzVrmFFI0K/Oft0CtP1LpTIOlBeLJatt5DePTI0KlxE156am4SGUpqtbbdqZNm++LkV9mX4olBDcXyGPow==", "dev": true, "license": "MIT", "dependencies": { @@ -3618,8 +3371,6 @@ }, "node_modules/builder-util-runtime/node_modules/debug": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "license": "MIT", "dependencies": { @@ -3636,8 +3387,6 @@ }, "node_modules/builder-util/node_modules/debug": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "license": "MIT", "dependencies": { @@ -3654,15 +3403,11 @@ }, "node_modules/builtin-status-codes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true, "license": "MIT" }, "node_modules/bytes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", "dev": true, "license": "MIT", "engines": { @@ -3671,8 +3416,6 @@ }, "node_modules/cache-base": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3692,8 +3435,6 @@ }, "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, "license": "MIT", "engines": { @@ -3702,8 +3443,6 @@ }, "node_modules/cacheable-request": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "dev": true, "license": "MIT", "dependencies": { @@ -3721,8 +3460,6 @@ }, "node_modules/call-bind": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "license": "MIT", "dependencies": { @@ -3733,10 +3470,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/caller-callsite": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", "dev": true, "license": "MIT", "dependencies": { @@ -3748,8 +3494,6 @@ }, "node_modules/caller-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", "dev": true, "license": "MIT", "dependencies": { @@ -3761,8 +3505,6 @@ }, "node_modules/callsites": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", "dev": true, "license": "MIT", "engines": { @@ -3771,8 +3513,6 @@ }, "node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "license": "MIT", "engines": { @@ -3781,8 +3521,6 @@ }, "node_modules/caniuse-api": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, "license": "MIT", "dependencies": { @@ -3794,8 +3532,6 @@ }, "node_modules/caniuse-lite": { "version": "1.0.30001239", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz", - "integrity": "sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ==", "dev": true, "license": "CC-BY-4.0", "funding": { @@ -3805,15 +3541,11 @@ }, "node_modules/caseless": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true, "license": "Apache-2.0" }, "node_modules/chalk": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "license": "MIT", "dependencies": { @@ -3829,8 +3561,6 @@ }, "node_modules/chalk/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, "license": "MIT", "engines": { @@ -3839,8 +3569,6 @@ }, "node_modules/chalk/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, "license": "MIT", "dependencies": { @@ -3852,8 +3580,6 @@ }, "node_modules/chokidar": { "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3874,8 +3600,6 @@ }, "node_modules/chrome-trace-event": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, "license": "MIT", "engines": { @@ -3884,22 +3608,16 @@ }, "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": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=", "dev": true, "license": "MIT" }, "node_modules/ci-info": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", - "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", "dev": true, "license": "MIT" }, "node_modules/cipher-base": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -3909,8 +3627,6 @@ }, "node_modules/class-utils": { "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "license": "MIT", "dependencies": { @@ -3925,8 +3641,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, "license": "MIT", "engines": { @@ -3938,8 +3652,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -3951,8 +3663,6 @@ }, "node_modules/cli-spinners": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", - "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", "dev": true, "license": "MIT", "engines": { @@ -3964,8 +3674,6 @@ }, "node_modules/cliui": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "license": "ISC", "dependencies": { @@ -3976,8 +3684,6 @@ }, "node_modules/cliui/node_modules/ansi-regex": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true, "license": "MIT", "engines": { @@ -3986,8 +3692,6 @@ }, "node_modules/cliui/node_modules/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, "license": "MIT", "dependencies": { @@ -3999,15 +3703,19 @@ }, "node_modules/cliui/node_modules/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, "license": "MIT" }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/cliui/node_modules/string-width": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "license": "MIT", "dependencies": { @@ -4021,8 +3729,6 @@ }, "node_modules/cliui/node_modules/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, "license": "MIT", "dependencies": { @@ -4034,8 +3740,6 @@ }, "node_modules/cliui/node_modules/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==", "dev": true, "license": "MIT", "dependencies": { @@ -4049,8 +3753,6 @@ }, "node_modules/clone": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", "dev": true, "license": "MIT", "engines": { @@ -4059,8 +3761,6 @@ }, "node_modules/clone-response": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", "dev": true, "license": "MIT", "dependencies": { @@ -4069,8 +3769,6 @@ }, "node_modules/coa": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", "dev": true, "license": "MIT", "dependencies": { @@ -4084,8 +3782,6 @@ }, "node_modules/coa/node_modules/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, "license": "MIT", "dependencies": { @@ -4097,8 +3793,6 @@ }, "node_modules/coa/node_modules/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, "license": "MIT", "dependencies": { @@ -4112,8 +3806,6 @@ }, "node_modules/coa/node_modules/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, "license": "MIT", "dependencies": { @@ -4125,8 +3817,6 @@ }, "node_modules/collection-visit": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "license": "MIT", "dependencies": { @@ -4139,8 +3829,6 @@ }, "node_modules/color": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4150,8 +3838,6 @@ }, "node_modules/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, "license": "MIT", "dependencies": { @@ -4160,22 +3846,16 @@ }, "node_modules/color-convert/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true, "license": "MIT" }, "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, "license": "MIT" }, "node_modules/color-string": { "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", "dev": true, "license": "MIT", "dependencies": { @@ -4185,15 +3865,11 @@ }, "node_modules/colorette": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true, "license": "MIT" }, "node_modules/colors": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", "dev": true, "license": "MIT", "engines": { @@ -4202,9 +3878,6 @@ }, "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, "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" @@ -4215,36 +3888,26 @@ }, "node_modules/command-exists": { "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", "dev": true, "license": "MIT" }, "node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, "license": "MIT" }, "node_modules/component-emitter": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true, "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true, "license": "MIT" }, "node_modules/concurrently": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz", - "integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4267,8 +3930,6 @@ }, "node_modules/concurrently/node_modules/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, "license": "MIT", "dependencies": { @@ -4280,8 +3941,6 @@ }, "node_modules/concurrently/node_modules/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, "license": "MIT", "dependencies": { @@ -4295,8 +3954,6 @@ }, "node_modules/concurrently/node_modules/chalk/node_modules/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, "license": "MIT", "dependencies": { @@ -4308,8 +3965,6 @@ }, "node_modules/concurrently/node_modules/rxjs": { "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -4321,15 +3976,11 @@ }, "node_modules/concurrently/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true, "license": "0BSD" }, "node_modules/configstore": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -4346,8 +3997,6 @@ }, "node_modules/connect": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4362,8 +4011,6 @@ }, "node_modules/connect/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, "license": "MIT", "dependencies": { @@ -4372,21 +4019,15 @@ }, "node_modules/connect/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true, "license": "MIT" }, "node_modules/console-browserify": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, "node_modules/consolidate": { "version": "0.16.0", - "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.16.0.tgz", - "integrity": "sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4398,15 +4039,11 @@ }, "node_modules/constants-browserify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", "dev": true, "license": "MIT" }, "node_modules/content-disposition": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", "dev": true, "license": "MIT", "engines": { @@ -4415,8 +4052,6 @@ }, "node_modules/convert-source-map": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "license": "MIT", "dependencies": { @@ -4425,15 +4060,11 @@ }, "node_modules/convert-source-map/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, "license": "MIT" }, "node_modules/copy-descriptor": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true, "license": "MIT", "engines": { @@ -4442,8 +4073,6 @@ }, "node_modules/core-js": { "version": "3.15.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.1.tgz", - "integrity": "sha512-h8VbZYnc9pDzueiS2610IULDkpFFPunHwIpl8yRwFahAEEdSpHlTy3h3z3rKq5h11CaUdBEeRViu9AYvbxiMeg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -4454,15 +4083,11 @@ }, "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": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true, "license": "MIT" }, "node_modules/cosmiconfig": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dev": true, "license": "MIT", "dependencies": { @@ -4477,8 +4102,6 @@ }, "node_modules/cosmiconfig/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", "dependencies": { @@ -4487,8 +4110,6 @@ }, "node_modules/cosmiconfig/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "license": "MIT", "dependencies": { @@ -4501,15 +4122,11 @@ }, "node_modules/cosmiconfig/node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true, "license": "BSD-3-Clause" }, "node_modules/create-ecdh": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "license": "MIT", "dependencies": { @@ -4519,8 +4136,6 @@ }, "node_modules/create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "license": "MIT", "dependencies": { @@ -4533,8 +4148,6 @@ }, "node_modules/create-hmac": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "license": "MIT", "dependencies": { @@ -4548,8 +4161,6 @@ }, "node_modules/cross-env": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "dev": true, "license": "MIT", "dependencies": { @@ -4567,8 +4178,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -4582,8 +4191,6 @@ }, "node_modules/crypto-browserify": { "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "license": "MIT", "dependencies": { @@ -4605,8 +4212,6 @@ }, "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, "license": "MIT", "engines": { @@ -4615,8 +4220,6 @@ }, "node_modules/css-color-names": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", "dev": true, "license": "MIT", "engines": { @@ -4625,8 +4228,6 @@ }, "node_modules/css-declaration-sorter": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", "dev": true, "license": "MIT", "dependencies": { @@ -4639,8 +4240,6 @@ }, "node_modules/css-modules-loader-core": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", - "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=", "dev": true, "license": "ISC", "dependencies": { @@ -4654,8 +4253,6 @@ }, "node_modules/css-modules-loader-core/node_modules/ansi-styles": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true, "license": "MIT", "engines": { @@ -4664,8 +4261,6 @@ }, "node_modules/css-modules-loader-core/node_modules/chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "license": "MIT", "dependencies": { @@ -4681,8 +4276,6 @@ }, "node_modules/css-modules-loader-core/node_modules/chalk/node_modules/supports-color": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true, "license": "MIT", "engines": { @@ -4691,8 +4284,6 @@ }, "node_modules/css-modules-loader-core/node_modules/has-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true, "license": "MIT", "engines": { @@ -4701,8 +4292,6 @@ }, "node_modules/css-modules-loader-core/node_modules/postcss": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", - "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", "dev": true, "license": "MIT", "dependencies": { @@ -4716,8 +4305,6 @@ }, "node_modules/css-modules-loader-core/node_modules/source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -4726,8 +4313,6 @@ }, "node_modules/css-modules-loader-core/node_modules/strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "license": "MIT", "dependencies": { @@ -4739,8 +4324,6 @@ }, "node_modules/css-modules-loader-core/node_modules/supports-color": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "license": "MIT", "dependencies": { @@ -4752,8 +4335,6 @@ }, "node_modules/css-select": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -4765,15 +4346,11 @@ }, "node_modules/css-select-base-adapter": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", "dev": true, "license": "MIT" }, "node_modules/css-select/node_modules/dom-serializer": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dev": true, "license": "MIT", "dependencies": { @@ -4783,8 +4360,6 @@ }, "node_modules/css-select/node_modules/dom-serializer/node_modules/domelementtype": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true, "funding": [ { @@ -4796,15 +4371,11 @@ }, "node_modules/css-select/node_modules/domelementtype": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/css-select/node_modules/domutils": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -4814,8 +4385,6 @@ }, "node_modules/css-selector-tokenizer": { "version": "0.7.3", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", - "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", "dev": true, "license": "MIT", "dependencies": { @@ -4825,8 +4394,6 @@ }, "node_modules/css-tree": { "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", "dev": true, "license": "MIT", "dependencies": { @@ -4839,8 +4406,6 @@ }, "node_modules/css-what": { "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -4852,8 +4417,6 @@ }, "node_modules/cssesc": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, "license": "MIT", "bin": { @@ -4865,8 +4428,6 @@ }, "node_modules/cssnano": { "version": "4.1.11", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", - "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", "dev": true, "license": "MIT", "dependencies": { @@ -4881,8 +4442,6 @@ }, "node_modules/cssnano-preset-default": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", - "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4923,8 +4482,6 @@ }, "node_modules/cssnano-util-get-arguments": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", "dev": true, "license": "MIT", "engines": { @@ -4933,8 +4490,6 @@ }, "node_modules/cssnano-util-get-match": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", "dev": true, "license": "MIT", "engines": { @@ -4943,8 +4498,6 @@ }, "node_modules/cssnano-util-raw-cache": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", "dev": true, "license": "MIT", "dependencies": { @@ -4956,8 +4509,6 @@ }, "node_modules/cssnano-util-same-parent": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", "dev": true, "license": "MIT", "engines": { @@ -4966,8 +4517,6 @@ }, "node_modules/csso": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, "license": "MIT", "dependencies": { @@ -4979,8 +4528,6 @@ }, "node_modules/csso/node_modules/css-tree": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, "license": "MIT", "dependencies": { @@ -4993,39 +4540,32 @@ }, "node_modules/csso/node_modules/mdn-data": { "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "dev": true, "license": "CC0-1.0" }, "node_modules/cssom": { "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true, "license": "MIT" }, "node_modules/cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", - "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", - "dev": true, + "version": "3.0.0", "license": "MIT", "dependencies": { - "cssom": "0.3.x" + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=14" } }, "node_modules/csstype": { "version": "2.6.17", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.17.tgz", - "integrity": "sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A==", "dev": true, "license": "MIT" }, "node_modules/d3": { "version": "7.9.0", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", - "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", + "license": "ISC", "dependencies": { "d3-array": "3", "d3-axis": "3", @@ -5064,8 +4604,7 @@ }, "node_modules/d3-array": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", - "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", "dependencies": { "internmap": "1 - 2" }, @@ -5075,16 +4614,14 @@ }, "node_modules/d3-axis": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", - "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-brush": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", - "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", @@ -5098,8 +4635,7 @@ }, "node_modules/d3-chord": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", - "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "license": "ISC", "dependencies": { "d3-path": "1 - 3" }, @@ -5109,16 +4645,14 @@ }, "node_modules/d3-color": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-contour": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", - "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "license": "ISC", "dependencies": { "d3-array": "^3.2.0" }, @@ -5128,8 +4662,7 @@ }, "node_modules/d3-delaunay": { "version": "6.0.4", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", - "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "license": "ISC", "dependencies": { "delaunator": "5" }, @@ -5139,16 +4672,14 @@ }, "node_modules/d3-dispatch": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-drag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-selection": "3" @@ -5159,8 +4690,7 @@ }, "node_modules/d3-dsv": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "license": "ISC", "dependencies": { "commander": "7", "iconv-lite": "0.6", @@ -5183,24 +4713,21 @@ }, "node_modules/d3-dsv/node_modules/commander": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/d3-ease": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", "engines": { "node": ">=12" } }, "node_modules/d3-fetch": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", - "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "license": "ISC", "dependencies": { "d3-dsv": "1 - 3" }, @@ -5210,8 +4737,7 @@ }, "node_modules/d3-force": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", - "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-quadtree": "1 - 3", @@ -5223,16 +4749,14 @@ }, "node_modules/d3-format": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-geo": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", - "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "license": "ISC", "dependencies": { "d3-array": "2.5.0 - 3" }, @@ -5242,16 +4766,14 @@ }, "node_modules/d3-hierarchy": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-interpolate": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", "dependencies": { "d3-color": "1 - 3" }, @@ -5261,40 +4783,35 @@ }, "node_modules/d3-path": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-polygon": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", - "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-quadtree": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-random": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", - "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-scale": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", "dependencies": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", @@ -5308,8 +4825,7 @@ }, "node_modules/d3-scale-chromatic": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", - "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "license": "ISC", "dependencies": { "d3-color": "1 - 3", "d3-interpolate": "1 - 3" @@ -5320,16 +4836,14 @@ }, "node_modules/d3-selection": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-shape": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", - "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", "dependencies": { "d3-path": "^3.1.0" }, @@ -5339,8 +4853,7 @@ }, "node_modules/d3-time": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", - "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", "dependencies": { "d3-array": "2 - 3" }, @@ -5350,8 +4863,7 @@ }, "node_modules/d3-time-format": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", "dependencies": { "d3-time": "1 - 3" }, @@ -5361,16 +4873,14 @@ }, "node_modules/d3-timer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-transition": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", "dependencies": { "d3-color": "1 - 3", "d3-dispatch": "1 - 3", @@ -5387,8 +4897,7 @@ }, "node_modules/d3-zoom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", @@ -5402,8 +4911,6 @@ }, "node_modules/dashdash": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "license": "MIT", "dependencies": { @@ -5414,21 +4921,26 @@ } }, "node_modules/data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "dev": true, + "version": "4.0.0", "license": "MIT", "dependencies": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/data-urls/node_modules/whatwg-mimetype": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=12" } }, "node_modules/date-fns": { "version": "2.22.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.22.1.tgz", - "integrity": "sha512-yUFPQjrxEmIsMqlHhAhmxkuH769baF21Kk+nZwZGyrMoyLA+LugaQtC0+Tqf9CBUUULWwUJt6Q5ySI3LJDDCGg==", "dev": true, "license": "MIT", "engines": { @@ -5441,8 +4953,6 @@ }, "node_modules/date-time": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz", - "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==", "dev": true, "license": "MIT", "dependencies": { @@ -5454,9 +4964,6 @@ }, "node_modules/debug": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, "license": "MIT", "dependencies": { "ms": "2.1.2" @@ -5472,8 +4979,6 @@ }, "node_modules/decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true, "license": "MIT", "engines": { @@ -5482,8 +4987,6 @@ }, "node_modules/decode-uri-component": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true, "license": "MIT", "engines": { @@ -5492,8 +4995,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -5508,8 +5009,6 @@ }, "node_modules/decompress-response/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, "license": "MIT", "engines": { @@ -5521,8 +5020,6 @@ }, "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, "license": "MIT", "engines": { @@ -5531,15 +5028,11 @@ }, "node_modules/deep-is": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true, "license": "MIT" }, "node_modules/defaults": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, "license": "MIT", "dependencies": { @@ -5548,8 +5041,6 @@ }, "node_modules/defaults/node_modules/clone": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true, "license": "MIT", "engines": { @@ -5558,8 +5049,6 @@ }, "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, "license": "MIT", "engines": { @@ -5568,8 +5057,6 @@ }, "node_modules/define-properties": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5581,8 +5068,6 @@ }, "node_modules/define-property": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "license": "MIT", "dependencies": { @@ -5594,8 +5079,6 @@ }, "node_modules/define-property/node_modules/is-accessor-descriptor": { "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "license": "MIT", "dependencies": { @@ -5607,8 +5090,6 @@ }, "node_modules/define-property/node_modules/is-accessor-descriptor/node_modules/kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "license": "MIT", "dependencies": { @@ -5620,8 +5101,6 @@ }, "node_modules/define-property/node_modules/is-data-descriptor": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "license": "MIT", "dependencies": { @@ -5633,8 +5112,6 @@ }, "node_modules/define-property/node_modules/is-data-descriptor/node_modules/kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "license": "MIT", "dependencies": { @@ -5646,8 +5123,6 @@ }, "node_modules/define-property/node_modules/is-descriptor": { "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "license": "MIT", "dependencies": { @@ -5661,8 +5136,6 @@ }, "node_modules/define-property/node_modules/kind-of": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true, "license": "MIT", "engines": { @@ -5671,17 +5144,13 @@ }, "node_modules/delaunator": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", - "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "license": "ISC", "dependencies": { "robust-predicates": "^3.0.2" } }, "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, "license": "MIT", "engines": { "node": ">=0.4.0" @@ -5689,8 +5158,6 @@ }, "node_modules/des.js": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "license": "MIT", "dependencies": { @@ -5700,8 +5167,6 @@ }, "node_modules/detect-libc": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "dev": true, "license": "Apache-2.0", "bin": { @@ -5713,16 +5178,12 @@ }, "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, "license": "MIT", "optional": true }, "node_modules/diffie-hellman": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "license": "MIT", "dependencies": { @@ -5733,8 +5194,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -5749,8 +5208,6 @@ }, "node_modules/dir-compare/node_modules/commander": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", "dev": true, "license": "MIT", "dependencies": { @@ -5762,8 +5219,6 @@ }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "license": "MIT", "dependencies": { @@ -5775,8 +5230,6 @@ }, "node_modules/dmg-builder": { "version": "22.11.7", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-22.11.7.tgz", - "integrity": "sha512-+I+XfP2DODHB6PwFANgpH/WMzzCA5r5XoMvbFCIYjQjJpXlO0XnqQaamzFl2vh/Wz/Qt0d0lJMgRy8gKR3MGdQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5793,8 +5246,6 @@ }, "node_modules/dmg-builder/node_modules/builder-util-runtime": { "version": "8.7.6", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.6.tgz", - "integrity": "sha512-rj9AIY7CzLSuTOXpToiaQkruYh6UEQ+kYnd5UET22ch8MGClEtIZKXHG14qEiXEr2x4EOKDMxkcTa+9TYaE+ug==", "dev": true, "license": "MIT", "dependencies": { @@ -5807,8 +5258,6 @@ }, "node_modules/dmg-builder/node_modules/debug": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "license": "MIT", "dependencies": { @@ -5825,8 +5274,6 @@ }, "node_modules/dom-serializer": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "license": "MIT", "dependencies": { @@ -5840,8 +5287,6 @@ }, "node_modules/domain-browser": { "version": "3.5.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-3.5.0.tgz", - "integrity": "sha512-zrzUu6auyZWRexjCEPJnfWc30Hupxh2lJZOJAF3qa2bCuD4O/55t0FvQt3ZMhEw++gjNkwdkOVZh8yA32w/Vfw==", "dev": true, "license": "MIT", "engines": { @@ -5853,8 +5298,6 @@ }, "node_modules/domelementtype": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true, "funding": [ { @@ -5866,8 +5309,6 @@ }, "node_modules/domexception": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", "dev": true, "license": "MIT", "dependencies": { @@ -5876,8 +5317,6 @@ }, "node_modules/domhandler": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -5892,8 +5331,6 @@ }, "node_modules/domutils": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -5907,8 +5344,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -5920,8 +5355,6 @@ }, "node_modules/dotenv": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", - "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -5930,22 +5363,28 @@ }, "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, "license": "BSD-2-Clause" }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexer3": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true, "license": "BSD-3-Clause" }, "node_modules/ecc-jsbn": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, "license": "MIT", "dependencies": { @@ -5955,15 +5394,11 @@ }, "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true, "license": "MIT" }, "node_modules/ejs": { "version": "2.7.4", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", - "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -5973,8 +5408,6 @@ }, "node_modules/electron": { "version": "26.6.10", - "resolved": "https://registry.npmjs.org/electron/-/electron-26.6.10.tgz", - "integrity": "sha512-pV2SD0RXzAiNRb/2yZrsVmVkBOMrf+DVsPulIgRjlL0+My9BL5spFuhHVMQO9yHl9tFpWtuRpQv0ofM/i9P8xg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -5992,8 +5425,6 @@ }, "node_modules/electron-builder": { "version": "22.11.7", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-22.11.7.tgz", - "integrity": "sha512-yQExSLt7Hbz/P8lLkZDdE/OnJJ7NCX+uiQcV+XIH0TeEZcD87ZnSqBBzGUN5akySU4BXXlrVZKeUsXACWrm5Kw==", "dev": true, "license": "MIT", "dependencies": { @@ -6020,8 +5451,6 @@ }, "node_modules/electron-builder/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, "license": "ISC", "dependencies": { @@ -6032,8 +5461,6 @@ }, "node_modules/electron-builder/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, "license": "ISC", "engines": { @@ -6042,8 +5469,6 @@ }, "node_modules/electron-builder/node_modules/yargs": { "version": "17.0.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.0.1.tgz", - "integrity": "sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6061,8 +5486,6 @@ }, "node_modules/electron-builder/node_modules/yargs-parser": { "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", "engines": { @@ -6071,8 +5494,6 @@ }, "node_modules/electron-debug": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/electron-debug/-/electron-debug-3.2.0.tgz", - "integrity": "sha512-7xZh+LfUvJ52M9rn6N+tPuDw6oRAjxUj9SoxAZfJ0hVCXhZCsdkrSt7TgXOiWiEOBgEV8qwUIO/ScxllsPS7ow==", "dev": true, "license": "MIT", "dependencies": { @@ -6085,22 +5506,16 @@ }, "node_modules/electron-is-accelerator": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/electron-is-accelerator/-/electron-is-accelerator-0.1.2.tgz", - "integrity": "sha1-UJ5RDCala1Xhf4Y6SwThEYRqsns=", "dev": true, "license": "MIT" }, "node_modules/electron-is-dev": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-1.2.0.tgz", - "integrity": "sha512-R1oD5gMBPS7PVU8gJwH6CtT0e6VSoD0+SzSnYpNm+dBkcijgA+K7VAMHDfnRq/lkKPZArpzplTW6jfiMYosdzw==", "dev": true, "license": "MIT" }, "node_modules/electron-localshortcut": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/electron-localshortcut/-/electron-localshortcut-3.2.1.tgz", - "integrity": "sha512-DWvhKv36GsdXKnaFFhEiK8kZZA+24/yFLgtTwJJHc7AFgDjNRIBJZ/jq62Y/dWv9E4ypYwrVWN2bVrCYw1uv7Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6112,8 +5527,6 @@ }, "node_modules/electron-publish": { "version": "22.11.7", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.11.7.tgz", - "integrity": "sha512-A4EhRRNBVz4SPzUlBrPO6BmuyDeI0pyprggPAV9rQ+SDVSnSB/WKPot9JwWMyArkGj3AUUTMNVT6hwZhMvhfqw==", "dev": true, "license": "MIT", "dependencies": { @@ -6128,8 +5541,6 @@ }, "node_modules/electron-reloader": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/electron-reloader/-/electron-reloader-1.2.1.tgz", - "integrity": "sha512-S7rcXXImlGXsEAGwB8tJ/nLrvAFzO95IS0Ux27A8XjRrDRFKj46O2aahaZ9D908FIj+BzywgNCofHQO5EhwioA==", "dev": true, "license": "MIT", "dependencies": { @@ -6145,8 +5556,6 @@ }, "node_modules/electron-to-chromium": { "version": "1.3.756", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.756.tgz", - "integrity": "sha512-WsmJym1TMeHVndjPjczTFbnRR/c4sbzg8fBFtuhlb2Sru3i/S1VGpzDSrv/It8ctMU2bj8G7g7/O3FzYMGw6eA==", "dev": true, "license": "ISC" }, @@ -6162,8 +5571,6 @@ }, "node_modules/elliptic": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6178,15 +5585,11 @@ }, "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, "license": "MIT" }, "node_modules/emojis-list": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, "license": "MIT", "engines": { @@ -6195,8 +5598,6 @@ }, "node_modules/emphasize": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/emphasize/-/emphasize-4.2.0.tgz", - "integrity": "sha512-yGKvcFUHlBsUPwlxTlzKLR8+zhpbitkFOMCUxN8fTJng9bdH3WNzUGkhdaGdjndSUgqmMPBN7umfwnUdLz5Axg==", "dev": true, "license": "MIT", "dependencies": { @@ -6211,8 +5612,6 @@ }, "node_modules/encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true, "license": "MIT", "engines": { @@ -6221,8 +5620,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -6231,8 +5628,6 @@ }, "node_modules/entities": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, "license": "BSD-2-Clause", "funding": { @@ -6241,8 +5636,6 @@ }, "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, "license": "MIT", "engines": { @@ -6251,8 +5644,6 @@ }, "node_modules/error-ex": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "license": "MIT", "dependencies": { @@ -6261,8 +5652,6 @@ }, "node_modules/es-abstract": { "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", "dev": true, "license": "MIT", "dependencies": { @@ -6290,10 +5679,45 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-to-primitive": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "license": "MIT", "dependencies": { @@ -6310,23 +5734,17 @@ }, "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, "license": "MIT", "optional": true }, "node_modules/es6-object-assign": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=", "dev": true, "license": "MIT" }, "node_modules/escalade": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, "license": "MIT", "engines": { @@ -6335,8 +5753,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, "license": "MIT", "engines": { @@ -6345,15 +5761,11 @@ }, "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", "dev": true, "license": "MIT" }, "node_modules/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, "license": "MIT", "engines": { @@ -6362,8 +5774,6 @@ }, "node_modules/escodegen": { "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6385,8 +5795,6 @@ }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "license": "BSD-2-Clause", "bin": { @@ -6399,8 +5807,6 @@ }, "node_modules/estraverse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -6409,15 +5815,11 @@ }, "node_modules/estree-walker": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true, "license": "MIT" }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -6426,15 +5828,11 @@ }, "node_modules/eventemitter3": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true, "license": "MIT" }, "node_modules/events": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "license": "MIT", "engines": { @@ -6443,8 +5841,6 @@ }, "node_modules/evp_bytestokey": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "license": "MIT", "dependencies": { @@ -6454,8 +5850,6 @@ }, "node_modules/expand-brackets": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "license": "MIT", "dependencies": { @@ -6473,8 +5867,6 @@ }, "node_modules/expand-brackets/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, "license": "MIT", "dependencies": { @@ -6483,22 +5875,16 @@ }, "node_modules/expand-brackets/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true, "license": "MIT" }, "node_modules/extend": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true, "license": "MIT" }, "node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "license": "MIT", "dependencies": { @@ -6510,8 +5896,6 @@ }, "node_modules/extglob": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "license": "MIT", "dependencies": { @@ -6530,8 +5914,6 @@ }, "node_modules/extglob/node_modules/define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "license": "MIT", "dependencies": { @@ -6543,8 +5925,6 @@ }, "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, "license": "BSD-2-Clause", "dependencies": { @@ -6562,27 +5942,13 @@ "@types/yauzl": "^2.9.1" } }, - "node_modules/extsprintf": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.0.tgz", - "integrity": "sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT" - }, "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, "license": "MIT" }, "node_modules/fast-glob": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.1.tgz", - "integrity": "sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g==", "dev": true, "license": "MIT", "dependencies": { @@ -6598,22 +5964,16 @@ }, "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, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true, "license": "MIT" }, "node_modules/fast-url-parser": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", "dev": true, "license": "MIT", "dependencies": { @@ -6622,29 +5982,21 @@ }, "node_modules/fast-url-parser/node_modules/punycode": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true, "license": "MIT" }, "node_modules/fastest-levenshtein": { "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", "dev": true, "license": "MIT" }, "node_modules/fastparse": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", "dev": true, "license": "MIT" }, "node_modules/fastq": { "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", "dev": true, "license": "ISC", "dependencies": { @@ -6653,8 +6005,6 @@ }, "node_modules/fault": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", "dev": true, "license": "MIT", "dependencies": { @@ -6667,8 +6017,6 @@ }, "node_modules/fd-slicer": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "dev": true, "license": "MIT", "dependencies": { @@ -6677,8 +6025,6 @@ }, "node_modules/filelist": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", - "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -6687,8 +6033,6 @@ }, "node_modules/filesize": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.3.0.tgz", - "integrity": "sha512-ytx0ruGpDHKWVoiui6+BY/QMNngtDQ/pJaFwfBpQif0J63+E8DLdFyqS3NkKQn7vIruUEpoGD9JUJSg7Kp+I0g==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -6697,8 +6041,6 @@ }, "node_modules/fill-range": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6710,8 +6052,6 @@ }, "node_modules/finalhandler": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "license": "MIT", "dependencies": { @@ -6729,8 +6069,6 @@ }, "node_modules/finalhandler/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, "license": "MIT", "dependencies": { @@ -6739,15 +6077,11 @@ }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true, "license": "MIT" }, "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -6763,9 +6097,6 @@ }, "node_modules/follow-redirects": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", - "dev": true, "funding": [ { "type": "individual", @@ -6784,8 +6115,6 @@ }, "node_modules/for-in": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true, "license": "MIT", "engines": { @@ -6794,15 +6123,11 @@ }, "node_modules/foreach": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "dev": true, "license": "MIT" }, "node_modules/forever-agent": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true, "license": "Apache-2.0", "engines": { @@ -6810,24 +6135,21 @@ } }, "node_modules/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, + "version": "4.0.3", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { - "node": ">= 0.12" + "node": ">= 6" } }, "node_modules/format": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", "dev": true, "engines": { "node": ">=0.4.x" @@ -6835,8 +6157,6 @@ }, "node_modules/fragment-cache": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "license": "MIT", "dependencies": { @@ -6848,8 +6168,6 @@ }, "node_modules/fs-extra": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6863,22 +6181,18 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true, "license": "ISC" }, "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, - "license": "MIT" + "version": "1.1.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/generic-names": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz", - "integrity": "sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6887,8 +6201,6 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "license": "MIT", "engines": { @@ -6897,8 +6209,6 @@ }, "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, "license": "ISC", "engines": { @@ -6906,15 +6216,22 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, + "version": "1.3.0", "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6922,18 +6239,25 @@ }, "node_modules/get-port": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", - "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==", "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "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, "license": "MIT", "dependencies": { @@ -6948,8 +6272,6 @@ }, "node_modules/get-value": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true, "license": "MIT", "engines": { @@ -6958,8 +6280,6 @@ }, "node_modules/getpass": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "license": "MIT", "dependencies": { @@ -6968,8 +6288,6 @@ }, "node_modules/glob": { "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "license": "ISC", "dependencies": { @@ -6989,8 +6307,6 @@ }, "node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -7002,8 +6318,6 @@ }, "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, "license": "BSD-3-Clause", "optional": true, @@ -7021,8 +6335,6 @@ }, "node_modules/global-agent/node_modules/semver": { "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "license": "ISC", "optional": true, @@ -7038,8 +6350,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -7054,8 +6364,6 @@ }, "node_modules/globals": { "version": "13.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", - "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", "dev": true, "license": "MIT", "dependencies": { @@ -7070,8 +6378,6 @@ }, "node_modules/globalthis": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", - "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", "dev": true, "license": "MIT", "optional": true, @@ -7087,8 +6393,6 @@ }, "node_modules/globby": { "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, "license": "MIT", "dependencies": { @@ -7108,8 +6412,6 @@ }, "node_modules/globby/node_modules/fast-glob": { "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", "dev": true, "license": "MIT", "dependencies": { @@ -7124,10 +6426,18 @@ "node": ">=8" } }, + "node_modules/gopd": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/got": { "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dev": true, "license": "MIT", "dependencies": { @@ -7152,22 +6462,16 @@ }, "node_modules/graceful-fs": { "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true, "license": "ISC" }, "node_modules/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, "license": "MIT" }, "node_modules/har-schema": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "dev": true, "license": "ISC", "engines": { @@ -7176,8 +6480,6 @@ }, "node_modules/har-validator": { "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "dev": true, "license": "MIT", "dependencies": { @@ -7190,8 +6492,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -7203,8 +6503,6 @@ }, "node_modules/has-ansi": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "license": "MIT", "dependencies": { @@ -7216,8 +6514,6 @@ }, "node_modules/has-bigints": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true, "license": "MIT", "funding": { @@ -7226,8 +6522,6 @@ }, "node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, "license": "MIT", "engines": { @@ -7235,11 +6529,21 @@ } }, "node_modules/has-symbols": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, "engines": { "node": ">= 0.4" }, @@ -7249,8 +6553,6 @@ }, "node_modules/has-value": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "license": "MIT", "dependencies": { @@ -7264,8 +6566,6 @@ }, "node_modules/has-values": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "license": "MIT", "dependencies": { @@ -7278,8 +6578,6 @@ }, "node_modules/has-values/node_modules/kind-of": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "license": "MIT", "dependencies": { @@ -7291,8 +6589,6 @@ }, "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, "license": "MIT", "engines": { @@ -7301,8 +6597,6 @@ }, "node_modules/hash-base": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "license": "MIT", "dependencies": { @@ -7316,15 +6610,11 @@ }, "node_modules/hash-sum": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", - "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", "dev": true, "license": "MIT" }, "node_modules/hash.js": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "license": "MIT", "dependencies": { @@ -7332,17 +6622,23 @@ "minimalistic-assert": "^1.0.1" } }, + "node_modules/hasown": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hex-color-regex": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", "dev": true, "license": "MIT" }, "node_modules/highlight.js": { "version": "10.4.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.4.1.tgz", - "integrity": "sha512-yR5lWvNz7c85OhVAEAeFhVCc/GV4C30Fjzc/rCP0aCWzc1UUOPUk55dK/qdwTZHBvMZo+eZ2jpk62ndX/xMFlg==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -7351,8 +6647,6 @@ }, "node_modules/hmac-drbg": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "license": "MIT", "dependencies": { @@ -7363,8 +6657,6 @@ }, "node_modules/hosted-git-info": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", "dev": true, "license": "ISC", "dependencies": { @@ -7376,32 +6668,36 @@ }, "node_modules/hsl-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", "dev": true, "license": "MIT" }, "node_modules/hsla-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", "dev": true, "license": "MIT" }, "node_modules/html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, + "version": "3.0.0", "license": "MIT", "dependencies": { - "whatwg-encoding": "^1.0.1" + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-encoding-sniffer/node_modules/whatwg-encoding": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" } }, "node_modules/html-tags": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-1.2.0.tgz", - "integrity": "sha1-x43mW1Zjqll5id0rerSSANfk25g=", "dev": true, "license": "MIT", "engines": { @@ -7410,8 +6706,6 @@ }, "node_modules/htmlnano": { "version": "0.2.9", - "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-0.2.9.tgz", - "integrity": "sha512-jWTtP3dCd7R8x/tt9DK3pvpcQd7HDMcRPUqPxr/i9989q2k5RHIhmlRDFeyQ/LSd8IKrteG8Ce5g0Ig4eGIipg==", "dev": true, "license": "MIT", "dependencies": { @@ -7428,8 +6722,6 @@ }, "node_modules/htmlparser2": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz", - "integrity": "sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7444,8 +6736,6 @@ }, "node_modules/htmlparser2/node_modules/domhandler": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", - "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -7460,15 +6750,11 @@ }, "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, "license": "BSD-2-Clause" }, "node_modules/http-proxy": { "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7480,10 +6766,20 @@ "node": ">=8.0.0" } }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/http-proxy-middleware": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", - "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==", "dev": true, "license": "MIT", "dependencies": { @@ -7499,8 +6795,6 @@ }, "node_modules/http-signature": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "license": "MIT", "dependencies": { @@ -7515,8 +6809,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, "license": "MIT", "dependencies": { @@ -7529,15 +6821,22 @@ }, "node_modules/https-browserify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true, "license": "MIT" }, - "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==", + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -7548,15 +6847,11 @@ }, "node_modules/icss-replace-symbols": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", "dev": true, "license": "ISC" }, "node_modules/icss-utils": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", "dev": true, "license": "ISC", "dependencies": { @@ -7568,8 +6863,6 @@ }, "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": [ { @@ -7589,8 +6882,6 @@ }, "node_modules/iferr": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-1.0.2.tgz", - "integrity": "sha512-9AfeLfji44r5TKInjhz3W9DyZI1zR1JAf2hVBMGhddAKPqBsupb89jGfbCTHIGZd6fGZl9WlHdn4AObygyMKwg==", "dev": true, "license": "MIT", "engines": { @@ -7599,8 +6890,6 @@ }, "node_modules/ignore": { "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true, "license": "MIT", "engines": { @@ -7609,8 +6898,6 @@ }, "node_modules/import-fresh": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "dev": true, "license": "MIT", "dependencies": { @@ -7623,8 +6910,6 @@ }, "node_modules/import-lazy": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", "dev": true, "license": "MIT", "engines": { @@ -7633,8 +6918,6 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true, "license": "MIT", "engines": { @@ -7643,15 +6926,11 @@ }, "node_modules/indexes-of": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", "dev": true, "license": "MIT" }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "license": "ISC", "dependencies": { @@ -7661,15 +6940,11 @@ }, "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, "license": "ISC" }, "node_modules/ini": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true, "license": "ISC", "engines": { @@ -7678,16 +6953,13 @@ }, "node_modules/internmap": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/is-absolute-url": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", "dev": true, "license": "MIT", "engines": { @@ -7696,8 +6968,6 @@ }, "node_modules/is-accessor-descriptor": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7709,8 +6979,6 @@ }, "node_modules/is-accessor-descriptor/node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "license": "MIT", "engines": { @@ -7719,8 +6987,6 @@ }, "node_modules/is-arguments": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", "dev": true, "license": "MIT", "dependencies": { @@ -7735,15 +7001,11 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true, "license": "MIT" }, "node_modules/is-bigint": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", "dev": true, "license": "MIT", "funding": { @@ -7752,8 +7014,6 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "license": "MIT", "dependencies": { @@ -7765,8 +7025,6 @@ }, "node_modules/is-boolean-object": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", "dev": true, "license": "MIT", "dependencies": { @@ -7781,15 +7039,11 @@ }, "node_modules/is-buffer": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true, "license": "MIT" }, "node_modules/is-callable": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", "dev": true, "license": "MIT", "engines": { @@ -7801,8 +7055,6 @@ }, "node_modules/is-ci": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", - "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7814,8 +7066,6 @@ }, "node_modules/is-color-stop": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", "dev": true, "license": "MIT", "dependencies": { @@ -7829,8 +7079,6 @@ }, "node_modules/is-core-module": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", "dev": true, "license": "MIT", "dependencies": { @@ -7842,8 +7090,6 @@ }, "node_modules/is-data-descriptor": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7855,8 +7101,6 @@ }, "node_modules/is-data-descriptor/node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "license": "MIT", "engines": { @@ -7865,8 +7109,6 @@ }, "node_modules/is-date-object": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", "dev": true, "license": "MIT", "engines": { @@ -7878,8 +7120,6 @@ }, "node_modules/is-descriptor": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "license": "MIT", "dependencies": { @@ -7893,8 +7133,6 @@ }, "node_modules/is-descriptor/node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "license": "MIT", "engines": { @@ -7903,8 +7141,6 @@ }, "node_modules/is-directory": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true, "license": "MIT", "engines": { @@ -7913,8 +7149,6 @@ }, "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==", "dev": true, "license": "MIT", "bin": { @@ -7929,8 +7163,6 @@ }, "node_modules/is-extendable": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true, "license": "MIT", "engines": { @@ -7939,8 +7171,6 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true, "license": "MIT", "engines": { @@ -7948,19 +7178,15 @@ } }, "node_modules/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=", + "version": "3.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/is-generator-function": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", - "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==", "dev": true, "license": "MIT", "engines": { @@ -7972,8 +7198,6 @@ }, "node_modules/is-glob": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "license": "MIT", "dependencies": { @@ -7985,8 +7209,6 @@ }, "node_modules/is-html": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-html/-/is-html-1.1.0.tgz", - "integrity": "sha1-4E8cGNOUhRETlvmgJz6rUa8hhGQ=", "dev": true, "license": "MIT", "dependencies": { @@ -7998,8 +7220,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -8015,8 +7235,6 @@ }, "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, "license": "MIT", "engines": { @@ -8025,8 +7243,6 @@ }, "node_modules/is-nan": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", "dev": true, "license": "MIT", "dependencies": { @@ -8042,8 +7258,6 @@ }, "node_modules/is-negative-zero": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", "dev": true, "license": "MIT", "engines": { @@ -8055,8 +7269,6 @@ }, "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, "license": "MIT", "engines": { @@ -8068,8 +7280,6 @@ }, "node_modules/is-number": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "license": "MIT", "dependencies": { @@ -8081,8 +7291,6 @@ }, "node_modules/is-number-object": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", "dev": true, "license": "MIT", "engines": { @@ -8094,8 +7302,6 @@ }, "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, "license": "MIT", "engines": { @@ -8104,8 +7310,6 @@ }, "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, "license": "MIT", "engines": { @@ -8114,8 +7318,6 @@ }, "node_modules/is-plain-obj": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, "license": "MIT", "engines": { @@ -8127,8 +7329,6 @@ }, "node_modules/is-plain-object": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "license": "MIT", "dependencies": { @@ -8138,10 +7338,12 @@ "node": ">=0.10.0" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "license": "MIT" + }, "node_modules/is-regex": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8157,15 +7359,11 @@ }, "node_modules/is-resolvable": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true, "license": "ISC" }, "node_modules/is-string": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", "dev": true, "license": "MIT", "engines": { @@ -8177,8 +7375,6 @@ }, "node_modules/is-symbol": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "license": "MIT", "dependencies": { @@ -8193,8 +7389,6 @@ }, "node_modules/is-typed-array": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", - "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", "dev": true, "license": "MIT", "dependencies": { @@ -8213,15 +7407,11 @@ }, "node_modules/is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true, "license": "MIT" }, "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, "license": "MIT", "engines": { @@ -8233,15 +7423,11 @@ }, "node_modules/is-url": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", "dev": true, "license": "MIT" }, "node_modules/is-windows": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, "license": "MIT", "engines": { @@ -8250,8 +7436,6 @@ }, "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==", "dev": true, "license": "MIT", "dependencies": { @@ -8263,22 +7447,16 @@ }, "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, "license": "MIT" }, "node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true, "license": "MIT" }, "node_modules/isbinaryfile": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", - "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", "dev": true, "license": "MIT", "engines": { @@ -8290,15 +7468,11 @@ }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true, "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "license": "MIT", "engines": { @@ -8307,15 +7481,11 @@ }, "node_modules/isstream": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true, "license": "MIT" }, "node_modules/jake": { "version": "10.8.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", - "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -8333,8 +7503,6 @@ }, "node_modules/jake/node_modules/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, "license": "MIT", "dependencies": { @@ -8346,8 +7514,6 @@ }, "node_modules/jake/node_modules/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, "license": "MIT", "dependencies": { @@ -8361,8 +7527,6 @@ }, "node_modules/jake/node_modules/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, "license": "MIT", "dependencies": { @@ -8374,9 +7538,6 @@ }, "node_modules/joi": { "version": "17.4.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.0.tgz", - "integrity": "sha512-F4WiW2xaV6wc1jxete70Rw4V/VuMd6IN+a5ilZsxG4uYtUXWu2kq9W5P2dz30e7Gmw8RCbY/u/uk+dMPma9tAg==", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0", @@ -8386,17 +7547,23 @@ "@sideway/pinpoint": "^2.0.0" } }, + "node_modules/js-interpreter": { + "version": "5.2.1", + "license": "Apache-2.0", + "dependencies": { + "minimist": "^1.2.8" + }, + "bin": { + "js-interpreter": "lib/cli.min.js" + } + }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, "license": "MIT" }, "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, "license": "MIT", "dependencies": { @@ -8408,63 +7575,116 @@ }, "node_modules/jsbn": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true, "license": "MIT" }, "node_modules/jsdom": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz", - "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==", - "dev": true, + "version": "22.1.0", + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "cssstyle": "^3.0.0", + "data-urls": "^4.0.0", + "decimal.js": "^10.4.3", + "domexception": "^4.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.4", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.1", + "ws": "^8.13.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/decimal.js": { + "version": "10.5.0", + "license": "MIT" + }, + "node_modules/jsdom/node_modules/domexception": { + "version": "4.0.0", "license": "MIT", "dependencies": { - "abab": "^2.0.0", - "acorn": "^6.0.4", - "acorn-globals": "^4.3.0", - "array-equal": "^1.0.0", - "cssom": "^0.3.4", - "cssstyle": "^1.1.1", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.0", - "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.1.3", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.5", - "saxes": "^3.1.9", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.5.0", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.1.2", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^6.1.2", - "xml-name-validator": "^3.0.0" + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/jsdom/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "dev": true, + "node_modules/jsdom/node_modules/tough-cookie": { + "version": "4.1.4", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsdom/node_modules/universalify": { + "version": "0.2.0", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "7.0.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/whatwg-encoding": { + "version": "2.0.0", "license": "MIT", "dependencies": { - "async-limiter": "~1.0.0" + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/whatwg-mimetype": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/xml-name-validator": { + "version": "4.0.0", + "license": "Apache-2.0", + "engines": { + "node": ">=12" } }, "node_modules/jsesc": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, "license": "MIT", "bin": { @@ -8476,49 +7696,35 @@ }, "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, "license": "MIT" }, "node_modules/json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true, "license": "MIT" }, "node_modules/json-schema": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "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, "license": "MIT" }, "node_modules/json-source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/json-source-map/-/json-source-map-0.6.1.tgz", - "integrity": "sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==", "dev": true, "license": "MIT" }, "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": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true, "license": "ISC" }, "node_modules/json5": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "license": "MIT", "dependencies": { @@ -8530,8 +7736,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -8543,8 +7747,6 @@ }, "node_modules/jsprim": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "engines": [ "node >=0.6.0" @@ -8559,8 +7761,27 @@ }, "node_modules/jsprim/node_modules/extsprintf": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/jsprim/node_modules/verror": { + "version": "1.10.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/jsprim/node_modules/verror/node_modules/extsprintf": { + "version": "1.4.0", "dev": true, "engines": [ "node >=0.6.0" @@ -8569,22 +7790,16 @@ }, "node_modules/keyboardevent-from-electron-accelerator": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/keyboardevent-from-electron-accelerator/-/keyboardevent-from-electron-accelerator-2.0.0.tgz", - "integrity": "sha512-iQcmNA0M4ETMNi0kG/q0h/43wZk7rMeKYrXP7sqKIJbHkTU8Koowgzv+ieR/vWJbOwxx5nDC3UnudZ0aLSu4VA==", "dev": true, "license": "MIT" }, "node_modules/keyboardevents-areequal": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/keyboardevents-areequal/-/keyboardevents-areequal-0.2.2.tgz", - "integrity": "sha512-Nv+Kr33T0mEjxR500q+I6IWisOQ0lK1GGOncV0kWE6n4KFmpcu7RUX5/2B0EUtX51Cb0HjZ9VJsSY3u4cBa0kw==", "dev": true, "license": "MIT" }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { @@ -8593,8 +7808,6 @@ }, "node_modules/kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "license": "MIT", "dependencies": { @@ -8606,8 +7819,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -8619,15 +7830,11 @@ }, "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, "license": "MIT" }, "node_modules/levn": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "license": "MIT", "dependencies": { @@ -8640,8 +7847,6 @@ }, "node_modules/loader-utils": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "license": "MIT", "dependencies": { @@ -8655,8 +7860,6 @@ }, "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -8671,43 +7874,30 @@ }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, "license": "MIT" }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", "dev": true, "license": "MIT" }, "node_modules/lodash.memoize": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true, "license": "MIT" }, "node_modules/lodash.sortby": { "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", "dev": true, "license": "MIT" }, "node_modules/lodash.uniq": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", "dev": true, "license": "MIT" }, "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, "license": "MIT", "dependencies": { @@ -8723,8 +7913,6 @@ }, "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, "license": "MIT", "engines": { @@ -8733,8 +7921,6 @@ }, "node_modules/lowlight": { "version": "1.17.0", - "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.17.0.tgz", - "integrity": "sha512-vmtBgYKD+QVNy7tIa7ulz5d//Il9R4MooOVh4nkOf9R9Cb/Dk5TXMSTieg/vDulkBkIWj59/BIlyFQxT9X1oAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8748,8 +7934,6 @@ }, "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, "license": "ISC", "dependencies": { @@ -8761,8 +7945,6 @@ }, "node_modules/magic-string": { "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", "dev": true, "license": "MIT", "dependencies": { @@ -8771,8 +7953,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, "license": "MIT", "dependencies": { @@ -8787,8 +7967,6 @@ }, "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, "license": "ISC", "bin": { @@ -8797,8 +7975,6 @@ }, "node_modules/map-cache": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true, "license": "MIT", "engines": { @@ -8807,8 +7983,6 @@ }, "node_modules/map-visit": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "license": "MIT", "dependencies": { @@ -8820,8 +7994,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, "license": "MIT", "optional": true, @@ -8834,8 +8006,6 @@ }, "node_modules/matcher/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, "license": "MIT", "optional": true, @@ -8846,10 +8016,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/md5.js": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "license": "MIT", "dependencies": { @@ -8860,15 +8035,11 @@ }, "node_modules/mdn-data": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", "dev": true, "license": "CC0-1.0" }, "node_modules/merge-source-map": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "dev": true, "license": "MIT", "dependencies": { @@ -8877,8 +8048,6 @@ }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { @@ -8887,8 +8056,6 @@ }, "node_modules/micromatch": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "license": "MIT", "dependencies": { @@ -8901,8 +8068,6 @@ }, "node_modules/miller-rabin": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "license": "MIT", "dependencies": { @@ -8915,8 +8080,6 @@ }, "node_modules/mime": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", "dev": true, "license": "MIT", "bin": { @@ -8928,9 +8091,6 @@ }, "node_modules/mime-db": { "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -8938,9 +8098,6 @@ }, "node_modules/mime-types": { "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", - "dev": true, "license": "MIT", "dependencies": { "mime-db": "1.48.0" @@ -8951,8 +8108,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, "license": "MIT", "engines": { @@ -8961,8 +8116,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, "license": "MIT", "engines": { @@ -8971,22 +8124,16 @@ }, "node_modules/minimalistic-assert": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true, "license": "ISC" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", "dev": true, "license": "MIT" }, "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, "license": "ISC", "dependencies": { @@ -8997,16 +8144,14 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true, - "license": "MIT" + "version": "1.2.8", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/mixin-deep": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "license": "MIT", "dependencies": { @@ -9019,8 +8164,6 @@ }, "node_modules/mixin-deep/node_modules/is-extendable": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "license": "MIT", "dependencies": { @@ -9032,8 +8175,6 @@ }, "node_modules/mkdirp": { "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9045,15 +8186,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==", - "dev": true, "license": "MIT" }, "node_modules/nanoid": { "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", "dev": true, "license": "MIT", "bin": { @@ -9065,8 +8201,6 @@ }, "node_modules/nanomatch": { "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "license": "MIT", "dependencies": { @@ -9088,8 +8222,6 @@ }, "node_modules/nanomatch/node_modules/define-property": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9102,8 +8234,6 @@ }, "node_modules/nanomatch/node_modules/extend-shallow": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "license": "MIT", "dependencies": { @@ -9116,8 +8246,6 @@ }, "node_modules/nanomatch/node_modules/is-extendable": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "license": "MIT", "dependencies": { @@ -9129,8 +8257,6 @@ }, "node_modules/nanomatch/node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "license": "MIT", "engines": { @@ -9139,8 +8265,6 @@ }, "node_modules/ncp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", "dev": true, "license": "MIT", "bin": { @@ -9149,22 +8273,16 @@ }, "node_modules/nice-try": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true, "license": "MIT" }, "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, "license": "MIT" }, "node_modules/node-forge": { "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", "dev": true, "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { @@ -9173,8 +8291,6 @@ }, "node_modules/node-gyp-build": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz", - "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==", "dev": true, "license": "MIT", "bin": { @@ -9185,15 +8301,11 @@ }, "node_modules/node-releases": { "version": "1.1.73", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", - "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", "dev": true, "license": "MIT" }, "node_modules/normalize-package-data": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -9205,15 +8317,11 @@ }, "node_modules/normalize-package-data/node_modules/hosted-git-info": { "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, "license": "ISC" }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "license": "MIT", "engines": { @@ -9222,8 +8330,6 @@ }, "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, "license": "MIT", "engines": { @@ -9235,8 +8341,6 @@ }, "node_modules/nth-check": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -9245,22 +8349,15 @@ }, "node_modules/nullthrows": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", "dev": true, "license": "MIT" }, "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true, + "version": "2.2.20", "license": "MIT" }, "node_modules/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, "license": "Apache-2.0", "engines": { @@ -9269,8 +8366,6 @@ }, "node_modules/object-copy": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "license": "MIT", "dependencies": { @@ -9284,8 +8379,6 @@ }, "node_modules/object-inspect": { "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", "dev": true, "license": "MIT", "funding": { @@ -9294,8 +8387,6 @@ }, "node_modules/object-is": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "license": "MIT", "dependencies": { @@ -9311,8 +8402,6 @@ }, "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, "license": "MIT", "engines": { @@ -9321,8 +8410,6 @@ }, "node_modules/object-visit": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "license": "MIT", "dependencies": { @@ -9334,8 +8421,6 @@ }, "node_modules/object.assign": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9353,8 +8438,6 @@ }, "node_modules/object.getownpropertydescriptors": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9371,8 +8454,6 @@ }, "node_modules/object.pick": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "license": "MIT", "dependencies": { @@ -9384,8 +8465,6 @@ }, "node_modules/object.values": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", "dev": true, "license": "MIT", "dependencies": { @@ -9402,8 +8481,6 @@ }, "node_modules/on-finished": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "dev": true, "license": "MIT", "dependencies": { @@ -9415,8 +8492,6 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "license": "ISC", "dependencies": { @@ -9425,8 +8500,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -9441,8 +8514,6 @@ }, "node_modules/open": { "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9458,8 +8529,6 @@ }, "node_modules/optionator": { "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "license": "MIT", "dependencies": { @@ -9476,8 +8545,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -9500,15 +8567,11 @@ }, "node_modules/os-browserify": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true, "license": "MIT" }, "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, "license": "MIT", "engines": { @@ -9517,8 +8580,6 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9533,8 +8594,6 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -9549,8 +8608,6 @@ }, "node_modules/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, "license": "MIT", "engines": { @@ -9559,8 +8616,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -9598,8 +8653,6 @@ }, "node_modules/package-json/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, "license": "MIT", "dependencies": { @@ -9617,8 +8670,6 @@ }, "node_modules/package-json/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, "license": "MIT", "dependencies": { @@ -9633,8 +8684,6 @@ }, "node_modules/package-json/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, "license": "MIT", "engines": { @@ -9643,8 +8692,6 @@ }, "node_modules/package-json/node_modules/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, "license": "MIT", "dependencies": { @@ -9656,15 +8703,11 @@ }, "node_modules/package-json/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, "license": "MIT" }, "node_modules/package-json/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, "license": "MIT", "dependencies": { @@ -9676,8 +8719,6 @@ }, "node_modules/package-json/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, "license": "MIT", "dependencies": { @@ -9699,15 +8740,11 @@ }, "node_modules/package-json/node_modules/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, "license": "MIT" }, "node_modules/package-json/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, "license": "MIT", "dependencies": { @@ -9716,8 +8753,6 @@ }, "node_modules/package-json/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, "license": "MIT", "engines": { @@ -9726,8 +8761,6 @@ }, "node_modules/package-json/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, "license": "MIT", "engines": { @@ -9736,8 +8769,6 @@ }, "node_modules/package-json/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, "license": "MIT", "engines": { @@ -9746,8 +8777,6 @@ }, "node_modules/package-json/node_modules/responselike": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", "dev": true, "license": "MIT", "dependencies": { @@ -9756,8 +8785,6 @@ }, "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, "license": "ISC", "bin": { @@ -9766,15 +8793,11 @@ }, "node_modules/pako": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true, "license": "(MIT AND Zlib)" }, "node_modules/parcel": { "version": "2.0.0-beta.3.1", - "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.0.0-beta.3.1.tgz", - "integrity": "sha512-jwNwDM/OILzzBAIMZZ/b+PA5DFQ+4ZTaINliSslyY/ZOfwjjkHMlmMddyj6iogLq+n74LE8pBGn3+V5ej4CH1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9806,8 +8829,6 @@ }, "node_modules/parcel/node_modules/commander": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, "license": "MIT", "engines": { @@ -9816,8 +8837,6 @@ }, "node_modules/parse-asn1": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, "license": "ISC", "dependencies": { @@ -9830,8 +8849,6 @@ }, "node_modules/parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "license": "MIT", "dependencies": { @@ -9843,16 +8860,27 @@ } }, "node_modules/parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", - "dev": true, - "license": "MIT" + "version": "7.3.0", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, "license": "MIT", "engines": { @@ -9861,8 +8889,6 @@ }, "node_modules/pascalcase": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true, "license": "MIT", "engines": { @@ -9871,15 +8897,11 @@ }, "node_modules/path-browserify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true, "license": "MIT" }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -9888,8 +8910,6 @@ }, "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "license": "MIT", "engines": { @@ -9898,15 +8918,11 @@ }, "node_modules/path-is-inside": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", "dev": true, "license": "(WTFPL OR MIT)" }, "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, "license": "MIT", "engines": { @@ -9915,22 +8931,16 @@ }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true, "license": "MIT" }, "node_modules/path-to-regexp": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==", "dev": true, "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "license": "MIT", "engines": { @@ -9939,8 +8949,6 @@ }, "node_modules/pbkdf2": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "license": "MIT", "dependencies": { @@ -9956,22 +8964,16 @@ }, "node_modules/pend": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", "dev": true, "license": "MIT" }, "node_modules/performance-now": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true, "license": "MIT" }, "node_modules/picomatch": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true, "license": "MIT", "engines": { @@ -9983,8 +8985,6 @@ }, "node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, "license": "MIT", "engines": { @@ -9993,15 +8993,11 @@ }, "node_modules/pn": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", "dev": true, "license": "MIT" }, "node_modules/posix-character-classes": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true, "license": "MIT", "engines": { @@ -10010,8 +9006,6 @@ }, "node_modules/postcss": { "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "license": "MIT", "dependencies": { @@ -10029,8 +9023,6 @@ }, "node_modules/postcss-calc": { "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", "dev": true, "license": "MIT", "dependencies": { @@ -10041,15 +9033,11 @@ }, "node_modules/postcss-calc/node_modules/postcss-value-parser": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true, "license": "MIT" }, "node_modules/postcss-colormin": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", "dev": true, "license": "MIT", "dependencies": { @@ -10065,8 +9053,6 @@ }, "node_modules/postcss-convert-values": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10079,8 +9065,6 @@ }, "node_modules/postcss-discard-comments": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", "dev": true, "license": "MIT", "dependencies": { @@ -10092,8 +9076,6 @@ }, "node_modules/postcss-discard-duplicates": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10105,8 +9087,6 @@ }, "node_modules/postcss-discard-empty": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", "dev": true, "license": "MIT", "dependencies": { @@ -10118,8 +9098,6 @@ }, "node_modules/postcss-discard-overridden": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", "dev": true, "license": "MIT", "dependencies": { @@ -10131,8 +9109,6 @@ }, "node_modules/postcss-merge-longhand": { "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", "dev": true, "license": "MIT", "dependencies": { @@ -10147,8 +9123,6 @@ }, "node_modules/postcss-merge-rules": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10165,8 +9139,6 @@ }, "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", "dev": true, "license": "MIT", "dependencies": { @@ -10180,8 +9152,6 @@ }, "node_modules/postcss-minify-font-values": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", "dev": true, "license": "MIT", "dependencies": { @@ -10194,8 +9164,6 @@ }, "node_modules/postcss-minify-gradients": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10210,8 +9178,6 @@ }, "node_modules/postcss-minify-params": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", "dev": true, "license": "MIT", "dependencies": { @@ -10228,8 +9194,6 @@ }, "node_modules/postcss-minify-selectors": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", "dev": true, "license": "MIT", "dependencies": { @@ -10244,8 +9208,6 @@ }, "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", "dev": true, "license": "MIT", "dependencies": { @@ -10259,8 +9221,6 @@ }, "node_modules/postcss-modules": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-3.2.2.tgz", - "integrity": "sha512-JQ8IAqHELxC0N6tyCg2UF40pACY5oiL6UpiqqcIFRWqgDYO8B0jnxzoQ0EOpPrWXvcpu6BSbQU/3vSiq7w8Nhw==", "dev": true, "license": "MIT", "dependencies": { @@ -10277,8 +9237,6 @@ }, "node_modules/postcss-modules-extract-imports": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", - "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", "dev": true, "license": "ISC", "dependencies": { @@ -10287,8 +9245,6 @@ }, "node_modules/postcss-modules-extract-imports/node_modules/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, "license": "MIT", "dependencies": { @@ -10300,8 +9256,6 @@ }, "node_modules/postcss-modules-extract-imports/node_modules/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, "license": "MIT", "dependencies": { @@ -10315,8 +9269,6 @@ }, "node_modules/postcss-modules-extract-imports/node_modules/postcss": { "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "license": "MIT", "dependencies": { @@ -10330,8 +9282,6 @@ }, "node_modules/postcss-modules-extract-imports/node_modules/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, "license": "MIT", "dependencies": { @@ -10343,8 +9293,6 @@ }, "node_modules/postcss-modules-local-by-default": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", "dev": true, "license": "MIT", "dependencies": { @@ -10354,8 +9302,6 @@ }, "node_modules/postcss-modules-local-by-default/node_modules/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, "license": "MIT", "dependencies": { @@ -10367,8 +9313,6 @@ }, "node_modules/postcss-modules-local-by-default/node_modules/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, "license": "MIT", "dependencies": { @@ -10382,8 +9326,6 @@ }, "node_modules/postcss-modules-local-by-default/node_modules/postcss": { "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "license": "MIT", "dependencies": { @@ -10397,8 +9339,6 @@ }, "node_modules/postcss-modules-local-by-default/node_modules/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, "license": "MIT", "dependencies": { @@ -10410,8 +9350,6 @@ }, "node_modules/postcss-modules-scope": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "dev": true, "license": "ISC", "dependencies": { @@ -10421,8 +9359,6 @@ }, "node_modules/postcss-modules-scope/node_modules/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, "license": "MIT", "dependencies": { @@ -10434,8 +9370,6 @@ }, "node_modules/postcss-modules-scope/node_modules/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, "license": "MIT", "dependencies": { @@ -10449,8 +9383,6 @@ }, "node_modules/postcss-modules-scope/node_modules/postcss": { "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "license": "MIT", "dependencies": { @@ -10464,8 +9396,6 @@ }, "node_modules/postcss-modules-scope/node_modules/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, "license": "MIT", "dependencies": { @@ -10477,8 +9407,6 @@ }, "node_modules/postcss-modules-values": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "dev": true, "license": "ISC", "dependencies": { @@ -10488,8 +9416,6 @@ }, "node_modules/postcss-modules-values/node_modules/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, "license": "MIT", "dependencies": { @@ -10501,8 +9427,6 @@ }, "node_modules/postcss-modules-values/node_modules/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, "license": "MIT", "dependencies": { @@ -10516,8 +9440,6 @@ }, "node_modules/postcss-modules-values/node_modules/postcss": { "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "license": "MIT", "dependencies": { @@ -10531,8 +9453,6 @@ }, "node_modules/postcss-modules-values/node_modules/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, "license": "MIT", "dependencies": { @@ -10544,8 +9464,6 @@ }, "node_modules/postcss-modules/node_modules/postcss-modules-extract-imports": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", "dev": true, "license": "ISC", "dependencies": { @@ -10557,8 +9475,6 @@ }, "node_modules/postcss-modules/node_modules/postcss-modules-local-by-default": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", "dev": true, "license": "MIT", "dependencies": { @@ -10573,8 +9489,6 @@ }, "node_modules/postcss-modules/node_modules/postcss-modules-scope": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", "dev": true, "license": "ISC", "dependencies": { @@ -10587,8 +9501,6 @@ }, "node_modules/postcss-modules/node_modules/postcss-modules-values": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", "dev": true, "license": "ISC", "dependencies": { @@ -10598,15 +9510,11 @@ }, "node_modules/postcss-modules/node_modules/postcss-value-parser": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true, "license": "MIT" }, "node_modules/postcss-normalize-charset": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", "dev": true, "license": "MIT", "dependencies": { @@ -10618,8 +9526,6 @@ }, "node_modules/postcss-normalize-display-values": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10633,8 +9539,6 @@ }, "node_modules/postcss-normalize-positions": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", "dev": true, "license": "MIT", "dependencies": { @@ -10649,8 +9553,6 @@ }, "node_modules/postcss-normalize-repeat-style": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10665,8 +9567,6 @@ }, "node_modules/postcss-normalize-string": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", "dev": true, "license": "MIT", "dependencies": { @@ -10680,8 +9580,6 @@ }, "node_modules/postcss-normalize-timing-functions": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", "dev": true, "license": "MIT", "dependencies": { @@ -10695,8 +9593,6 @@ }, "node_modules/postcss-normalize-unicode": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", "dev": true, "license": "MIT", "dependencies": { @@ -10710,8 +9606,6 @@ }, "node_modules/postcss-normalize-url": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", "dev": true, "license": "MIT", "dependencies": { @@ -10726,8 +9620,6 @@ }, "node_modules/postcss-normalize-url/node_modules/is-absolute-url": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", "dev": true, "license": "MIT", "engines": { @@ -10736,8 +9628,6 @@ }, "node_modules/postcss-normalize-url/node_modules/normalize-url": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", "dev": true, "license": "MIT", "engines": { @@ -10746,8 +9636,6 @@ }, "node_modules/postcss-normalize-whitespace": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", "dev": true, "license": "MIT", "dependencies": { @@ -10760,8 +9648,6 @@ }, "node_modules/postcss-ordered-values": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", "dev": true, "license": "MIT", "dependencies": { @@ -10775,8 +9661,6 @@ }, "node_modules/postcss-reduce-initial": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", "dev": true, "license": "MIT", "dependencies": { @@ -10791,8 +9675,6 @@ }, "node_modules/postcss-reduce-transforms": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", "dev": true, "license": "MIT", "dependencies": { @@ -10807,8 +9689,6 @@ }, "node_modules/postcss-selector-parser": { "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", "dev": true, "license": "MIT", "dependencies": { @@ -10821,8 +9701,6 @@ }, "node_modules/postcss-svgo": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", - "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", "dev": true, "license": "MIT", "dependencies": { @@ -10836,8 +9714,6 @@ }, "node_modules/postcss-unique-selectors": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", "dev": true, "license": "MIT", "dependencies": { @@ -10851,15 +9727,11 @@ }, "node_modules/postcss-value-parser": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true, "license": "MIT" }, "node_modules/postcss/node_modules/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, "license": "MIT", "dependencies": { @@ -10871,8 +9743,6 @@ }, "node_modules/postcss/node_modules/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, "license": "MIT", "dependencies": { @@ -10886,8 +9756,6 @@ }, "node_modules/postcss/node_modules/chalk/node_modules/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, "license": "MIT", "dependencies": { @@ -10899,8 +9767,6 @@ }, "node_modules/posthtml": { "version": "0.15.2", - "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.15.2.tgz", - "integrity": "sha512-YugEJ5ze/0DLRIVBjCpDwANWL4pPj1kHJ/2llY8xuInr0nbkon3qTiMPe5LQa+cCwNjxS7nAZZTp+1M+6mT4Zg==", "dev": true, "license": "MIT", "dependencies": { @@ -10913,8 +9779,6 @@ }, "node_modules/posthtml-parser": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.6.0.tgz", - "integrity": "sha512-5ffwKQNgtVHdhZniWxu+1ryvaZv5l25HPLUV6W5xy5nYVWMXtvjtwRnbSpfbKFvbyl7XI+d4AqkjmonkREqnXA==", "dev": true, "license": "MIT", "dependencies": { @@ -10930,8 +9794,6 @@ }, "node_modules/posthtml-render": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz", - "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==", "dev": true, "license": "MIT", "engines": { @@ -10940,8 +9802,6 @@ }, "node_modules/posthtml/node_modules/htmlparser2": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -10960,8 +9820,6 @@ }, "node_modules/posthtml/node_modules/posthtml-parser": { "version": "0.7.2", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.7.2.tgz", - "integrity": "sha512-LjEEG/3fNcWZtBfsOE3Gbyg1Li4CmsZRkH1UmbMR7nKdMXVMYI3B4/ZMiCpaq8aI1Aym4FRMMW9SAOLSwOnNsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10973,8 +9831,6 @@ }, "node_modules/prelude-ls": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true, "engines": { "node": ">= 0.8.0" @@ -10982,8 +9838,6 @@ }, "node_modules/prepend-http": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", "dev": true, "license": "MIT", "engines": { @@ -10992,8 +9846,6 @@ }, "node_modules/prettier": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", - "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", "dev": true, "license": "MIT", "bin": { @@ -11005,8 +9857,6 @@ }, "node_modules/process": { "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", "dev": true, "license": "MIT", "engines": { @@ -11015,15 +9865,11 @@ }, "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, "license": "MIT" }, "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, "license": "MIT", "engines": { @@ -11032,15 +9878,10 @@ }, "node_modules/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, "license": "MIT" }, "node_modules/public-encrypt": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -11054,8 +9895,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -11064,10 +9903,7 @@ } }, "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, + "version": "2.3.1", "license": "MIT", "engines": { "node": ">=6" @@ -11075,8 +9911,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, "license": "MIT", "dependencies": { @@ -11088,8 +9922,6 @@ }, "node_modules/purgecss": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-2.3.0.tgz", - "integrity": "sha512-BE5CROfVGsx2XIhxGuZAT7rTH9lLeQx/6M0P7DTXQH4IUc3BBzs9JUzt4yzGf3JrH9enkeq6YJBe9CTtkm1WmQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11104,8 +9936,6 @@ }, "node_modules/purgecss/node_modules/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, "license": "MIT", "dependencies": { @@ -11117,8 +9947,6 @@ }, "node_modules/purgecss/node_modules/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, "license": "MIT", "dependencies": { @@ -11132,8 +9960,6 @@ }, "node_modules/purgecss/node_modules/chalk/node_modules/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, "license": "MIT", "dependencies": { @@ -11145,8 +9971,6 @@ }, "node_modules/purgecss/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, "license": "MIT", "engines": { @@ -11155,8 +9979,6 @@ }, "node_modules/purgecss/node_modules/postcss": { "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", "dev": true, "license": "MIT", "dependencies": { @@ -11174,8 +9996,6 @@ }, "node_modules/q": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true, "license": "MIT", "engines": { @@ -11185,8 +10005,6 @@ }, "node_modules/qs": { "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -11195,8 +10013,6 @@ }, "node_modules/querystring": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", - "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", "dev": true, "license": "MIT", "engines": { @@ -11205,17 +10021,17 @@ }, "node_modules/querystring-es3": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true, "engines": { "node": ">=0.4.x" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "license": "MIT" + }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -11235,8 +10051,6 @@ }, "node_modules/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, "license": "MIT", "engines": { @@ -11248,8 +10062,6 @@ }, "node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11258,8 +10070,6 @@ }, "node_modules/randomfill": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "license": "MIT", "dependencies": { @@ -11269,8 +10079,6 @@ }, "node_modules/range-parser": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", "dev": true, "license": "MIT", "engines": { @@ -11279,8 +10087,6 @@ }, "node_modules/rc": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { @@ -11295,15 +10101,11 @@ }, "node_modules/rc/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, "license": "ISC" }, "node_modules/react-refresh": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz", - "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==", "dev": true, "license": "MIT", "engines": { @@ -11312,8 +10114,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -11329,8 +10129,6 @@ }, "node_modules/read-config-file/node_modules/dotenv": { "version": "9.0.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", - "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -11339,8 +10137,6 @@ }, "node_modules/read-config-file/node_modules/json5": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "license": "MIT", "dependencies": { @@ -11355,8 +10151,6 @@ }, "node_modules/read-pkg": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", - "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", "dev": true, "license": "MIT", "dependencies": { @@ -11370,8 +10164,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -11385,8 +10177,6 @@ }, "node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "license": "MIT", "dependencies": { @@ -11398,8 +10188,6 @@ }, "node_modules/regex-not": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "license": "MIT", "dependencies": { @@ -11412,8 +10200,6 @@ }, "node_modules/regex-not/node_modules/extend-shallow": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "license": "MIT", "dependencies": { @@ -11426,8 +10212,6 @@ }, "node_modules/regex-not/node_modules/is-extendable": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "license": "MIT", "dependencies": { @@ -11439,8 +10223,6 @@ }, "node_modules/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==", "dev": true, "license": "MIT", "dependencies": { @@ -11452,8 +10234,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -11465,8 +10245,6 @@ }, "node_modules/relateurl": { "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", "dev": true, "license": "MIT", "engines": { @@ -11475,8 +10253,6 @@ }, "node_modules/repeat-element": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true, "license": "MIT", "engines": { @@ -11485,8 +10261,6 @@ }, "node_modules/repeat-string": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true, "license": "MIT", "engines": { @@ -11495,8 +10269,6 @@ }, "node_modules/request": { "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11527,8 +10299,6 @@ }, "node_modules/request-promise-core": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", "dev": true, "license": "ISC", "dependencies": { @@ -11543,8 +10313,6 @@ }, "node_modules/request-promise-native": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", "dev": true, "license": "ISC", "dependencies": { @@ -11559,10 +10327,21 @@ "request": "^2.34" } }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true, "license": "MIT", "engines": { @@ -11571,22 +10350,15 @@ }, "node_modules/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==", "dev": true, "license": "ISC" }, "node_modules/requires-port": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true, "license": "MIT" }, "node_modules/resolve": { "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "license": "MIT", "dependencies": { @@ -11599,15 +10371,11 @@ }, "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, "license": "MIT" }, "node_modules/resolve-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", "dev": true, "license": "MIT", "engines": { @@ -11616,15 +10384,11 @@ }, "node_modules/resolve-url": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true, "license": "MIT" }, "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, "license": "MIT", "dependencies": { @@ -11636,8 +10400,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -11650,8 +10412,6 @@ }, "node_modules/ret": { "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true, "license": "MIT", "engines": { @@ -11660,8 +10420,6 @@ }, "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, "license": "MIT", "engines": { @@ -11671,22 +10429,16 @@ }, "node_modules/rgb-regex": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", "dev": true, "license": "MIT" }, "node_modules/rgba-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", "dev": true, "license": "MIT" }, "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, "license": "ISC", "dependencies": { @@ -11701,8 +10453,6 @@ }, "node_modules/ripemd160": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "license": "MIT", "dependencies": { @@ -11712,8 +10462,6 @@ }, "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, "license": "BSD-3-Clause", "optional": true, @@ -11731,13 +10479,14 @@ }, "node_modules/robust-predicates": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", - "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" + "license": "Unlicense" + }, + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "license": "MIT" }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -11760,13 +10509,10 @@ }, "node_modules/rw": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + "license": "BSD-3-Clause" }, "node_modules/rxjs": { "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" @@ -11774,8 +10520,6 @@ }, "node_modules/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, "funding": [ { @@ -11795,8 +10539,6 @@ }, "node_modules/safe-regex": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "license": "MIT", "dependencies": { @@ -11805,14 +10547,10 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, "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, "license": "WTFPL OR ISC", "dependencies": { @@ -11821,8 +10559,6 @@ }, "node_modules/sass": { "version": "1.35.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.35.1.tgz", - "integrity": "sha512-oCisuQJstxMcacOPmxLNiLlj4cUyN2+8xJnG7VanRoh2GOLr9RqkvI4AxA4a6LHVg/rsu+PmxXeGhrdSF9jCiQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11837,28 +10573,21 @@ }, "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, "license": "ISC" }, "node_modules/saxes": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", - "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", - "dev": true, + "version": "6.0.0", "license": "ISC", "dependencies": { - "xmlchars": "^2.1.1" + "xmlchars": "^2.2.0" }, "engines": { - "node": ">=8" + "node": ">=v12.22.7" } }, "node_modules/semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "license": "ISC", "bin": { @@ -11867,16 +10596,12 @@ }, "node_modules/semver-compare": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", "dev": true, "license": "MIT", "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, "license": "MIT", "dependencies": { @@ -11888,8 +10613,6 @@ }, "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, "license": "ISC", "bin": { @@ -11898,8 +10621,6 @@ }, "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, "license": "MIT", "optional": true, @@ -11915,8 +10636,6 @@ }, "node_modules/serialize-error/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, "license": "(MIT OR CC0-1.0)", "optional": true, @@ -11929,8 +10648,6 @@ }, "node_modules/serve-handler": { "version": "6.1.3", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", - "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", "dev": true, "license": "MIT", "dependencies": { @@ -11946,8 +10663,6 @@ }, "node_modules/serve-handler/node_modules/mime-db": { "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", "dev": true, "license": "MIT", "engines": { @@ -11956,8 +10671,6 @@ }, "node_modules/serve-handler/node_modules/mime-types": { "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11969,15 +10682,11 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true, "license": "ISC" }, "node_modules/set-value": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "license": "MIT", "dependencies": { @@ -11992,15 +10701,11 @@ }, "node_modules/setimmediate": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", "dev": true, "license": "MIT" }, "node_modules/sha.js": { "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "license": "(MIT AND BSD-3-Clause)", "dependencies": { @@ -12013,8 +10718,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -12026,8 +10729,6 @@ }, "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, "license": "MIT", "engines": { @@ -12036,15 +10737,11 @@ }, "node_modules/signal-exit": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true, "license": "ISC" }, "node_modules/simple-swizzle": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "dev": true, "license": "MIT", "dependencies": { @@ -12053,15 +10750,11 @@ }, "node_modules/simple-swizzle/node_modules/is-arrayish": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", "dev": true, "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", "engines": { @@ -12070,8 +10763,6 @@ }, "node_modules/slice-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12086,20 +10777,8 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/slice-ansi/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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/snapdragon": { "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "license": "MIT", "dependencies": { @@ -12118,8 +10797,6 @@ }, "node_modules/snapdragon-node": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "license": "MIT", "dependencies": { @@ -12133,8 +10810,6 @@ }, "node_modules/snapdragon-node/node_modules/define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "license": "MIT", "dependencies": { @@ -12146,8 +10821,6 @@ }, "node_modules/snapdragon-util": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12159,8 +10832,6 @@ }, "node_modules/snapdragon/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, "license": "MIT", "dependencies": { @@ -12169,15 +10840,11 @@ }, "node_modules/snapdragon/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true, "license": "MIT" }, "node_modules/snapdragon/node_modules/source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -12186,8 +10853,6 @@ }, "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, "license": "BSD-3-Clause", "engines": { @@ -12196,8 +10861,6 @@ }, "node_modules/source-map-js": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -12206,8 +10869,6 @@ }, "node_modules/source-map-resolve": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "dev": true, "license": "MIT", "dependencies": { @@ -12220,8 +10881,6 @@ }, "node_modules/source-map-support": { "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "license": "MIT", "dependencies": { @@ -12231,29 +10890,21 @@ }, "node_modules/source-map-url": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "dev": true, "license": "MIT" }, "node_modules/sourcemap-codec": { "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "dev": true, "license": "MIT" }, "node_modules/spawn-command": { "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", "dev": true, "license": "MIT" }, "node_modules/spdx-correct": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12263,15 +10914,11 @@ }, "node_modules/spdx-exceptions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -12281,15 +10928,11 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.9", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", - "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", "dev": true, "license": "CC0-1.0" }, "node_modules/split-string": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "license": "MIT", "dependencies": { @@ -12301,8 +10944,6 @@ }, "node_modules/split-string/node_modules/extend-shallow": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "license": "MIT", "dependencies": { @@ -12315,8 +10956,6 @@ }, "node_modules/split-string/node_modules/is-extendable": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "license": "MIT", "dependencies": { @@ -12328,8 +10967,6 @@ }, "node_modules/split2": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, "license": "ISC", "dependencies": { @@ -12338,16 +10975,12 @@ }, "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, "license": "BSD-3-Clause", "optional": true }, "node_modules/srcset": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/srcset/-/srcset-3.0.1.tgz", - "integrity": "sha512-MM8wDGg5BQJEj94tDrZDrX9wrC439/Eoeg3sgmVLPMjHgrAFeXAKk3tmFlCbKw5k+yOEhPXRpPlRcisQmqWVSQ==", "dev": true, "license": "MIT", "engines": { @@ -12359,8 +10992,6 @@ }, "node_modules/sshpk": { "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, "license": "MIT", "dependencies": { @@ -12385,15 +11016,11 @@ }, "node_modules/stable": { "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "dev": true, "license": "MIT" }, "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, "license": "MIT", "engines": { @@ -12402,8 +11029,6 @@ }, "node_modules/static-extend": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "license": "MIT", "dependencies": { @@ -12416,8 +11041,6 @@ }, "node_modules/statuses": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true, "license": "MIT", "engines": { @@ -12426,8 +11049,6 @@ }, "node_modules/stealthy-require": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", "dev": true, "license": "ISC", "engines": { @@ -12436,8 +11057,6 @@ }, "node_modules/stream-http": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", - "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dev": true, "license": "MIT", "dependencies": { @@ -12449,8 +11068,6 @@ }, "node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "license": "MIT", "dependencies": { @@ -12459,15 +11076,11 @@ }, "node_modules/string-hash": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", - "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", "dev": true, "license": "CC0-1.0" }, "node_modules/string-width": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "license": "MIT", "dependencies": { @@ -12479,20 +11092,8 @@ "node": ">=8" } }, - "node_modules/string-width/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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/string.prototype.trimend": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "license": "MIT", "dependencies": { @@ -12505,8 +11106,6 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "license": "MIT", "dependencies": { @@ -12519,8 +11118,6 @@ }, "node_modules/strip-ansi": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "license": "MIT", "dependencies": { @@ -12532,8 +11129,6 @@ }, "node_modules/strip-ansi/node_modules/ansi-regex": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true, "license": "MIT", "engines": { @@ -12542,8 +11137,6 @@ }, "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": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, "license": "MIT", "engines": { @@ -12552,8 +11145,6 @@ }, "node_modules/stylehacks": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", "dev": true, "license": "MIT", "dependencies": { @@ -12567,8 +11158,6 @@ }, "node_modules/stylehacks/node_modules/postcss-selector-parser": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", "dev": true, "license": "MIT", "dependencies": { @@ -12582,8 +11171,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, "license": "Apache-2.0", "dependencies": { @@ -12595,8 +11182,6 @@ }, "node_modules/supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12608,8 +11193,6 @@ }, "node_modules/svgo": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", "dev": true, "license": "MIT", "dependencies": { @@ -12636,8 +11219,6 @@ }, "node_modules/svgo/node_modules/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, "license": "MIT", "dependencies": { @@ -12649,8 +11230,6 @@ }, "node_modules/svgo/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", "dependencies": { @@ -12659,8 +11238,6 @@ }, "node_modules/svgo/node_modules/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, "license": "MIT", "dependencies": { @@ -12674,8 +11251,6 @@ }, "node_modules/svgo/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "license": "MIT", "dependencies": { @@ -12688,15 +11263,11 @@ }, "node_modules/svgo/node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true, "license": "BSD-3-Clause" }, "node_modules/svgo/node_modules/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, "license": "MIT", "dependencies": { @@ -12708,15 +11279,10 @@ }, "node_modules/symbol-tree": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true, "license": "MIT" }, "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, "license": "MIT", "dependencies": { @@ -12726,8 +11292,6 @@ }, "node_modules/term-size": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", "dev": true, "license": "MIT", "engines": { @@ -12739,8 +11303,6 @@ }, "node_modules/terser": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -12757,8 +11319,6 @@ }, "node_modules/terser/node_modules/source-map": { "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -12767,8 +11327,6 @@ }, "node_modules/time-zone": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz", - "integrity": "sha1-mcW/VZWJZq9tBtg73zgA3IL67F0=", "dev": true, "license": "MIT", "engines": { @@ -12777,8 +11335,6 @@ }, "node_modules/timers-browserify": { "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12790,15 +11346,11 @@ }, "node_modules/timsort": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", "dev": true, "license": "MIT" }, "node_modules/tmp": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12810,8 +11362,6 @@ }, "node_modules/tmp-promise": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.2.tgz", - "integrity": "sha512-OyCLAKU1HzBjL6Ev3gxUeraJNlbNingmi8IrHHEsYH8LTmEuhvYfqvhn2F/je+mjf4N58UmZ96OMEy1JanSCpA==", "dev": true, "license": "MIT", "dependencies": { @@ -12820,8 +11370,6 @@ }, "node_modules/to-fast-properties": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true, "license": "MIT", "engines": { @@ -12830,8 +11378,6 @@ }, "node_modules/to-object-path": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "license": "MIT", "dependencies": { @@ -12843,8 +11389,6 @@ }, "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, "license": "MIT", "engines": { @@ -12853,8 +11397,6 @@ }, "node_modules/to-regex": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "license": "MIT", "dependencies": { @@ -12869,8 +11411,6 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12882,8 +11422,6 @@ }, "node_modules/to-regex-range/node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", "engines": { @@ -12892,8 +11430,6 @@ }, "node_modules/to-regex/node_modules/define-property": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12906,8 +11442,6 @@ }, "node_modules/to-regex/node_modules/extend-shallow": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "license": "MIT", "dependencies": { @@ -12920,8 +11454,6 @@ }, "node_modules/to-regex/node_modules/is-extendable": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "license": "MIT", "dependencies": { @@ -12933,8 +11465,6 @@ }, "node_modules/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, "license": "BSD-3-Clause", "dependencies": { @@ -12946,19 +11476,17 @@ } }, "node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, + "version": "4.1.1", "license": "MIT", "dependencies": { - "punycode": "^2.1.0" + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" } }, "node_modules/tree-kill": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true, "license": "MIT", "bin": { @@ -12967,8 +11495,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": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", "dev": true, "license": "WTFPL", "dependencies": { @@ -12977,21 +11503,15 @@ }, "node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "license": "0BSD" }, "node_modules/tty-browserify": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", "dev": true, "license": "MIT" }, "node_modules/tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -13003,15 +11523,11 @@ }, "node_modules/tweetnacl": { "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true, "license": "Unlicense" }, "node_modules/type-check": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "license": "MIT", "dependencies": { @@ -13023,8 +11539,6 @@ }, "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, "license": "(MIT OR CC0-1.0)", "engines": { @@ -13036,8 +11550,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -13046,8 +11558,6 @@ }, "node_modules/typescript": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.4.tgz", - "integrity": "sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==", "dev": true, "license": "Apache-2.0", "bin": { @@ -13060,8 +11570,6 @@ }, "node_modules/unbox-primitive": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "dev": true, "license": "MIT", "dependencies": { @@ -13076,8 +11584,6 @@ }, "node_modules/uncss": { "version": "0.17.3", - "resolved": "https://registry.npmjs.org/uncss/-/uncss-0.17.3.tgz", - "integrity": "sha512-ksdDWl81YWvF/X14fOSw4iu8tESDHFIeyKIeDrK6GEVTQvqJc1WlOEXqostNwOCi3qAj++4EaLsdAgPmUbEyog==", "dev": true, "license": "MIT", "dependencies": { @@ -13098,10 +11604,75 @@ "node": ">=6.0" } }, + "node_modules/uncss/node_modules/cssstyle": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cssom": "0.3.x" + } + }, + "node_modules/uncss/node_modules/data-urls": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + } + }, + "node_modules/uncss/node_modules/html-encoding-sniffer": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^1.0.1" + } + }, + "node_modules/uncss/node_modules/jsdom": { + "version": "14.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.0", + "acorn": "^6.0.4", + "acorn-globals": "^4.3.0", + "array-equal": "^1.0.0", + "cssom": "^0.3.4", + "cssstyle": "^1.1.1", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.0", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.1.3", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.5", + "saxes": "^3.1.9", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.5.0", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^6.1.2", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uncss/node_modules/parse5": { + "version": "5.1.0", + "dev": true, + "license": "MIT" + }, "node_modules/uncss/node_modules/postcss-selector-parser": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", - "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", "dev": true, "license": "MIT", "dependencies": { @@ -13113,17 +11684,60 @@ "node": ">=4" } }, + "node_modules/uncss/node_modules/saxes": { + "version": "3.1.11", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uncss/node_modules/tr46": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uncss/node_modules/w3c-xmlserializer": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "domexception": "^1.0.1", + "webidl-conversions": "^4.0.2", + "xml-name-validator": "^3.0.0" + } + }, + "node_modules/uncss/node_modules/whatwg-url": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/uncss/node_modules/ws": { + "version": "6.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, "node_modules/undici-types": { "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true, "license": "MIT" }, "node_modules/union-value": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "license": "MIT", "dependencies": { @@ -13138,22 +11752,16 @@ }, "node_modules/uniq": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", "dev": true, "license": "MIT" }, "node_modules/uniqs": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", "dev": true, "license": "MIT" }, "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, "license": "MIT", "dependencies": { @@ -13165,8 +11773,6 @@ }, "node_modules/universalify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, "license": "MIT", "engines": { @@ -13175,8 +11781,6 @@ }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true, "license": "MIT", "engines": { @@ -13185,15 +11789,11 @@ }, "node_modules/unquote": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", "dev": true, "license": "MIT" }, "node_modules/unset-value": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "license": "MIT", "dependencies": { @@ -13206,8 +11806,6 @@ }, "node_modules/unset-value/node_modules/has-value": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "license": "MIT", "dependencies": { @@ -13221,8 +11819,6 @@ }, "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, "license": "MIT", "dependencies": { @@ -13234,8 +11830,6 @@ }, "node_modules/unset-value/node_modules/has-values": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true, "license": "MIT", "engines": { @@ -13244,8 +11838,6 @@ }, "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, "license": "BSD-2-Clause", "dependencies": { @@ -13273,15 +11865,11 @@ }, "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, "license": "MIT" }, "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, "license": "MIT", "dependencies": { @@ -13293,8 +11881,6 @@ }, "node_modules/update-notifier/node_modules/semver": { "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "license": "ISC", "dependencies": { @@ -13309,8 +11895,6 @@ }, "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, "license": "BSD-2-Clause", "dependencies": { @@ -13319,15 +11903,11 @@ }, "node_modules/urix": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true, "license": "MIT" }, "node_modules/url": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dev": true, "license": "MIT", "dependencies": { @@ -13335,10 +11915,16 @@ "querystring": "0.2.0" } }, + "node_modules/url-parse": { + "version": "1.5.10", + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.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": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", "dev": true, "license": "MIT", "dependencies": { @@ -13350,15 +11936,11 @@ }, "node_modules/url/node_modules/punycode": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", "dev": true, "license": "MIT" }, "node_modules/url/node_modules/querystring": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", "dev": true, "engines": { "node": ">=0.4.x" @@ -13366,8 +11948,6 @@ }, "node_modules/use": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true, "license": "MIT", "engines": { @@ -13376,15 +11956,11 @@ }, "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": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=", "dev": true, "license": "WTFPL" }, "node_modules/util": { "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", "dev": true, "license": "MIT", "dependencies": { @@ -13398,15 +11974,11 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true, "license": "MIT" }, "node_modules/util.promisify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", "dev": true, "license": "MIT", "dependencies": { @@ -13421,8 +11993,6 @@ }, "node_modules/utils-merge": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true, "license": "MIT", "engines": { @@ -13431,8 +12001,6 @@ }, "node_modules/uuid": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true, "license": "MIT", "bin": { @@ -13441,15 +12009,11 @@ }, "node_modules/v8-compile-cache": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true, "license": "MIT" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -13459,8 +12023,6 @@ }, "node_modules/vendors": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", "dev": true, "license": "MIT", "funding": { @@ -13468,32 +12030,13 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "node_modules/vm-browserify": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true, "license": "MIT" }, "node_modules/vue": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.1.2.tgz", - "integrity": "sha512-q/rbKpb7aofax4ugqu2k/uj7BYuNPcd6Z5/qJtfkJQsE0NkwVoCyeSh7IZGH61hChwYn3CEkh4bHolvUPxlQ+w==", "dev": true, "license": "MIT", "dependencies": { @@ -13504,8 +12047,6 @@ }, "node_modules/w3c-hr-time": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13513,22 +12054,24 @@ } }, "node_modules/w3c-xmlserializer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", - "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", - "dev": true, + "version": "4.0.0", "license": "MIT", "dependencies": { - "domexception": "^1.0.1", - "webidl-conversions": "^4.0.2", - "xml-name-validator": "^3.0.0" + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/w3c-xmlserializer/node_modules/xml-name-validator": { + "version": "4.0.0", + "license": "Apache-2.0", + "engines": { + "node": ">=12" } }, "node_modules/wait-on": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-5.3.0.tgz", - "integrity": "sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg==", - "dev": true, "license": "MIT", "dependencies": { "axios": "^0.21.1", @@ -13546,9 +12089,6 @@ }, "node_modules/wait-on/node_modules/rxjs": { "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" @@ -13559,15 +12099,10 @@ }, "node_modules/wait-on/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, "license": "0BSD" }, "node_modules/wcwidth": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "dev": true, "license": "MIT", "dependencies": { @@ -13576,15 +12111,11 @@ }, "node_modules/webidl-conversions": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/whatwg-encoding": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, "license": "MIT", "dependencies": { @@ -13593,8 +12124,6 @@ }, "node_modules/whatwg-encoding/node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "license": "MIT", "dependencies": { @@ -13606,27 +12135,29 @@ }, "node_modules/whatwg-mimetype": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", "dev": true, "license": "MIT" }, "node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, + "version": "12.0.1", "license": "MIT", "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/whatwg-url/node_modules/webidl-conversions": { + "version": "7.0.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" } }, "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, "license": "ISC", "dependencies": { @@ -13641,8 +12172,6 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "license": "MIT", "dependencies": { @@ -13658,15 +12187,11 @@ }, "node_modules/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, "license": "ISC" }, "node_modules/which-typed-array": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", - "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", "dev": true, "license": "MIT", "dependencies": { @@ -13687,8 +12212,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -13700,8 +12223,6 @@ }, "node_modules/word-wrap": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true, "license": "MIT", "engines": { @@ -13710,8 +12231,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -13728,15 +12247,11 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true, "license": "ISC" }, "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, "license": "ISC", "dependencies": { @@ -13747,17 +12262,14 @@ } }, "node_modules/ws": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.0.tgz", - "integrity": "sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw==", - "dev": true, + "version": "8.18.2", "license": "MIT", "engines": { - "node": ">=8.3.0" + "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -13770,8 +12282,6 @@ }, "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, "license": "MIT", "engines": { @@ -13780,22 +12290,15 @@ }, "node_modules/xml-name-validator": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true, "license": "Apache-2.0" }, "node_modules/xmlchars": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true, "license": "MIT" }, "node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, "license": "MIT", "engines": { @@ -13804,22 +12307,16 @@ }, "node_modules/y18n": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true, "license": "ISC" }, "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, "license": "ISC" }, "node_modules/yargs": { "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "license": "MIT", "dependencies": { @@ -13837,8 +12334,6 @@ }, "node_modules/yargs-parser": { "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "license": "ISC", "dependencies": { @@ -13848,8 +12343,6 @@ }, "node_modules/yargs/node_modules/ansi-regex": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true, "license": "MIT", "engines": { @@ -13858,15 +12351,11 @@ }, "node_modules/yargs/node_modules/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, "license": "MIT" }, "node_modules/yargs/node_modules/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, "license": "MIT", "dependencies": { @@ -13876,10 +12365,16 @@ "node": ">=6" } }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/yargs/node_modules/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, "license": "MIT", "dependencies": { @@ -13892,8 +12387,6 @@ }, "node_modules/yargs/node_modules/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, "license": "MIT", "dependencies": { @@ -13908,8 +12401,6 @@ }, "node_modules/yargs/node_modules/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==", "dev": true, "license": "MIT", "dependencies": { @@ -13921,8 +12412,6 @@ }, "node_modules/yargs/node_modules/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, "license": "MIT", "engines": { @@ -13931,8 +12420,6 @@ }, "node_modules/yargs/node_modules/string-width": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "license": "MIT", "dependencies": { @@ -13946,8 +12433,6 @@ }, "node_modules/yargs/node_modules/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, "license": "MIT", "dependencies": { @@ -13959,8 +12444,6 @@ }, "node_modules/yauzl": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "dev": true, "license": "MIT", "dependencies": { @@ -13970,8 +12453,6 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index 47b967a..8a5240c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "electron-vuejs-parcel", "description": "Neuroblock", - "version": "1.3.0", + "version": "1.4.0", "author": { "name": "Human Technology Interaction Lab" }, @@ -25,12 +25,13 @@ "main": false }, "scripts": { - "serve": "concurrently \"cross-env BROWSER=none yarn vue:serve\" \"wait-on http://localhost:3000 && cross-env NODE_ENV=development electron . \"", + "serve": "concurrently \"cross-env BROWSER=none yarn vue:serve --port 3005\" \"wait-on http://localhost:3005 && cross-env NODE_ENV=development electron . \"", "build": "yarn vue:build", - "vue:serve": "parcel ./src/renderer/index.html -p 3000 --dist-dir build/renderer", + "vue:serve": "parcel ./src/renderer/index.html -p 3005 --dist-dir build/renderer", "vue:build": "cross-env NODE_ENV=production parcel build ./src/renderer/index.html --dist-dir build/renderer --public-url ./ --no-source-maps --no-scope-hoist", + "python:build": "C:/dev/repos/VexEMG/neuroscope/.venv/Scripts/pyinstaller.exe VEXServer.spec --clean --noconfirm", "electron:build": "electron-builder build -c.mac.target=dir", - "build:local": "yarn build && yarn electron:build", + "build:local": "yarn build && yarn python:build && yarn electron:build", "clean": "rmdir build && rmdir .cache && rmdir dist && rmdir .parcel-cache", "patch": "npm version patch -m \"v%s\"", "postversion": "git push && git push --tags", @@ -50,20 +51,26 @@ "prettier": "^2.3.1", "sass": "^1.35.1", "typescript": "^4.3.2", - "vue": "^3.0.0", - "wait-on": "^5.0.0" + "vue": "^3.0.0" }, "main": "./src/main/index.js", "build": { - "appId": "com.electron.electron-vuejs-parcel", - "productName": "NeuroBlock", + "appId": "com.htil.neuroblock-emg-vex", + "productName": "NeuroBlock EEG for VEX", "compression": "maximum", "files": [ "src/main/**/*", - "node_modules/**/*", + "build/renderer/**/*", + "node_modules/**/*" + ], + "extraResources": [ + { + "from": "dist/VEXServer.exe", + "to": "python/VEXServer.exe" + }, { - "from": "build/renderer", - "to": "src/renderer" + "from": "resources/python/**/*", + "to": "python/" } ], "mac": { @@ -72,7 +79,7 @@ "identity": null }, "win": { - "icon": "src/renderer/icons/icon.png" + "icon": "src/renderer/icons/icon.png" }, "dmg": { "contents": [ @@ -94,6 +101,8 @@ "blockly": "^10.4.3", "d3": "^7.9.0", "js-interpreter": "^5.1.1", - "rxjs": "^7.8.1" + "rxjs": "^7.8.1", + "ws": "^8.18.2", + "wait-on": "^5.3.0" } -} +} \ No newline at end of file diff --git a/programs/maze_program_emg.xml b/programs/maze_program_emg.xml new file mode 100644 index 0000000..eda4ac1 --- /dev/null +++ b/programs/maze_program_emg.xml @@ -0,0 +1 @@ +1000GT9033 \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e2daf16 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +opencv-python +pyaudio +websockets>=10.0 +websocket-client>=1.5.1 +pyinstaller>=5.0 \ No newline at end of file diff --git a/resources/python/VEXServer.py b/resources/python/VEXServer.py new file mode 100644 index 0000000..2c5a4b7 --- /dev/null +++ b/resources/python/VEXServer.py @@ -0,0 +1,238 @@ +import asyncio +import websockets +import json +from vex import * +from vex.vex_globals import * + +# Defer robot initialization to runtime to avoid exiting when AIM is not reachable +robot = None + +async def try_connect_robot(): + global robot + while True: + if robot is None: + try: + print("Attempting to connect to AIM robot at 192.168.4.1...") + robot = Robot() + print("AIM robot connected successfully.") + except SystemExit: + # aim.py may call sys.exit on failure; swallow and retry later + robot = None + print("AIM robot not reachable; will retry in 5s.") + await asyncio.sleep(5) + except Exception as e: + robot = None + print(f"Unexpected error connecting to AIM: {e}") + await asyncio.sleep(5) + await asyncio.sleep(1) + +def disconnect_robot(): + """Properly disconnect and clean up the robot connection""" + global robot + if robot is not None: + try: + print("Disconnecting robot - closing all WebSocket connections...") + # Close the actual WebSocket connections first + try: + if hasattr(robot, '_ws_cmd_thread') and robot._ws_cmd_thread.ws: + robot._ws_cmd_thread.ws.close() + except: + pass + try: + if hasattr(robot, '_ws_status_thread') and robot._ws_status_thread.ws: + robot._ws_status_thread.ws.close() + except: + pass + try: + if hasattr(robot, '_ws_img_thread') and robot._ws_img_thread.ws: + robot._ws_img_thread.ws.close() + except: + pass + try: + if hasattr(robot, '_ws_audio_thread') and robot._ws_audio_thread.ws: + robot._ws_audio_thread.ws.close() + except: + pass + + # Then stop the threads + try: + robot._ws_cmd_thread.running = False + except: + pass + try: + robot._ws_status_thread.running = False + except: + pass + try: + robot._ws_img_thread.running = False + except: + pass + try: + robot._ws_audio_thread.running = False + except: + pass + try: + robot._ws_img_thread.stop_stream() + except: + pass + + # Give threads a moment to clean up + import time + time.sleep(0.3) + + except Exception as e: + print(f"Error during robot disconnect: {e}") + finally: + robot = None + print("Robot disconnected and ready for reconnection.") + +def ensure_robot(): + if robot is None: + raise Exception("Robot not connected") + +# color_list = [ +# RED, GREEN, BLUE, WHITE, YELLOW, ORANGE, PURPLE, CYAN +# ] + +# for color in color_list: +# robot.led.on(ALL_LEDS, color) +# wait(1, SECONDS) + +# robot.led.off(ALL_LEDS) + +# Command handler for VEX AIM +# Made 'path' optional so it works with the current websockets API +async def handle_command(websocket, path=None): + global robot # Declare at function start + try: + async for message in websocket: + command = json.loads(message) + action = command.get("action", "") + + # Handle commands that require robot connection + if action in ("led_on", "move", "turn_left", "turn_right", "kicker"): + try: + ensure_robot() + except Exception as e: + await websocket.send(json.dumps({"status": "error", "message": str(e)})) + continue + + if action == "led_on": + color_name = command.get("color", "BLUE") + # Map string color names to vex.Color constants + color_map = { + "RED": RED, + "GREEN": GREEN, + "BLUE": BLUE, + "WHITE": WHITE, + "YELLOW": YELLOW, + "ORANGE": ORANGE, + "PURPLE": PURPLE, + "CYAN": CYAN, + } + color = color_map.get(color_name.upper(), BLUE) # Default to BLUE if not found + print(f"Turning LED on with color: {color_name}") + robot.led.on(ALL_LEDS, color) + # Send a response back to the client + await websocket.send(json.dumps({"status": "success", "action": "led_on", "color": color_name})) + + elif action == "move": + distance_inches = command.get("distance", 4) # Default to 4 inches instead of 100mm + heading = command.get("heading", 0) + # Convert inches to millimeters (1 inch = 25.4 mm) + distance_mm = distance_inches * 25.4 + print(f"Received move command: {command}") + print(f"Moving robot: Distance={distance_inches} inches ({distance_mm} mm), Heading={heading}") + robot.move_for(distance_mm, heading) + # Send a response back to the client + await websocket.send(json.dumps({"status": "success", "action": "move", "distance_inches": distance_inches, "distance_mm": distance_mm, "heading": heading})) + + elif action == "turn_left": + degrees = command.get("degrees", 90) + print(f"Turning robot left: {degrees} degrees") + robot.turn_for(vex.TurnType.LEFT, degrees) # Correct VEX method + # Send a response back to the client + await websocket.send(json.dumps({"status": "success", "action": "turn_left", "degrees": degrees})) + + elif action == "turn_right": + degrees = command.get("degrees", 90) + print(f"Turning robot right: {degrees} degrees") + robot.turn_for(vex.TurnType.RIGHT, degrees) # Correct VEX method + # Send a response back to the client + await websocket.send(json.dumps({"status": "success", "action": "turn_right", "degrees": degrees})) + + elif action == "status": + # Report whether the local server is up and robot is connected + try: + rc = robot is not None + except NameError: + rc = False + await websocket.send(json.dumps({ + "status": "ok", + "action": "status", + "robot_connected": bool(rc) + })) + + elif action == "reconnect_robot": + # Force an immediate reconnection attempt to the robot + print("Reconnect robot requested - closing existing connection and reconnecting...") + disconnect_robot() # Properly close old connection + await websocket.send(json.dumps({ + "status": "ok", + "action": "reconnect_robot", + "message": "Robot reconnection initiated" + })) + + elif action == "kicker": + # Accepts types: 'hard', 'soft', 'medium', or 'place' + ktype = str(command.get("type", "")).strip().lower() + print(f"Kicker command received: type={ktype}") + try: + if ktype == "place": + # Place gently in front of robot (proxy to SOFT kick) + robot.kicker.place() + await websocket.send(json.dumps({"status": "success", "action": "kicker", "type": "place"})) + else: + # Map friendly strings to KickType enum + # Also accept raw values from vex_types (e.g., 'kick_soft') + mapping = { + "soft": KickType.SOFT, + "medium": KickType.MEDIUM, + "hard": KickType.HARD, + "kick_soft": KickType.SOFT, + "kick_medium": KickType.MEDIUM, + "kick_hard": KickType.HARD, + } + kt = mapping.get(ktype) + if kt is None: + raise ValueError(f"Unknown kicker type '{ktype}'") + robot.kicker.kick(kt) + await websocket.send(json.dumps({"status": "success", "action": "kicker", "type": ktype})) + except Exception as ex: + print(f"Error executing kicker: {ex}") + await websocket.send(json.dumps({"status": "error", "action": "kicker", "message": str(ex)})) + + else: + print(f"Unknown command: {command}") + # Send an error response back to the client + await websocket.send(json.dumps({"status": "error", "message": "Unknown command"})) + except websockets.exceptions.ConnectionClosed: + print("Client disconnected") + except Exception as e: + print(f"Error handling command: {e}") + try: + await websocket.send(json.dumps({"status": "error", "message": str(e)})) + except: + pass # Connection may already be closed + +async def main(): + port = 8777 + print(f"Starting WebSocket server on ws://127.0.0.1:{port}") + # Start background task to try connecting to the robot continuously + connect_task = asyncio.create_task(try_connect_robot()) + async with websockets.serve(handle_command, "127.0.0.1", port, ping_interval=None): + await asyncio.Future() # run forever + connect_task.cancel() + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/resources/python/VEXServer_dev.py b/resources/python/VEXServer_dev.py new file mode 100644 index 0000000..d52357f --- /dev/null +++ b/resources/python/VEXServer_dev.py @@ -0,0 +1,215 @@ +#!/usr/bin/env python3 +""" +VEXServer Development Simulation +Mock VEX robot server for development and testing without hardware. +Provides WebSocket interface compatible with production VEXServer.py +""" + +import asyncio +import websockets +import json +import logging +from datetime import datetime + +# Configure logging +logging.basicConfig( + level=logging.INFO, + format='%(asctime)s - %(levelname)s - %(message)s' +) +logger = logging.getLogger(__name__) + +class MockVEXRobot: + """Mock VEX robot for simulation""" + + def __init__(self): + self.position = {"x": 0, "y": 0, "heading": 0} + self.led_state = False + self.battery_level = 85 + self.connected = True + + def led_on(self): + """Turn LED on""" + self.led_state = True + logger.info("🔆 LED turned ON") + return {"status": "success", "message": "LED turned on", "led_state": True} + + def led_off(self): + """Turn LED off""" + self.led_state = False + logger.info("💡 LED turned OFF") + return {"status": "success", "message": "LED turned off", "led_state": False} + + def move(self, distance=10): + """Move robot forward""" + self.position["x"] += distance * 0.1 # Simulate movement + logger.info(f"🚀 Moving robot forward: {distance} units") + return {"status": "success", "message": f"Moved forward {distance} units", "position": self.position} + + def turn_left(self, angle=90): + """Turn robot left""" + self.position["heading"] = (self.position["heading"] - angle) % 360 + logger.info(f"🔄 Turning robot left: {angle} degrees") + return {"status": "success", "message": f"Turned left {angle} degrees", "heading": self.position["heading"]} + + def turn_right(self, angle=90): + """Turn robot right""" + self.position["heading"] = (self.position["heading"] + angle) % 360 + logger.info(f"🔄 Turning robot right: {angle} degrees") + return {"status": "success", "message": f"Turned right {angle} degrees", "heading": self.position["heading"]} + + def get_status(self): + """Get robot status""" + status = { + "status": "success", + "connected": self.connected, + "battery": self.battery_level, + "position": self.position, + "led_state": self.led_state, + "timestamp": datetime.now().isoformat() + } + logger.info(f"📊 Status requested: Battery {self.battery_level}%, Position {self.position}") + return status + +class VEXServerDev: + """Development WebSocket server for VEX robot simulation""" + + def __init__(self, host="127.0.0.1", port=8777): + self.host = host + self.port = port + self.robot = MockVEXRobot() + self.clients = set() + + async def handle_client(self, websocket, path): + """Handle WebSocket client connections""" + try: + client_ip = websocket.remote_address[0] if websocket.remote_address else "unknown" + logger.info(f"🔗 Client connected from {client_ip}") + self.clients.add(websocket) + + # Send welcome message + welcome_msg = { + "type": "welcome", + "message": "VEX Robot Development Server", + "version": "1.0.0", + "status": self.robot.get_status() + } + await websocket.send(json.dumps(welcome_msg)) + + async for message in websocket: + await self.process_message(websocket, message) + + except websockets.exceptions.ConnectionClosed: + logger.info(f"🔌 Client disconnected") + except Exception as e: + logger.error(f"❌ Error handling client: {e}") + finally: + self.clients.discard(websocket) + + async def process_message(self, websocket, message): + """Process incoming WebSocket messages""" + try: + data = json.loads(message) + action = data.get("action", "").lower() + + logger.info(f"📨 Received command: {action}") + + # Handle different VEX commands + if action == "led_on": + response = self.robot.led_on() + elif action == "led_off": + response = self.robot.led_off() + elif action == "move": + distance = data.get("distance", 10) + response = self.robot.move(distance) + elif action == "turn_left": + angle = data.get("angle", 90) + response = self.robot.turn_left(angle) + elif action == "turn_right": + angle = data.get("angle", 90) + response = self.robot.turn_right(angle) + elif action == "get_status": + response = self.robot.get_status() + elif action == "status": + # Minimal status for Electron UI badge + response = {"status": "ok", "action": "status", "robot_connected": bool(self.robot.connected)} + elif action == "reconnect_robot": + # Simulate reconnect in mock server + logger.info("🔄 Mock reconnect robot requested") + response = {"status": "ok", "action": "reconnect_robot", "message": "Robot reconnection initiated (mock)"} + elif action == "ping": + response = {"status": "success", "message": "pong", "timestamp": datetime.now().isoformat()} + logger.info("🏓 Ping received, sending pong") + else: + response = {"status": "error", "message": f"Unknown action: {action}"} + logger.warning(f"⚠️ Unknown command: {action}") + + # Send response back to client + await websocket.send(json.dumps(response)) + + except json.JSONDecodeError: + await self.send_error(websocket, "Invalid JSON format") + except Exception as e: + await self.send_error(websocket, f"Error processing message: {str(e)}") + + async def send_error(self, websocket, error_message): + """Send error response to client""" + error_response = {"status": "error", "message": error_message} + try: + await websocket.send(json.dumps(error_response)) + logger.error(f"❌ Sent error to client: {error_message}") + except Exception as e: + logger.error(f"❌ Failed to send error message: {e}") + + async def start_server(self): + """Start the WebSocket server""" + logger.info("🎯 Mock VEX robot ready for commands:") + logger.info(" • led_on / led_off") + logger.info(" • move (distance)") + logger.info(" • turn_left / turn_right (angle)") + logger.info(" • get_status") + logger.info(" • ping") + + try: + # Start WebSocket server with proper error handling + server = await websockets.serve( + self.handle_client, + self.host, + self.port, + ping_interval=None, # Disable ping for compatibility + ping_timeout=None, # Disable ping timeout + close_timeout=10, + max_size=2**20, # 1MB max message size + read_limit=2**16, # 64KB read buffer + write_limit=2**16 # 64KB write buffer + ) + + logger.info(f"✅ Server running! Connect to ws://{self.host}:{self.port}") + + # Keep server running forever + await asyncio.Future() # Run forever + + except Exception as e: + logger.error(f"❌ Failed to start server: {e}") + raise + +def main(): + """Main entry point""" + print("Welcome to the VEX Development Server") + print("====================================") + print("This is a mock server for development and testing.") + print("No physical VEX robot hardware is required.") + print("") + + server = VEXServerDev() + + try: + asyncio.run(server.start_server()) + except KeyboardInterrupt: + logger.info("🛑 Server stopped by user") + print("\nServer stopped.") + except Exception as e: + logger.error(f"❌ Server error: {e}") + print(f"Server error: {e}") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/resources/python/VexTest.py b/resources/python/VexTest.py new file mode 100644 index 0000000..4eba56c --- /dev/null +++ b/resources/python/VexTest.py @@ -0,0 +1,50 @@ +import asyncio +import websockets +import json + +async def send_test_commands(): + uri = "ws://localhost:8765" # WebSocket server address + try: + print(f"Connecting to WebSocket server at {uri}...") + async with websockets.connect(uri) as websocket: + print("Connected to WebSocket server!") + + # Test 1: Turn LED on with a specific color + led_command = { + "action": "led_on", + "color": "GREEN" # Change to any color: "RED", "BLUE", etc. + } + print(f"Sending LED command: {led_command}") + await websocket.send(json.dumps(led_command)) + response = await websocket.recv() + print(f"Response from server: {response}") + + # Test 2: Move the robot forward + move_command = { + "action": "move", + "distance": 100, # Distance in cm + "heading": 0 # Heading in degrees + } + print(f"Sending move command: {move_command}") + await websocket.send(json.dumps(move_command)) + response = await websocket.recv() + print(f"Response from server: {response}") + + # Test 3: Turn LED off + led_off_command = { + "action": "led_on", + "color": "OFF" # Assuming "OFF" turns off the LEDs + } + print(f"Sending LED off command: {led_off_command}") + await websocket.send(json.dumps(led_off_command)) + response = await websocket.recv() + print(f"Response from server: {response}") + + except Exception as e: + print(f"Error: {e}") + +def main(): + asyncio.run(send_test_commands()) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/resources/python/vex/__init__.py b/resources/python/vex/__init__.py new file mode 100644 index 0000000..1ecd4a0 --- /dev/null +++ b/resources/python/vex/__init__.py @@ -0,0 +1,17 @@ +# ================================================================================================= +# Copyright (c) Innovation First 2025. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# ================================================================================================= +""" +AIM WebSocket API + +This package provides modules for interacting with the VEX AIM Robot using WebSocket communication. + +Modules exposed: +- `aim`: Core functionality for robot control and WebSocket communication. +- `vex_types`: Definitions for various types and enums used in the API. +- `vex_globals`: Global constants and variables to match VEXcode AIM API. +""" + +from .aim import * +from .vex_types import * diff --git a/resources/python/vex/__pycache__/__init__.cpython-313.pyc b/resources/python/vex/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..77be36a Binary files /dev/null and b/resources/python/vex/__pycache__/__init__.cpython-313.pyc differ diff --git a/resources/python/vex/__pycache__/aim.cpython-313.pyc b/resources/python/vex/__pycache__/aim.cpython-313.pyc new file mode 100644 index 0000000..674d904 Binary files /dev/null and b/resources/python/vex/__pycache__/aim.cpython-313.pyc differ diff --git a/resources/python/vex/__pycache__/settings.cpython-313.pyc b/resources/python/vex/__pycache__/settings.cpython-313.pyc new file mode 100644 index 0000000..030b32d Binary files /dev/null and b/resources/python/vex/__pycache__/settings.cpython-313.pyc differ diff --git a/resources/python/vex/__pycache__/vex_globals.cpython-313.pyc b/resources/python/vex/__pycache__/vex_globals.cpython-313.pyc new file mode 100644 index 0000000..59c4d74 Binary files /dev/null and b/resources/python/vex/__pycache__/vex_globals.cpython-313.pyc differ diff --git a/resources/python/vex/__pycache__/vex_messages.cpython-313.pyc b/resources/python/vex/__pycache__/vex_messages.cpython-313.pyc new file mode 100644 index 0000000..9beea18 Binary files /dev/null and b/resources/python/vex/__pycache__/vex_messages.cpython-313.pyc differ diff --git a/resources/python/vex/__pycache__/vex_types.cpython-313.pyc b/resources/python/vex/__pycache__/vex_types.cpython-313.pyc new file mode 100644 index 0000000..a37d924 Binary files /dev/null and b/resources/python/vex/__pycache__/vex_types.cpython-313.pyc differ diff --git a/resources/python/vex/aim.py b/resources/python/vex/aim.py new file mode 100644 index 0000000..3349ff8 --- /dev/null +++ b/resources/python/vex/aim.py @@ -0,0 +1,2325 @@ +# ================================================================================================= +# Copyright (c) Innovation First 2025. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# ================================================================================================= +""" +AIM WebSocket Python Client + +This library is designed for use with the VEX AIM Robot. It provides a simple interface +for controlling the robot remotely over Wi-Fi and for receiving status updates. + +Communication is handled via the WebSocket protocol. The library includes a set of +classes and methods for controlling robot movement, sensors, and other features. +""" + +# pylint: disable=unnecessary-pass,unused-argument,line-too-long,too-many-lines +# pylint: disable=invalid-name,unused-import,redefined-outer-name +import io +import json +import time +import threading +import sys +from typing import Union, cast, Callable +import math +import atexit +import signal +import _thread +import pathlib +import websocket +from .settings import Settings +from . import vex_types as vex #importing from the same package +from . import vex_messages as commands +#module-specific "constant" globals +VERSION_MAJOR = 1 +VERSION_MINOR = 0 +VERSION_BUILD = 0 +VERSION_BETA = 0 +SYS_FLAGS_SOUND_PLAYING = 1<<0 +SYS_FLAGS_IS_SOUND_DNL = 1<<16 +SYS_FLAGS_IS_MOVE_ACTIVE = 1<<1 # if a move_at or move_for (or any "move" command) is active +SYS_FLAGS_IMU_CAL = 1<<3 +SYS_FLAGS_IS_TURN_ACTIVE = 1<<4 +SYS_FLAGS_IS_MOVING = 1<<5 # if there is any wheel movement whatsoever +SYS_FLAGS_HAS_CRASHED = 1<<6 +SYS_FLAGS_IS_SHAKE = 1<<8 +SYS_FLAGS_PWR_BUTTON = 1<<9 +SYS_FLAGS_PROG_ACTIVE = 1<<10 + +SOUND_SIZE_MAX_BYTES = 255 * 1024 +BARREL_MIN_Y = 160 +BARREL_MIN_CX = 120 +BARREL_MAX_CX = 200 + +BALL_MIN_Y = 170 +BALL_MIN_CX = 120 +BALL_MAX_CX = 200 + +AIVISION_MAX_OBJECTS = 24 +AIVISION_DEFAULT_SNAPSHOT_OBJECTS = 8 + +DRIVE_VELOCITY_MAX_MMPS = 200 # millimeters per second +TURN_VELOCITY_MAX_DPS = 180 # Degrees per second +class AimException(Exception): + """VEX AIM Exception Class""" + +class DisconnectedException(AimException): + """Exception that is thrown when robot is not connected over Websocket""" + +class NoImageException(AimException): + """No image was received""" + +class ReceiveErrorException(AimException): + """(internally used) error receiving WS frame""" + +class InvalidSoundFileException(AimException): + """Sound file extension or format is not supported""" + +class InvalidImageFileException(AimException): + """image file extension or format is not supported""" + +class WSThread(threading.Thread): + """ Base class for all Websocket threads""" + def __init__ (self, host, ws_name): + threading.Thread.__init__(self) + self.host = host + self.ws_name = ws_name + self.uri = f"ws://{self.host}/{self.ws_name}" + self.ws = self.connect_websocket(timeout=4) + self.callback = None + self.running = True + #set equal to true of connection needs to be reset (disconnect, reconnect) + self._ws_needs_reset = False + + def connect_websocket(self, timeout): + """ connect to the websocket server""" + ws = websocket.WebSocket() + try: + ws.connect(self.uri, timeout=timeout) + except Exception as error: + print( + f"Could not connect to {self.uri} (reason: {error}). " + f"Verify that \"{self.host}\" is the correct IP/hostname of the AIM robot " + "and that it is connected to the same network (AP mode is 192.168.4.1)" + ) + sys.exit(1) + return ws + + def ws_send(self, payload: Union[bytes, str], opcode: int = websocket.ABNF.OPCODE_TEXT): + """ send data to the robot over the websocket connection""" + try: + self.ws.send(payload, opcode) + except (ConnectionResetError, websocket.WebSocketException) as error: + self._ws_needs_reset = True + raise DisconnectedException( + f"{self.ws_name}: error sending data to robot, apparently disconnected, " + f"will try to reconnect; error: '{error}'" + ) from error + + def ws_receive(self): + """ receive data from the robot over the websocket connection""" + try: + data = self.ws.recv() + except (ConnectionResetError, websocket.WebSocketException) as error: + self._ws_needs_reset = True + raise ReceiveErrorException( + f"{self.ws_name}: error receiving data from robot, apparently disconnected, " + f"will try to reconnect; error: '{error}'" + ) from error + return data + + def ws_close(self): + """ close the websocket connection""" + try: + self.ws.close() + except Exception as error: + print(f"Failed to close WebSocket connection. It might already be closed. Error: {error}") + +class WSStatusThread(WSThread): + """ Websocket thread for listening to different status updates from the robot""" + def __init__(self, host): + super().__init__ (host, "ws_status") + self._empty_status = { + "controller": {"flags": "0x0000", "stick_x": 0, "stick_y": 0, "battery": 0}, + "robot": { + "flags": "0x00000000", + "battery": 0, + "touch_flags": "0x0000", + "touch_x": 0, + "touch_y": 0, + "robot_x": 0, + "robot_y": 0, + "roll": "0", + "pitch": "0", + "yaw": "0", + "heading": "0", + "acceleration": {"x": "0", "y": "0", "z": "0"}, + "gyro_rate": {"x": "0", "y": "0", "z": "0"}, + "screen": {"row": "1", "column": "1"} + }, + "aivision": { + "classnames": { + "count": 4, + "items": [ + {"index": 0, "name": "SportsBall"}, + {"index": 1, "name": "BlueBarrel"}, + {"index": 2, "name": "OrangeBarrel"}, + {"index": 3, "name": "Robot"}, + ], + }, + "objects": { + "count": 0, + "items": [ + { + "type": 0, + "id": 0, + "type_str": "0", + "originx": 0, + "originy": 0, + "width": 0, + "height": 0, + "score": 0, + "name": "0", + } + ]}, + }, + } + self.current_status = self._empty_status + self.is_move_active_flag_needs_setting = False + self.is_turn_active_flag_needs_setting = False + self.is_moving_flag_needs_setting = False + self.is_moving_flag_needs_clearing = False + self.imu_cal_flag_needs_setting = False + self.sound_playing_flag_needs_setting = False + self.sound_downloading_flag_needs_setting = False + + self._packets_lost_counter = 0 + self.heartbeat = 0 + self.program_active = False + + #need to have list of callback for screen pressed + self._screen_pressed_callbacks = [] + self._screen_released_callbacks = [] + self._inertial_crashed_callbacks = [] + self._last_screen_pressed = False + + def update_status_flags(self): + """ update the status flags based on the current status received from the robot""" + if self.is_move_active_flag_needs_setting: + self.set_is_move_active_flag() + self.is_move_active_flag_needs_setting = False + + if self.is_turn_active_flag_needs_setting: + self.set_is_turn_active_flag() + self.is_turn_active_flag_needs_setting = False + + if self.is_moving_flag_needs_setting: + self.set_is_moving_flag() + self.is_moving_flag_needs_setting = False + + if self.is_moving_flag_needs_clearing: + self.clear_is_moving_flag() + self.is_moving_flag_needs_clearing = False + + if self.imu_cal_flag_needs_setting: + self.set_imu_cal_flag() + self.imu_cal_flag_needs_setting = False + + if self.sound_playing_flag_needs_setting: + self.set_sound_playing_flag() + self.sound_playing_flag_needs_setting = False + + if self.sound_downloading_flag_needs_setting: + self.set_sound_downloading_flag() + self.sound_downloading_flag_needs_setting = False + + + def set_is_move_active_flag(self): + """ set the is_move_active flag in the robot status""" + robot_flags = self.current_status["robot"]["flags"] + #update is_move_active flag (convert robot_flags to int, set bit 1 to 1, then convert back to hex string) + new_robot_flags = hex(int(robot_flags, 16) | SYS_FLAGS_IS_MOVE_ACTIVE) + self.current_status["robot"]["flags"] = new_robot_flags + + def set_is_turn_active_flag(self): + """ set the is_turn_active flag in the robot status""" + robot_flags = self.current_status["robot"]["flags"] + #update is_turn_active flag (convert robot_flags to int, set bit 1 to 1, then convert back to hex string) + new_robot_flags = hex(int(robot_flags, 16) | SYS_FLAGS_IS_TURN_ACTIVE) + self.current_status["robot"]["flags"] = new_robot_flags + + def set_is_moving_flag(self): + """ set the is_moving flag in the robot status""" + robot_flags = self.current_status["robot"]["flags"] + #update is_moving flag + #convert robot_flags to int, set bit 1 to 1, then convert back to hex string + new_robot_flags = hex(int(robot_flags, 16) | SYS_FLAGS_IS_MOVING) + self.current_status["robot"]["flags"] = new_robot_flags + + def clear_is_moving_flag(self): + """ reset the is_moving flag in the robot status""" + robot_flags = self.current_status["robot"]["flags"] + #update is_moving flag + #convert robot_flags to int, set bit 1 to 1, then convert back to hex string + new_robot_flags = hex(int(robot_flags, 16) & ~SYS_FLAGS_IS_MOVING) + self.current_status["robot"]["flags"] = new_robot_flags + + def set_imu_cal_flag(self): + """ set the flag to say is IMU calibrating based on the robot status""" + robot_flags = self.current_status["robot"]["flags"] + #update imu_cal flag + #convert robot_flags to int, set bit 1 to 1, then convert back to hex string + new_robot_flags = hex(int(robot_flags, 16) | SYS_FLAGS_IMU_CAL) + self.current_status["robot"]["flags"] = new_robot_flags + + def set_sound_playing_flag(self): + """ set the flag to say sound is playing based on the status""" + robot_flags = self.current_status["robot"]["flags"] + #update sound_playing flag + #convert robot_flags to int, set bit 1 to 1, then convert back to hex string + new_robot_flags = hex(int(robot_flags, 16) | SYS_FLAGS_SOUND_PLAYING) + self.current_status["robot"]["flags"] = new_robot_flags + + def set_sound_downloading_flag(self): + """ set the flag to say sound is downloading based on the status""" + robot_flags = self.current_status["robot"]["flags"] + #update is_sound_downloading flag + # convert robot_flags to int, set bit 1 to 1, then convert back to hex string + new_robot_flags = hex(int(robot_flags, 16) | SYS_FLAGS_IS_SOUND_DNL) + self.current_status["robot"]["flags"] = new_robot_flags + + def check_shake_flag(self): + """ detect if the robot has been shaken""" + # previously, a shake would cause program to exit. + # This was problematic, so nothing is done currently. + robot_flags = self.current_status["robot"]["flags"] + # if int(robot_flags, 16) & SYS_FLAGS_IS_SHAKE != 0: + # _thread.interrupt_main() + + def check_power_button_flag(self): + """ detect if the power button has been pressed to exit the program""" + robot_flags = self.current_status["robot"]["flags"] + if int(robot_flags, 16) & SYS_FLAGS_PWR_BUTTON != 0: + print("detected power button press, exiting program") + _thread.interrupt_main() + + def check_program_active_flag(self): + """Going from program_active == True to program_active == False exits the program""" + robot_flags = self.current_status["robot"]["flags"] + program_active_old = self.program_active + + if int(robot_flags, 16) & SYS_FLAGS_PROG_ACTIVE != 0: + self.program_active = True + else: + self.program_active = False + + if program_active_old and not self.program_active: + print("detected that program is no longer active (robot power button pressed?), exiting program") + _thread.interrupt_main() + + def check_crash_flag(self): + """ detect if the robot has crashed and fire the appropriate callbacks""" + robot_flags = self.current_status["robot"]["flags"] + if int(robot_flags, 16) & SYS_FLAGS_HAS_CRASHED != 0: + for (cb, args) in self._inertial_crashed_callbacks: + cb(*args) + + def check_screen_pressing(self): + """Check if the screen is being pressed, call pressed/released callbacks on transition.""" + is_pressed = bool(int(self.current_status["robot"]["touch_flags"], 16) & 0x0001) + + # If newly pressed + if is_pressed and not self._last_screen_pressed: + for (cb, args) in self._screen_pressed_callbacks: + cb(*args) + + # If newly released + if not is_pressed and self._last_screen_pressed: + for (cb, args) in self._screen_released_callbacks: + cb(*args) + + self._last_screen_pressed = is_pressed + + def is_current_status_empty(self): + """ check if the current status is empty""" + if self.current_status == self._empty_status: + return True + else: + return False + + def add_screen_pressed_callback(self, callback: Callable[..., None], args: tuple = ()): + """Adds a callback for screen press events, storing optional args.""" + # Store a tuple of (callback_function, args) + self._screen_pressed_callbacks.append((callback, args)) + + def add_screen_released_callback(self, callback: Callable[..., None], args: tuple = ()): + """Adds a callback for screen release events, storing optional args.""" + self._screen_released_callbacks.append((callback, args)) + + def add_inertial_crash_callback(self, callback: Callable[..., None], args: tuple = ()): + """Adds a callback for inertial sensor's crash detected events, storing optional args.""" + # Store a tuple of (callback_function, args) + self._inertial_crashed_callbacks.append((callback, args)) + + def run(self): + while self.running: + new_status_json = '' + new_status = self._empty_status + if self._ws_needs_reset: + self.ws_close() + self._ws_needs_reset = False + + if self.ws.connected: + status_packet_error = False + self.ws_send((1).to_bytes(1, 'little'), websocket.ABNF.OPCODE_BINARY) + try: + new_status_json = self.ws_receive() + except Exception: + status_packet_error = True + + if not status_packet_error: + try: + new_status = json.loads(new_status_json) + except Exception: + status_packet_error = True + + #If we have an error receiving packet, initially we want to keep current_status unchanged. + #After enough dropped packets, set current_status to empty values. + if status_packet_error: + self._packets_lost_counter += 1 + print(f"lost a status packet, counter: {self._packets_lost_counter}") + #we have received a valid status packet, so update current_status: + else: + self._packets_lost_counter = 0 #reset this counter + self.current_status = new_status + # print("current_status: ", self.current_status) + if self.callback: + if callable(self.callback): + self.callback() + + # if a certain commands are sent, the very next status flag won't have the appropriate flags set yet, so over-ride locally. + self.update_status_flags() + + self.check_shake_flag() + self.check_crash_flag() + self.check_screen_pressing() + self.check_power_button_flag() + self.check_program_active_flag() + self.heartbeat = not self.heartbeat + + if self._packets_lost_counter > 5: + self.current_status = self._empty_status + + # print("current_status: ", self.current_status) + time.sleep(0.05) + else: + # print ("trying to reconnect to ws_status") + try: + print(f"{self.ws_name} reconnecting") + self.ws.connect(self.uri) + except: + pass # we'll keep trying to reconnect + +class WSImageThread(WSThread): + """ Websocket thread for receiving image stream from the robot""" + def __init__(self, host): + super().__init__ (host, "ws_img") + self.current_image_index = 0 + self.image_list: list[bytes] = [bytes(1), bytes(1)] + + self._next_image_index = 1 + self._streaming = False + + def run(self): + while self.running: + if self._ws_needs_reset: + self.ws_close() + self._ws_needs_reset = False + + if self.ws.connected and self._streaming: + if self.current_image_index == 1: + self._next_image_index = 1 + self.current_image_index = 0 + else: + self._next_image_index = 0 + self.current_image_index = 1 + + try: + self.image_list[self._next_image_index] = cast(bytes, self.ws_receive()) # cast to narrow str | bytes down to bytes + if self.callback: + if callable(self.callback): + self.callback() + except ReceiveErrorException: + self.image_list[self._next_image_index] = (0).to_bytes(1, 'little') + + elif not self.ws.connected: + self._streaming = False + try: + print(f"{self.ws_name} reconnecting") + self.ws.connect(self.uri) + except: + pass # we'll keep trying to reconnect + else: + time.sleep(0.05) + + def stop_stream(self): + """ stop the image stream""" + self._streaming = False + self.ws_send((0).to_bytes(1, 'little'), websocket.ABNF.OPCODE_BINARY) + + def start_stream(self): + """ start the image stream""" + self._streaming = True + self.ws_send((1).to_bytes(1, 'little'), websocket.ABNF.OPCODE_BINARY) + +class WSCommandThread(WSThread): + """ Websocket thread for sending commands to the robot""" + def __init__(self, host): + super().__init__ (host, "ws_cmd") + + def run(self): + while self.running: + if self._ws_needs_reset: + self.ws_close() + self._ws_needs_reset = False + + if not self.ws.connected: + try: + print(f"{self.ws_name} reconnecting") + self.ws.connect(self.uri) + except: + pass # we'll keep on trying + + time.sleep(0.2) + +class WSAudioThread(WSThread): + """ Websocket thread for sending audio to the robot""" + def __init__(self, host): + super().__init__ (host, "ws_audio") + + def run(self): + while self.running: + if self._ws_needs_reset: + self.ws_close() + self._ws_needs_reset = False + + if not self.ws.connected: + try: + print(f"{self.ws_name} reconnecting") + self.ws.connect(self.uri) + except: + pass # we'll keep on trying + + time.sleep(0.2) + +class ColorRGB: + """ RGB color class""" + def __init__(self, r: int, g: int, b: int, t: bool=False): + self.r = r + self.g = g + self.b = b + self.t = t + +class Robot(): + """ + AIM Robot class. + When initializing, provide a host (IP address, hostname, or even domain name) + or leave at empty for default if AIM is in WiFi AP mode. + """ + #region private internal methods + def __init__(self, host=""): + """ + Initialize the Robot with default settings and WebSocket connections. + """ + # If host is not provided, read the host from the settings file + if host == "": + # Create an instance of the Settings class to read the host from the settings file + settings = Settings() + host = settings.host + + self.host = host + print( + f"Welcome to the AIM Websocket Python Client. " + f"Running version {VERSION_MAJOR}.{VERSION_MINOR}.{VERSION_BUILD}.{VERSION_BETA} " + f"and connecting to {self.host}" + ) + self.move_active_cmd_list = ["drive", "drive_for"] + self.turn_active_cmd_list = [ "turn", "turn_for", "turn_to"] + self.stopped_active_cmd_list = self.move_active_cmd_list + self.turn_active_cmd_list + + + self._ws_status_thread = WSStatusThread(self.host) + self._ws_status_thread.daemon = True + self._ws_status_thread.start() + + self._ws_img_thread = WSImageThread(self.host) + self._ws_img_thread.daemon = True + self._ws_img_thread.start() + + self._ws_cmd_thread = WSCommandThread(self.host) + self._ws_cmd_thread.daemon = True + self._ws_cmd_thread.start() + + self._ws_audio_thread = WSAudioThread(self.host) + self._ws_audio_thread.daemon = True + self._ws_audio_thread.start() + + atexit.register(self.exit_handler) + signal.signal(signal.SIGINT, self.kill_handler) + signal.signal(signal.SIGTERM, self.kill_handler) + + self._program_init() + + self.drive_speed = 100 # Millimeters per second + self.turn_speed = 75 # Degrees per second + # internal class instances to access through robot instance + self.timer = Timer() + self.screen = Screen(self) + self.inertial = Inertial(self) + self.kicker = Kicker(self) + self.sound = Sound(self) + self.led = Led(self) + self.vision = AiVision(self) + + # We don't want to execute certain things (like reset_heading) until we start getting status packets + while self._ws_status_thread.is_current_status_empty() is True: + # print("waiting for status") + time.sleep(0.05) + self.inertial.reset_heading() + + def exit_handler(self): + """upon system exit, either due to SIGINT/SIGTERM or uncaught exceptions""" + if hasattr(self, '_ws_cmd_thread'): #if connection were never established, this property wouldn't exist + pass + # print("program terminating, stopping robot") + # #not attempting to stop robot since upon program end or connection loss, robot stops itself and wouldn't respond anyways. + # try: + # self.stop_all_movement() + # except Exception as error: + # print("exceptions arose during stop_all_movement(), error:", error) + else: + print("program terminating (never connected to robot)") + + try: + self._ws_cmd_thread.running = False + except: + # print("ws_cmd_thread doesn't exist") + pass + try: + self._ws_status_thread.running = False + except: + # print("ws_status_thread doesn't exist") + pass + try: + self._ws_img_thread.running = False + except: + # print("ws_img_thread doesn't exist") + pass + try: + self._ws_img_thread.stop_stream() + except: + # print("error stopping ws_img stream") + pass + + def kill_handler(self, signum, frame): + """when kill signal is received, exit the program. Will result in exit_handler being run""" + signame = signal.Signals(signum).name + print(f'Received signal {signame} ({signum})') + sys.exit(0) + + def __getattribute__(self, name): + """ + This function gets called before any other Robot function.\n + If we are not connected to the robot (just looking at ws_cmd), then raise an exception + and terminate program unless the user handles the exception. + """ + method = object.__getattribute__(self, name) + if not method: + # raise Exception("Method %s not implemented" %name) + return + if callable(method): + if self._ws_cmd_thread.ws.connected is False: + raise DisconnectedException(f"error calling {name}: not connected to robot") + return method + + def _program_init(self): + """ + Sends a command indicating to robot that new program is starting. + To be called during __init__ + """ + message = commands.ProgramInit() + self.robot_send(message.to_json()) + + def _block_on_state(self, state_method): + time_start = time.time() + blocking = True + while True: + if state_method() is False: # debounce + time.sleep(0.05) + if state_method() is False: + break + # print("blocking") + time_elapsed = time.time() - time_start + time.sleep(0.1) + #if turning/moving took too long, we want to stop moving and stop blocking. + if time_elapsed > 10: + print(f"{state_method.__name__} wait timed out, stopping") + self.stop_all_movement() + return + + @property + def status(self): + """ returns the current status of the robot """ + return self._ws_status_thread.current_status + #endregion private internal methods + + #region Generic methods to send commands to the robot + def robot_send(self, json_cmd): + """send a command to the robot through websocket connection""" + disconnected_error = False + #print(json_cmd) + json_cmd_string = json.dumps(json_cmd, separators=(',',':')) + #print("sending: ", json_cmd_string) + try: + cmd_id = json_cmd["cmd_id"] + except: + print("robot_send did not receive a cmd_id") + return + + self._ws_cmd_thread.ws_send(str.encode(json_cmd_string), websocket.ABNF.OPCODE_BINARY) + try: + response_json = self._ws_cmd_thread.ws_receive() + except ReceiveErrorException: + disconnected_error = True + raise DisconnectedException(f"robot got disconnected after sending cmd_id: {cmd_id}") from None # disable exception chaining + # not trying to resend command because that would take too long, let user decide. + + try: + response = json.loads(response_json) + except Exception as error: + print(f"{cmd_id} Error: could not parse ws_cmd JSON response: '{error}'") + print("response_json", response_json) + return + + # print("response_json", response_json) + if response["cmd_id"] == "cmd_unknown": + print("robot: did not recognize command: ", cmd_id) + return + + if response["status"] == "error": + try: + error_info_string = response["error_info"] + except KeyError: + error_info_string = "no reason given" + print("robot: error processing command, reason: ", error_info_string) + return + + # trigger a local update to the robot status flags in ws_status_thread + if response["status"] in ["complete", "in_progress"]: + if response["cmd_id"] in self.move_active_cmd_list: + self._ws_status_thread.is_move_active_flag_needs_setting = True + if response["cmd_id"] in self.turn_active_cmd_list: + self._ws_status_thread.is_turn_active_flag_needs_setting = True + if response["cmd_id"] in self.stopped_active_cmd_list: + self._ws_status_thread.is_moving_flag_needs_setting = True + self._ws_status_thread.is_moving_flag_needs_clearing = False + if response["cmd_id"] == "imu_calibrate": + self._ws_status_thread.imu_cal_flag_needs_setting = True + + return + + def robot_send_audio(self, audio): + """ send audio to the robot through websocket audio thread""" + self._ws_audio_thread.ws_send(audio, websocket.ABNF.OPCODE_BINARY) + + def add_screen_pressed_callback(self, callback: Callable[..., None], arg: tuple=()): + """Adds a screen-pressed callback (delegate to _ws_status_thread).""" + self._ws_status_thread.add_screen_pressed_callback(callback, arg) + + def add_screen_released_callback(self, callback: Callable[..., None], arg: tuple=()): + """Adds a screen-released callback (delegate to _ws_status_thread).""" + self._ws_status_thread.add_screen_released_callback(callback, arg) + + def add_inertial_crash_callback(self, callback: Callable[..., None], arg: tuple=()): + """Adds a crash detected callback (delegate to _ws_status_thread).""" + self._ws_status_thread.add_inertial_crash_callback(callback, arg) + + #endregion Generic methods to send commands to the robot + #region Sensing Motion + def get_x_position(self): + """ returns the x position of the robot""" + origin_x = float(self.status["robot"]["robot_x"]) + origin_y = float(self.status["robot"]["robot_y"]) + # print("raw:", origin_x, origin_y) + offset_radians = -math.radians(self.inertial.heading_offset) + x = origin_x * math.cos(offset_radians) + origin_y * math.sin(offset_radians) + + return x + + def get_y_position(self): + """ returns the y position of the robot""" + origin_x = float(self.status["robot"]["robot_x"]) + origin_y = float(self.status["robot"]["robot_y"]) + offset_radians = -math.radians(self.inertial.heading_offset) + y = origin_y * math.cos(offset_radians) - origin_x * math.sin(offset_radians) + + return y + + def is_move_active(self): + """returns true if a move_at() or move_for() command is active with nonzero speed""" + if self._ws_status_thread.is_move_active_flag_needs_setting: + return True + robot_flags = self.status["robot"]["flags"] + is_move_active = bool(int(robot_flags, 16) & SYS_FLAGS_IS_MOVE_ACTIVE) + return is_move_active + + def is_turn_active(self): + """returns true if a turn(), turn_to(), or turn_for() command is active with nonzero speed""" + if self._ws_status_thread.is_turn_active_flag_needs_setting: + return True + robot_flags = self.status["robot"]["flags"] + is_turn_active = bool(int(robot_flags, 16) & SYS_FLAGS_IS_TURN_ACTIVE) + return is_turn_active + + def is_stopped(self): + """returns true if no move, turn, or spin_wheels command is active (i.e. no wheels should be moving)""" + if self._ws_status_thread.is_moving_flag_needs_clearing: + return True + if self._ws_status_thread.is_moving_flag_needs_setting: + return False + robot_flags = self.status["robot"]["flags"] + is_stopped = not bool(int(robot_flags, 16) & SYS_FLAGS_IS_MOVING) + return is_stopped + #endregion Sensing Motion + + #region Sensing Battery + def get_battery_capacity(self): + """Get the remaining capacity of the battery (relative state of charge) in percent.""" + battery_capacity = self.status["robot"]["battery"] + return battery_capacity + #endregion Sensing Battery + + #region Motion Commands + def set_move_velocity(self, velocity:vex.vexnumber, units:vex.DriveVelocityPercentUnits=vex.DriveVelocityUnits.PERCENT): + """ + overrides the default velocity for all subsequent movement methods in the project.\n + The default move velocity is 50% (100 millimeters per second) + """ + #if velocity is negative throw value error + if velocity < 0: + raise ValueError("velocity must be a positive number") + + if units.value == vex.DriveVelocityUnits.PERCENT.value: + #cannot exeed 100% + if velocity > 100: + velocity = 100 + #convert velocity in percentage to MMPS ex: 100% is 200 MMPS + velocity = int(velocity * 2) + elif units.value == vex.DriveVelocityUnits.MMPS.value: + #cannot exceed MAX velocity MMPS + if velocity > DRIVE_VELOCITY_MAX_MMPS: + velocity = DRIVE_VELOCITY_MAX_MMPS + velocity = int(velocity) + + self.drive_speed = velocity + + def set_turn_velocity(self, velocity:vex.vexnumber, units:vex.TurnVelocityPercentUnits=vex.TurnVelocityUnits.PERCENT): + """ + overrides the default velocity for all subsequent turn methods in the project.\n + The default turn velocity is 50% (75 degrees per second) + """ + #if velocity is negative throw value error + if velocity < 0: + raise ValueError("velocity must be a positive number") + + if units.value == vex.TurnVelocityUnits.PERCENT.value: + #cannot exeed 100% + if velocity > 100: + velocity = 100 + #if velocity is PERCENT convert to DPS ex: 100% is 180 MMPS + velocity = int(velocity * 1.8) + elif units.value == vex.TurnVelocityUnits.DPS.value: + #cannot exceed MAX velocity MMPS + if velocity > TURN_VELOCITY_MAX_DPS: + velocity = TURN_VELOCITY_MAX_DPS + velocity = int(velocity) + + self.turn_speed = velocity + + def move_at(self, angle:vex.vexnumber, velocity=None, + units:vex.DriveVelocityPercentUnits=vex.DriveVelocityUnits.PERCENT): + """ + move indefinitely at angle (-360 to 360 degrees) at velocity (0-100) \n + if velocity is not provided, use the default set by set_move_velocity command \n + The velocity unit is PERCENT (default) or millimeters per second MMPS + """ + if velocity is None: + velocity = self.drive_speed + else: + if units.value == vex.DriveVelocityUnits.PERCENT.value: + #cannot exeed 100% + if velocity > 100: + velocity = 100 + #if velocity is PERCENT convert to MMPS ex: 100% is 200 MMPS + velocity = int(velocity * 2) + elif units.value == vex.DriveVelocityUnits.MMPS.value: + #cannot exceed MAX velocity MMPS + if velocity > DRIVE_VELOCITY_MAX_MMPS: + velocity = DRIVE_VELOCITY_MAX_MMPS + velocity = int(velocity) + # passing negaitive velocity will flip the direction on the firmware side. No need to handle it here + stacking_type = vex.StackingType.STACKING_OFF + message = commands.MoveAt(angle, velocity,stacking_type.value) + self.robot_send(message.to_json()) + + def move_for(self, distance:vex.vexnumber, angle:vex.vexnumber, velocity=None, units:vex.DriveVelocityPercentUnits=vex.DriveVelocityUnits.PERCENT, wait=True): + """move for a distance (mm) at angle (-360 to 360 degrees) at velocity (PERCENT/MMPS). + if velocity or turn_speed is not provided, use the default set by set_move_velocity and set_turn_velocity commands""" + if velocity is None: + velocity = self.drive_speed + else: + if units.value == vex.DriveVelocityUnits.PERCENT.value: + #cannot exeed 100% + if velocity > 100: + velocity = 100 + #if velocity is PERCENT convert to MMPS ex: 100% is 200 MMPS + velocity = int(velocity * 2) + elif units.value == vex.DriveVelocityUnits.MMPS.value: + #cannot exceed MAX velocity MMPS + if velocity > DRIVE_VELOCITY_MAX_MMPS: + velocity = DRIVE_VELOCITY_MAX_MMPS + velocity = int(velocity) + + #if velocity is negative flip the direction + if velocity < 0: + velocity = -velocity + distance = -distance + + turn_speed = self.turn_speed + # if not final_heading: + # final_heading = self.get_heading_raw() + heading = 0 + stacking_type = vex.StackingType.STACKING_OFF + message = commands.MoveFor(distance, angle, velocity, turn_speed, heading, stacking_type.value) + self.robot_send(message.to_json()) + if wait: + self._block_on_state(self.is_move_active) + + def move_with_vectors(self, x, y, r): + """ + moves the robot using vector-based motion, combining horizontal (X-axis) and + vertical (Y-axis) movement and having the robot to rotate at the same time + + x: X-axis velocity (in %). negative values move left and positive values move right\n + y: Y-axis velocity (in %). negative values move backward and positive values move forward\n + r: rotation velocity (in %). negative values move counter-clockwise and positive values move clockwise\n + """ + # clip to +/- 100 + if x > 100: + x = 100 + if x < -100: + x = -100 + if y > 100: + y = 100 + if y < -100: + y = -100 + if r > 100: + r = 100 + if r < -100: + r = -100 + + # scale + x = x * 2.0 + y = y * 2.0 + r = r * 1.8 + + # calculate wheel velocities + w1 = (0.5 * x) + ((0.866) * y) + r + w2 = (0.5 * x) - ((0.866) * y) + r + w3 = r - x + self.spin_wheels(int(w1), int(w2), int(w3)) + + def turn(self, direction: vex.TurnType, velocity=None, units:vex.TurnVelocityPercentUnits=vex.TurnVelocityUnits.PERCENT): + """turn indefinitely at velocity (DPS) in the direction specified by turn_direction (TurnType.LEFT or TurnType.RIGHT). + if velocity is not provided, use the default set by set_turn_velocity command""" + if velocity is None: + velocity = self.turn_speed + else: + if units.value == vex.TurnVelocityUnits.PERCENT.value: + #cannot exeed 100% + if velocity > 100: + velocity = 100 + #if velocity is PERCENT convert to DPS ex: 100% is 180 MMPS + velocity = int(velocity * 1.8) + elif units.value == vex.TurnVelocityUnits.DPS.value: + #cannot exceed MAX velocity MMPS + if velocity > TURN_VELOCITY_MAX_DPS: + velocity = TURN_VELOCITY_MAX_DPS + velocity = int(velocity) + #handle direction flip + if direction == vex.TurnType.LEFT: + velocity = -velocity + stacking_type = vex.StackingType.STACKING_OFF + message = commands.Turn(velocity, stacking_type.value) + self.robot_send(message.to_json()) + + def turn_for(self, direction: vex.TurnType, angle, velocity=None, units:vex.TurnVelocityPercentUnits=vex.TurnVelocityUnits.PERCENT, wait=True): + """turn for a 'angle' number of degrees at turn_rate (deg/sec)""" + if velocity is None: + velocity = self.turn_speed + else: + if units.value == vex.TurnVelocityUnits.PERCENT.value: + #cannot exeed 100% + if velocity > 100: + velocity = 100 + #if velocity is PERCENT convert to DPS ex: 100% is 180 MMPS + velocity = int(velocity * 1.8) + elif units.value == vex.TurnVelocityUnits.DPS.value: + #cannot exceed MAX velocity MMPS + if velocity > TURN_VELOCITY_MAX_DPS: + velocity = TURN_VELOCITY_MAX_DPS + velocity = int(velocity) + #handle direction flip + if direction == vex.TurnType.LEFT: + angle = -angle + stacking_type = vex.StackingType.STACKING_OFF + message = commands.TurnFor(angle, velocity, stacking_type.value) + self.robot_send(message.to_json()) + if wait: + self._block_on_state(self.is_turn_active) + + def turn_to(self, heading:vex.vexnumber, velocity=None, units:vex.TurnVelocityPercentUnits=vex.TurnVelocityUnits.PERCENT, wait=True): + """turn to a heading (degrees) at velocity (deg/sec)\n + heading can be -360 to 360""" + if not (-360 < heading < 360): + raise ValueError("heading must be between -360 and 360") + if velocity is None: + velocity = self.turn_speed + else: + if units.value == vex.TurnVelocityUnits.PERCENT.value: + #cannot exeed 100% + if velocity > 100: + velocity = 100 + #if velocity is PERCENT convert to DPS ex: 100% is 180 MMPS + velocity = int(velocity * 1.8) + elif units.value == vex.TurnVelocityUnits.DPS.value: + #cannot exceed MAX velocity MMPS + if velocity > TURN_VELOCITY_MAX_DPS: + velocity = TURN_VELOCITY_MAX_DPS + velocity = int(velocity) + #handle negative velocity + if velocity < 0: + velocity = -velocity + + heading_offset = self.inertial.heading_offset + heading = math.fmod (heading_offset + heading, 360) + stacking_type = vex.StackingType.STACKING_OFF + message = commands.TurnTo(heading, velocity, stacking_type.value) + self.robot_send(message.to_json()) + if wait: + self._block_on_state(self.is_turn_active) + + def stop_all_movement(self): + """stops all movements of the robot""" + self.move_at(0,0) + self.turn(vex.TurnType.RIGHT, 0) + # clear the is_moving_flag now (used by robot.is_stopped()) + self._ws_status_thread.clear_is_moving_flag() + # trigger this flag to be cleared again next time a status msg is received, in case the robot hasn't update the state yet: + self._ws_status_thread.is_moving_flag_needs_clearing = True + self._ws_status_thread.is_moving_flag_needs_setting = False + + def spin_wheels(self, velocity1: int, velocity2: int, velocity3: int): + """spin all three wheels of the robot at the specified velocities""" + message = commands.SpinWheels(velocity1, velocity2, velocity3) + self.robot_send(message.to_json()) + + def set_xy_position(self, x, y): + """sets the robot’s current position to the specified values""" + offset_radians = -math.radians(self.inertial.heading_offset) + origin_x = x * math.cos(offset_radians) - y * math.sin(offset_radians) + origin_y = y * math.cos(offset_radians) + x * math.sin(offset_radians) + + message = commands.SetPose(origin_x, origin_y) + self.robot_send(message.to_json()) + + for status_counter in range(2): + heartbeat_state = self._ws_status_thread.heartbeat + # wait till we get a new status packet + while heartbeat_state == self._ws_status_thread.heartbeat: + # print("status_counter %d" %(status_counter)) + time.sleep(0.050) + + #endregion Motion Commands + + #region Vision Commands + def has_any_barrel(self): + """returns true if a barrel is held by the kicker""" + ai_objects = list(self.vision.get_data(AiVision.ALL_AIOBJS)) + has_barrel = False + for object in range(len(ai_objects)): + cx = ai_objects[object].originX + ai_objects[object].width/2 + if ai_objects[object].classname in ["BlueBarrel", "OrangeBarrel"] and \ + BARREL_MIN_CX < cx < BARREL_MAX_CX and \ + ai_objects[object].originY > BARREL_MIN_Y: + has_barrel = True + + return has_barrel + + def has_blue_barrel(self): + """returns true if a barrel is held by the kicker""" + ai_objects = list(self.vision.get_data(AiVision.ALL_AIOBJS)) + has_barrel = False + for object in range(len(ai_objects)): + cx = ai_objects[object].originX + ai_objects[object].width/2 + if ai_objects[object].classname in ["BlueBarrel"] and \ + BARREL_MIN_CX < cx < BARREL_MAX_CX and \ + ai_objects[object].originY > BARREL_MIN_Y: + has_barrel = True + return has_barrel + + def has_orange_barrel(self): + """returns true if a barrel is held by the kicker""" + ai_objects = list(self.vision.get_data(AiVision.ALL_AIOBJS)) + has_barrel = False + for object in range(len(ai_objects)): + cx = ai_objects[object].originX + ai_objects[object].width/2 + if ai_objects[object].classname in ["OrangeBarrel"] and \ + BARREL_MIN_CX < cx < BARREL_MAX_CX and \ + ai_objects[object].originY > BARREL_MIN_Y : + has_barrel = True + return has_barrel + + def has_sports_ball(self): + """returns true if a ball is held by the kicker""" + ai_objects = list(self.vision.get_data(AiVision.ALL_AIOBJS)) + has_ball = False + for object in range(len(ai_objects)): + cx = ai_objects[object].originX + ai_objects[object].width/2 + if ai_objects[object].classname in ["SportsBall"] and \ + BALL_MIN_CX < cx < BALL_MAX_CX and \ + ai_objects[object].originY > BALL_MIN_Y : + has_ball = True + return has_ball + #endregion Vision Commands +class Inertial(): + """ AIM Inertial class. Provides methods to interact with the robot's inertial sensor.""" + def __init__(self, robot_instance: Robot): + """Initialize the Gyro with default settings.""" + self.robot_instance = robot_instance + self.heading_offset = 0 + self.rotation_offset = 0 + #region Inertial - Action + def calibrate(self): + """calibrate the IMU. Can't check if calibration is done, so probably do not call for now""" + message = commands.InterialCalibrate() + self.robot_instance.robot_send(message.to_json()) + #endregion Inertial - Action + #region Inertial - Mutators + def set_heading(self, heading): + """sets the robot’s heading to a specified value""" + raw_heading = self.get_heading_raw() + # print("reset heading to %f, get_heading_raw(): %f" %(heading, raw_heading)) + self.heading_offset = raw_heading - heading + + def reset_heading(self): + """robot heading will be set to 0""" + self.set_heading(0) + + def set_rotation(self, rotation): + """sets the robot’s rotation to a specified value""" + raw_rotation = self.get_rotation_raw() + self.rotation_offset = raw_rotation - rotation + + def reset_rotation(self): + """resets the robot’s rotation to 0""" + self.set_rotation(0) + + def set_crash_sensitivity(self, sensitivity=vex.SensitivityType.LOW): + """set the sensitivity of the crash sensor""" + message = commands.InterialSetCrashSensitivity(sensitivity.value) + self.robot_instance.robot_send(message.to_json()) + #endregion Inertial - Mutators + #region Inertial - Getters + def get_heading(self): + """reports the robot’s heading angle. This returns a float in the range 0 to 359.99 degrees""" + raw_heading = self.get_heading_raw() + heading = math.fmod(raw_heading - self.heading_offset, 360) + #round to 2 decimal places + heading = round(heading, 2) + if heading < 0: + heading += 360 + return heading + + def get_heading_raw(self): + """reports raw heading value from IMU""" + raw_heading = self.robot_instance.status["robot"]["heading"] + if type(raw_heading) == str: + raw_heading = float(raw_heading) + return raw_heading + + def get_rotation(self): + """returns the robot’s total rotation in degrees as a float. + This measures how much the robot has rotated relative to its last reset point""" + raw_rotation = self.get_rotation_raw() + rotation = raw_rotation - self.rotation_offset + #round to 2 decimal places + rotation = round(rotation, 2) + return rotation + + def get_rotation_raw(self): + """reports raw rotation value from IMU""" + raw_rotation = self.robot_instance.status["robot"]["rotation"] + if type(raw_rotation) == str: + raw_rotation = float(raw_rotation) + return raw_rotation + + def get_acceleration(self, axis: Union[vex.AxisType, vex.AccelerationType]): + """ returns the robot’s acceleration for a given axis.""" + if axis in [vex.AxisType.X_AXIS, vex.AccelerationType.FORWARD]: + value = self.robot_instance._ws_status_thread.current_status["robot"]["acceleration"]["x"] + elif axis in [vex.AxisType.Y_AXIS, vex.AccelerationType.RIGHTWARD]: + value = self.robot_instance._ws_status_thread.current_status["robot"]["acceleration"]["y"] + elif axis in [vex.AxisType.X_AXIS, vex.AccelerationType.DOWNWARD]: + value = self.robot_instance._ws_status_thread.current_status["robot"]["acceleration"]["z"] + if type(value) == str: + value = float(value) + return value + + def get_turn_rate(self, axis: Union[vex.AxisType, vex.OrientationType]): + """returns the robot’s gyro rate for a given axis in degrees per second (DPS). It returns a float from –1000.00 to 1000.00 degrees per second""" + if axis in [vex.AxisType.X_AXIS, vex.OrientationType.ROLL]: + value = self.robot_instance._ws_status_thread.current_status["robot"]["gyro_rate"]["x"] + elif axis in [vex.AxisType.Y_AXIS, vex.OrientationType.PITCH]: + value = self.robot_instance._ws_status_thread.current_status["robot"]["gyro_rate"]["y"] + elif axis in [vex.AxisType.Z_AXIS, vex.OrientationType.YAW]: + value = self.robot_instance._ws_status_thread.current_status["robot"]["gyro_rate"]["z"] + if type(value) == str: + value = float(value) + return value + + def get_roll(self): + """returns the robot’s roll angle in the range –180.00 to 180.00 degrees as a float""" + value = self.robot_instance.status["robot"]["roll"] + if type(value) == str: + value = float(value) + #round to 2 decimal places + value = round(value, 2) + return value + + def get_pitch(self): + """returns the robot’s pitch angle in the range –90.00 to 90.00 degrees as a float""" + value = self.robot_instance.status["robot"]["pitch"] + if type(value) == str: + value = float(value) + #round to 2 decimal places + value = round(value, 2) + return value + + def get_yaw(self): + """returns the robot’s yaw angle in the range –180.00 to 180.00 degrees as a float""" + value = self.robot_instance.status["robot"]["yaw"] + if type(value) == str: + value = float(value) + #round to 2 decimal places + value = round(value, 2) + return value + + def is_calibrating(self): + """reports whether the gyro is calibrating.""" + if self.robot_instance._ws_status_thread.imu_cal_flag_needs_setting == True: + return True + robot_flags = self.robot_instance._ws_status_thread.current_status["robot"]["flags"] + calibrating = bool(int(robot_flags, 16) & SYS_FLAGS_IMU_CAL) + return calibrating + #endregion Inertial - Getters + #region Inertial - Callbacks + def crashed(self, callback: Callable[...,None], arg: tuple=()): + """calls the specified function when the robot crashes""" + self.robot_instance.add_inertial_crash_callback(callback, arg) + #endregion Inertial - Callbacks + +class Screen(): + """ + Screen class for accessing the robot's screen features + like drawing shapes,text,and showing emojis + """ + def __init__(self, robot_instance: Robot): + self.robot_instance = robot_instance + # store r,b,g values of default fill color + fill_r,fill_g,fill_b = self._return_rgb(vex.Color.BLUE) + self.default_fill_color = ColorRGB(fill_r,fill_g,fill_b) + pen_r,pen_g,pen_b = self._return_rgb(vex.Color.BLUE) + self.default_pen_color = ColorRGB(pen_r,pen_g,pen_b) + + def _return_rgb(self, color): + if isinstance(color, (vex.Color, vex.Color.DefinedColor)): + r = (color.value >> 16) & 0xFF + g = (color.value >> 8) & 0xFF + b = color.value & 0xFF + elif isinstance(color, int): + r = (color >> 16) & 0xFF + g = (color >> 8) & 0xFF + b = color & 0xFF + else: + raise AimException("parameter must be a vex.Color instance or int rgb value") + return r,g,b + + def _return_transparency(self, color): + if isinstance(color, (vex.Color, vex.Color.DefinedColor)): + return color.transparent + return False + + #region Screen - Cursor Print + + def print(self, *args, **kwargs): + """displays text on the robot’s screen at the current cursor position and font""" + try: + out=io.StringIO() + if 'end' not in kwargs: + kwargs['end'] = "" + print(*args,**kwargs, file=out) + text = out.getvalue() + #print("text: ", text) + out.close() + message = commands.ScreenPrint(text) + self.robot_instance.robot_send(message.to_json()) + except Exception as e: + print(f"Error displaying text on screen: {e}") + + def set_cursor(self, row, column): + """sets the cursor’s (row, column) screen position""" + message = commands.ScreenSetCursor(row, column) + self.robot_instance.robot_send(message.to_json()) + + def next_row(self): + """moves the cursor to the next row""" + message = commands.ScreenNextRow() + self.robot_instance.robot_send(message.to_json()) + + def clear_row(self, row: int, color=vex.Color.BLUE): + """clears a row of text.""" + r,g,b = self._return_rgb(color) + message = commands.ScreenClearRow(row, r, g, b) + self.robot_instance.robot_send(message.to_json()) + + def get_row(self): + """returns the current row of the cursor""" + value = self.robot_instance.status["robot"]["screen"]["row"] + if type(value) == str: + value = int(value) + return value + + def get_column(self): + """returns the current column of the cursor""" + value = self.robot_instance.status["robot"]["screen"]["column"] + if type(value) == str: + value = int(value) + return value + + #endregion Screen - Cursor Print + #region Screen - XY Print + def print_at(self, *args, x=0, y=0, **kwargs): + """displays text on the robot’s screen at a specified (x, y) screen coordinate. This method disregards the current cursor position""" + out=io.StringIO() + if 'end' not in kwargs: + kwargs['end'] = "" + print(*args,**kwargs, file=out) + text = out.getvalue() + #print("text: ", text) + out.close() + message = commands.ScreenPrintAt(text, x, y, True) + self.robot_instance.robot_send(message.to_json()) + + def set_origin(self, x, y): + """sets the origin of the screen to the specified (x, y) screen coordinate""" + message = commands.ScreenSetOrigin(x, y) + self.robot_instance.robot_send(message.to_json()) + #endregion Screen - XY Print + #region Screen - Mutators + + def clear_screen(self, color=vex.Color.BLUE): + """clears the robot’s screen of all drawings and text""" + r,g,b = self._return_rgb(color) + message = commands.ScreenClear(r, g, b) + self.robot_instance.robot_send(message.to_json()) + + def set_font(self, fontname: vex.FontType): + """sets the font used for displaying text on the robot’s screen""" + message = commands.ScreenSetFont(fontname.lower()) + self.robot_instance.robot_send(message.to_json()) + + def set_pen_width(self, width: int): + """sets the pen width used for drawing lines and shapes""" + message = commands.ScreenSetPenWidth(width) + self.robot_instance.robot_send(message.to_json()) + + def set_pen_color(self, color): + """sets the pen color used for drawing lines, shapes, and text""" + r,g,b = self._return_rgb(color) + self.default_pen_color = ColorRGB(r,g,b) + message = commands.ScreenSetPenColor(r, g, b) + self.robot_instance.robot_send(message.to_json()) + + def set_fill_color(self, color): + """sets the fill color used when shapes are drawn""" + r,g,b = self._return_rgb(color) + t = self._return_transparency(color) + self.default_fill_color = ColorRGB(r,g,b,t) + message = commands.ScreenSetFillColor(r, g, b, t) + self.robot_instance.robot_send(message.to_json()) + #endregion Screen - Mutators + #region Screen - Draw + def draw_pixel(self, x: int, y: int): + """draws a pixel at the specified (x, y) screen coordinate in the current pen color""" + message = commands.ScreenDrawPixel(x, y) + self.robot_instance.robot_send(message.to_json()) + + def draw_line(self, x1: int, y1: int, x2: int, y2: int): + """draws a line from the first specified screen coordinate (x1, y1) + to the second specified screen coordinate (x2, y2). + It uses the current the pen width set by set_pen_width and pen color set by set_pen_color""" + message = commands.ScreenDrawLine(x1, y1, x2, y2) + self.robot_instance.robot_send(message.to_json()) + + def draw_rectangle(self, x: int, y: int, width: int, height: int, color=None): + """draws a rectangle. It uses the current pen width set by set_pen_width and the pen color + set by set_pen_color for the outline. The fill color, set by set_fill_color, determines the interior color""" + #if color is not provided, use the default fill color + if color: + r,g,b = self._return_rgb(color) + t = self._return_transparency(color) + else: + r = self.default_fill_color.r + g = self.default_fill_color.g + b = self.default_fill_color.b + t = self.default_fill_color.t + message = commands.ScreenDrawRectangle(x, y, width, height, r, g, b, t) + self.robot_instance.robot_send(message.to_json()) + + def draw_circle(self, x: int, y: int, radius: int, color=None): + """draws a circle. It uses the current pen width set by set_pen_width and the pen color set by set_pen_color for the outline. + The fill color, set by set_fill_color, determines the interior color""" + #if color is not provided, use the default fill color + if color: + r,g,b = self._return_rgb(color) + t = self._return_transparency(color) + else: + r = self.default_fill_color.r + g = self.default_fill_color.g + b = self.default_fill_color.b + t = self.default_fill_color.t + message = commands.ScreenDrawCircle(x, y, radius, r, g, b, t) + self.robot_instance.robot_send(message.to_json()) + + def show_file(self, filename: str, x: int, y: int): + """draws a custom user-uploaded image on the robot’s screen at the specified (x, y) screen coordinate""" + #TODO: alowed extensions are correct? + if filename[-3:] not in ("bmp", "png"): + raise InvalidImageFileException(f"extension is {filename[-3:]}; expected extension to be bmp or png") + + message = commands.ScreenDrawImageFromFile(filename, x, y) + self.robot_instance.robot_send(message.to_json()) + + def set_clip_region(self, x: int, y: int, width: int, height: int): + """ + defines a rectangular area on the screen where all drawings and text will be confined. Any content outside this region will not be displayed + """ + message = commands.ScreenSetClipRegion(x, y, width, height) + self.robot_instance.robot_send(message.to_json()) + #endregion Screen - Draw + #region Screen - Emoji + def show_emoji(self, emoji: vex.EmojiType.EmojiType, look: vex.EmojiLookType.EmojiLookType = vex.EmojiLookType.LOOK_FORWARD): + """Show an emoji from a list of preset emojis""" + message = commands.ScreenShowEmoji(emoji.value, look.value) + self.robot_instance.robot_send(message.to_json()) + + def hide_emoji(self): + """hide emoji from being displayed, so that any underlying graphics can be viewed""" + message = commands.ScreenHideEmoji() + self.robot_instance.robot_send(message.to_json()) + #endregion Screen - Emoji + #region Screen - Callbacks + def pressed(self, callback: Callable[...,None], arg: tuple=()): + """Calls the specified function when the screen is pressed, with optional args.""" + self.robot_instance.add_screen_pressed_callback(callback, arg) + + def released(self, callback: Callable[...,None], arg: tuple=()): + """Calls the specified function when the screen is released, with optional args.""" + self.robot_instance.add_screen_released_callback(callback, arg) + + #endregion Screen - Callbacks + #region Screen - Touch + def pressing(self): + """returns true if the screen is being pressed""" + is_pressing = bool(int(self.robot_instance.status["robot"]["touch_flags"], 16) & 0x0001) + return is_pressing + + def x_position(self): + """returns the x position of the screen press""" + touch_x = float(self.robot_instance.status["robot"]["touch_x"]) + return touch_x + + def y_position(self): + """returns the y position of the screen press""" + touch_y = float(self.robot_instance.status["robot"]["touch_y"]) + return touch_y + #endregion Screen - Touch + #region Screen - Vision + def show_aivision(self): + """show the aivision output on the screen""" + message = commands.ScreenShowAivision() + self.robot_instance.robot_send(message.to_json()) + + def hide_aivision(self): + """hide the aivision output""" + message = commands.ScreenHideAivision() + self.robot_instance.robot_send(message.to_json()) + #endregion Screen - Vision + +class Kicker(): + """ Kicker class for accessing the robot's kicker features like kicking and pushing""" + def __init__(self, robot_instance: Robot): + self.robot_instance = robot_instance + pass + + def kick(self, kick_type: vex.KickType): + """activates the Kicker to kick an object with specified levels of force""" + message = commands.KickerKick(kick_type) + self.robot_instance.robot_send(message.to_json()) + + def place(self): + """activates the Kicker in order to place an object gently in front of the robot""" + # json = {"cmd_id": "push"} + self.kick(vex.KickType.SOFT) + +class Sound(): + """ + Sound class for accessing the robot's sound features like playing built-in and uploaded sounds + """ + def __init__(self, robot_instance: Robot): + self.robot_instance = robot_instance + def __note_to_midi(self, note_str): + """ + Converts a musical note string (e.g., "C#5") into a MIDI note number (0-11) and octave. + """ + # Check at least one character is present + if len(note_str) < 1: + raise TypeError("invalid note string") + + # Map first character to note + c = note_str[0].lower() + if c == 'c': + note = 0 + elif c == 'd': + note = 2 + elif c == 'e': + note = 4 + elif c == 'f': + note = 5 + elif c == 'g': + note = 7 + elif c == 'a': + note = 9 + elif c == 'b': + note = 11 + else: + raise TypeError("invalid note string") + + octave = 0 + + # If length=2, second char should be the octave 5–8 + if len(note_str) == 2: + if note_str[1] < '5' or note_str[1] > '8': + raise TypeError("invalid note string") + octave = int(note_str[1]) - 5 + if octave < 0: + octave = 0 + + # If length=3, middle char should be '#' or 'b', last char is octave 5–8 + elif len(note_str) == 3: + if (note_str[2] < '5' or note_str[2] > '8' or (note_str[1] not in ('#', 'b'))): + raise TypeError("invalid note string") + accidental = note_str[1] + if accidental == '#' and note < 11: + note += 1 + elif accidental == 'b' and note > 0: + note -= 1 + + octave = int(note_str[2]) - 5 + if octave < 0: + octave = 0 + else: + raise TypeError("invalid note string") + + return note, octave + + def __set_sound_active(self): + self.robot_instance._ws_status_thread.set_sound_playing_flag() + self.robot_instance._ws_status_thread.set_sound_downloading_flag() + self.robot_instance._ws_status_thread.sound_downloading_flag_needs_setting = True # have it be set again after next status message + self.robot_instance._ws_status_thread.sound_playing_flag_needs_setting = True # have it be set again after next status message + + def play(self, sound: vex.SoundType, volume = 50): + """plays one of the robot’s built-in sounds at a specified volume percentage. + Since this is a non-waiting method, the robot plays the built-in sound and moves to + the next command without waiting for it to finish""" + message = commands.SoundPlay(sound.lower(), volume) + self.robot_instance.robot_send(message.to_json()) + + def play_file(self, name: str, volume = 50): + """plays a custom sound loaded by the user at a specified volume percentage. \n + Current uploading sounds to AIM is supported onnly the VEXcode AIM app. + Since this is a non-waiting method, the robot plays the built-in sound and moves to + the next command without waiting for it to finish""" + message = commands.SoundPlayFile(name, volume) + self.robot_instance.robot_send(message.to_json()) + + def play_local_file(self, filepath: str, volume = 100): + """play a WAV or MP3 file stored on the client side; file will be transmitted to robot\n + Maximum filesize is 255 KB""" + file = pathlib.Path(filepath) + size = file.stat().st_size + if size > SOUND_SIZE_MAX_BYTES: + raise InvalidSoundFileException(f"file size of {size} bytes is too big; max size allowed is {SOUND_SIZE_MAX_BYTES} bytes ({SOUND_SIZE_MAX_BYTES/1024:.1f} kB)") + + extension = file.suffix + filename = file.name + audio = bytearray(64) + if not (extension == ".wav" or extension == ".mp3"): + raise InvalidSoundFileException(f"extension is {extension}; expected extension to be wav or mp3") + try: + f = open(filepath, 'rb') + except FileNotFoundError: + print ("File", filepath, "was not found") + else: + with f: + data = f.read() + + # do some sanity checks to make sure it's really a wave: + if extension == ".wav": + if not (data[0:4] == b'RIFF' and data[8:12] == b'WAVE'): + raise InvalidSoundFileException("file extension was .wav but does not appear to actually be a WAVE file") + channels = int.from_bytes(data[22:24], "little") + if channels > 2: + raise InvalidSoundFileException(f"only mono or stereo is supported, detected {channels} channels.") + if channels == 2: + print("%s is stereo; mono is recommended") + # first 64 bytes of audio is header + audio[0:1] = (0).to_bytes(1, 'little') + + # assuming the mp3 is valid: + elif extension == ".mp3": + audio[0:1] = (1).to_bytes(1, 'little') + + # set volume + audio[1:2] = (volume).to_bytes(1, 'little') + + audio[4:8] = (len(data)).to_bytes(4, 'little') # length of data + audio[8:12] = (0).to_bytes(4, 'little') # file chunk number + audio[32:32+len(filename)] = map(ord, filename[:32]) # filename + audio.extend(data) # append the data + self.robot_instance.robot_send_audio(audio) + self.__set_sound_active() + + def play_note(self, note_string: str, duration=750, volume=50): + """ + plays a specific note for a specific duration. . Since this is a non-waiting method, the robot plays + the specific note and moves to the next command without waiting for it to finish. + + ### Example: + robot.sound.play_note("C5", 2000) + robot.sound.play_note("F#6", 2000, 100) + """ + #get the note number and octave + note, octave = self.__note_to_midi(note_string) + if duration > 4000: + duration = 4000 + if volume > 100: + volume = 100 + if volume < 0: + volume = 0 + message = commands.SoundPlayNote(note, octave, duration, volume) + self.robot_instance.robot_send(message.to_json()) + self.__set_sound_active() + + def is_active(self): + """returns true if sound is currently playing or if it is being transmitted for playing""" + robot_flags = self.robot_instance.status["robot"]["flags"] + sound_active = bool(int(robot_flags, 16) & SYS_FLAGS_SOUND_PLAYING) or bool(int(robot_flags, 16) & SYS_FLAGS_IS_SOUND_DNL) + return sound_active + + def stop(self): + """ + stops a sound that is currently playing. + It will take some time for the sound to actually stop playing. + """ + message = commands.SoundStop() + self.robot_instance.robot_send(message.to_json()) + +class Led(): + """ Led class for accessing the robot's LED features like setting the color of the LEDs""" + def __init__(self, robot_instance: Robot): + self.robot_instance = robot_instance + pass + def __set_led_rgb(self, led: str, r: int, g: int, b: int): + """Turns on the specified LED with the specified RGB values""" + message = commands.LedSet(led, r, g, b) + self.robot_instance.robot_send(message.to_json()) + def on(self, *args): + """ + Sets the color of any one of six LEDs, with RGB values \n + ### Example: + robot.led.on(vex.LightType.ALL_LEDS, vex.Color.BLUE)\n + robot.led.on(1, vex.Color.BLUE) + """ + light_index = "all" + r, g, b = 0, 0, 0 + if len(args) not in [2, 4]: + raise TypeError("must have two or four arguments") + + if isinstance(args[0], int): + if args[0] in range(0,6): + light_index = f"light{args[0]+1}" + else: + light_index = "all" + elif isinstance(args[0], vex.LightType): + light_index = args[0] + + else: + raise TypeError("first argument must be of type int or vex.LightType") + + if len(args) == 2: + if isinstance(args[1], (vex.Color, vex.Color.DefinedColor)): + r = (args[1].value >> 16) & 0xFF + g = (args[1].value >> 8) & 0xFF + b = args[1].value & 0xFF + elif isinstance(args[1], (bool)): # turn white if True, off if False + r = 128 if args[1] else 0 + g = 128 if args[1] else 0 + b = 128 if args[1] else 0 + elif args[1] is None: + r = 0 + g = 0 + b = 0 + else: + raise TypeError("second argument must be of type vex.Color, vex.Color.DefinedColor, bool, or None") + + elif len(args) == 4: + r = args[1] + g = args[2] + b = args[3] + + else: + raise TypeError(f"bad parameters, n_args: {len(args)}") + + self.__set_led_rgb(light_index, r, g, b) + + def off(self, led: vex.LightType): + """turns off the specified LED""" + message = commands.LedSet(led, 0, 0, 0) + self.robot_instance.robot_send(message.to_json()) + +class Colordesc: + '''### Colordesc class - a class for holding an AI vision sensor color definition + + #### Arguments: + index : The color description index (1 to 7) + red : the red color value + green : the green color value + blue : the blue color value + hangle : the range of allowable hue + hdsat : the range of allowable saturation + + #### Returns: + An instance of the Colordesc class + + #### Examples: + COL1 = Colordesc(1, 13, 114, 227, 10.00, 0.20)\\ + COL2 = Colordesc(2, 237, 61, 74, 10.00, 0.20)\\ + ''' + def __init__(self, index, red, green, blue, hangle, hdsat): + self.id = index + self.red = red + self.green = green + self.blue = blue + self.hangle = hangle + self.hdsat = hdsat + pass + +class Codedesc: + '''### Codedesc class - a class for holding AI vision sensor codes + + A code description is a collection of up to five AI vision color descriptions. + #### Arguments: + index : The code description index (1 to 5) + c1 : An AI vision Colordesc + c1 : An AI vision Colordesc + c3 (optional) : An AI vision Colordesc + c4 (optional) : An AI vision Colordesc + c5 (optional) : An AI vision Colordesc + + #### Returns: + An instance of the Codedesc class + + #### Examples: + COL1 = Colordesc(1, 13, 114, 227, 10.00, 0.20)\\ + COL2 = Colordesc(2, 237, 61, 74, 10.00, 0.20)\\ + C1 = Codedesc( 1, COL1, COL2 ) + ''' + def __init__(self, index, c1:Colordesc, c2:Colordesc, *args): + self.id = index + self.cols = [c1, c2] + for arg in args: + if isinstance(arg, Colordesc): + self.cols.append(arg) + +class Tagdesc: + '''### Tagdesc class - a class for holding AI vision sensor tag id + + A tag description holds an apriltag id + #### Arguments: + id : The apriltag id (positive integer, not 0) + + #### Returns: + An instance of the Tagdesc class + + #### Examples: + T1 = Tagdesc( 23 ) + ''' + def __init__(self, index): + self.id = index + pass + + def __int__(self): + return self.id + + def __eq__(self, other): + if isinstance(other, Tagdesc): + return self.id == other.id + elif isinstance(other, int): + return self.id == other + return False + +class AiObjdesc: + '''### AiObjdesc class - a class for holding AI vision sensor AI object id + + A tag description holds an apriltag id + #### Arguments: + id : The AI Object (model) id (positive integer, not 0) + + #### Returns: + An instance of the AiObjdesc class + + #### Examples: + A1 = AiObjdesc( 2 ) + ''' + def __init__(self, index): + self.id = index + pass + + def __int__(self): + return self.id + + def __eq__(self, other): + if isinstance(other, AiObjdesc): + return self.id == other.id + elif isinstance(other, int): + return self.id == other + return False + +class ObjDesc: + """ + ObjDesc class - to represent any object type + """ + def __init__(self, index): + self.id = index + +class _ObjectTypeMask: + unkownObject = 0 + colorObject = (1 << 0) + codeObject = (1 << 1) + modelObject = (1 << 2) + tagObject = (1 << 3) + allObject = (0x3F) + +MATCH_ALL_ID = 0xFFFF +class AiVision(): + """ + AiVision class for accessing the robot's AI Vision Sensor features + """ + ALL_TAGS = Tagdesc(MATCH_ALL_ID) + '''A tag description for get_data indicating all tag objects to be returned''' + ALL_COLORS = Colordesc(MATCH_ALL_ID, 0, 0, 0, 0, 0) + '''A tag description for get_data indicating all color objects to be returned''' + ALL_CODES = Codedesc(MATCH_ALL_ID, ALL_COLORS, ALL_COLORS) + '''A tag description for get_data indicating all code objects to be returned''' + ALL_AIOBJS = AiObjdesc(MATCH_ALL_ID) + '''A tag description for get_data indicating all AI model objects to be returned''' + ALL_OBJECTS = ObjDesc(MATCH_ALL_ID) + '''A tag description for get_data indicating all objects to be returned''' + ALL_AIOBJECTS = AiObjdesc(MATCH_ALL_ID) + '''A description for get_data indicating all AI model objects to be returned''' + + def __init__(self, robot_instance: Robot): + self.robot_instance = robot_instance + self._object_count_val = 0 + self._largest_object = None + + def get_data(self, type, count=8): + '''### filters the data from the AI Vision Sensor frame to return a tuple. + The AI Vision Sensor can detect signatures that include pre-trained objects, AprilTags, or configured Colors and Color Codes. + + Color Signatures and Color Codes must be configured first in the AI Vision Utility in VEXcode before they can be used with this method. + The tuple stores objects ordered from largest to smallest by width, starting at index 0. Each object’s properties can be accessed using its index. + An empty tuple is returned if no matching objects are detected. + + #### Arguments: + type : A color, code or other object type + count (optional) : the maximum number of objects to obtain. default is 8. + + #### Returns: + tuple of AiVisionObject, this will be an empty tuple if nothing is available. + + #### Examples: + #### look for and return 1 object matching COL1 + objects = robot.vision.get_data(COL1) + + #### look for and return a maximum of 4 objects matching SIG_1 + objects = robot.vision.get_data(COL1, 4) + + #### return apriltag objects + objects = robot.vision.get_data(ALL_TAGS, AIVISION_MAX_OBJECTS) + ''' + match_tuple=None + if isinstance(type, Colordesc): + type_mask = _ObjectTypeMask.colorObject + id = type.id + elif isinstance(type, Codedesc): + type_mask = _ObjectTypeMask.codeObject + id = type.id + elif isinstance(type, AiObjdesc): + type_mask = _ObjectTypeMask.modelObject + id = type.id + elif isinstance(type, Tagdesc): + type_mask = _ObjectTypeMask.tagObject + id = type.id + elif isinstance(type, ObjDesc): + type_mask = _ObjectTypeMask.allObject + id = type.id + elif isinstance(type, tuple): + match_tuple = type + if not match_tuple: + raise AimException("tuple passed to get_data is empty") + type_mask = _ObjectTypeMask.allObject + else: + type_mask = _ObjectTypeMask.allObject # default value, changed to match uP by James + id = type # assume the first argument is any object id including match all. + + if count > AIVISION_MAX_OBJECTS: + count = AIVISION_MAX_OBJECTS + + objects = self.robot_instance.status["aivision"]["objects"] + item_count = objects["count"] + ai_object_list = [AiVisionObject() for item in range(item_count)] + # first just extract everything we got from ws_status + for item in range(item_count): + ai_object_list[item].type = objects["items"][item]["type"] + ai_object_list[item].id = objects["items"][item]["id"] + ai_object_list[item].originX = objects["items"][item]["originx"] + ai_object_list[item].originY = objects["items"][item]["originy"] + ai_object_list[item].width = objects["items"][item]["width"] + ai_object_list[item].height = objects["items"][item]["height"] + ai_object_list[item].centerX = int(ai_object_list[item].originX + (ai_object_list[item].width/2)) + ai_object_list[item].centerY = int(ai_object_list[item].originY + (ai_object_list[item].height/2)) + + if ai_object_list[item].type == _ObjectTypeMask.colorObject: + ai_object_list[item].angle = objects["items"][item]["angle"] * 0.01 + + if ai_object_list[item].type == _ObjectTypeMask.codeObject: + ai_object_list[item].angle = objects["items"][item]["angle"] * 0.01 + + if ai_object_list[item].type == _ObjectTypeMask.modelObject: #AI model objects can have a classname + ai_object_list[item].classname = self.robot_instance.status["aivision"]["classnames"]["items"][ai_object_list[item].id]["name"] + ai_object_list[item].score = objects["items"][item]["score"] + + if ai_object_list[item].type == _ObjectTypeMask.tagObject: + ai_object_list[item].tag.x = (objects["items"][item]["x0"],objects["items"][item]["x1"],objects["items"][item]["x2"],objects["items"][item]["x3"]) + ai_object_list[item].tag.y = (objects["items"][item]["y0"],objects["items"][item]["y1"],objects["items"][item]["y2"],objects["items"][item]["y3"]) + + ai_object_list[item].rotation = ai_object_list[item].angle + ai_object_list[item].area = ai_object_list[item].width * ai_object_list[item].height + cx = ai_object_list[item].centerX + cy = ai_object_list[item].centerY + ai_object_list[item].bearing = -34.656 + (cx * 0.22539) + (cy * 0.011526) + (cx * cx * -0.000042011) + (cx * cy * 0.000010433) + (cy * cy * -0.00007073) + + # print("diagnostic: ai_object_list: ", ai_object_list) + num_matches = 0 + sublist = [] + for item in range(item_count): + match_found = False + if match_tuple: + # check all tuple members for a match + for obj in match_tuple: + if isinstance(obj, Colordesc): + if ai_object_list[item].type == _ObjectTypeMask.colorObject and (ai_object_list[item].id == obj.id or MATCH_ALL_ID == obj.id): + match_found = True + elif isinstance(obj, Codedesc): + if ai_object_list[item].type == _ObjectTypeMask.codeObject and (ai_object_list[item].id == obj.id or MATCH_ALL_ID == obj.id): + match_found = True + elif isinstance(obj, AiObjdesc): + if ai_object_list[item].type == _ObjectTypeMask.modelObject and (ai_object_list[item].id == obj.id or MATCH_ALL_ID == obj.id): + match_found = True + elif isinstance(obj, Tagdesc): + if ai_object_list[item].type == _ObjectTypeMask.tagObject and (ai_object_list[item].id == obj.id or MATCH_ALL_ID == obj.id): + match_found = True + elif isinstance(obj, ObjDesc): + if ai_object_list[item].id == obj.id or MATCH_ALL_ID == obj.id: + match_found = True + else: + # assume obj is an int + if ai_object_list[item].id == int(obj) or MATCH_ALL_ID == int(obj): + match_found = True + else: + if ai_object_list[item].id == id or MATCH_ALL_ID == id: + match_found = True + + if ai_object_list[item].type & type_mask: + if match_found: + num_matches += 1 + #sort objects by object area in descending order + current_object_area = ai_object_list[item].height * ai_object_list[item].width + current_object_smallest = True + for i in range(len(sublist)): + if current_object_area >= (sublist[i].width * sublist[i].height): + sublist.insert(i, ai_object_list[item]) # insert item at position i of sublist. + current_object_smallest = False + break + if current_object_smallest: + sublist.append(ai_object_list[item]) #add to the end + + if num_matches > count: + num_matches = count + + self._object_count_val = num_matches + if sublist: + self._largest_object = sublist[0] + else: + self._largest_object = None + return sublist[:num_matches] + + def largest_object(self): + '''### Request the largest object from the last get_data(...) call + + #### Arguments: + None + + #### Returns: + An AiVisionObject object or None if it does not exist + ''' + return self._largest_object + + def object_count(self): + '''### Request the number of objects found in the last get_data call + + #### Arguments: + None + + #### Returns: + The number of objects found in the last get_data call + ''' + return self._object_count_val + + + def tag_detection(self, enable: bool): + '''### Enable or disable apriltag processing + + #### Arguments: + enable : True or False + + #### Returns: + None + ''' + message = commands.VisionTagDetection(enable) + self.robot_instance.robot_send(message.to_json()) + + def color_detection(self, enable: bool, merge: bool = False): + '''### Enable or disable color and code object processing + + #### Arguments: + enable : True or False + merge (optional) : True to enable merging of adjacent color detections + + #### Returns: + None + ''' + message = commands.VisionColorDetection(enable, merge) + self.robot_instance.robot_send(message.to_json()) + + def model_detection(self, enable: bool): + '''### Enable or disable AI model object processing + + #### Arguments: + enable : True or False + + #### Returns: + None + ''' + message = commands.VisionModelDetection(enable) + self.robot_instance.robot_send(message.to_json()) + + def color_description(self, desc: Colordesc): + '''### set a new color description + + #### Arguments: + desc: a color description + + #### Returns: + None + ''' + message = commands.VisionColorDescription(desc.id, desc.red, desc.green, desc.blue, desc.hangle, desc.hdsat) + self.robot_instance.robot_send(message.to_json()) + + def code_description(self, desc: Codedesc ): + '''### set a new code description + + #### Arguments: + desc: a code description + + #### Returns: + None + ''' + message = commands.VisionCodeDescription(desc.id, *desc.cols) + self.robot_instance.robot_send(message.to_json()) + + + def get_camera_image(self): + """ + returns a camera image; starts stream when first called; first image will take about 0.3 seconds to return.\n + Subsequently, images will continually stream from robot and therefore will be immediately available. + """ + if self.robot_instance._ws_img_thread._streaming == False: + # print("starting the stream") + start_time = time.time() + time_elapsed = 0 + self.robot_instance._ws_img_thread.start_stream() + while (self.robot_instance._ws_img_thread.image_list[self.robot_instance._ws_img_thread.current_image_index] == bytes(1) and time_elapsed < 0.5): + time.sleep(0.01) + time_elapsed = time.time() - start_time + image = self.robot_instance._ws_img_thread.image_list[self.robot_instance._ws_img_thread.current_image_index] + if image == bytes(1): + raise NoImageException("no image was received") + return image + +class VisionObject: + '''### VisionObject class - a class with some predefined objects for get_data''' + SPORTS_BALL = AiObjdesc(0) + '''A description for get_data indicating the AI ball objects to be returned''' + BLUE_BARREL = AiObjdesc(1) + '''A description for get_data indicating the AI blue barrel objects to be returned''' + ORANGE_BARREL = AiObjdesc(2) + '''A description for get_data indicating the AI orange barrel objects to be returned''' + AIM_ROBOT = AiObjdesc(3) + '''A description for get_data indicating the AI robot objects to be returned''' + TAG0 = Tagdesc(0) + '''A description for get_data indicating apriltags with id 0 to be returned''' + TAG1 = Tagdesc(1) + '''A description for get_data indicating apriltags with id 1 to be returned''' + TAG2 = Tagdesc(2) + '''A description for get_data indicating apriltags with id 2 to be returned''' + TAG3 = Tagdesc(3) + '''A description for get_data indicating apriltags with id 3 to be returned''' + TAG4 = Tagdesc(4) + '''A description for get_data indicating apriltags with id 4 to be returned''' + TAG5 = Tagdesc(5) + '''A description for get_data indicating apriltags with id 5 to be returned''' + TAG6 = Tagdesc(6) + '''A description for get_data indicating apriltags with id 6 to be returned''' + TAG7 = Tagdesc(7) + '''A description for get_data indicating apriltags with id 7 to be returned''' + TAG8 = Tagdesc(8) + '''A description for get_data indicating apriltags with id 8 to be returned''' + TAG9 = Tagdesc(9) + '''A description for get_data indicating apriltags with id 9 to be returned''' + TAG10 = Tagdesc(10) + '''A description for get_data indicating apriltags with id 10 to be returned''' + TAG11 = Tagdesc(11) + '''A description for get_data indicating apriltags with id 11 to be returned''' + TAG12 = Tagdesc(12) + '''A description for get_data indicating apriltags with id 12 to be returned''' + TAG13 = Tagdesc(13) + '''A description for get_data indicating apriltags with id 13 to be returned''' + TAG14 = Tagdesc(14) + '''A description for get_data indicating apriltags with id 14 to be returned''' + TAG15 = Tagdesc(15) + '''A description for get_data indicating apriltags with id 15 to be returned''' + TAG16 = Tagdesc(16) + '''A description for get_data indicating apriltags with id 16 to be returned''' + TAG17 = Tagdesc(17) + '''A description for get_data indicating apriltags with id 17 to be returned''' + TAG18 = Tagdesc(18) + '''A description for get_data indicating apriltags with id 18 to be returned''' + TAG19 = Tagdesc(19) + '''A description for get_data indicating apriltags with id 19 to be returned''' + TAG20 = Tagdesc(20) + '''A description for get_data indicating apriltags with id 20 to be returned''' + TAG21 = Tagdesc(21) + '''A description for get_data indicating apriltags with id 21 to be returned''' + TAG22 = Tagdesc(22) + '''A description for get_data indicating apriltags with id 22 to be returned''' + TAG23 = Tagdesc(23) + '''A description for get_data indicating apriltags with id 23 to be returned''' + TAG24 = Tagdesc(24) + '''A description for get_data indicating apriltags with id 24 to be returned''' + TAG25 = Tagdesc(25) + '''A description for get_data indicating apriltags with id 25 to be returned''' + TAG26 = Tagdesc(26) + '''A description for get_data indicating apriltags with id 26 to be returned''' + TAG27 = Tagdesc(27) + '''A description for get_data indicating apriltags with id 27 to be returned''' + TAG28 = Tagdesc(28) + '''A description for get_data indicating apriltags with id 28 to be returned''' + TAG29 = Tagdesc(29) + '''A description for get_data indicating apriltags with id 29 to be returned''' + TAG30 = Tagdesc(30) + '''A description for get_data indicating apriltags with id 30 to be returned''' + TAG31 = Tagdesc(31) + '''A description for get_data indicating apriltags with id 31 to be returned''' + TAG32 = Tagdesc(32) + '''A description for get_data indicating apriltags with id 32 to be returned''' + TAG33 = Tagdesc(33) + '''A description for get_data indicating apriltags with id 33 to be returned''' + TAG34 = Tagdesc(34) + '''A description for get_data indicating apriltags with id 34 to be returned''' + TAG35 = Tagdesc(35) + '''A description for get_data indicating apriltags with id 35 to be returned''' + TAG36 = Tagdesc(36) + '''A description for get_data indicating apriltags with id 36 to be returned''' + TAG37 = Tagdesc(37) + '''A description for get_data indicating apriltags with id 37 to be returned''' + ALL_TAGS = Tagdesc(MATCH_ALL_ID) + '''A description for get_data indicating any apriltag to be returned''' + ALL_VISION = ObjDesc(MATCH_ALL_ID) + '''A description for get_data indicating any object to be returned''' + ALL_COLORS = (AiVision.ALL_COLORS, AiVision.ALL_CODES) + '''A description for get_data indicating any color or code to be returned''' + ALL_CARGO = (SPORTS_BALL, BLUE_BARREL, ORANGE_BARREL) + '''A description for get_data indicating AI ball or barrel to be returned''' + +class AiVisionObject(): + """ + AiVisionObject class - a class for holding AI vision sensor object properties + """ + class Tag: + """ + Tag class - a class for holding AI vision sensor tag properties + The tag class is used to hold the coordinates of the four corners of the tag + """ + def __init__(self): + self.x = (0,0,0,0) + self.y = (0,0,0,0) + pass + + def __init__(self): + self.type = 0 + self.id = 0 + self.originX = 0 + self.originY = 0 + self.centerX = 0 + self.centerY = 0 + self.width = 0 + self.height = 0 + self.exists = True + self.angle = 0.0 + self.rotation = 0.0 + self.score = 0 + self.area = 0 + self.bearing = 0.0 + self.classname = '' + self.color = None # not used in remote + self.tag = AiVisionObject.Tag() + +class Timer: + '''### Timer class - create a new timer + + This class is used to create a new timer\\ + A timer can be used to measure time, access the system time and run a function at a time in the future. + + #### Arguments: + None + + #### Returns: + An instance of the Timer class + + #### Examples: + t1 = Timer() + ''' + def __init__(self): + self.start_time = time.time() + + def time(self, units=vex.TimeUnits.MSEC): + '''### return the current time for this timer + + #### Arguments: + units (optional) : the units that the time should be returned in, default is MSEC + + #### Returns: + An the current time in specified units. + + #### Examples: + ''' + elapsed_time = time.time() - self.start_time + if units == vex.TimeUnits.SECONDS: + # seconds as float in 2 decimal places + return round(elapsed_time, 2) + elif units == vex.TimeUnits.MSEC: + # miliseconds as int - no decimal + return int(elapsed_time * 1000) + else: + raise ValueError("Invalid time unit") + + def reset(self): + '''### reset the timer to 0 + + #### Arguments: + None + + #### Returns: + None + + #### Examples: + ''' + self.start_time = time.time() + + def event(self, callback: Callable[...,None], delay: int, arg: tuple=()): + '''### register a function to be called in the future + + #### Arguments: + callback : A function that will called after the supplied delay + delay : The delay before the callback function is called. + arg (optional) : A tuple that is used to pass arguments to the function. + + #### Returns: + None + + #### Examples: + def foo(arg): + print('timer has expired ', arg) + + t1 = Timer()\\ + t1.event(foo, 1000, ('Hello',)) + ''' + def delayed_call(): + time.sleep(delay / 1000) + callback(*arg) + + threading.Thread(target=delayed_call).start() + +class Thread(): + """ Thread class for running a function in a separate thread""" + def __init__(self, func, args=None): + if args: + self.t = threading.Thread(target=func, args=args) + else: + self.t = threading.Thread(target=func) + self.t.start() + \ No newline at end of file diff --git a/resources/python/vex/settings.json b/resources/python/vex/settings.json new file mode 100644 index 0000000..6b53a65 --- /dev/null +++ b/resources/python/vex/settings.json @@ -0,0 +1,5 @@ +{ + "connection": { + "host": "192.168.4.1" + } +} \ No newline at end of file diff --git a/resources/python/vex/settings.py b/resources/python/vex/settings.py new file mode 100644 index 0000000..442f6e0 --- /dev/null +++ b/resources/python/vex/settings.py @@ -0,0 +1,48 @@ +# ================================================================================================= +# Copyright (c) Innovation First 2025. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# ================================================================================================= +""" +AIM WebSocket API - Settings + +Settings class to read and manage the JSON configuration file. +""" +import json +import os + +class Settings: + """ + Settings class to read the JSON configuration file and provide access to the properties. + """ + + def __init__(self): + """ + Initialize the Settings class and load the settings from the JSON configuration file. + """ + self.file_path = os.path.join(os.path.dirname(__file__), 'settings.json') + self.config = self._load_settings() + + def _load_settings(self): + """ + Load the settings from the JSON configuration file. + + Returns: + dict: Dictionary containing the configuration settings. + """ + if not os.path.exists(self.file_path): + raise FileNotFoundError(f"Configuration file not found: {self.file_path}") + + with open(self.file_path, 'r') as file: + config = json.load(file) + + return config + + @property + def host(self): + """ + Get the host property from the configuration settings. + + Returns: + str: Host property value. + """ + return self.config.get('connection', {}).get('host', 'localhost') \ No newline at end of file diff --git a/resources/python/vex/vex_globals.py b/resources/python/vex/vex_globals.py new file mode 100644 index 0000000..65c128f --- /dev/null +++ b/resources/python/vex/vex_globals.py @@ -0,0 +1,295 @@ +# ================================================================================================= +# Copyright (c) Innovation First 2025. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# ================================================================================================= +""" +AIM WebSocket API - Globals + +This module defines global constants and enums used in the AIM WebSocket API. These globals +are provided to improve code readability and ease of use, especially for beginners and users +familiar with the VEXcode API. + +Globals in this module are designed to match the VEXcode API documentation. +If these conflict with existing types or variables in your project, +you may choose not to import this module. +""" + +# ---------------------------------------------------------- +# pylint: disable=unnecessary-pass,unused-argument,line-too-long,too-many-lines +# pylint: disable=missing-module-docstring,missing-function-docstring,missing-class-docstring +# pylint: disable=invalid-name,unused-import,redefined-outer-name + +from vex import KickType +from vex import AxisType +from vex import OrientationType +from vex import AccelerationType +from vex import LightType +from vex import Color +from vex import FontType +from vex import EmojiType +from vex import EmojiLookType +from vex import SoundType +from vex import VisionObject + +SOFT = KickType.SOFT +'''A kick type of soft''' +MEDIUM = KickType.MEDIUM +'''A kick type of medium''' +HARD = KickType.HARD +'''A kick type of hard''' + +X_AXIS = AxisType.X_AXIS +'''The X axis of the Inertial sensor.''' +Y_AXIS = AxisType.Y_AXIS +'''The Y axis of the Inertial sensor.''' +Z_AXIS = AxisType.Z_AXIS +'''The Z axis of the Inertial sensor.''' + +ROLL = OrientationType.ROLL +'''roll, orientation around the X axis of the Inertial sensor.''' +PITCH = OrientationType.PITCH +'''pitch, orientation around the Y axis of the Inertial sensor.''' +YAW = OrientationType.YAW +'''yaw, orientation around the Z axis of the Inertial sensor.''' + +FORWARD = AccelerationType.FORWARD +'''The X acceleration axis of the Inertial sensor.''' +RIGHTWARD = AccelerationType.RIGHTWARD +'''The Y acceleration axis of the Inertial sensor.''' +DOWNWARD = AccelerationType.DOWNWARD +'''The Z acceleration axis of the Inertial sensor.''' + +LED1 = LightType.LED1 +'''The LED at the 315 degree position on AIM''' +LED2 = LightType.LED2 +'''The LED at the 265 degree position on AIM''' +LED3 = LightType.LED3 +'''The LED at the 210 degree position on AIM''' +LED4 = LightType.LED4 +'''The LED at the 155 degree position on AIM''' +LED5 = LightType.LED5 +'''The LED at the 100 degree position on AIM''' +LED6 = LightType.LED6 +'''The LED at the 45 degree position on AIM''' +ALL_LEDS = LightType.ALL_LEDS +'''All LEDs on AIM''' + +BLACK = Color.BLACK +'''predefined Color black''' +WHITE = Color.WHITE +'''predefined Color white''' +RED = Color.RED +'''predefined Color red''' +GREEN = Color.GREEN +'''predefined Color green''' +BLUE = Color.BLUE +'''predefined Color blue''' +YELLOW = Color.YELLOW +'''predefined Color yellow''' +ORANGE = Color.ORANGE +'''predefined Color orange''' +PURPLE = Color.PURPLE +'''predefined Color purple''' +CYAN = Color.CYAN +'''predefined Color cyan''' +TRANSPARENT = Color.TRANSPARENT +'''predefined Color transparent''' + +MONO12 = FontType.MONO12 +'''monotype font of size 12''' +MONO15 = FontType.MONO15 +'''monotype font of size 15''' +MONO20 = FontType.MONO20 +'''monotype font of size 20''' +MONO24 = FontType.MONO24 +'''monotype font of size 24''' +MONO30 = FontType.MONO30 +'''monotype font of size 30''' +MONO36 = FontType.MONO36 +'''monotype font of size 36''' +MONO40 = FontType.MONO40 +'''monotype font of size 40''' +MONO60 = FontType.MONO60 +'''monotype font of size 60''' +PROP20 = FontType.PROP20 +'''proportional font of size 20''' +PROP24 = FontType.PROP24 +'''proportional font of size 24''' +PROP30 = FontType.PROP30 +'''proportional font of size 30''' +PROP36 = FontType.PROP36 +'''proportional font of size 36''' +PROP40 = FontType.PROP40 +'''proportional font of size 40''' +PROP60 = FontType.PROP60 +'''proportional font of size 60''' + +EXCITED = EmojiType.EXCITED +CONFIDENT = EmojiType.CONFIDENT +SILLY = EmojiType.SILLY +AMAZED = EmojiType.AMAZED +STRONG = EmojiType.STRONG +THRILLED = EmojiType.THRILLED +HAPPY = EmojiType.HAPPY +PROUD = EmojiType.PROUD +LAUGHING = EmojiType.LAUGHING +OPTIMISTIC = EmojiType.OPTIMISTIC +DETERMINED = EmojiType.DETERMINED +AFFECTIONATE = EmojiType.AFFECTIONATE +CALM = EmojiType.CALM +QUIET = EmojiType.QUIET +SHY = EmojiType.SHY +CHEERFUL = EmojiType.CHEERFUL +LOVED = EmojiType.LOVED +SURPRISED = EmojiType.SURPRISED +THINKING = EmojiType.THINKING +TIRED = EmojiType.TIRED +CONFUSED = EmojiType.CONFUSED +BORED = EmojiType.BORED +EMBARRASSED = EmojiType.EMBARRASSED +WORRIED = EmojiType.WORRIED +SAD = EmojiType.SAD +SICK = EmojiType.SICK +DISAPPOINTED = EmojiType.DISAPPOINTED +NERVOUS = EmojiType.NERVOUS +ANNOYED = EmojiType.ANNOYED +STRESSED = EmojiType.STRESSED +ANGRY = EmojiType.ANGRY +FRUSTRATED = EmojiType.FRUSTRATED +JEALOUS = EmojiType.JEALOUS +SHOCKED = EmojiType.SHOCKED +FEAR = EmojiType.FEAR +DISGUST = EmojiType.DISGUST + +LOOK_FORWARD = EmojiLookType.LOOK_FORWARD +'''The emoji will look forwards.''' +LOOK_RIGHT = EmojiLookType.LOOK_RIGHT +'''The emoji will look to the right.''' +LOOK_LEFT = EmojiLookType.LOOK_LEFT +'''The emoji will look to the left.''' + +DOORBELL = SoundType.DOORBELL +TADA = SoundType.TADA +FAIL = SoundType.FAIL +SPARKLE = SoundType.SPARKLE +FLOURISH = SoundType.FLOURISH +MOVE_FORWARD = SoundType.FORWARD +MOVE_REVERSE = SoundType.REVERSE +TURN_RIGHT = SoundType.RIGHT +TURN_LEFT = SoundType.LEFT +BLINKER = SoundType.BLINKER +CRASH = SoundType.CRASH +BRAKES = SoundType.BRAKES +HUAH = SoundType.HUAH +PICKUP = SoundType.PICKUP +CHEER = SoundType.CHEER +SENSING = SoundType.SENSING +DETECTED = SoundType.DETECTED +OBSTACLE = SoundType.OBSTACLE +LOOPING = SoundType.LOOPING +COMPLETE = SoundType.COMPLETE +PAUSE = SoundType.PAUSE +RESUME = SoundType.RESUME +SEND = SoundType.SEND +RECEIVE = SoundType.RECEIVE + + +ACT_HAPPY = SoundType.ACT_HAPPY +ACT_SAD = SoundType.ACT_SAD +ACT_EXCITED = SoundType.ACT_EXCITED +ACT_ANGRY = SoundType.ACT_ANGRY +ACT_SILLY = SoundType.ACT_SILLY + +SPORTS_BALL = VisionObject.SPORTS_BALL +'''A description for get_data indicating the AI ball objects to be returned''' +BLUE_BARREL = VisionObject.BLUE_BARREL +'''A description for get_data indicating the AI blue barrel objects to be returned''' +ORANGE_BARREL = VisionObject.ORANGE_BARREL +'''A description for get_data indicating the AI orange barrel objects to be returned''' +AIM_ROBOT = VisionObject.AIM_ROBOT +'''A description for get_data indicating the AI robot objects to be returned''' +TAG0 = VisionObject.TAG0 +'''A description for get_data indicating apriltags with id 0 to be returned''' +TAG1 = VisionObject.TAG1 +'''A description for get_data indicating apriltags with id 1 to be returned''' +TAG2 = VisionObject.TAG2 +'''A description for get_data indicating apriltags with id 2 to be returned''' +TAG3 = VisionObject.TAG3 +'''A description for get_data indicating apriltags with id 3 to be returned''' +TAG4 = VisionObject.TAG4 +'''A description for get_data indicating apriltags with id 4 to be returned''' +TAG5 = VisionObject.TAG5 +'''A description for get_data indicating apriltags with id 5 to be returned''' +TAG6 = VisionObject.TAG6 +'''A description for get_data indicating apriltags with id 6 to be returned''' +TAG7 = VisionObject.TAG7 +'''A description for get_data indicating apriltags with id 7 to be returned''' +TAG8 = VisionObject.TAG8 +'''A description for get_data indicating apriltags with id 8 to be returned''' +TAG9 = VisionObject.TAG9 +'''A description for get_data indicating apriltags with id 9 to be returned''' +TAG10 = VisionObject.TAG10 +'''A description for get_data indicating apriltags with id 10 to be returned''' +TAG11 = VisionObject.TAG11 +'''A description for get_data indicating apriltags with id 11 to be returned''' +TAG12 = VisionObject.TAG12 +'''A description for get_data indicating apriltags with id 12 to be returned''' +TAG13 = VisionObject.TAG13 +'''A description for get_data indicating apriltags with id 13 to be returned''' +TAG14 = VisionObject.TAG14 +'''A description for get_data indicating apriltags with id 14 to be returned''' +TAG15 = VisionObject.TAG15 +'''A description for get_data indicating apriltags with id 15 to be returned''' +TAG16 = VisionObject.TAG16 +'''A description for get_data indicating apriltags with id 16 to be returned''' +TAG17 = VisionObject.TAG17 +'''A description for get_data indicating apriltags with id 17 to be returned''' +TAG18 = VisionObject.TAG18 +'''A description for get_data indicating apriltags with id 18 to be returned''' +TAG19 = VisionObject.TAG19 +'''A description for get_data indicating apriltags with id 19 to be returned''' +TAG20 = VisionObject.TAG20 +'''A description for get_data indicating apriltags with id 20 to be returned''' +TAG21 = VisionObject.TAG21 +'''A description for get_data indicating apriltags with id 21 to be returned''' +TAG22 = VisionObject.TAG22 +'''A description for get_data indicating apriltags with id 22 to be returned''' +TAG23 = VisionObject.TAG23 +'''A description for get_data indicating apriltags with id 23 to be returned''' +TAG24 = VisionObject.TAG24 +'''A description for get_data indicating apriltags with id 24 to be returned''' +TAG25 = VisionObject.TAG25 +'''A description for get_data indicating apriltags with id 25 to be returned''' +TAG26 = VisionObject.TAG26 +'''A description for get_data indicating apriltags with id 26 to be returned''' +TAG27 = VisionObject.TAG27 +'''A description for get_data indicating apriltags with id 27 to be returned''' +TAG28 = VisionObject.TAG28 +'''A description for get_data indicating apriltags with id 28 to be returned''' +TAG29 = VisionObject.TAG29 +'''A description for get_data indicating apriltags with id 29 to be returned''' +TAG30 = VisionObject.TAG30 +'''A description for get_data indicating apriltags with id 30 to be returned''' +TAG31 = VisionObject.TAG31 +'''A description for get_data indicating apriltags with id 31 to be returned''' +TAG32 = VisionObject.TAG32 +'''A description for get_data indicating apriltags with id 32 to be returned''' +TAG33 = VisionObject.TAG33 +'''A description for get_data indicating apriltags with id 33 to be returned''' +TAG34 = VisionObject.TAG34 +'''A description for get_data indicating apriltags with id 34 to be returned''' +TAG35 = VisionObject.TAG35 +'''A description for get_data indicating apriltags with id 35 to be returned''' +TAG36 = VisionObject.TAG36 +'''A description for get_data indicating apriltags with id 36 to be returned''' +TAG37 = VisionObject.TAG37 +'''A description for get_data indicating apriltags with id 37 to be returned''' + +ALL_TAGS = VisionObject.ALL_TAGS +'''A description for get_data indicating any apriltag to be returned''' +ALL_VISION = VisionObject.ALL_VISION +'''A description for get_data indicating any object to be returned''' +ALL_COLORS = VisionObject.ALL_COLORS +'''A description for get_data indicating any color or code to be returned''' +ALL_CARGO = VisionObject.ALL_CARGO +'''A description for get_data indicating AI ball or barrel to be returned''' diff --git a/resources/python/vex/vex_messages.py b/resources/python/vex/vex_messages.py new file mode 100644 index 0000000..6bd9653 --- /dev/null +++ b/resources/python/vex/vex_messages.py @@ -0,0 +1,656 @@ +# ================================================================================================= +# Copyright (c) Innovation First 2025. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# ================================================================================================= +""" +AIM WebSocket - Messages + +This module contains definitions for the Websocket messages. +""" +class VexWebSocketCommand: + def __init__(self, cmd_id: str): + self.cmd_id = cmd_id + + def to_json(self) -> dict: + return { + "cmd_id": self.cmd_id + } + +#region General Commands +class ProgramInit(VexWebSocketCommand): + def __init__(self): + super().__init__("program_init") + + +#endregion General Commands + +#region Movement Commands +class MoveAt(VexWebSocketCommand): + def __init__(self, angle=0.0, speed=0.0, stacking_type=0): + super().__init__("drive") + self.angle = angle + self.speed = speed + self.stacking_type = stacking_type + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "angle": self.angle, + "speed": self.speed, + "stacking_type": self.stacking_type + }) + return base_data + +class MoveFor(VexWebSocketCommand): + def __init__(self, distance =0.0, angle=0.0, drive_speed=0.0, turn_speed=0.0, final_heading=0,stacking_type=0): + super().__init__("drive_for") + self.distance = distance + self.angle = angle + self.drive_speed = drive_speed + self.turn_speed = turn_speed + self.final_heading = final_heading + self.stacking_type = stacking_type + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "distance": self.distance, + "angle": self.angle, + "final_heading" : self.final_heading, + "drive_speed": self.drive_speed, + "turn_speed": self.turn_speed, + "stacking_type": self.stacking_type + }) + return base_data + +class MoveWithVector(VexWebSocketCommand): + def __init__(self, x=0, t=0, r=0): + super().__init__("drive_with_vector") + self.x = x + self.t = t + self.r = r + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "x": self.x, + "t": self.t, + "r": self.r + }) + return base_data + +class Turn(VexWebSocketCommand): + def __init__(self, turn_rate=0.0, stacking_type=0): + super().__init__("turn") + self.turn_rate = turn_rate + self.stacking_type = stacking_type + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "turn_rate": self.turn_rate, + "stacking_type": self.stacking_type + }) + return base_data + +class TurnTo(VexWebSocketCommand): + def __init__(self, heading=0.0, turn_rate=0.0, stacking_type=0): + super().__init__("turn_to") + self.heading = heading + self.turn_rate = turn_rate + self.stacking_type = stacking_type + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "heading": self.heading, + "turn_rate": self.turn_rate, + "stacking_type": self.stacking_type + }) + return base_data + +class TurnFor(VexWebSocketCommand): + def __init__(self, angle=0, turn_rate=0.0, stacking_type=0): + super().__init__("turn_for") + self.angle = angle + self.turn_rate = turn_rate + self.stacking_type = stacking_type + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "angle": self.angle, + "turn_rate": self.turn_rate, + "stacking_type": self.stacking_type + }) + return base_data + +class SpinWheels(VexWebSocketCommand): + def __init__(self, vel1=0, vel2=0, vel3=0): + super().__init__("spin_wheels") + self.vel1 = vel1 + self.vel2 = vel2 + self.vel3 = vel3 + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "vel1": self.vel1, + "vel2": self.vel2, + "vel3": self.vel3 + }) + return base_data + +class SetPose(VexWebSocketCommand): + def __init__(self, x=0, y=0): + super().__init__("set_pose") + self.x = x + self.y = y + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "x": self.x, + "y": self.y + }) + return base_data +#endregion Movement Commands + +#region Screen Commands +class ScreenPrint(VexWebSocketCommand): + def __init__(self, string=""): + super().__init__("lcd_print") + self.string = string + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "string": self.string + }) + return base_data + +class ScreenPrintAt(VexWebSocketCommand): + def __init__(self, string="", x=0, y=0, b_opaque=True): + super().__init__("lcd_print_at") + self.string = string + self.x = x + self.y = y + self.b_opaque = b_opaque + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "x": self.x, + "y": self.y, + "string": self.string, + "b_opaque": self.b_opaque + }) + return base_data + +class ScreenSetCursor(VexWebSocketCommand): + def __init__(self, row=0, col=0): + super().__init__("lcd_set_cursor") + self.row = row + self.col = col + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "row": self.row, + "col": self.col + }) + return base_data + +class ScreenSetOrigin(VexWebSocketCommand): + def __init__(self, x=0, y=0): + super().__init__("lcd_set_origin") + self.x = x + self.y = y + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "x": self.x, + "y": self.y + }) + return base_data + +class ScreenNextRow(VexWebSocketCommand): + def __init__(self): + super().__init__("lcd_next_row") + + def to_json(self): + return super().to_json() + +class ScreenClearRow(VexWebSocketCommand): + def __init__(self, row=0, r=0,g=0,b=0): + super().__init__("lcd_clear_row") + self.row = row + self.r = r + self.g = g + self.b = b + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "number": self.row, + "r": self.r, + "g": self.g, + "b": self.b + }) + return base_data +class ScreenClear(VexWebSocketCommand): + def __init__(self, r=0, g=0, b=0): + super().__init__("lcd_clear_screen") + self.r = r + self.g = g + self.b = b + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "r": self.r, + "g": self.g, + "b": self.b + }) + return base_data + +class ScreenSetFont(VexWebSocketCommand): + def __init__(self, fontname): + super().__init__("lcd_set_font") + self.fontname = fontname + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "fontname": self.fontname + }) + return base_data + +class ScreenSetPenWidth(VexWebSocketCommand): + def __init__(self, width): + super().__init__("lcd_set_pen_width") + self.width = width + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "width": self.width + }) + return base_data + +class ScreenSetPenColor(VexWebSocketCommand): + def __init__(self, r=0, g=0, b=0): + super().__init__("lcd_set_pen_color") + self.r = r + self.g = g + self.b = b + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "r": self.r, + "g": self.g, + "b": self.b + }) + return base_data +class ScreenSetFillColor(VexWebSocketCommand): + def __init__(self, r=0, g=0, b=0, transparent=False): + super().__init__("lcd_set_fill_color") + self.r = r + self.g = g + self.b = b + self.b_transparency = transparent + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "r": self.r, + "g": self.g, + "b": self.b, + "b_transparency":self.b_transparency + }) + return base_data + +class ScreenDrawLine(VexWebSocketCommand): + def __init__(self, x1=0, y1=0, x2=0, y2=0): + super().__init__("lcd_draw_line") + self.x1 = x1 + self.y1 = y1 + self.x2 = x2 + self.y2 = y2 + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "x1": self.x1, + "y1": self.y1, + "x2": self.x2, + "y2": self.y2 + }) + return base_data + +class ScreenDrawRectangle(VexWebSocketCommand): + def __init__(self, x=0, y=0, width=0, height=0, r=0, g=0, b=0, transparent=False): + super().__init__("lcd_draw_rectangle") + self.x = x + self.y = y + self.width = width + self.height = height + self.r = r + self.g = g + self.b = b + self.b_transparency = transparent + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "x": self.x, + "y": self.y, + "width": self.width, + "height": self.height, + "r": self.r, + "g": self.g, + "b": self.b, + "b_transparency":self.b_transparency + }) + return base_data + +class ScreenDrawCircle(VexWebSocketCommand): + def __init__(self, x=0, y=0, radius=0, r=0, g=0, b=0, transparent=False): + super().__init__("lcd_draw_circle") + self.x = x + self.y = y + self.radius = radius + self.r = r + self.g = g + self.b = b + self.b_transparency = transparent + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "x": self.x, + "y": self.y, + "radius": self.radius, + "r": self.r, + "g": self.g, + "b": self.b, + "b_transparency":self.b_transparency + }) + return base_data + +class ScreenDrawPixel(VexWebSocketCommand): + def __init__(self, x=0, y=0): + super().__init__("lcd_draw_pixel") + self.x = x + self.y = y + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "x": self.x, + "y": self.y + }) + return base_data + +class ScreenDrawImageFromFile(VexWebSocketCommand): + def __init__(self, filename="", x=0, y=0): + super().__init__("lcd_draw_image_from_file") + self.filename = filename + self.x = x + self.y = y + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "filename": self.filename, + "x": self.x, + "y": self.y + }) + return base_data + +class ScreenSetClipRegion(VexWebSocketCommand): + def __init__(self, x=0, y=0, width=0, height=0): + super().__init__("lcd_set_clip_region") + self.x = x + self.y = y + self.width = width + self.height = height + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "x": self.x, + "y": self.y, + "width": self.width, + "height": self.height + }) + return base_data + +class ScreenShowEmoji(VexWebSocketCommand): + def __init__(self, name=0, look=0): + super().__init__("show_emoji") + self.name = name + self.look = look + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "name": self.name, + "look": self.look + }) + return base_data + +class ScreenHideEmoji(VexWebSocketCommand): + def __init__(self): + super().__init__("hide_emoji") + def to_json(self): + return super().to_json() + +class ScreenShowAivision(VexWebSocketCommand): + def __init__(self, name=0, look=0): + super().__init__("show_aivision") + def to_json(self): + return super().to_json() + +class ScreenHideAivision(VexWebSocketCommand): + def __init__(self, name=0, look=0): + super().__init__("hide_aivision") + def to_json(self): + return super().to_json() +#endregion Screen Commands + +#region Interial Commands +class InterialCalibrate(VexWebSocketCommand): + def __init__(self): + super().__init__("imu_calibrate") + + def to_json(self): + return super().to_json() + +class InterialSetCrashSensitivity(VexWebSocketCommand): + def __init__(self, sensitivity=0): + super().__init__("imu_set_crash_threshold") + self.sensitivity = sensitivity + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "sensitivity": self.sensitivity + }) + return base_data +#endregion Interial Commands + +#region Kicker Commands +class KickerKick(VexWebSocketCommand): + def __init__(self, kick_type=""): + super().__init__(kick_type) + + def to_json(self): + return super().to_json() +#endregion Kicker Commands + +#region Sound Commands +class SoundPlay(VexWebSocketCommand): + def __init__(self, name="", volume=0): + super().__init__("play_sound") + self.name = name + self.volume = volume + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "name": self.name, + "volume": self.volume + }) + return base_data +class SoundPlayFile(VexWebSocketCommand): + def __init__(self, name="", volume=0): + super().__init__("play_file") + self.name = name + self.volume = volume + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "name": self.name, + "volume": self.volume + }) + return base_data +class SoundPlayNote(VexWebSocketCommand): + def __init__(self, note=0, octave=0, duration=500, volume=0): + super().__init__("play_note") + self.note = note + self.octave = octave + self.duration = duration + self.volume = volume + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "note": self.note, + "octave": self.octave, + "duration": self.duration, + "volume": self.volume + }) + return base_data + +class SoundStop(VexWebSocketCommand): + def __init__(self): + super().__init__("stop_sound") + + def to_json(self): + return super().to_json() + +#endregion Sound Commands + +#region LED Commands +class LedSet(VexWebSocketCommand): + def __init__(self, led="", r=0, g=0, b=0): + super().__init__("light_set") + self.led = led + self.r = r + self.g = g + self.b = b + + def to_json(self): + base_data = super().to_json() + base_data.update({ + self.led: { + "r": self.r, + "g": self.g, + "b": self.b + } + }) + return base_data + +#endregion LED Commands + +#region AiVision Commands +class VisionColorDescription(VexWebSocketCommand): + def __init__(self, id, r, g, b, hangle, hdsat ): + super().__init__("color_description") + self.id = id + self.r = r + self.g = g + self.b = b + self.hdsat = hdsat + self.hangle = hangle + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "id": self.id, + "red": self.r, + "green": self.g, + "blue": self.b, + "hangle": self.hangle, + "hdsat": self.hdsat + }) + return base_data + +class VisionCodeDescription(VexWebSocketCommand): + def __init__(self, id, c1, c2, *args): + super().__init__("code_description") + self.id = id + self.c1 = c1.id + self.c2 = c2.id + self.c3 = -1 + self.c4 = -1 + self.c5 = -1 + if( len(args) > 0 ): + self.c3 = args[0].id + if( len(args) > 1 ): + self.c3 = args[1].id + if( len(args) > 2 ): + self.c3 = args[2].id + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "id": self.id, + "c1": self.c1, + "c2": self.c2, + "c3": self.c3, + "c4": self.c4, + "c5": self.c5 + }) + return base_data +class VisionTagDetection(VexWebSocketCommand): + def __init__(self, enable=True): + super().__init__("tag_detection") + self.b_enable = enable + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "b_enable": self.b_enable + }) + return base_data + +class VisionColorDetection(VexWebSocketCommand): + def __init__(self, enable=True, merge=True): + super().__init__("color_detection") + self.b_enable = enable + self.b_merge = merge + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "b_enable": self.b_enable, + "b_merge": self.b_merge + }) + return base_data +class VisionModelDetection(VexWebSocketCommand): + def __init__(self, enable=True): + super().__init__("model_detection") + self.b_enable = enable + + def to_json(self): + base_data = super().to_json() + base_data.update({ + "b_enable": self.b_enable + }) + return base_data +#endregion AiVision Commands diff --git a/resources/python/vex/vex_types.py b/resources/python/vex/vex_types.py new file mode 100644 index 0000000..99e131d --- /dev/null +++ b/resources/python/vex/vex_types.py @@ -0,0 +1,389 @@ +# ================================================================================================= +# Copyright (c) Innovation First 2025. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# ================================================================================================= +""" +AIM WebSocket API - Types + +This module defines various types and enums used in the AIM WebSocket API. +""" +from enum import Enum +from typing import Union +import time +class vexEnum: + '''Base class for all enumerated types''' + value = 0 + name = "" + + def __init__(self, value, name): + self.value = value + self.name = name + + def __str__(self): + return self.name + + def __repr__(self): + return self.name + + def __hash__(self): + return self.value + +class SoundType(str, Enum): + DOORBELL = "DOORBELL" + TADA = "TADA" + FAIL = "FAIL" + SPARKLE = "SPARKLE" + FLOURISH = "FLOURISH" + FORWARD = "FORWARD" + REVERSE = "REVERSE" + RIGHT = "RIGHT" + LEFT = "LEFT" + BLINKER = "BLINKER" + CRASH = "CRASH" + BRAKES = "BRAKES" + HUAH = "HUAH" + PICKUP = "PICKUP" + #PLACE = "PLACE" + #KICK = "KICK" + CHEER = "CHEER" + SENSING = "SENSING" + DETECTED = "DETECTED" + OBSTACLE = "OBSTACLE" + LOOPING = "LOOPING" + COMPLETE = "COMPLETE" + PAUSE = "PAUSE" + RESUME = "RESUME" + SEND = "SEND" + RECEIVE = "RECEIVE" + #CHIRP = "CHIRP" + + ACT_HAPPY = "ACT_HAPPY" + ACT_SAD = "ACT_SAD" + ACT_EXCITED = "ACT_EXCITED" + ACT_ANGRY = "ACT_ANGRY" + ACT_SILLY = "ACT_SILLY" + +class FontType(str, Enum): + MONO20 = "MONO20" + MONO24 = "MONO24" + MONO30 = "MONO30" + MONO36 = "MONO36" + MONO40 = "MONO40" + MONO60 = "MONO60" + PROP20 = "PROP20" + PROP24 = "PROP24" + PROP30 = "PROP30" + PROP36 = "PROP36" + PROP40 = "PROP40" + PROP60 = "PROP60" + MONO15 = "MONO15" + MONO12 = "MONO12" + +class KickType(str, Enum): + SOFT = "kick_soft" + MEDIUM = "kick_medium" + HARD = "kick_hard" + +class AxisType(Enum): + """The defined units for inertial sensor axis.""" + X_AXIS = 0 + Y_AXIS = 1 + Z_AXIS = 2 + +class TurnType(Enum): + LEFT = 0 + RIGHT = 1 +class OrientationType: + '''The defined units for inertial sensor orientation.''' + ROLL = 0 + PITCH = 1 + YAW = 2 +class AccelerationType: + '''The defined units for inertial sensor acceleration.''' + FORWARD = 0 + RIGHTWARD = 1 + DOWNWARD = 2 + +class PercentUnits: + '''The measurement units for percentage values.''' + class PercentUnits(vexEnum): + pass + PERCENT = PercentUnits(0, "PERCENT") + '''A percentage unit that represents a value from 0% to 100%''' +class RotationUnits: + '''The measurement units for rotation values.''' + class RotationUnits(vexEnum): + pass + DEG = RotationUnits(0, "DEG") + '''A rotation unit that is measured in degrees.''' + REV = RotationUnits(1, "REV") + '''A rotation unit that is measured in revolutions.''' + RAW = RotationUnits(99, "RAW") + '''A rotation unit that is measured in raw data form.''' +class DriveVelocityUnits: + '''The measurement units for drive velocity values.''' + class DriveVelocityUnits(vexEnum): + pass + PERCENT = DriveVelocityUnits(0, "PCT") + '''A velocity unit that is measured in percentage.''' + MMPS = DriveVelocityUnits(1, "MMPS") + '''A velocity unit that is measured in mm per second.''' +class TurnVelocityUnits: + '''The measurement units for turn velocity values.''' + class TurnVelocityUnits(vexEnum): + pass + PERCENT = TurnVelocityUnits(0, "PCT") + '''A velocity unit that is measured in percentage.''' + DPS = TurnVelocityUnits(1, "DPS") + '''A velocity unit that is measured in degrees per second.''' + +class TimeUnits: + '''The measurement units for time values.''' + class TimeUnits(vexEnum): + pass + SECONDS = TimeUnits(0, "SECONDS") + '''A time unit that is measured in seconds.''' + MSEC = TimeUnits(1, "MSEC") + '''A time unit that is measured in milliseconds.''' +class DistanceUnits: + '''The measurement units for distance values.''' + class DistanceUnits(vexEnum): + pass + MM = DistanceUnits(0, "MM") + '''A distance unit that is measured in millimeters.''' + IN = DistanceUnits(1, "IN") + '''A distance unit that is measured in inches.''' + CM = DistanceUnits(2, "CM") + '''A distance unit that is measured in centimeters.''' +class VoltageUnits: + '''The measurement units for voltage values.''' + class VoltageUnits(vexEnum): + pass + VOLT = VoltageUnits(0, "VOLT") + '''A voltage unit that is measured in volts.''' + MV = VoltageUnits(0, "mV") + '''A voltage unit that is measured in millivolts.''' + +# ---------------------------------------------------------- +# globals +# ---------------------------------------------------------- +PERCENT = PercentUnits.PERCENT +'''A percentage unit that represents a value from 0% to 100%''' +LEFT = TurnType.LEFT +'''A turn unit that is defined as left turning.''' +RIGHT = TurnType.LEFT +'''A turn unit that is defined as right turning.''' +DEGREES = RotationUnits.DEG +'''A rotation unit that is measured in degrees.''' +TURNS = RotationUnits.REV +'''A rotation unit that is measured in revolutions.''' +SECONDS = TimeUnits.SECONDS +'''A time unit that is measured in seconds.''' +MSEC = TimeUnits.MSEC +'''A time unit that is measured in milliseconds.''' +INCHES = DistanceUnits.IN +'''A distance unit that is measured in inches.''' +MM = DistanceUnits.MM +'''A distance unit that is measured in millimeters.''' +VOLT = VoltageUnits.VOLT +'''A voltage unit that is measured in volts.''' +MV = VoltageUnits.MV +'''A voltage unit that is measured in millivolts.''' +MMPS = DriveVelocityUnits.MMPS +'''units of mm per second''' +DPS = TurnVelocityUnits.DPS +'''units of degrees per second''' +OFF = False +'''used to turn off an LED''' + +vexnumber = Union[int, float] +# drivetrain move functions take either DriveVelocity or percentage units +DriveVelocityPercentUnits = Union[DriveVelocityUnits.DriveVelocityUnits, PercentUnits.PercentUnits] +# drivetrain turn functions take either TurnVelocity or percentage units +TurnVelocityPercentUnits = Union[TurnVelocityUnits.TurnVelocityUnits, PercentUnits.PercentUnits] + +class LightType(str, Enum): + LED1 = "light1" + LED2 = "light2" + LED3 = "light3" + LED4 = "light4" + LED5 = "light5" + LED6 = "light6" + ALL_LEDS = "all" + +class Color: + '''### Color class - create a new color + + This class is used to create instances of color objects + + #### Arguments: + value : The color value, can be specified in various ways, see examples. + + #### Returns: + An instance of the Color class + + #### Examples: + # create blue using hex value\\ + c = Color(0x0000ff)\n + # create blue using r, g, b values\\ + c = Color(0, 0, 255)\n + # create blue using web string\\ + c = Color("#00F")\n + # create blue using web string (alternate)\\ + c = Color("#0000FF")\n + # create red using an existing object\\ + c = Color(Color.RED) + ''' + class DefinedColor: + def __init__(self, value, transparent=False): + self.value = value + self.transparent = transparent + + BLACK = DefinedColor(0x000000) + '''predefined Color black''' + WHITE = DefinedColor(0xFFFFFF) + '''predefined Color white''' + RED = DefinedColor(0xFF0000) + '''predefined Color red''' + GREEN = DefinedColor(0x00FF00) + '''predefined Color green''' + BLUE = DefinedColor(0x001871) + '''predefined Color blue''' + YELLOW = DefinedColor(0xFFFF00) + '''predefined Color yellow''' + ORANGE = DefinedColor(0xFF8500) + '''predefined Color orange''' + PURPLE = DefinedColor(0xFF00FF) + '''predefined Color purple''' + CYAN = DefinedColor(0x00FFFF) + '''predefined Color cyan''' + TRANSPARENT = DefinedColor(0x000000, True) + '''predefined Color transparent''' + + def __init__(self, *args): + self.transparent = False + if len(args) == 1 and isinstance(args[0], int): + self.value: int = args[0] + elif len(args) == 3 and all(isinstance(arg, int) for arg in args): + self.value = ((args[0] & 0xFF) << 16) + ((args[1] & 0xFF) << 8) + (args[2] & 0xFF) + else: + raise TypeError("bad parameters") + + def set_rgb(self, *args): + '''### change existing Color instance to new rgb value + + #### Arguments: + value : The color value, can be specified in various ways, see examples. + + #### Returns: + integer value representing the color + + #### Examples: + # create a color that is red + c = Color(0xFF0000) + # change color to blue using single value + c.rgb(0x0000FF) + # change color to green using three values + c.rgb(0, 255, 0) + ''' + if len(args) == 1 and isinstance(args[0], int): + self.value = args[0] + if len(args) == 3 and all(isinstance(arg, int) for arg in args): + self.value = ((args[0] & 0xFF) << 16) + ((args[1] & 0xFF) << 8) + (args[2] & 0xFF) + + # ---------------------------------------------------------- + +def sleep(duration: vexnumber, units=TimeUnits.MSEC): + '''### delay the current thread for the provided number of seconds or milliseconds. + + #### Arguments: + duration: The number of seconds or milliseconds to sleep for + units: The units of duration, optional, default is milliseconds + + #### Returns: + None + ''' + if units == TimeUnits.MSEC: + time.sleep(duration / 1000) + else: + time.sleep(duration) + +def wait(duration: vexnumber, units=TimeUnits.MSEC): + '''### delay the current thread for the provided number of seconds or milliseconds. + + #### Arguments: + duration: The number of seconds or milliseconds to sleep for + units: The units of duration, optional, default is milliseconds + + #### Returns: + None + ''' + if units == TimeUnits.MSEC: + time.sleep(duration / 1000) + else: + time.sleep(duration) + +class EmojiType: + class EmojiType(vexEnum): + pass + EXCITED = EmojiType( 0, "EXCITED") + CONFIDENT = EmojiType( 1, "CONFIDENT") + SILLY = EmojiType( 2, "SILLY") + AMAZED = EmojiType( 3, "AMAZED") + STRONG = EmojiType( 4, "STRONG") + THRILLED = EmojiType( 5, "THRILLED") + HAPPY = EmojiType( 6, "HAPPY") + PROUD = EmojiType( 7, "PROUD") + LAUGHING = EmojiType( 8, "LAUGHING") + OPTIMISTIC = EmojiType(9, "OPTIMISTIC") + DETERMINED = EmojiType(10, "DETERMINED") + AFFECTIONATE = EmojiType(11, "AFFECTIONATE") + CALM = EmojiType(12, "CALM") + QUIET = EmojiType(13, "QUIET") + SHY = EmojiType(14, "SHY") + CHEERFUL = EmojiType(15, "CHEERFUL") + LOVED = EmojiType(16, "LOVED") + SURPRISED = EmojiType(17, "SURPRISED") + THINKING = EmojiType(18, "THINKING") + TIRED = EmojiType(19, "TIRED") + CONFUSED = EmojiType(20, "CONFUSED") + BORED = EmojiType(21, "BORED") + EMBARRASSED = EmojiType(22, "EMBARRASSED") + WORRIED = EmojiType(23, "WORRIED") + SAD = EmojiType(24, "SAD") + SICK = EmojiType(25, "SICK") + DISAPPOINTED = EmojiType(26, "DISAPPOINTED") + NERVOUS = EmojiType(27, "NERVOUS") + ANNOYED = EmojiType(30, "ANNOYED") + STRESSED = EmojiType(31, "STRESSED") + ANGRY = EmojiType(32, "ANGRY") + FRUSTRATED = EmojiType(33, "FRUSTRATED") + JEALOUS = EmojiType(34, "JEALOUS") + SHOCKED = EmojiType(35, "SHOCKED") + FEAR = EmojiType(36, "FEAR") + DISGUST = EmojiType(37, "DISGUST") + +Emoji = EmojiType + +# ---------------------------------------------------------- + +class EmojiLookType: + class EmojiLookType(vexEnum): + pass + LOOK_FORWARD = EmojiLookType( 0, "LOOK_FORWARD") + LOOK_RIGHT = EmojiLookType( 1, "LOOK_RIGHT") + LOOK_LEFT = EmojiLookType( 2, "LOOK_LEFT") + +EmojiLook = EmojiLookType + +class StackingType(Enum): + STACKING_OFF = 0 + STACKING_MOVE_RELATIVE = 1 + STACKING_MOVE_GLOBAL = 2 + +class SensitivityType: + class SensitivityType(vexEnum): + pass + LOW = SensitivityType( 0, "LOW") + MEDIUM = SensitivityType( 1, "MEDIUM") + HIGH = SensitivityType( 2, "HIGH") diff --git a/setup-venv.sh b/setup-venv.sh new file mode 100644 index 0000000..1e2b9fd --- /dev/null +++ b/setup-venv.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +echo "Creating and configuring Python virtual environment..." + +# Check if Python is installed +if ! command -v python &> /dev/null && ! command -v python3 &> /dev/null; then + echo "Python is not installed. Please run the system setup script first." + exit 1 +fi + +# Use python or python3 +PYTHON_CMD=$(command -v python || command -v python3) + +# Create venv if it doesn't exist +if [ ! -d "venv" ]; then + echo "Creating venv..." + $PYTHON_CMD -m venv venv +else + echo "venv already exists." +fi + +# Activate the venv +echo "Activating virtual environment..." +source venv/Scripts/activate + +# Install dependencies +if [ -f "requirements.txt" ]; then + echo "Installing from requirements.txt..." + pip install --upgrade pip + pip install -r requirements.txt +else + echo "No requirements.txt found. Installing known dependencies..." + pip install --upgrade pip + pip install websocket-client +fi + +echo "Setup complete. To activate later, run:" +echo "source venv/Scripts/activate" diff --git a/src/main/index copy.js b/src/main/index copy.js index 4fc91a8..d7ba9c1 100644 --- a/src/main/index copy.js +++ b/src/main/index copy.js @@ -52,7 +52,7 @@ async function createWindow() { // Reload try { require("electron-reloader")(module); - } catch (_) {} + } catch (_) { } // Errors are thrown if the dev tools are opened // before the DOM is ready win.webContents.once("dom-ready", async () => { diff --git a/src/main/index.js b/src/main/index.js index c2a3429..b5dce27 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -1,15 +1,19 @@ const { app, BrowserWindow, ipcMain, dialog } = require("electron"); +const { spawn, exec } = require('child_process'); const path = require("path"); +const fs = require("fs"); const tello = require("./tello.js"); +const WebSocket = require('ws'); +const waitOn = require('wait-on'); const isProduction = process.env.NODE_ENV === "production" || !process || !process.env || !process.env.NODE_ENV; const isDevelopment = !isProduction; const menu = require("./menu"); -const port = 3000; // Hardcoded; needs to match webpack.development.js and package.json +const port = 3005; // Updated to match the new port const selfHost = `http://localhost:${port}`; -const MUSE_DEVICE_NAME = "Muse-98A9"; +const GANGLION_DEVICE_NAME = "Ganglion-"; const maxSpeed = 40; const minSpeed = 15; let bleCallback = null; @@ -18,7 +22,304 @@ let bleCallback = null; // be closed automatically when the JavaScript object is garbage collected. let win; +let pythonProcess; +const isWin = process.platform === 'win32'; +let ws = null; +let pythonForceKillTimer = null; // timeout handle for forced kill +let reconnectInProgress = false; // guard against overlapping reconnects + +function getPythonExecutable() { + if (isDevelopment) { + // Development: Use virtual environment + const venvPath = path.join(__dirname, '..', '..', '.venv', 'Scripts', 'python.exe'); + console.log('[PYTHON] isDevelopment:', isDevelopment); + console.log('[PYTHON] Checking venv python at:', venvPath, 'exists:', fs.existsSync(venvPath)); + if (fs.existsSync(venvPath)) { + return venvPath; + } + console.log('[PYTHON] Falling back to system python'); + // Fallback to system python + return 'python'; + } else { + // Production: Use bundled executable + console.log('[PYTHON] isProduction:', !isDevelopment); + console.log('[PYTHON] process.resourcesPath:', process.resourcesPath); + const bundledExe = path.join(process.resourcesPath, 'python', 'VEXServer.exe'); + console.log('[PYTHON] Checking bundled exe at:', bundledExe, 'exists:', fs.existsSync(bundledExe)); + if (fs.existsSync(bundledExe)) { + console.log('[PYTHON] Using bundled VEXServer.exe (standalone executable)'); + return { exe: bundledExe, standalone: true }; + } + // Fallback to script with bundled python + const bundledPython = path.join(process.resourcesPath, 'python', 'python.exe'); + const bundledScript = path.join(process.resourcesPath, 'python', 'VEXServer.py'); + console.log('[PYTHON] Checking bundled python at:', bundledPython, 'exists:', fs.existsSync(bundledPython)); + console.log('[PYTHON] Checking bundled script at:', bundledScript, 'exists:', fs.existsSync(bundledScript)); + if (fs.existsSync(bundledPython) && fs.existsSync(bundledScript)) { + return { exe: bundledPython, script: bundledScript }; + } + // Final fallback + console.warn('[PYTHON] No bundled exe or python+script found. Falling back to system python'); + return 'python'; + } +} + +function getPythonScript() { + if (isDevelopment) { + const useMock = (process.env.VEX_MOCK === '1' || String(process.env.VEX_MOCK || '').toLowerCase() === 'true'); + const scriptName = useMock ? 'VEXServer_dev.py' : 'VEXServer.py'; + const devPath = path.join(__dirname, '..', '..', 'resources', 'python', scriptName); + console.log(`[PYTHON] getPythonScript dev -> ${scriptName}:`, devPath, 'exists:', fs.existsSync(devPath)); + return devPath; + } else { + const prodPath = path.join(process.resourcesPath, 'python', 'VEXServer.py'); + console.log('[PYTHON] getPythonScript prod path:', prodPath, 'exists:', fs.existsSync(prodPath)); + return prodPath; + } +} + +async function startPythonServer() { + // Clear any lingering force-kill timer from a prior stop + if (pythonForceKillTimer) { + clearTimeout(pythonForceKillTimer); + pythonForceKillTimer = null; + } + const pythonExe = getPythonExecutable(); + console.log('[PYTHON] Resolved python executable:', pythonExe); + + try { + if (typeof pythonExe === 'object') { + if (pythonExe.standalone) { + // Standalone exe (e.g., PyInstaller bundle) - no script argument needed + console.log('[PYTHON] Spawning standalone exe:', pythonExe.exe); + pythonProcess = spawn(pythonExe.exe, [], { stdio: 'pipe' }); + } else { + // Python interpreter + script + console.log('[PYTHON] Spawning bundled python + script:', pythonExe.exe, pythonExe.script); + pythonProcess = spawn(pythonExe.exe, [pythonExe.script], { stdio: 'pipe' }); + } + } else if (typeof pythonExe === 'string' && pythonExe.endsWith('.exe') && isProduction) { + console.log('[PYTHON] Spawning bundled exe:', pythonExe); + pythonProcess = spawn(pythonExe, [], { stdio: 'pipe' }); + } else { + const script = getPythonScript(); + console.log('[PYTHON] Spawning:', pythonExe, script); + pythonProcess = spawn(pythonExe, [script], { stdio: 'pipe' }); + } + } catch (spawnErr) { + console.error('[PYTHON] Spawn error:', spawnErr); + return; // abort start + } + + pythonProcess?.stdout?.on('data', (data) => console.log(`PYTHON: ${data}`)); + pythonProcess?.stderr?.on('data', (data) => console.error(`PYTHON ERROR: ${data}`)); + pythonProcess?.on('close', (code) => { + console.log(`Python process exited with code ${code}`); + pythonProcess = null; + }); + + // Lightweight TCP poll instead of waitOn to avoid WebSocket handshake noise + const net = require('net'); + const maxAttempts = 25; + for (let attempt = 1; attempt <= maxAttempts; attempt++) { + const portReady = await new Promise(res => { + const sock = net.createConnection({ port: 8777, host: '127.0.0.1' }); + sock.once('connect', () => { sock.end(); res(true); }); + sock.once('error', () => { res(false); }); + setTimeout(() => { res(false); try { sock.destroy(); } catch { } }, 300); + }); + if (portReady) { + console.log('[PYTHON] WebSocket TCP port responsive'); + break; + } + await new Promise(r => setTimeout(r, 200)); + if (attempt === maxAttempts) { + console.warn('[PYTHON] WebSocket port not responsive after retries; proceeding anyway'); + } + } +} + +async function stopPythonServer() { + console.log('Stopping Python VEX server...'); + if (!pythonProcess) { + console.log('Python process already stopped'); + return; + } + return new Promise(resolve => { + if (pythonForceKillTimer) { + clearTimeout(pythonForceKillTimer); + pythonForceKillTimer = null; + } + const proc = pythonProcess; + + // Check if process is already dead + if (proc.exitCode !== null || proc.killed) { + console.log('Python process already exited or killed'); + pythonProcess = null; + resolve(); + return; + } + + const finish = (code) => { + if (pythonProcess === proc) pythonProcess = null; + console.log(`Python process stopped with code ${code}`); + resolve(); + }; + proc.once('close', finish); + try { proc.kill('SIGTERM'); } catch (e) { console.warn('SIGTERM failed:', e); } + pythonForceKillTimer = setTimeout(() => { + if (pythonProcess === proc) { + console.log('Force killing Python process (timeout)...'); + if (isWin) { + try { + exec(`taskkill /F /PID ${proc.pid}`, (err) => { + if (err) console.warn('taskkill failed:', err); + }); + } catch (e) { /* ignore */ } + } else { + try { proc.kill('SIGKILL'); } catch { } + } + } + pythonForceKillTimer = null; + }, 5000); + }); +} + +async function reconnectVEX() { + console.log('Reconnecting to VEX AIM...'); + if (reconnectInProgress) { + console.log('Reconnect skipped: already in progress'); + return { success: false, message: 'Reconnect already running' }; + } + reconnectInProgress = true; + try { + // Instead of killing the Python process, just tell it to reconnect to the robot + if (ws && ws.readyState === WebSocket.OPEN) { + console.log('Sending reconnect_robot command to Python server...'); + ws.send(JSON.stringify({ action: 'reconnect_robot' })); + + // Wait a bit for the reconnection to start + await new Promise(r => setTimeout(r, 1000)); + + // Request a status update + pollRobotStatus(); + + console.log('VEX AIM reconnection initiated'); + return { success: true, message: 'Reconnecting to VEX AIM...' }; + } else { + // WebSocket isn't connected - fall back to restarting everything + console.log('WebSocket not connected, restarting Python server...'); + if (ws) { try { ws.close(); } catch { } ws = null; } + await stopPythonServer(); + + // Wait longer before restarting to ensure clean shutdown + await new Promise(r => setTimeout(r, 2000)); + + await startPythonServer(); + + // Wait longer after Python restart for server to be fully ready + await new Promise(r => setTimeout(r, 3000)); + + // Reconnect WebSocket with retry logic (5 attempts, 2s between each) + let wsConnected = false; + for (let attempt = 1; attempt <= 5; attempt++) { + try { + console.log(`WebSocket connection attempt ${attempt}/5...`); + await createWebSocketConnection(); + wsConnected = true; + console.log('✓ WebSocket reconnected successfully'); + break; + } catch (err) { + console.warn(`WebSocket reconnection attempt ${attempt} failed:`, err.message); + if (attempt < 5) { + await new Promise(r => setTimeout(r, 2000)); + } + } + } + + if (!wsConnected) { + return { success: false, message: 'Failed to reconnect WebSocket after restarting Python server (5 attempts)' }; + } + + console.log('✓ VEX AIM reconnection completed'); + return { success: true, message: 'Successfully reconnected to VEX AIM' }; + } + } catch (error) { + console.error('Failed to reconnect to VEX AIM:', error); + return { success: false, message: `Reconnection failed: ${error.message}` }; + } finally { + reconnectInProgress = false; + } +} + +function createWebSocketConnection() { + return new Promise((resolve, reject) => { + let wsTimeout; + try { + ws = new WebSocket('ws://127.0.0.1:8777'); + + ws.on('open', function open() { + console.log('WebSocket connection opened'); + clearTimeout(wsTimeout); + attachStatusListener(); + resolve(); + }); + + ws.on('error', function error(err) { + console.error('WebSocket error:', err.message); + clearTimeout(wsTimeout); + reject(err); + }); + + ws.on('close', function close() { + console.log('WebSocket connection closed'); + }); + + // Increase timeout to 10 seconds and add detailed logging + wsTimeout = setTimeout(() => { + if (ws && ws.readyState !== WebSocket.OPEN) { + console.warn('WebSocket connection timeout after 10s, terminating...'); + try { ws.terminate?.(); } catch { } + reject(new Error('WebSocket connection timeout (10s)')); + } + }, 10000); + } catch (error) { + clearTimeout(wsTimeout); + reject(error); + } + }); +} + +// --- Status helpers --- +function attachStatusListener() { + if (!ws) return; + ws.on('message', (data) => { + try { + const msg = JSON.parse(data); + if (msg.robot_connected !== undefined) { + win?.webContents.send('vex-status', { wsConnected: true, robotConnected: !!msg.robot_connected }); + } + } catch { /* ignore */ } + }); +} + +function pollRobotStatus() { + // Guard: skip if WebSocket not ready OR window destroyed + if (!ws || ws.readyState !== WebSocket.OPEN || !win || win.isDestroyed()) { + return; + } + try { + ws.send(JSON.stringify({ action: 'status' })); + } catch (err) { + console.warn('Failed to poll status:', err); + } +} + async function createWindow() { + // ---- Start Python VEXServer ---- + await startPythonServer(); + // ---- End Python VEXServer ---- + // If you'd like to set up auto-updating for your app, // I'd recommend looking at https://github.com/iffy/electron-updater-example // to use the method most suitable for you. @@ -36,19 +337,24 @@ async function createWindow() { win = new BrowserWindow({ width: 1200, height: 1000, + title: "NeuroBlock EEG for VEX", icon: path.join(__dirname, "icon.png"), webPreferences: { preload: path.join(__dirname, "preload.js") } }); + // Add the event listener here, AFTER creating the window + win.webContents.on('did-fail-load', (event, errorCode, errorDescription) => { + console.error('Window failed to load:', errorDescription); + }); + // Load the url of the dev server if in development mode // Load the index.html when not in development if (isDevelopment) { win.loadURL(selfHost); } else { - //win.loadURL(`${Protocol.scheme}://rse/index.html`); - win.loadURL(`file://${path.join(__dirname, "../renderer/index.html")}`); + win.loadFile(path.join(__dirname, "../../build/renderer/index.html")); } // Only do these things when in development @@ -56,7 +362,7 @@ async function createWindow() { // Reload try { require("electron-reloader")(module); - } catch (_) {} + } catch (_) { } // Errors are thrown if the dev tools are opened // before the DOM is ready win.webContents.once("dom-ready", async () => { @@ -70,9 +376,16 @@ async function createWindow() { // Emitted when the window is closed. win.on("closed", () => { - // Dereference the window object, usually you would store windows - // in an array if your app supports multi windows, this is the time - // when you should delete the corresponding element. + // Clear the status polling interval + clearInterval(statusInterval); + + // Close WebSocket if open + if (ws) { + try { ws.close(); } catch { } + ws = null; + } + + // Dereference the window object win = null; }); @@ -125,33 +438,57 @@ async function createWindow() { } }); + function sendCommand(command) { + if (ws && ws.readyState === WebSocket.OPEN) { + ws.send(JSON.stringify(command)); + console.log("Command sent:", command); + } else { + console.error('WebSocket not connected, cannot send command:', command); + } + } + + // Initialize WebSocket connection + createWebSocketConnection().catch(err => { + console.error('Failed to establish initial WebSocket connection:', err); + }); + + // Periodic status polling - but clear it when window closes + const statusInterval = setInterval(pollRobotStatus, 3000); + // NOTE: win.on("closed") handler is already defined above in createWindow() + ipcMain.on("drone-up", (event, response) => { let recent_val = parseInt(response); - let upVal = recent_val > maxSpeed ? maxSpeed : recent_val < minSpeed ? minSpeed : recent_val; - console.log("drone up", upVal, "sent", response); - tello.up(upVal); + let rightVal = recent_val > maxSpeed ? maxSpeed : recent_val < minSpeed ? minSpeed : recent_val; + console.log("Sphero right", rightVal, "sent", response); + const moveCommand = { action: "move", distance: response, heading: 90 };//For Vex + sendCommand(moveCommand); }); ipcMain.on("drone-down", (event, response) => { let recent_val = parseInt(response); let downVal = recent_val > maxSpeed ? maxSpeed : recent_val < minSpeed ? minSpeed : recent_val; - console.log("drone down", downVal, "sent", response); - tello.down(downVal); + console.log("Sphero Left", downVal, "sent", response); + const moveCommand = { action: "move", distance: response, heading: 270 };//For Vex + sendCommand(moveCommand); }); ipcMain.on("drone-forward", (event, response) => { let recent_val = parseInt(response); - _maxSpeed = 80; - let val = recent_val > _maxSpeed ? _maxSpeed : recent_val < minSpeed ? minSpeed : recent_val; - console.log("drone forward", val, "sent", response); - tello.forward(val); + let forwardVal = recent_val > maxSpeed ? maxSpeed : recent_val < minSpeed ? minSpeed : recent_val; + console.log("drone forward", forwardVal, "sent", response); + const moveCommand = { action: "move", distance: response, heading: 0 };//For Vex + sendCommand(moveCommand); }); ipcMain.on("drone-back", (event, response) => { let recent_val = parseInt(response); - let val = recent_val > maxSpeed ? maxSpeed : recent_val < minSpeed ? minSpeed : recent_val; - console.log("drone back", val, "sent", response); - tello.back(val); + let backVal = recent_val > maxSpeed ? maxSpeed : recent_val < minSpeed ? minSpeed : recent_val; + console.log("drone back", backVal, "sent", response); + // let val = recent_val > maxSpeed ? maxSpeed : recent_val < minSpeed ? minSpeed : recent_val; + // console.log("drone back", val, "sent", response); + const moveCommand = { action: "move", distance: response, heading: 180 };//For Vex + sendCommand(moveCommand); + // tello.back(val); }); ipcMain.on("cw", (event, response) => { @@ -168,30 +505,91 @@ async function createWindow() { tello.ccw(recent_val); }); - let isUp = false; + //Vex commands + ipcMain.on("vex-turn-left", (event, degrees) => { + console.log(`[VEX] Turn left ${degrees}°`); + const turnCommand = { action: "turn_left", degrees: degrees }; + sendCommand(turnCommand); + }); + + ipcMain.on("vex-turn-right", (event, degrees) => { + console.log(`[VEX] Turn right ${degrees}°`); + const turnCommand = { action: "turn_right", degrees: degrees }; + sendCommand(turnCommand); + }); + + ipcMain.on("vex-forward", (event, distance) => { + console.log(`[VEX] Move forward ${distance} inches`); + const moveCommand = { action: "move", distance: distance, heading: 0 }; + sendCommand(moveCommand); + }); + + ipcMain.on("vex-back", (event, distance) => { + console.log(`[VEX] Move back ${distance} inches`); + const moveCommand = { action: "move", distance: distance, heading: 180 }; + sendCommand(moveCommand); + }); + + ipcMain.on("vex-left", (event, distance) => { + console.log(`[VEX] Move left ${distance} inches`); + const moveCommand = { action: "move", distance: distance, heading: 270 }; + sendCommand(moveCommand); + }); + + ipcMain.on("vex-right", (event, distance) => { + console.log(`[VEX] Move right ${distance} inches`); + const moveCommand = { action: "move", distance: distance, heading: 90 }; + sendCommand(moveCommand); + }); + + // VEX kicker handler + ipcMain.on("vex-kicker", (event, type) => { + const t = String(type || "").toLowerCase(); + console.log(`[VEX] Kicker action: ${t}`); + const kickCommand = { action: "kicker", type: t }; + sendCommand(kickCommand); + }); - ipcMain.on("manual-control", (event, response) => { - //console.log("index", response); - switch (response) { - case "takeoff": - isUp = true; - tello.takeoff(); - break; - case "land": - isUp = true; - tello.land(); - break; - case "up": - tello.up(20); - break; - case "down": - tello.down(20); - break; - default: - break; + // VEX Reconnect handler + ipcMain.handle("vex-reconnect", async (event) => { + // Guard: don't proceed if window is gone + if (!win || win.isDestroyed()) { + console.warn('[VEX] Reconnect aborted: window destroyed'); + return { success: false, message: 'Window closed' }; } + + console.log("[VEX] Reconnect requested"); + const result = await reconnectVEX(); + return result; }); + // Manual status request from renderer + ipcMain.on('vex-status-request', () => pollRobotStatus()); + + let isUp = false; + + // ipcMain.on("manual-control", (event, response) => { + // //console.log("index", response); + // switch (response) { + // case "takeoff": + // isUp = true; + // tello.takeoff(); + // break; + // case "land": + // isUp = true; + // tello.land(); + // break; + // case "up": + // tello.up(20); + // break; + // case "down": + // tello.down(20); + // break; + // default: + // break; + // } + // }); + ipcMain.on("control-signal", (event, response) => { /* @@ -209,6 +607,11 @@ async function createWindow() { } */ }); + + ipcMain.on("send-command", (event, command) => { + console.log("Received command from renderer:", command); + sendCommand(command); // Use the existing sendCommand function + }); } // This method will be called when Electron has finished @@ -324,3 +727,62 @@ ipcMain.on("toMain", (event, { data }) => { event.reply("fromMain", reply); //win.webContents.send("fromMain", reply); }); + +// Cleanup Python process on app quit +app.on('before-quit', async (e) => { + e.preventDefault(); + + // Stop status polling immediately + if (ws) { + try { ws.close(); } catch { } + ws = null; + } + + if (pythonProcess) { + console.log('Terminating Python process before quit...'); + await stopPythonServer(); + } + app.exit(0); +}); + +app.on('window-all-closed', async () => { + // Stop status polling + if (ws) { + try { ws.close(); } catch { } + ws = null; + } + + if (pythonProcess) { + console.log('Terminating Python process on window close...'); + await stopPythonServer(); + } + if (process.platform !== 'darwin') { + app.quit(); + } +}); + +// Also handle process signals and exit to avoid orphaned Python server +process.on('SIGINT', () => { + console.log('SIGINT received, stopping Python...'); + stopPythonServer().finally(() => process.exit(0)); +}); + +process.on('SIGTERM', () => { + console.log('SIGTERM received, stopping Python...'); + stopPythonServer().finally(() => process.exit(0)); +}); + +process.on('exit', () => { + console.log('Process exiting, force-killing Python if needed...'); + if (pythonProcess) { + try { + if (isWin) { + exec(`taskkill /F /PID ${pythonProcess.pid}`, (err) => { + if (err) console.warn('Final taskkill failed:', err); + }); + } else { + pythonProcess.kill('SIGKILL'); + } + } catch (e) { console.warn('Final kill failed:', e); } + } +}); diff --git a/src/main/preload.js b/src/main/preload.js index 24737c1..d7b0a4c 100644 --- a/src/main/preload.js +++ b/src/main/preload.js @@ -25,6 +25,23 @@ process.once("loaded", () => { droneDown: (response) => ipcRenderer.send("drone-down", response), droneForward: (response) => ipcRenderer.send("drone-forward", response), droneBack: (response) => ipcRenderer.send("drone-back", response), + //Vex commands + vexTurnLeft: (degrees) => ipcRenderer.send("vex-turn-left", degrees), + vexTurnRight: (degrees) => ipcRenderer.send("vex-turn-right", degrees), + vexForward: (distance) => ipcRenderer.send("vex-forward", distance), + vexBack: (distance) => ipcRenderer.send("vex-back", distance), + vexLeft: (distance) => ipcRenderer.send("vex-left", distance), + vexRight: (distance) => ipcRenderer.send("vex-right", distance), + // Kicker command IPC bridge + vexKicker: (type) => ipcRenderer.send("vex-kicker", type), + vexReconnect: () => ipcRenderer.invoke("vex-reconnect"), + // VEX status IPC + onVexStatus: (callback) => { + if (typeof callback === 'function') { + ipcRenderer.on('vex-status', (event, status) => callback(status)); + } + }, + requestVexStatus: () => ipcRenderer.send('vex-status-request'), cw: (response) => ipcRenderer.send("cw", response), ccw: (response) => ipcRenderer.send("ccw", response), getBLEList: (callback) => ipcRenderer.on("device_list", callback), @@ -32,6 +49,8 @@ process.once("loaded", () => { selectBluetoothDevice: (deviceID) => ipcRenderer.send("select-ble-device", deviceID), cancelBluetoothRequest: (callback) => ipcRenderer.send("cancel-bluetooth-request", callback), bluetoothPairingRequest: (callback) => ipcRenderer.on("bluetooth-pairing-request", callback), - bluetoothPairingResponse: (response) => ipcRenderer.send("bluetooth-pairing-response", response) + bluetoothPairingResponse: (response) => ipcRenderer.send("bluetooth-pairing-response", response), + // Expose sendCommand to the renderer process + sendCommand: (command) => ipcRenderer.send("send-command", command), }); }); diff --git a/src/main/tello.js b/src/main/tello.js index 556e906..4cf90e0 100644 --- a/src/main/tello.js +++ b/src/main/tello.js @@ -60,15 +60,22 @@ class Tello { } } -const tello = new Tello(); -module.exports.takeoff = () => tello.takeoff(); -module.exports.land = () => tello.land(); -module.exports.getState = () => tello.getState(); -module.exports.up = (value) => tello.send_message("up " + value); -module.exports.down = (value) => tello.send_message("down " + value); -module.exports.forward = (value) => tello.send_message("forward " + value); -module.exports.cw = (value) => tello.send_message("cw " + value); -module.exports.ccw = (value) => tello.send_message("ccw " + value); -module.exports.back = (value) => tello.send_message("back " + value); +// Lazy initialization - only create Tello instance when needed +let tello = null; +function getTello() { + if (!tello) { + console.log("Initializing Tello..."); + tello = new Tello(); + } + return tello; +} -console.log("Tello"); +module.exports.takeoff = () => getTello().takeoff(); +module.exports.land = () => getTello().land(); +module.exports.getState = () => getTello().getState(); +module.exports.up = (value) => getTello().send_message("up " + value); +module.exports.down = (value) => getTello().send_message("down " + value); +module.exports.forward = (value) => getTello().send_message("forward " + value); +module.exports.cw = (value) => getTello().send_message("cw " + value); +module.exports.ccw = (value) => getTello().send_message("ccw " + value); +module.exports.back = (value) => getTello().send_message("back " + value); diff --git a/src/renderer/index.html b/src/renderer/index.html index 627e61b..5c45bc4 100644 --- a/src/renderer/index.html +++ b/src/renderer/index.html @@ -1,135 +1,133 @@ - - - - NeuroBlock - - - - - - - - - - -
-
-
-
-
-
-
-
-
+ + + + + NeuroBlock EEG for VEX + + + + + + + + + + +
+
+
+
+
+
+
-
-
+
+
- -
- + +
+
+
+
-
- -
+ +
-
- -
+ + +
-
- -
+
+ +
-
- -
+
+ +
-
- -
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
- - +
+
- + + + ">
+
- + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/renderer/js/block-to-text-converter.js b/src/renderer/js/block-to-text-converter.js new file mode 100644 index 0000000..a295fad --- /dev/null +++ b/src/renderer/js/block-to-text-converter.js @@ -0,0 +1,348 @@ +/** + * Block to Text Converter + * Converts Blockly workspace to readable Python-like text code + */ + +export class BlockToTextConverter { + constructor() { + this.indentLevel = 0; + this.output = []; + } + + /** + * Convert the entire Blockly workspace to text + * @param {Blockly.Workspace} workspace + * @returns {string} Generated text code + */ + convertWorkspace(workspace) { + this.output = []; + this.indentLevel = 0; + + // Add header comment + this.addLine("# Generated from Blockly visual programming"); + this.addLine("# This code represents your visual blocks as text"); + this.addLine(""); + + // Process all top-level blocks + const topBlocks = workspace.getTopBlocks(true); + + topBlocks.forEach((block, index) => { + if (index > 0) this.addLine(""); // Add spacing between top-level blocks + this.convertBlock(block); + }); + + return this.output.join('\n'); + } + + /** + * Convert a single block to text + * @param {Blockly.Block} block + */ + convertBlock(block) { + if (!block || block.disabled) return; + + const blockType = block.type; + + switch (blockType) { + // Control structures + case 'controls_repeat_ext': + this.handleRepeatBlock(block); + break; + case 'controls_if': + this.handleIfBlock(block); + break; + case 'controls_whileUntil': + this.handleWhileBlock(block); + break; + + // Signal processing blocks + case 'filter_signal': + return this.handleFilterSignal(block); + case 'delta': + return this.handleBandPower(block, 'delta'); + case 'theta': + return this.handleBandPower(block, 'theta'); + case 'alpha': + return this.handleBandPower(block, 'alpha'); + case 'beta': + return this.handleBandPower(block, 'beta'); + case 'gamma': + return this.handleBandPower(block, 'gamma'); + case 'muscle_energy': + return this.handleMuscleEnergy(block); + + // Output blocks + case 'print': + this.handlePrint(block); + break; + + // Robot control blocks + case 'takeoff': + this.addLine("robot.takeoff()"); + break; + case 'land': + this.addLine("robot.land()"); + break; + case 'drone_up': + this.handleMovement(block, 'move_up'); + break; + case 'drone_down': + this.handleMovement(block, 'move_down'); + break; + case 'drone_forward': + this.handleMovement(block, 'move_forward'); + break; + case 'drone_back': + this.handleMovement(block, 'move_back'); + break; + case 'vex_turn_left': + this.handleVexMovement(block, 'turn_left'); + break; + case 'vex_turn_right': + this.handleVexMovement(block, 'turn_right'); + break; + case 'move': + this.handleVexMove(block); + break; + case 'ccw': + this.handleRotation(block, 'counter_clockwise'); + break; + case 'cw': + this.handleRotation(block, 'clockwise'); + break; + case 'led_control': + this.handleLedControl(block); + break; + + // Timing blocks + case 'wait_seconds': + this.handleWait(block); + break; + + // Math and logic blocks + case 'math_number': + return block.getFieldValue('NUM'); + case 'text': + return `"${block.getFieldValue('TEXT')}"`; + case 'logic_boolean': + return block.getFieldValue('BOOL'); + case 'logic_compare': + return this.handleComparison(block); + case 'math_arithmetic': + return this.handleArithmetic(block); + + default: + this.addLine(`# Unknown block type: ${blockType}`); + break; + } + + // Process the next block in the sequence + const nextBlock = block.getNextBlock(); + if (nextBlock) { + this.convertBlock(nextBlock); + } + } + + // Block type handlers + handleRepeatBlock(block) { + const times = this.getFieldOrInputValue(block, 'TIMES', '10'); + this.addLine(`for i in range(${times}):`); + this.indent(); + + const doBlock = block.getInputTargetBlock('DO'); + if (doBlock) { + this.convertBlock(doBlock); + } else { + this.addLine("pass # No actions specified"); + } + + this.dedent(); + } + + handleIfBlock(block) { + // Handle main IF condition + const condition = this.getFieldOrInputValue(block, 'IF0', 'True'); + this.addLine(`if ${condition}:`); + this.indent(); + + const doBlock = block.getInputTargetBlock('DO0'); + if (doBlock) { + this.convertBlock(doBlock); + } else { + this.addLine("pass # No actions specified"); + } + this.dedent(); + + // Handle ELSEIF blocks (Blockly supports multiple elseif via IF1, IF2, etc.) + let elseifIndex = 1; + while (block.getInput(`IF${elseifIndex}`)) { + const elseifCondition = this.getFieldOrInputValue(block, `IF${elseifIndex}`, 'True'); + this.addLine(`elif ${elseifCondition}:`); + this.indent(); + + const elseifDoBlock = block.getInputTargetBlock(`DO${elseifIndex}`); + if (elseifDoBlock) { + this.convertBlock(elseifDoBlock); + } else { + this.addLine("pass # No actions specified"); + } + this.dedent(); + + elseifIndex++; + } + + // Handle final ELSE clause + const elseBlock = block.getInputTargetBlock('ELSE'); + if (elseBlock) { + this.addLine("else:"); + this.indent(); + this.convertBlock(elseBlock); + this.dedent(); + } + } + + handleWhileBlock(block) { + const mode = block.getFieldValue('MODE'); + const condition = this.getFieldOrInputValue(block, 'BOOL', 'True'); + + if (mode === 'WHILE') { + this.addLine(`while ${condition}:`); + } else { + this.addLine(`while not (${condition}):`); + } + + this.indent(); + const doBlock = block.getInputTargetBlock('DO'); + if (doBlock) { + this.convertBlock(doBlock); + } else { + this.addLine("pass # No actions specified"); + } + this.dedent(); + } + + handleFilterSignal(block) { + const low = block.getFieldValue('low') || '0'; + const high = block.getFieldValue('high') || '30'; + const signal = this.getFieldOrInputValue(block, 'signal', 'signal'); + return `filter_signal(${signal}, ${low}, ${high})`; + } + + handleBandPower(block, band) { + const signal = this.getFieldOrInputValue(block, 'signal', 'signal'); + return `get_${band}_power(${signal})`; + } + + handleMuscleEnergy(block) { + const signal = this.getFieldOrInputValue(block, 'signal', 'signal'); + return `get_muscle_energy(${signal})`; + } + + handlePrint(block) { + const value = this.getFieldOrInputValue(block, 'VALUE', '"Hello World"'); + this.addLine(`print(${value})`); + } + + handleMovement(block, direction) { + const distance = this.getFieldOrInputValue(block, 'distance', '10'); + this.addLine(`robot.${direction}(${distance})`); + } + + handleVexMovement(block, direction) { + const distance = this.getFieldOrInputValue(block, 'distance', '4'); + this.addLine(`vex.${direction}(${distance})`); + } + + handleVexMove(block) { + const distance = this.getFieldOrInputValue(block, 'distance', '10'); + const direction = this.getFieldOrInputValue(block, 'direction', '0'); + this.addLine(`vex.move(distance=${distance}, direction=${direction})`); + } + + handleRotation(block, direction) { + const degrees = this.getFieldOrInputValue(block, 'degrees', '90'); + this.addLine(`robot.rotate_${direction}(${degrees})`); + } + + handleLedControl(block) { + const color = block.getFieldValue('COLOR') || 'red'; + const action = block.getFieldValue('ACTION') || 'on'; + this.addLine(`robot.led_${action}("${color}")`); + } + + handleWait(block) { + const seconds = this.getFieldOrInputValue(block, 'seconds', '1'); + this.addLine(`wait(${seconds})`); + } + + handleComparison(block) { + const op = block.getFieldValue('OP'); + const a = this.getFieldOrInputValue(block, 'A', '0'); + const b = this.getFieldOrInputValue(block, 'B', '0'); + + const operators = { + 'EQ': '==', + 'NEQ': '!=', + 'LT': '<', + 'LTE': '<=', + 'GT': '>', + 'GTE': '>=' + }; + + return `${a} ${operators[op] || '=='} ${b}`; + } + + handleArithmetic(block) { + const op = block.getFieldValue('OP'); + const a = this.getFieldOrInputValue(block, 'A', '0'); + const b = this.getFieldOrInputValue(block, 'B', '0'); + + const operators = { + 'ADD': '+', + 'MINUS': '-', + 'MULTIPLY': '*', + 'DIVIDE': '/', + 'POWER': '**' + }; + + return `${a} ${operators[op] || '+'} ${b}`; + } + + // Utility methods + getFieldOrInputValue(block, name, defaultValue = '') { + // Try to get field value first + try { + const fieldValue = block.getFieldValue(name); + if (fieldValue !== null && fieldValue !== undefined) { + return fieldValue; + } + } catch (e) { + // Field doesn't exist, try input + } + + // Try to get input value + const inputBlock = block.getInputTargetBlock(name); + if (inputBlock) { + const result = this.convertBlock(inputBlock); + return result || defaultValue; + } + + return defaultValue; + } + + addLine(text) { + const indent = ' '.repeat(this.indentLevel); + this.output.push(indent + text); + } + + indent() { + this.indentLevel++; + } + + dedent() { + this.indentLevel = Math.max(0, this.indentLevel - 1); + } +} + +// Export singleton instance +export const blockToTextConverter = new BlockToTextConverter(); \ No newline at end of file diff --git a/src/renderer/js/blockly-main.js b/src/renderer/js/blockly-main.js index 90f4ddf..b883695 100644 --- a/src/renderer/js/blockly-main.js +++ b/src/renderer/js/blockly-main.js @@ -9,19 +9,33 @@ import Interpreter from "js-interpreter"; import { InterpreterAPI } from "./interpreter-api.js"; Blockly.setLocale(locale); -let { cat_logic, cat_loops, cat_math, cat_sep, cat_data, cat_drone } = Categories; +let { cat_logic, cat_loops, cat_math, cat_sep, cat_data, cat_drone, cat_vex } = Categories; export const BlocklyMain = class { constructor() { createCustomBlocks(); this.interpreter = null; - this.runner = null; // may need to use window here + this.runner = null; this.latestCode = ""; - let _toolbox = new Toolbox([cat_logic, cat_loops, cat_math, cat_sep, cat_data, cat_drone]); + // let cat_robot = { + // name: "Robot Controls", + // colour: 160, + // modules: ["move", "led_control"] + // }; + + let _toolbox = new Toolbox([ + cat_logic, + cat_loops, + cat_math, + cat_sep, + cat_data, + cat_drone, + cat_vex + ]); this.workspace = Blockly.inject("blocklyDiv", { - toolbox: _toolbox.toString() + toolbox: _toolbox.toString(), }); this.registerCustomToolbox(); @@ -114,7 +128,10 @@ export const BlocklyMain = class { registerCustomToolbox = () => { // Triggers everytime category opens this.workspace.registerToolboxCategoryCallback("DATA", (ws) => { - return this.createCustomToolBox(["filter_signal"]); + return this.createCustomToolBox([ + "filter_signal", + "muscle_energy", + ]); }); }; diff --git a/src/renderer/js/categories.js b/src/renderer/js/categories.js index c0c7017..a12caad 100644 --- a/src/renderer/js/categories.js +++ b/src/renderer/js/categories.js @@ -24,12 +24,12 @@ export const Categories = { cat_data: { name: "Data", colour: 330, - modules: ["delta", "theta", "alpha", "beta", "gamma", "print"] + modules: ["delta", "theta", "alpha", "beta", "gamma", "print", "muscle_energy"] }, cat_drone: { name: "Drone", - colour: 70, + colour: 230, modules: [ "drone_up", "drone_down", @@ -42,6 +42,21 @@ export const Categories = { ] }, + // Add the new VEX category + cat_vex: { + name: "VEX", + colour: 70, + modules: [ + "vex_forward", + "vex_back", + "vex_left", + "vex_right", + "vex_kicker", + "vex_turn_left", + "vex_turn_right" + ] + }, + cat_vars: { name: "Variables", colour: 100, diff --git a/src/renderer/js/coding-mode-manager.js b/src/renderer/js/coding-mode-manager.js new file mode 100644 index 0000000..d73033a --- /dev/null +++ b/src/renderer/js/coding-mode-manager.js @@ -0,0 +1,372 @@ +/** + * Coding Mode Manager + * Manages the interaction between block coding and text coding modes + */ + +import { textEditor } from './text-editor.js'; +import { javascriptGenerator } from 'blockly/javascript'; + +export class CodingModeManager { + constructor() { + this.currentMode = 'blocks'; // 'blocks' or 'text' + this.blocklyWorkspace = null; + this.textEditorInstance = null; + this.lastGeneratedText = ''; + this.isInitialized = false; + } + + /** + * Initialize the coding mode manager + * @param {Blockly.Workspace} workspace - The Blockly workspace + */ + async initialize(workspace) { + this.blocklyWorkspace = workspace; + + // Initialize text editor + const textEditorContainer = document.getElementById('textEditorDiv'); + this.textEditorInstance = await textEditor.initialize( + textEditorContainer, + '# Welcome to text coding mode!\n# Click "Convert" to generate code from your blocks\n', + (text) => this.onTextChanged(text) + ); + + // Set up event listeners + this.setupEventListeners(); + + // Set initial mode + this.setMode('blocks'); + + this.isInitialized = true; + console.log('Coding Mode Manager initialized'); + } + + /** + * Set up event listeners for mode switching and sync + */ + setupEventListeners() { + // Block mode button + const blockModeBtn = document.getElementById('block-mode-btn'); + if (blockModeBtn) { + blockModeBtn.addEventListener('click', () => { + console.log('Block mode button clicked'); + this.setMode('blocks'); + }); + } else { + console.warn('Block mode button not found'); + } + + // Text mode button + const textModeBtn = document.getElementById('text-mode-btn'); + if (textModeBtn) { + textModeBtn.addEventListener('click', () => { + console.log('Text mode button clicked'); + this.setMode('text'); + }); + } else { + console.warn('Text mode button not found'); + } + + // Sync button (convert blocks to text) + const syncBtn = document.getElementById('sync-btn'); + if (syncBtn) { + syncBtn.addEventListener('click', () => { + console.log('Convert button clicked'); + this.convertBlocksToText(); + }); + } else { + console.warn('Sync button not found'); + } + + // Listen for Blockly workspace changes + if (this.blocklyWorkspace) { + this.blocklyWorkspace.addChangeListener(() => { + this.onBlocksChanged(); + }); + } + } /** + * Switch between coding modes + * @param {string} mode - 'blocks' or 'text' + */ + setMode(mode) { + if (mode === this.currentMode) return; + + this.currentMode = mode; + + const blocklyDiv = document.getElementById('blocklyDiv'); + const textEditorDiv = document.getElementById('textEditorDiv'); + const blockModeBtn = document.getElementById('block-mode-btn'); + const textModeBtn = document.getElementById('text-mode-btn'); + const syncBtn = document.getElementById('sync-btn'); + + if (mode === 'blocks') { + // Show blocks, hide text editor + blocklyDiv.style.display = 'block'; + textEditorDiv.style.display = 'none'; + + // Update button states + blockModeBtn.classList.add('active', 'blue'); + textModeBtn.classList.remove('active', 'blue'); + + // Update sync button + syncBtn.innerHTML = ' Convert'; + syncBtn.title = 'Convert blocks to text'; + + // Resize Blockly + if (this.blocklyWorkspace) { + Blockly.svgResize(this.blocklyWorkspace); + } + + } else if (mode === 'text') { + // Show text editor, hide blocks + blocklyDiv.style.display = 'none'; + textEditorDiv.style.display = 'block'; + + // Update button states + textModeBtn.classList.add('active', 'blue'); + blockModeBtn.classList.remove('active', 'blue'); + + // Update sync button + syncBtn.innerHTML = ' Update'; + syncBtn.title = 'Update blocks from text (limited)'; + + // Resize text editor + if (this.textEditorInstance) { + setTimeout(() => { + this.textEditorInstance.resize(); + }, 100); + } + } + + console.log(`Switched to ${mode} mode`); + } + + /** + * Convert blocks to text code using Blockly's built-in JavaScript generator + */ + convertBlocksToText() { + if (!this.blocklyWorkspace) { + console.error('Blockly workspace not available'); + return; + } + + try { + // Use Blockly's built-in JavaScript code generator + const generatedCode = javascriptGenerator.workspaceToCode(this.blocklyWorkspace); + + // Convert to more readable Python-like format + const readableCode = this.convertJavaScriptToPythonLike(generatedCode); + + // Update text editor + if (this.textEditorInstance) { + this.textEditorInstance.setValue(readableCode); + this.lastGeneratedText = readableCode; + } + + // Show success message + this.showMessage('Blocks converted to text successfully!', 'success'); + + // Switch to text mode to show the result + if (this.currentMode === 'blocks') { + this.setMode('text'); + } + + } catch (error) { + console.error('Error converting blocks to text:', error); + this.showMessage('Error converting blocks to text: ' + error.message, 'error'); + } + } + + /** + * Convert JavaScript code to more readable Python-like format + */ + convertJavaScriptToPythonLike(jsCode) { + if (!jsCode.trim()) { + return '# No blocks to convert\n# Add some blocks in the visual editor and click Convert!'; + } + + let pythonLike = '# Generated from Blockly visual programming\n'; + pythonLike += '# This represents your visual blocks as executable code\n\n'; + + // Simple transformations to make JavaScript more Python-like + let converted = jsCode + // Remove var declarations and make them more Python-like + .replace(/var\s+(\w+)\s*=\s*/g, '$1 = ') + // Convert console.log to print + .replace(/console\.log\(/g, 'print(') + // Convert function calls to be more readable + .replace(/window\.electronAPI\.sendCommand\(/g, 'send_command(') + // Clean up whitespace + .replace(/;\s*\n/g, '\n') + .replace(/;$/gm, '') + // Make control structures more readable + .replace(/if\s*\(/g, 'if (') + .replace(/for\s*\(/g, 'for (') + .replace(/while\s*\(/g, 'while ('); + + pythonLike += converted; + + return pythonLike; + } /** + * Called when the text editor content changes + * @param {string} text - New text content + */ + onTextChanged(text) { + // For now, we don't automatically sync text back to blocks + // This could be implemented as a future enhancement + if (text !== this.lastGeneratedText) { + // Text has been manually modified + const syncBtn = document.getElementById('sync-btn'); + if (this.currentMode === 'text') { + syncBtn.innerHTML = ' Modified'; + syncBtn.title = 'Text modified - automatic sync to blocks not supported'; + syncBtn.classList.add('orange'); + } + } + } + + /** + * Called when blocks change + */ + onBlocksChanged() { + // Reset sync button state when blocks change + const syncBtn = document.getElementById('sync-btn'); + if (this.currentMode === 'blocks') { + syncBtn.innerHTML = ' Convert'; + syncBtn.title = 'Convert blocks to text'; + syncBtn.classList.remove('orange'); + } + } + + /** + * Get the current code (from active mode) + * @returns {string} Current code content + */ + getCurrentCode() { + if (this.currentMode === 'text' && this.textEditorInstance) { + return this.textEditorInstance.getValue(); + } else if (this.currentMode === 'blocks' && this.blocklyWorkspace) { + const jsCode = javascriptGenerator.workspaceToCode(this.blocklyWorkspace); + return this.convertJavaScriptToPythonLike(jsCode); + } + return ''; + } /** + * Execute the current code (works with both modes) + */ + executeCurrentCode() { + let codeToExecute; + + if (this.currentMode === 'text' && this.textEditorInstance) { + // Execute text directly (would need a text-to-execution engine) + codeToExecute = this.textEditorInstance.getValue(); + this.showMessage('Text code execution not yet implemented. Switch to blocks mode to run.', 'warning'); + return; + } else if (this.currentMode === 'blocks' && this.blocklyWorkspace) { + // Use existing Blockly execution + // This should integrate with the existing interpreter system + codeToExecute = window.interpreter ? 'blocks' : null; + } + + if (codeToExecute === 'blocks') { + // Trigger the existing block execution system + const runButton = document.getElementById('run'); + if (runButton) { + runButton.click(); + } + } else { + this.showMessage('No executable code available', 'warning'); + } + } + + /** + * Show a temporary message to the user + * @param {string} message - Message to show + * @param {string} type - Message type ('success', 'warning', 'error') + */ + showMessage(message, type = 'info') { + // Create a temporary message element + const messageDiv = document.createElement('div'); + messageDiv.className = `ui ${type} message`; + messageDiv.style.position = 'fixed'; + messageDiv.style.top = '10px'; + messageDiv.style.right = '10px'; + messageDiv.style.zIndex = '1000'; + messageDiv.style.maxWidth = '300px'; + messageDiv.innerHTML = ` + +
${type.charAt(0).toUpperCase() + type.slice(1)}
+

${message}

+ `; + + document.body.appendChild(messageDiv); + + // Add close functionality + const closeIcon = messageDiv.querySelector('.close.icon'); + closeIcon.addEventListener('click', () => { + messageDiv.remove(); + }); + + // Auto-remove after 5 seconds + setTimeout(() => { + if (messageDiv.parentNode) { + messageDiv.remove(); + } + }, 5000); + } + + /** + * Export current code as a file + * @param {string} format - Export format ('py' for Python, 'txt' for text) + */ + exportCode(format = 'py') { + const code = this.getCurrentCode(); + if (!code.trim()) { + this.showMessage('No code to export', 'warning'); + return; + } + + const blob = new Blob([code], { type: 'text/plain' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = `neuroscope_code.${format}`; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + + this.showMessage(`Code exported as ${a.download}`, 'success'); + } + + /** + * Import code from text + * @param {string} code - Code to import + */ + importCode(code) { + if (this.textEditorInstance) { + this.textEditorInstance.setValue(code); + this.setMode('text'); + this.showMessage('Code imported successfully', 'success'); + } + } + + /** + * Get current mode + * @returns {string} Current mode ('blocks' or 'text') + */ + getCurrentMode() { + return this.currentMode; + } + + /** + * Dispose of resources + */ + dispose() { + if (this.textEditorInstance) { + this.textEditorInstance.dispose(); + } + this.isInitialized = false; + } +} + +// Export singleton instance +export const codingModeManager = new CodingModeManager(); \ No newline at end of file diff --git a/src/renderer/js/console.js b/src/renderer/js/console.js new file mode 100644 index 0000000..11c6c29 --- /dev/null +++ b/src/renderer/js/console.js @@ -0,0 +1,153 @@ +export const Console = class { + constructor() { + this.maxLines = 100; // Maximum number of lines to keep in console + this.consoleData = []; + this.initConsole(); + } + + initConsole() { + // Clear the bands div and set up console HTML + const bandsElement = document.getElementById("bands"); + bandsElement.innerHTML = ` +
+

Console Output

+
+
+ + + Ready + +
+
+ `; + + // Add event listener for clear button + document.getElementById("console-clear").addEventListener("click", () => { + this.clear(); + }); + + // Set up auto-scroll behavior + this.consoleOutput = document.getElementById("console-output"); + this.consoleStatus = document.getElementById("console-status"); + + this.print("Console ready", "info"); + } + + print(message, type = "log") { + // Add to internal data array (no timestamp formatting) + this.consoleData.push({ + message: message, + type: type + }); + + // Keep only the last maxLines entries + if (this.consoleData.length > this.maxLines) { + this.consoleData = this.consoleData.slice(-this.maxLines); + } + + // Update the display + this.updateDisplay(); + + // Update status + this.updateStatus(type); + } + + updateDisplay() { + if (!this.consoleOutput) return; + + // Build the display text - just the messages, no prefixes or timestamps + const displayText = this.consoleData.map(entry => entry.message).join("\n"); + + this.consoleOutput.textContent = displayText; + + // Auto-scroll to bottom + this.consoleOutput.scrollTop = this.consoleOutput.scrollHeight; + } + + updateStatus(lastMessageType) { + if (!this.consoleStatus) return; + + const statusText = `${this.consoleData.length} lines`; + let statusColor = "#666"; + + switch (lastMessageType) { + case "error": + statusColor = "#ff4444"; + break; + case "warning": + statusColor = "#ffaa00"; + break; + case "success": + statusColor = "#44ff44"; + break; + case "info": + statusColor = "#4488ff"; + break; + } + + this.consoleStatus.textContent = statusText; + this.consoleStatus.style.color = statusColor; + } + + clear() { + this.consoleData = []; + if (this.consoleOutput) { + this.consoleOutput.textContent = ""; + } + this.print("Console cleared", "info"); + } + + // Convenience methods for different message types + log(message) { + this.print(message, "log"); + } + + error(message) { + this.print(message, "error"); + } + + warning(message) { + this.print(message, "warning"); + } + + info(message) { + this.print(message, "info"); + } + + success(message) { + this.print(message, "success"); + } + + // Method to simulate print commands from Blockly code execution + blocklyPrint(message) { + this.print(message, "log"); + } +}; \ No newline at end of file diff --git a/src/renderer/js/customblock.js b/src/renderer/js/customblock.js index ab26ff1..a62b69a 100644 --- a/src/renderer/js/customblock.js +++ b/src/renderer/js/customblock.js @@ -2,7 +2,7 @@ import * as Blockly from "blockly/core"; import { javascriptGenerator, Order } from "blockly/javascript"; -let drone_blocks_color = 70; +let dr // 1. Define the block's JSONks_color = 70; export const createCustomBlocks = function () { /* Get Filter */ @@ -158,7 +158,7 @@ export const createCustomBlocks = function () { ///////// var blockly_print = { message0: "print %1", - args0: [{ type: "input_value", name: "val", check: "Number" }], + args0: [{ type: "input_value", name: "val", check: null }], previousStatement: null, nextStatement: null, colour: 330 @@ -175,6 +175,41 @@ export const createCustomBlocks = function () { var code = `blockly_print(${text});\n`; return code; }; + + + + javascriptGenerator.forBlock["csv_save"] = function (block, generator) { + var filename = block.getFieldValue("FILENAME"); + var duration = generator.valueToCode(block, "DURATION", Order.ATOMIC) || "5"; + var code = `saveDataToCSV("${filename}", ${duration});\n`; + return code; + }; + + // 1. Define the block’s JSON + const muscleEnergyJson = { + type: "muscle_energy", + message0: "muscle energy", + output: "Number", + colour: 230, + tooltip: "Current EMG muscle‐energy value", + helpUrl: "" + }; + + // 2. Tell Blockly about the block + Blockly.Blocks["muscle_energy"] = { + init: function () { + this.jsonInit(muscleEnergyJson); + } + }; + + // 3. Generate JS for the block: read from window.filteredSample + javascriptGenerator.forBlock["muscle_energy"] = function (block) { + // Call the host-registered function: + return ["getMuscleEnergy()", Order.NONE]; + }; + + + }; /// @@ -212,11 +247,11 @@ javascriptGenerator.forBlock["wait_seconds"] = function (block) { /* droneUp() */ var droneUp = { type: "drone_up", - message0: "up %1 cm", + message0: "Right %1 cm", args0: [{ type: "input_value", name: "value", check: "Number" }], previousStatement: null, nextStatement: null, - colour: drone_blocks_color + colour: 230 }; Blockly.Blocks["drone_up"] = { @@ -236,11 +271,11 @@ javascriptGenerator.forBlock["drone_up"] = function (block, generator) { /* droneDown() */ var droneDown = { type: "drone_down", - message0: "down %1 cm", + message0: "Left %1 cm", args0: [{ type: "input_value", name: "value", check: "Number" }], previousStatement: null, nextStatement: null, - colour: drone_blocks_color + colour: 230 }; Blockly.Blocks["drone_down"] = { @@ -263,7 +298,7 @@ var droneForward = { args0: [{ type: "input_value", name: "value", check: "Number" }], previousStatement: null, nextStatement: null, - colour: drone_blocks_color + colour: 230 }; Blockly.Blocks["drone_forward"] = { @@ -286,7 +321,7 @@ var droneBack = { args0: [{ type: "input_value", name: "value", check: "Number" }], previousStatement: null, nextStatement: null, - colour: drone_blocks_color + colour: 230 }; Blockly.Blocks["drone_back"] = { @@ -309,7 +344,7 @@ var ccw = { args0: [{ type: "input_value", name: "value", check: "Number" }], previousStatement: null, nextStatement: null, - colour: drone_blocks_color + colour: 230 }; Blockly.Blocks["ccw"] = { @@ -332,7 +367,7 @@ var cw = { args0: [{ type: "input_value", name: "value", check: "Number" }], previousStatement: null, nextStatement: null, - colour: drone_blocks_color + colour: 230 }; Blockly.Blocks["cw"] = { @@ -355,7 +390,7 @@ var takeoff = { args0: [], previousStatement: null, nextStatement: null, - colour: drone_blocks_color + colour: 230 }; Blockly.Blocks["takeoff"] = { @@ -376,7 +411,7 @@ var land = { args0: [], previousStatement: null, nextStatement: null, - colour: drone_blocks_color + colour: 100 }; Blockly.Blocks["land"] = { @@ -389,3 +424,251 @@ javascriptGenerator.forBlock["land"] = function (block, generator) { var code = `land();\n`; return code; }; + +var moveBlock = { + type: "move", + message0: "move %1 cm at heading %2°", + args0: [ + { type: "field_number", name: "DISTANCE", value: 100, min: 0 }, + { type: "field_number", name: "HEADING", value: 0, min: 0, max: 360 } + ], + previousStatement: null, + nextStatement: null, + colour: 160 +}; + +Blockly.Blocks["move"] = { + init: function () { + this.jsonInit(moveBlock); + } +}; + +javascriptGenerator.forBlock["move"] = function (block) { + var distance = block.getFieldValue("DISTANCE"); + var heading = block.getFieldValue("HEADING"); + var code = `electronAPI.sendCommand({ action: "move", distance: ${distance}, heading: ${heading} });\n`; + console.log("Generated code for move block:", code); + return code; +}; + +// LED Control Block +var ledControl = { + type: "led_control", + message0: "turn LED %1", + args0: [ + { + type: "field_dropdown", + name: "COLOR", + options: [ + ["Red", "RED"], + ["Green", "GREEN"], + ["Blue", "BLUE"], + ["White", "WHITE"], + ["Yellow", "YELLOW"], + ["Orange", "ORANGE"], + ["Purple", "PURPLE"], + ["Cyan", "CYAN"] + ] + } + ], + previousStatement: null, + nextStatement: null, + colour: 160 +}; + +Blockly.Blocks["led_control"] = { + init: function () { + this.jsonInit(ledControl); + } +}; + +javascriptGenerator.forBlock["led_control"] = function (block) { + var color = block.getFieldValue("COLOR"); + var code = `electronAPI.sendCommand({ action: "led_on", color: "${color}" });\n`; + console.log("Generated code for LED block:", code); + return code; +}; + +// VEX Turn Left Block (simplified - no degrees input) +var vexTurnLeft = { + type: "vex_turn_left", + message0: "turn left", + args0: [], // Remove the degrees input + previousStatement: null, + nextStatement: null, + colour: 70 +}; + +Blockly.Blocks["vex_turn_left"] = { + init: function () { + this.jsonInit(vexTurnLeft); + } +}; + +javascriptGenerator.forBlock["vex_turn_left"] = function (block, generator) { + // Use a default value of 90 degrees since there's no input + return `vex_turn_left(90);\n`; +}; + +// VEX Turn Right Block (simplified - no degrees input) +var vexTurnRight = { + type: "vex_turn_right", + message0: "turn right", + args0: [], // Remove the degrees input + previousStatement: null, + nextStatement: null, + colour: 70 +}; + +Blockly.Blocks["vex_turn_right"] = { + init: function () { + this.jsonInit(vexTurnRight); + } +}; + +javascriptGenerator.forBlock["vex_turn_right"] = function (block, generator) { + // Use a default value of 90 degrees since there's no input + return `vex_turn_right(90);\n`; +}; + +// VEX Forward Block +var vexForward = { + type: "vex_forward", + message0: "forward %1 inches", + args0: [ + { + type: "input_value", + name: "distance", + check: "Number" + } + ], + previousStatement: null, + nextStatement: null, + colour: 70 +}; + +Blockly.Blocks["vex_forward"] = { + init: function () { + this.jsonInit(vexForward); + } +}; + +javascriptGenerator.forBlock["vex_forward"] = function (block, generator) { + var distance = generator.valueToCode(block, "distance", Order.ATOMIC) || "4"; + return `vex_forward(${distance});\n`; +}; + +// VEX Back Block +var vexBack = { + type: "vex_back", + message0: "back %1 inches", + args0: [ + { + type: "input_value", + name: "distance", + check: "Number" + } + ], + previousStatement: null, + nextStatement: null, + colour: 70 +}; + +Blockly.Blocks["vex_back"] = { + init: function () { + this.jsonInit(vexBack); + } +}; + +javascriptGenerator.forBlock["vex_back"] = function (block, generator) { + var distance = generator.valueToCode(block, "distance", Order.ATOMIC) || "4"; + return `vex_back(${distance});\n`; +}; + +// VEX Left Block +var vexLeft = { + type: "vex_left", + message0: "left %1 inches", + args0: [ + { + type: "input_value", + name: "distance", + check: "Number" + } + ], + previousStatement: null, + nextStatement: null, + colour: 70 +}; + +Blockly.Blocks["vex_left"] = { + init: function () { + this.jsonInit(vexLeft); + } +}; + +javascriptGenerator.forBlock["vex_left"] = function (block, generator) { + var distance = generator.valueToCode(block, "distance", Order.ATOMIC) || "4"; + return `vex_left(${distance});\n`; +}; + +// VEX Right Block +var vexRight = { + type: "vex_right", + message0: "right %1 inches", + args0: [ + { + type: "input_value", + name: "distance", + check: "Number" + } + ], + previousStatement: null, + nextStatement: null, + colour: 70 +}; + +Blockly.Blocks["vex_right"] = { + init: function () { + this.jsonInit(vexRight); + } +}; + +javascriptGenerator.forBlock["vex_right"] = function (block, generator) { + var distance = generator.valueToCode(block, "distance", Order.ATOMIC) || "4"; + return `vex_right(${distance});\n`; +}; + +// VEX Kicker Block +var vexKicker = { + type: "vex_kicker", + message0: "kicker %1", + args0: [ + { + type: "field_dropdown", + name: "ACTION", + options: [ + ["Kick Hard", "HARD"], + ["Kick Soft", "SOFT"], + ["Place", "PLACE"] + ] + } + ], + previousStatement: null, + nextStatement: null, + colour: 70 +}; + +Blockly.Blocks["vex_kicker"] = { + init: function () { + this.jsonInit(vexKicker); + } +}; + +javascriptGenerator.forBlock["vex_kicker"] = function (block, generator) { + var action = block.getFieldValue("ACTION"); + // Call the interpreter-exposed wrapper function so this works when run in the + // js-interpreter as well as when generating code. + var code = `vex_kicker("${action.toLowerCase()}");\n`; + return code; +}; diff --git a/src/renderer/js/events.js b/src/renderer/js/events.js index 8c5f9ab..4685222 100644 --- a/src/renderer/js/events.js +++ b/src/renderer/js/events.js @@ -11,6 +11,7 @@ export const Events = class { this.create_event("run", this.execute_code.bind(this)); this.create_event("saveFile", this.download_code.bind(this)); + this.create_event("exportCode", this.export_text_code.bind(this)); this.load_input = this.eById("file_handler"); let handleOnChangeUpload = (e) => { @@ -29,6 +30,7 @@ export const Events = class { }); this.create_event("stopButton", this.stop_program.bind(this)); + this.create_event("vex-reconnect", this.reconnect_vex.bind(this)); window.electronAPI.getDroneState((event, drone_state) => { console.log(drone_state); @@ -103,4 +105,68 @@ export const Events = class { console.log("land"); window.electronAPI.manualControl("land"); } + + /* VEX Events */ + async reconnect_vex() { + console.log("Reconnecting to VEX AIM..."); + + // Change button to show loading state + const button = document.getElementById("vex-reconnect"); + const originalHTML = button.innerHTML; + button.innerHTML = ''; + button.disabled = true; + + // Log to console + if (window.neuroConsole) { + window.neuroConsole.print("Attempting to reconnect to VEX AIM...", 'info'); + } + + try { + const result = await window.electronAPI.vexReconnect(); + + if (result.success) { + if (window.neuroConsole) { + window.neuroConsole.print("Successfully reconnected to VEX AIM", 'success'); + } + console.log("VEX reconnection successful"); + } else { + if (window.neuroConsole) { + window.neuroConsole.print(`Reconnection failed: ${result.message}`, 'error'); + } + console.error("VEX reconnection failed:", result.message); + } + } catch (error) { + const errorMsg = `Error during VEX reconnection: ${error.message}`; + if (window.neuroConsole) { + window.neuroConsole.print(errorMsg, 'error'); + } + console.error(errorMsg); + } finally { + // Restore button state + button.innerHTML = originalHTML; + button.disabled = false; + } + } + + export_text_code() { + // Import the coding mode manager + import('./coding-mode-manager.js').then(({ codingModeManager }) => { + if (codingModeManager && codingModeManager.isInitialized) { + codingModeManager.exportCode('py'); + } else { + console.warn('Coding mode manager not initialized. Using fallback export.'); + // Fallback: export Blockly-generated JavaScript + const code = this.blockly.getLatestCode(); + const blob = new Blob([code], { type: 'text/plain' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = 'neuroscope_blocks.js'; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + } + }); + } }; diff --git a/src/renderer/js/feature-extractor.js b/src/renderer/js/feature-extractor.js index f0e2917..c1a54ce 100644 --- a/src/renderer/js/feature-extractor.js +++ b/src/renderer/js/feature-extractor.js @@ -31,15 +31,15 @@ export const FeatureExtractor = class { } getRelativeBandPower(channel, band) { - if (!channel) return; - var target = this.getBandPower(channel, band).bp; - var delta = this.getBandPower(channel, "delta").bp; - var theta = this.getBandPower(channel, "theta").bp; - var alpha = this.getBandPower(channel, "alpha").bp; - var beta = this.getBandPower(channel, "beta").bp; - var gamma = this.getBandPower(channel, "gamma").bp; - //console.log({delta, theta, alpha, beta, gamma}) - return target / (delta + theta + alpha + beta + gamma); + if (!channel) return 0; + const target = this.getBandPower(channel, band).bp; + const delta = this.getBandPower(channel, "delta").bp; + const theta = this.getBandPower(channel, "theta").bp; + const alpha = this.getBandPower(channel, "alpha").bp; + const beta = this.getBandPower(channel, "beta").bp; + const gamma = this.getBandPower(channel, "gamma").bp; + const denom = delta + theta + alpha + beta + gamma; + return denom > 0 ? target / denom : 0; } getBetaOverDelta(channel) { diff --git a/src/renderer/js/interpreter-api.js b/src/renderer/js/interpreter-api.js index 7c3238d..9ba191b 100644 --- a/src/renderer/js/interpreter-api.js +++ b/src/renderer/js/interpreter-api.js @@ -3,6 +3,8 @@ import { WrapperFunctions } from "./wrapper-functions"; export const InterpreterAPI = class { constructor(workspace) { this.wrapperFunctions = new WrapperFunctions(workspace); + + // Expose all the functions you need inside Blockly’s interpreter this.nativeFunctions = { highlightBlock: this.wrapperFunctions.highlightWrapper, getDelta: this.wrapperFunctions.getDelta, @@ -18,8 +20,21 @@ export const InterpreterAPI = class { ccw: this.wrapperFunctions.ccw, cw: this.wrapperFunctions.cw, takeoff: this.wrapperFunctions.takeoff, - land: this.wrapperFunctions.land + land: this.wrapperFunctions.land, + // VEX commands + vex_turn_left: this.wrapperFunctions.vex_turn_left, + vex_turn_right: this.wrapperFunctions.vex_turn_right, + vex_forward: this.wrapperFunctions.vex_forward, + vex_back: this.wrapperFunctions.vex_back, + vex_left: this.wrapperFunctions.vex_left, + vex_right: this.wrapperFunctions.vex_right, + // Kicker + vex_kicker: this.wrapperFunctions.vex_kicker, + + // ← NEW: expose muscle energy from window.filteredSample + getMuscleEnergy: () => window.filteredSample }; + this.asyncFunctions = { filterSignal: this.wrapperFunctions.filterSignalWrapper, wait_seconds: this.wrapperFunctions.wait_seconds @@ -27,19 +42,21 @@ export const InterpreterAPI = class { } init(interpreter, globalObject) { - for (let [key, value] of Object.entries(this.nativeFunctions)) { + // Bind native (synchronous) functions + for (const [name, fn] of Object.entries(this.nativeFunctions)) { interpreter.setProperty( globalObject, - key, - interpreter.createNativeFunction(value.bind(this.wrapperFunctions)) + name, + interpreter.createNativeFunction(fn.bind(this.wrapperFunctions)) ); } - for (let [key, value] of Object.entries(this.asyncFunctions)) { + // Bind async functions (returning promises) + for (const [name, fn] of Object.entries(this.asyncFunctions)) { interpreter.setProperty( globalObject, - key, - interpreter.createAsyncFunction(value.bind(this.wrapperFunctions)) + name, + interpreter.createAsyncFunction(fn.bind(this.wrapperFunctions)) ); } } diff --git a/src/renderer/js/main.js b/src/renderer/js/main.js index 65d5848..82e03a2 100644 --- a/src/renderer/js/main.js +++ b/src/renderer/js/main.js @@ -14,6 +14,45 @@ import { FeatureExtractor } from "./feature-extractor.js"; import { ChannelVis } from "./channel_vis.js"; import { BlocklyMain } from "./blockly-main.js"; import { BandPowerVis } from "./band-power-vis.js"; +import { simpleTextView } from "./simple-text-view.js"; + +let ws; +let wsReconnectAttempts = 0; +const maxReconnectAttempts = 5; + +// function connectWebSocket() { +// ws = new WebSocket("ws://127.0.0.1:8777"); + +// ws.onopen = () => { +// console.log("WebSocket connection established"); +// wsReconnectAttempts = 0; +// }; + +// ws.onerror = (error) => { +// console.log("WebSocket connection attempt failed, retrying..."); +// }; + +// ws.onclose = () => { +// if (wsReconnectAttempts < maxReconnectAttempts) { +// wsReconnectAttempts++; +// console.log(`WebSocket reconnecting... attempt ${wsReconnectAttempts}`); +// setTimeout(connectWebSocket, 2000); // Wait 2 seconds before retry +// } +// }; + +// ws.onmessage = (event) => { +// console.log("Message from server:", event.data); +// }; +// } + +// Wait a bit before connecting to give Python server time to start +// setTimeout(connectWebSocket, 3000); + +function sendCommand(command) { + window.electronAPI.sendCommand(command); +} + +window.sendCommand = sendCommand; export const NeuroScope = class { constructor() { @@ -24,19 +63,32 @@ export const NeuroScope = class { this.ble = new BLE(this.signal_handler.add_data.bind(this.signal_handler)); this.feature_extractor = new FeatureExtractor(256); this.blocklyMain.start(); - setTimeout(() => { - //this.ble.build_ble_modal_list(["device1", "device2"]); - }, 3000); + + // Ensure a defined, numeric global for wrapper functions + window.band_powers = { delta: 0, theta: 0, alpha: 0, beta: 0, gamma: 0 }; + + const sanitize = (bp) => ({ + delta: Number.isFinite(Number(bp?.delta)) ? Number(bp.delta) : 0, + theta: Number.isFinite(Number(bp?.theta)) ? Number(bp.theta) : 0, + alpha: Number.isFinite(Number(bp?.alpha)) ? Number(bp.alpha) : 0, + beta: Number.isFinite(Number(bp?.beta)) ? Number(bp.beta) : 0, + gamma: Number.isFinite(Number(bp?.gamma)) ? Number(bp.gamma) : 0, + }); setInterval(() => { + // Plot EEG channels this.signal_handler.plot_data(0); this.signal_handler.plot_data(1); this.signal_handler.plot_data(2); this.signal_handler.plot_data(3); - let data = this.signal_handler.get_data(); - let band_powers = this.feature_extractor.getFormattedBandPowers(data); - window.band_powers = band_powers; - this.bpBis.update(band_powers); + + // Compute and render band power + const data = this.signal_handler.get_data(); + const band_powers = this.feature_extractor.getFormattedBandPowers(data); + + // Update chart and global values used by Blockly getters + window.band_powers = sanitize(band_powers); + this.bpBis.update(window.band_powers); }, 400); } }; diff --git a/src/renderer/js/muse-client.js b/src/renderer/js/muse-client.js index 73755cf..a86f81b 100644 --- a/src/renderer/js/muse-client.js +++ b/src/renderer/js/muse-client.js @@ -154,7 +154,7 @@ export const MuseElectronClient = class { namePrefix: "Muse-" } ], - filters: [{ services: [this.MUSE_SERVICE] }] + optionalServices: [this.MUSE_SERVICE, 0xfe84] //acceptAllDevices: true, }); diff --git a/src/renderer/js/simple-text-view.js b/src/renderer/js/simple-text-view.js new file mode 100644 index 0000000..c0aae36 --- /dev/null +++ b/src/renderer/js/simple-text-view.js @@ -0,0 +1,267 @@ +/** + * Simple Text View Controller + * Uses existing Blockly code generation to show text representation + */ + +import * as Blockly from "blockly/core"; + +export class SimpleTextView { + constructor() { + this.isTextMode = false; + this.blocklyMain = null; + } + + /** + * Initialize with reference to BlocklyMain instance + */ + initialize(blocklyMain) { + this.blocklyMain = blocklyMain; + this.setupEventListeners(); + console.log('Simple Text View initialized'); + } + + setupEventListeners() { + // Use a small delay to ensure DOM is ready after console initialization + setTimeout(() => { + // Block mode button + const blockModeBtn = document.getElementById('block-mode-btn'); + if (blockModeBtn) { + blockModeBtn.onclick = (e) => { + e.preventDefault(); + e.stopPropagation(); + this.showBlocks(); + }; + console.log('Block mode button listener attached'); + } else { + console.warn('Block mode button not found'); + } + + // Text mode button + const textModeBtn = document.getElementById('text-mode-btn'); + if (textModeBtn) { + textModeBtn.onclick = (e) => { + e.preventDefault(); + e.stopPropagation(); + this.showText(); + }; + console.log('Text mode button listener attached'); + } else { + console.warn('Text mode button not found'); + } + + // Convert button + const syncBtn = document.getElementById('sync-btn'); + if (syncBtn) { + syncBtn.onclick = (e) => { + e.preventDefault(); + e.stopPropagation(); + this.convertBlocksToText(); + }; + console.log('Sync button listener attached'); + } else { + console.warn('Sync button not found'); + } + + // Export button + const exportBtn = document.getElementById('exportCode'); + if (exportBtn) { + exportBtn.onclick = () => this.exportCode(); + } + }, 100); + } + + showBlocks() { + console.log('Switching to blocks mode'); + + const blocklyDiv = document.getElementById('blocklyDiv'); + const textEditorDiv = document.getElementById('textEditorDiv'); + const blockModeBtn = document.getElementById('block-mode-btn'); + const textModeBtn = document.getElementById('text-mode-btn'); + + if (blocklyDiv) blocklyDiv.style.display = 'block'; + if (textEditorDiv) textEditorDiv.style.display = 'none'; + + if (blockModeBtn) { + blockModeBtn.classList.add('active', 'blue'); + } + if (textModeBtn) { + textModeBtn.classList.remove('active', 'blue'); + } + + this.isTextMode = false; + + // Resize Blockly + if (this.blocklyMain && this.blocklyMain.workspace) { + setTimeout(() => { + Blockly.svgResize(this.blocklyMain.workspace); + }, 100); + } + } + + showText() { + console.log('Switching to text mode'); + + const blocklyDiv = document.getElementById('blocklyDiv'); + const textEditorDiv = document.getElementById('textEditorDiv'); + const blockModeBtn = document.getElementById('block-mode-btn'); + const textModeBtn = document.getElementById('text-mode-btn'); + + if (blocklyDiv) blocklyDiv.style.display = 'none'; + if (textEditorDiv) textEditorDiv.style.display = 'block'; + + if (textModeBtn) { + textModeBtn.classList.add('active', 'blue'); + } + if (blockModeBtn) { + blockModeBtn.classList.remove('active', 'blue'); + } + + this.isTextMode = true; + + // Generate and show text + this.convertBlocksToText(); + } + + convertBlocksToText() { + console.log('Converting blocks to text'); + + if (!this.blocklyMain || !this.blocklyMain.workspace) { + console.error('Blockly workspace not available'); + return; + } + + try { + // Use the existing code generation from BlocklyMain + this.blocklyMain.generateLatestCode(); + const jsCode = this.blocklyMain.latestCode || this.blocklyMain.getLatestCode(); + + // Convert to more readable format + const readableCode = this.makeCodeReadable(jsCode); + + // Show in text editor div + let textEditorDiv = document.getElementById('textEditorDiv'); + if (!textEditorDiv) { + console.error('Text editor div not found'); + return; + } + + // Create simple text display if it doesn't exist + let codeDisplay = textEditorDiv.querySelector('.code-display'); + if (!codeDisplay) { + codeDisplay = document.createElement('pre'); + codeDisplay.className = 'code-display'; + codeDisplay.style.cssText = ` + background: #2d2d2d; + color: #f8f8f2; + padding: 20px; + margin: 0; + font-family: 'Courier New', monospace; + font-size: 14px; + line-height: 1.4; + overflow: auto; + height: 100%; + white-space: pre-wrap; + border: none; + `; + textEditorDiv.innerHTML = ''; + textEditorDiv.appendChild(codeDisplay); + } + + codeDisplay.textContent = readableCode; + + this.showMessage('Blocks converted to text!', 'success'); + + } catch (error) { + console.error('Error converting blocks:', error); + this.showMessage('Error converting blocks: ' + error.message, 'error'); + } + } + + makeCodeReadable(jsCode) { + if (!jsCode || !jsCode.trim()) { + return '# No blocks in workspace\n# Add some blocks in the visual editor and click Convert!'; + } + + let readable = '# Generated from your visual blocks\n'; + readable += '# This shows the executable code equivalent\n\n'; + + // Basic cleanup to make JavaScript more readable + let cleaned = jsCode + .replace(/highlightBlock\([^)]+\);\s*/g, '') // Remove highlight calls + .replace(/var\s+/g, '') // Remove var declarations + .replace(/;\s*\n/g, '\n') // Remove semicolons at line ends + .replace(/;$/gm, '') // Remove trailing semicolons + .replace(/window\.electronAPI\.sendCommand/g, 'send_command') // Make function calls readable + .replace(/console\.log/g, 'print') // Convert to print + .trim(); + + readable += cleaned; + + return readable; + } + + exportCode() { + console.log('Exporting code'); + + const codeDisplay = document.querySelector('.code-display'); + const code = codeDisplay ? codeDisplay.textContent : this.getCurrentCode(); + + if (!code || !code.trim() || code.includes('No blocks in workspace')) { + this.showMessage('No code to export. Add some blocks first!', 'warning'); + return; + } + + const blob = new Blob([code], { type: 'text/plain' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = 'neuroscope_blocks_code.py'; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + + this.showMessage('Code exported successfully!', 'success'); + } + + getCurrentCode() { + if (this.blocklyMain) { + this.blocklyMain.generateLatestCode(); + return this.makeCodeReadable(this.blocklyMain.latestCode || ''); + } + return ''; + } + + showMessage(message, type = 'info') { + console.log(`[${type.toUpperCase()}] ${message}`); + + // Create toast message + const toast = document.createElement('div'); + toast.className = `ui ${type} message`; + toast.style.cssText = ` + position: fixed; + top: 20px; + right: 20px; + z-index: 1000; + max-width: 300px; + animation: slideIn 0.3s ease; + `; + toast.innerHTML = ` + +
${type.charAt(0).toUpperCase() + type.slice(1)}
+

${message}

+ `; + + document.body.appendChild(toast); + + // Auto remove after 4 seconds + setTimeout(() => { + if (toast.parentNode) { + toast.remove(); + } + }, 4000); + } +} + +// Export singleton +export const simpleTextView = new SimpleTextView(); \ No newline at end of file diff --git a/src/renderer/js/text-editor.js b/src/renderer/js/text-editor.js new file mode 100644 index 0000000..f50f083 --- /dev/null +++ b/src/renderer/js/text-editor.js @@ -0,0 +1,341 @@ +/** + * Text Editor Component + * Provides a Monaco Editor for text-based coding with syntax highlighting + */ + +export class TextEditor { + constructor() { + this.editor = null; + this.container = null; + this.isInitialized = false; + this.onChangeCallback = null; + } + + /** + * Initialize the text editor + * @param {HTMLElement} container - Container element for the editor + * @param {string} initialCode - Initial code content + * @param {Function} onChange - Callback for when content changes + */ + async initialize(container, initialCode = '', onChange = null) { + this.container = container; + this.onChangeCallback = onChange; + + // Load Monaco Editor from CDN if not already loaded + if (!window.monaco) { + await this.loadMonaco(); + } + + // Create the editor + this.editor = monaco.editor.create(container, { + value: initialCode, + language: 'python', + theme: 'vs-dark', + automaticLayout: true, + minimap: { enabled: false }, + scrollBeyondLastLine: false, + fontSize: 14, + lineNumbers: 'on', + roundedSelection: false, + cursorStyle: 'line', + wordWrap: 'on', + wrappingIndent: 'indent', + contextmenu: true, + selectOnLineNumbers: true, + lineDecorationsWidth: 10, + lineNumbersMinChars: 3, + glyphMargin: false, + folding: true, + // Custom color scheme for the generated code + tokenColorCustomizations: { + comments: '#6A9955', + keywords: '#569CD6', + strings: '#CE9178', + numbers: '#B5CEA8' + } + }); + + // Set up change listener + if (this.onChangeCallback) { + this.editor.onDidChangeModelContent(() => { + const value = this.editor.getValue(); + this.onChangeCallback(value); + }); + } + + this.isInitialized = true; + return this.editor; + } + + /** + * Load Monaco Editor from CDN + */ + async loadMonaco() { + return new Promise((resolve, reject) => { + // Create script element for Monaco loader + const loader = document.createElement('script'); + loader.src = 'https://unpkg.com/monaco-editor@0.44.0/min/vs/loader.js'; + loader.onload = () => { + // Configure Monaco + require.config({ + paths: { + 'vs': 'https://unpkg.com/monaco-editor@0.44.0/min/vs' + } + }); + + // Load Monaco Editor + require(['vs/editor/editor.main'], () => { + // Configure Python language features + monaco.languages.registerCompletionItemProvider('python', { + provideCompletionItems: (model, position) => { + return { + suggestions: this.getPythonCompletions() + }; + } + }); + + resolve(); + }); + }; + loader.onerror = reject; + document.head.appendChild(loader); + }); + } + + /** + * Get Python completion suggestions for our domain-specific functions + */ + getPythonCompletions() { + return [ + // Signal processing functions + { + label: 'filter_signal', + kind: monaco.languages.CompletionItemKind.Function, + insertText: 'filter_signal(${1:signal}, ${2:low_freq}, ${3:high_freq})', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + documentation: 'Filter signal between low and high frequencies' + }, + { + label: 'get_delta_power', + kind: monaco.languages.CompletionItemKind.Function, + insertText: 'get_delta_power(${1:signal})', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + documentation: 'Get delta band power (0.5-4 Hz)' + }, + { + label: 'get_theta_power', + kind: monaco.languages.CompletionItemKind.Function, + insertText: 'get_theta_power(${1:signal})', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + documentation: 'Get theta band power (4-8 Hz)' + }, + { + label: 'get_alpha_power', + kind: monaco.languages.CompletionItemKind.Function, + insertText: 'get_alpha_power(${1:signal})', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + documentation: 'Get alpha band power (8-12 Hz)' + }, + { + label: 'get_beta_power', + kind: monaco.languages.CompletionItemKind.Function, + insertText: 'get_beta_power(${1:signal})', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + documentation: 'Get beta band power (12-30 Hz)' + }, + { + label: 'get_gamma_power', + kind: monaco.languages.CompletionItemKind.Function, + insertText: 'get_gamma_power(${1:signal})', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + documentation: 'Get gamma band power (30-100 Hz)' + }, + { + label: 'get_muscle_energy', + kind: monaco.languages.CompletionItemKind.Function, + insertText: 'get_muscle_energy(${1:signal})', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + documentation: 'Get muscle energy from EMG signal' + }, + // Robot control functions + { + label: 'robot.takeoff', + kind: monaco.languages.CompletionItemKind.Method, + insertText: 'robot.takeoff()', + documentation: 'Make robot take off' + }, + { + label: 'robot.land', + kind: monaco.languages.CompletionItemKind.Method, + insertText: 'robot.land()', + documentation: 'Make robot land' + }, + { + label: 'robot.move_up', + kind: monaco.languages.CompletionItemKind.Method, + insertText: 'robot.move_up(${1:distance})', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + documentation: 'Move robot up by specified distance' + }, + { + label: 'robot.move_down', + kind: monaco.languages.CompletionItemKind.Method, + insertText: 'robot.move_down(${1:distance})', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + documentation: 'Move robot down by specified distance' + }, + { + label: 'robot.move_forward', + kind: monaco.languages.CompletionItemKind.Method, + insertText: 'robot.move_forward(${1:distance})', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + documentation: 'Move robot forward by specified distance' + }, + { + label: 'robot.move_back', + kind: monaco.languages.CompletionItemKind.Method, + insertText: 'robot.move_back(${1:distance})', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + documentation: 'Move robot backward by specified distance' + }, + // VEX specific functions + { + label: 'vex.turn_left', + kind: monaco.languages.CompletionItemKind.Method, + insertText: 'vex.turn_left(${1:distance})', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + documentation: 'Turn VEX robot left' + }, + { + label: 'vex.turn_right', + kind: monaco.languages.CompletionItemKind.Method, + insertText: 'vex.turn_right(${1:distance})', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + documentation: 'Turn VEX robot right' + }, + { + label: 'vex.move', + kind: monaco.languages.CompletionItemKind.Method, + insertText: 'vex.move(distance=${1:10}, direction=${2:0})', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + documentation: 'Move VEX robot with distance and direction' + }, + // Utility functions + { + label: 'wait', + kind: monaco.languages.CompletionItemKind.Function, + insertText: 'wait(${1:seconds})', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + documentation: 'Wait for specified number of seconds' + } + ]; + } + + /** + * Set the editor content + * @param {string} code - Code to set + */ + setValue(code) { + if (this.editor) { + this.editor.setValue(code); + } + } + + /** + * Get the editor content + * @returns {string} Current editor content + */ + getValue() { + return this.editor ? this.editor.getValue() : ''; + } + + /** + * Focus the editor + */ + focus() { + if (this.editor) { + this.editor.focus(); + } + } + + /** + * Resize the editor to fit its container + */ + resize() { + if (this.editor) { + this.editor.layout(); + } + } + + /** + * Dispose of the editor + */ + dispose() { + if (this.editor) { + this.editor.dispose(); + this.editor = null; + } + this.isInitialized = false; + } + + /** + * Set the editor theme + * @param {string} theme - Theme name ('vs', 'vs-dark', 'hc-black') + */ + setTheme(theme) { + if (this.editor) { + monaco.editor.setTheme(theme); + } + } + + /** + * Insert text at the current cursor position + * @param {string} text - Text to insert + */ + insertText(text) { + if (this.editor) { + const selection = this.editor.getSelection(); + const range = new monaco.Range( + selection.startLineNumber, + selection.startColumn, + selection.endLineNumber, + selection.endColumn + ); + this.editor.executeEdits('', [{ + range: range, + text: text + }]); + } + } + + /** + * Add error markers to the editor + * @param {Array} errors - Array of error objects with line, column, message + */ + setErrorMarkers(errors) { + if (this.editor) { + const markers = errors.map(error => ({ + startLineNumber: error.line, + startColumn: error.column || 1, + endLineNumber: error.line, + endColumn: error.endColumn || 100, + message: error.message, + severity: monaco.MarkerSeverity.Error + })); + + monaco.editor.setModelMarkers(this.editor.getModel(), 'syntax', markers); + } + } + + /** + * Clear all error markers + */ + clearErrorMarkers() { + if (this.editor) { + monaco.editor.setModelMarkers(this.editor.getModel(), 'syntax', []); + } + } +} + +// Export singleton instance +export const textEditor = new TextEditor(); \ No newline at end of file diff --git a/src/renderer/js/wrapper-functions.js b/src/renderer/js/wrapper-functions.js index c310b23..9c54a38 100644 --- a/src/renderer/js/wrapper-functions.js +++ b/src/renderer/js/wrapper-functions.js @@ -25,27 +25,37 @@ export const WrapperFunctions = class { } blockly_print(text) { - console.log(text); + // Use the console if available, otherwise fall back to browser console + if (window.neuroConsole) { + window.neuroConsole.print(text, 'output'); + } else { + console.log(text); + } } getDelta() { - return window.band_powers.delta; + const v = window?.band_powers?.delta; + return Number.isFinite(v) ? v : 0; } getTheta() { - return window.band_powers.theta; + const v = window?.band_powers?.theta; + return Number.isFinite(v) ? v : 0; } getAlpha() { - return window.band_powers.alpha; + const v = window?.band_powers?.alpha; + return Number.isFinite(v) ? v : 0; } getBeta() { - return window.band_powers.beta; + const v = window?.band_powers?.beta; + return Number.isFinite(v) ? v : 0; } getGamma() { - return window.band_powers.gamma; + const v = window?.band_powers?.gamma; + return Number.isFinite(v) ? v : 0; } drone_up(value) { @@ -68,6 +78,43 @@ export const WrapperFunctions = class { window.electronAPI.droneBack(value); } + vex_turn_left(degrees) { + window.electronAPI.vexTurnLeft(degrees); + } + + vex_turn_right(degrees) { + window.electronAPI.vexTurnRight(degrees); + } + + vex_forward(distance) { + window.electronAPI.vexForward(distance); + } + + vex_back(distance) { + window.electronAPI.vexBack(distance); + } + + vex_left(distance) { + window.electronAPI.vexLeft(distance); + } + + vex_right(distance) { + window.electronAPI.vexRight(distance); + } + + // VEX Kicker wrapper: forwards kicker commands to main via electronAPI + vex_kicker(kind) { + // Normalize kind to lowercase string ('hard'|'soft'|'place') + const k = String(kind || "").toLowerCase(); + // Use dedicated IPC channel (vex-kicker) for consistency & logging + if (window.electronAPI && typeof window.electronAPI.vexKicker === 'function') { + window.electronAPI.vexKicker(k); + } else { + // Fallback to generic command if alias missing (defensive) + window.electronAPI.sendCommand({ action: "kicker", type: k }); + } + } + ccw(value) { console.log("ccw"); window.electronAPI.ccw(value); @@ -85,4 +132,4 @@ export const WrapperFunctions = class { land() { window.electronAPI.manualControl("land"); } -}; +}; \ No newline at end of file diff --git a/test-converter.html b/test-converter.html new file mode 100644 index 0000000..a703cec --- /dev/null +++ b/test-converter.html @@ -0,0 +1,100 @@ + + + + + Block to Text Converter Test + + + + +

Block to Text Converter Test

+ +
+

Test 1: Basic Converter Functionality

+
Running test...
+
+ +
+

Test 2: Generated Code Example

+
Loading...
+
+ + + + + \ No newline at end of file diff --git a/test-reconnect.js b/test-reconnect.js new file mode 100644 index 0000000..24ee7ab --- /dev/null +++ b/test-reconnect.js @@ -0,0 +1,68 @@ +// Simple test to verify WebSocket reconnection works +const WebSocket = require('ws'); + +let ws = null; + +function createWebSocketConnection() { + return new Promise((resolve, reject) => { + try { + ws = new WebSocket('ws://127.0.0.1:8777'); + + ws.on('open', function open() { + console.log('WebSocket connection opened'); + resolve(); + }); + + ws.on('error', function error(err) { + console.error('WebSocket error:', err.message); + reject(err); + }); + + ws.on('close', function close() { + console.log('WebSocket connection closed'); + }); + + // Set a timeout in case connection takes too long + setTimeout(() => { + if (ws.readyState !== WebSocket.OPEN) { + reject(new Error('WebSocket connection timeout')); + } + }, 5000); + } catch (error) { + reject(error); + } + }); +} + +async function testReconnect() { + console.log('Testing WebSocket reconnection...'); + + try { + // Test initial connection + console.log('1. Creating initial connection...'); + await createWebSocketConnection(); + console.log('✓ Initial connection successful'); + + // Test reconnection + console.log('2. Testing reconnection...'); + if (ws) { + ws.close(); + ws = null; + } + + await new Promise(resolve => setTimeout(resolve, 1000)); + + await createWebSocketConnection(); + console.log('✓ Reconnection successful'); + + if (ws) { + ws.close(); + } + + console.log('✓ All tests passed!'); + } catch (error) { + console.error('✗ Test failed:', error.message); + } +} + +testReconnect(); \ No newline at end of file diff --git a/test_vex_server.py b/test_vex_server.py new file mode 100644 index 0000000..57f18e7 --- /dev/null +++ b/test_vex_server.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +""" +Simple test script to verify VEX Development Server is working +""" +import asyncio +import websockets +import json + +async def test_vex_server(): + """Test the VEX development server""" + uri = "ws://127.0.0.1:8777" + + try: + print(f"🔌 Connecting to {uri}...") + async with websockets.connect(uri) as websocket: + print("✅ Connected successfully!") + + # Wait for welcome message + welcome = await websocket.recv() + print(f"📩 Welcome: {welcome}") + + # Test LED command + led_command = {"action": "led_on", "color": "GREEN"} + print(f"📤 Sending: {led_command}") + await websocket.send(json.dumps(led_command)) + + response = await websocket.recv() + print(f"📥 Response: {response}") + + # Test move command + move_command = {"action": "move", "distance": 50} + print(f"📤 Sending: {move_command}") + await websocket.send(json.dumps(move_command)) + + response = await websocket.recv() + print(f"📥 Response: {response}") + + # Test status command + status_command = {"action": "get_status"} + print(f"📤 Sending: {status_command}") + await websocket.send(json.dumps(status_command)) + + response = await websocket.recv() + print(f"📥 Response: {response}") + + print("✅ All tests passed!") + + except Exception as e: + print(f"❌ Error: {e}") + +if __name__ == "__main__": + asyncio.run(test_vex_server()) \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 4ed2ea9..dfb0b68 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,11 +2,6 @@ # yarn lockfile v1 -"7zip-bin@~5.1.1": - version "5.1.1" - resolved "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz" - integrity sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ== - "@babel/code-frame@^7.14.5": version "7.14.5" resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz" @@ -19,7 +14,7 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz" integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw== -"@babel/core@^7.12.0": +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.12.0": version "7.14.6" resolved "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz" integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA== @@ -302,7 +297,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -382,7 +377,7 @@ "@parcel/transformer-raw" "2.0.0-beta.3.1" "@parcel/transformer-react-refresh-wrap" "2.0.0-beta.3.1" -"@parcel/core@2.0.0-beta.3.1": +"@parcel/core@^2.0.0-alpha.3.1", "@parcel/core@2.0.0-beta.3.1": version "2.0.0-beta.3.1" resolved "https://registry.npmjs.org/@parcel/core/-/core-2.0.0-beta.3.1.tgz" integrity sha512-Rkp92SBcVyr5qlPEoV7gVzNRYstHxo6ah4NadSdNN0QzXtcLUGkrAPXBGJpjlifXqXogyz0D3QjAaPBpk6p/8Q== @@ -921,7 +916,7 @@ "@tootallnate/once@2": version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== "@types/cacheable-request@^6.0.1": @@ -995,14 +990,6 @@ dependencies: undici-types "~5.26.4" -"@types/plist@^3.0.1": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/plist/-/plist-3.0.5.tgz#9a0c49c0f9886c8c8696a7904dd703f6284036e0" - integrity sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA== - dependencies: - "@types/node" "*" - xmlbuilder ">=11.0.1" - "@types/q@^1.5.1": version "1.5.4" resolved "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz" @@ -1015,34 +1002,21 @@ dependencies: "@types/node" "*" -"@types/verror@^1.10.3": - version "1.10.10" - resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.10.tgz#d5a4b56abac169bfbc8b23d291363a682e6fa087" - integrity sha512-l4MM0Jppn18hb9xmM6wwD1uTdShpf9Pn80aXTStnK1C94gtPvJcV2FrDmbOQUAQfJ1cKZHktkQUDwEqaAKXMMg== - "@types/yargs-parser@*": version "20.2.0" - resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz" - integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== "@types/yargs@^16.0.2": version "16.0.3" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz" - integrity sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ== dependencies: "@types/yargs-parser" "*" "@types/yauzl@^2.9.1": version "2.10.3" - resolved "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz" - integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== dependencies: "@types/node" "*" "@vue/compiler-core@3.1.2": version "3.1.2" - resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.1.2.tgz" - integrity sha512-nHmq7vLjq/XM2IMbZUcKWoH5sPXa2uR/nIKZtjbK5F3TcbnYE/zKsrSUR9WZJ03unlwotNBX1OyxVt9HbWD7/Q== dependencies: "@babel/parser" "^7.12.0" "@babel/types" "^7.12.0" @@ -1052,16 +1026,12 @@ "@vue/compiler-dom@3.1.2": version "3.1.2" - resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.1.2.tgz" - integrity sha512-k2+SWcWH0jL6WQAX7Or2ONqu5MbtTgTO0dJrvebQYzgqaKMXNI90RNeWeCxS4BnNFMDONpHBeFgbwbnDWIkmRg== dependencies: "@vue/compiler-core" "3.1.2" "@vue/shared" "3.1.2" "@vue/compiler-sfc@^3.0.0": version "3.1.2" - resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.1.2.tgz" - integrity sha512-SeG/2+DvwejQ7oAiSx8BrDh5qOdqCYHGClPiTvVIHTfSIHiS2JjMbCANdDCjHkTOh/O7WZzo2JhdKm98bRBxTw== dependencies: "@babel/parser" "^7.13.9" "@babel/types" "^7.13.0" @@ -1083,31 +1053,23 @@ "@vue/compiler-ssr@3.1.2": version "3.1.2" - resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.1.2.tgz" - integrity sha512-BwXo9LFk5OSWdMyZQ4bX1ELHX0Z/9F+ld/OaVnpUPzAZCHslBYLvyKUVDwv2C/lpLjRffpC2DOUEdl1+RP1aGg== dependencies: "@vue/compiler-dom" "3.1.2" "@vue/shared" "3.1.2" "@vue/reactivity@3.1.2": version "3.1.2" - resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.2.tgz" - integrity sha512-glJzJoN2xE7I2lRvwKM5u1BHRPTd1yc8iaf//Lai/78/uYAvE5DXp5HzWRFOwMlbRvMGJHIQjOqoxj87cDAaag== dependencies: "@vue/shared" "3.1.2" "@vue/runtime-core@3.1.2": version "3.1.2" - resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.1.2.tgz" - integrity sha512-gsPZG4dRIkixuuKmoj4P9IHgfT0yaFLcqWOM5F/bCk0nxQn1XtxH8oUehWuET726KhbukvDoJfe9G2CKviy80w== dependencies: "@vue/reactivity" "3.1.2" "@vue/shared" "3.1.2" "@vue/runtime-dom@3.1.2": version "3.1.2" - resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.1.2.tgz" - integrity sha512-QvINxjLucEZFzp5f0NVu7JqWYCv5TKQfkH2FDs/N6QNE4iKcYtKrWdT0HKfABnVXG28Znqv6rIH0dH4ZAOwxpA== dependencies: "@vue/runtime-core" "3.1.2" "@vue/shared" "3.1.2" @@ -1115,63 +1077,40 @@ "@vue/shared@3.1.2": version "3.1.2" - resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.1.2.tgz" - integrity sha512-EmH/poaDWBPJaPILXNI/1fvUbArJQmmTyVCwvvyDYDFnkPoTclAbHRAtyIvqfez7jybTDn077HTNILpxlsoWhg== -"@xmldom/xmldom@^0.8.8": - version "0.8.10" - resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" - integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== - -abab@^2.0.0: - version "2.0.5" - resolved "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== +"7zip-bin@~5.1.1": + version "5.1.1" + resolved "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz" + integrity sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ== -abab@^2.0.6: +abab@^2.0.0, abab@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== abortcontroller-polyfill@^1.1.9: version "1.7.3" - resolved "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz" - integrity sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q== acorn-globals@^4.3.0: version "4.3.4" - resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz" - integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== dependencies: acorn "^6.0.1" acorn-walk "^6.0.1" acorn-walk@^6.0.1: version "6.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz" - integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== acorn@^6.0.1, acorn@^6.0.4: version "6.4.2" - resolved "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== agent-base@6: version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" ajv-keywords@^3.4.1: version "3.5.2" - resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.3: +ajv@^6.12.0, ajv@^6.12.3, ajv@^6.9.1: version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -1180,77 +1119,58 @@ ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.3: alphanum-sort@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz" - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= ansi-align@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz" - integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== dependencies: string-width "^3.0.0" ansi-html@^0.0.7: version "0.0.7" - resolved "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= ansi-regex@^2.0.0: version "2.1.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= ansi-regex@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== ansi-regex@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== ansi-styles@^2.2.1: version "2.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.0: + version "3.2.1" + dependencies: + color-convert "^1.9.0" + +ansi-styles@^3.2.1: 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== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" anymatch@~3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" app-builder-bin@3.5.13: version "3.5.13" - resolved "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-3.5.13.tgz" - integrity sha512-ighVe9G+bT1ENGdp9ecO1P+94vv/f+FUwaI+XkNzeg9bYF8Oi3BQ+mJuxS00UgyHs8luuOzjzC+qnAtdb43Mpg== app-builder-lib@22.11.7: version "22.11.7" - resolved "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.11.7.tgz" - integrity sha512-pS9/cR4/TnNZVAHZECiSvvwTBzbwblj7KBBZkMKDG57nibq0I1XY8zAaYeHFdlYTyrRcz9JUXbAqJKezya7UFQ== dependencies: - "7zip-bin" "~5.1.1" "@develar/schema-utils" "~2.6.5" "@electron/universal" "1.0.5" "@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.11.7" @@ -1273,50 +1193,32 @@ app-builder-lib@22.11.7: argparse@^1.0.7: version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" argparse@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== arr-diff@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= arr-flatten@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== arr-union@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= array-equal@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz" - integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= array-union@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array-unique@^0.3.2: version "0.3.2" - resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= asar@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/asar/-/asar-3.0.3.tgz" - integrity sha512-k7zd+KoR+n8pl71PvgElcoKHrVNiSXtw7odKbyNpmgKe7EGRF9Pnu3uLOukD37EvavKwVFxOUpqXTIZC5B5Pmw== dependencies: chromium-pickle-js "^0.2.0" commander "^5.0.0" @@ -1327,8 +1229,6 @@ asar@^3.0.3: asn1.js@^5.2.0: version "5.4.1" - resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== dependencies: bn.js "^4.0.0" inherits "^2.0.1" @@ -1337,20 +1237,14 @@ asn1.js@^5.2.0: asn1@~0.2.3: version "0.2.4" - resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== dependencies: safer-buffer "~2.1.0" -assert-plus@1.0.0, assert-plus@^1.0.0: +assert-plus@^1.0.0, assert-plus@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= assert@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz" - integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== dependencies: es6-object-assign "^1.1.0" is-nan "^1.2.1" @@ -1359,92 +1253,55 @@ assert@^2.0.0: assign-symbols@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= astral-regex@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== astring@^1.6.2: version "1.7.5" - resolved "https://registry.npmjs.org/astring/-/astring-1.7.5.tgz" - integrity sha512-lobf6RWXb8c4uZ7Mdq0U12efYmpD1UFnyOWVJPTa3ukqZrMopav+2hdNu0hgBF0JIBFK9QgrBDfwYvh3DFJDAA== async-exit-hook@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz" - integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw== async-limiter@~1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== async@0.9.x: version "0.9.2" - resolved "https://registry.npmjs.org/async/-/async-0.9.2.tgz" - integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0= asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= at-least-node@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== atob@^2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== available-typed-arrays@^1.0.2: version "1.0.4" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz" - integrity sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA== aws-sign2@~0.7.0: version "0.7.0" - resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: version "1.11.0" - resolved "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== axios@^0.21.1: version "0.21.1" - resolved "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz" - integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== dependencies: follow-redirects "^1.10.0" balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base-x@^3.0.8: version "3.0.8" - resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz" - integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA== dependencies: safe-buffer "^5.0.1" -base64-js@^1.3.1, base64-js@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - base@^0.11.1: version "0.11.2" - resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== dependencies: cache-base "^1.0.1" class-utils "^0.3.5" @@ -1454,27 +1311,22 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" +base64-js@^1.3.1: + version "1.5.1" + bcrypt-pbkdf@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= dependencies: tweetnacl "^0.14.3" big.js@^5.2.2: version "5.2.2" - resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== binary-extensions@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== bl@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" inherits "^2.0.4" @@ -1482,47 +1334,34 @@ bl@^4.1.0: blockly@^10.4.3: version "10.4.3" - resolved "https://registry.yarnpkg.com/blockly/-/blockly-10.4.3.tgz#a3ca155e2ba7bae59883a143b8b901c781bfac0d" - integrity sha512-+opfBmQnSiv7vTiY/TkDEBOslxUyfj8luS3S+qs1NnQKjInC+Waf2l9cNsMh9J8BMkmiCIT+Ed/3mmjIaL9wug== dependencies: jsdom "22.1.0" bluebird-lst@^1.0.9: version "1.0.9" - resolved "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz" - integrity sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw== dependencies: bluebird "^3.5.5" bluebird@^3.5.5, bluebird@^3.7.2: version "3.7.2" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: version "4.12.0" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.0.0, bn.js@^5.1.1: +bn.js@^5.0.0: + version "5.2.0" + +bn.js@^5.1.1: version "5.2.0" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== boolbase@^1.0.0, boolbase@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= boolean@^3.0.1: version "3.1.2" - resolved "https://registry.npmjs.org/boolean/-/boolean-3.1.2.tgz" - integrity sha512-YN6UmV0FfLlBVvRvNPx3pz5W/mUoYB24J4WSXOKP/OOJpi+Oq6WYqPaNTHzjI0QzwWtnvEd5CGYyQPgp1jFxnw== boxen@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz" - integrity sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA== dependencies: ansi-align "^3.0.0" camelcase "^6.2.0" @@ -1535,16 +1374,12 @@ boxen@^5.0.0: brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" braces@^2.3.1: version "2.3.2" - resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== dependencies: arr-flatten "^1.1.0" array-unique "^0.3.2" @@ -1559,25 +1394,17 @@ braces@^2.3.1: braces@^3.0.1, braces@~3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= browser-process-hrtime@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" - resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== dependencies: buffer-xor "^1.0.3" cipher-base "^1.0.0" @@ -1588,8 +1415,6 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4: browserify-cipher@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== dependencies: browserify-aes "^1.0.4" browserify-des "^1.0.0" @@ -1597,8 +1422,6 @@ browserify-cipher@^1.0.0: browserify-des@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== dependencies: cipher-base "^1.0.1" des.js "^1.0.0" @@ -1607,16 +1430,12 @@ browserify-des@^1.0.0: browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: version "4.1.0" - resolved "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== dependencies: bn.js "^5.0.0" randombytes "^2.0.1" browserify-sign@^4.0.0: version "4.2.1" - resolved "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== dependencies: bn.js "^5.1.1" browserify-rsa "^4.0.1" @@ -1630,15 +1449,11 @@ browserify-sign@^4.0.0: browserify-zlib@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== dependencies: pako "~1.0.5" browserslist@^4.0.0, browserslist@^4.16.6, browserslist@^4.6.6: version "4.16.6" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz" - integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== dependencies: caniuse-lite "^1.0.30001219" colorette "^1.2.2" @@ -1648,56 +1463,40 @@ browserslist@^4.0.0, browserslist@^4.16.6, browserslist@^4.6.6: buffer-crc32@~0.2.3: version "0.2.13" - resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= buffer-equal@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz" - integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= buffer-from@^1.0.0: version "1.1.1" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== buffer-xor@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= -buffer@^5.1.0, buffer@^5.5.0: +buffer@^5.5.0: version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" ieee754 "^1.1.13" builder-util-runtime@8.7.6: version "8.7.6" - resolved "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.6.tgz" - integrity sha512-rj9AIY7CzLSuTOXpToiaQkruYh6UEQ+kYnd5UET22ch8MGClEtIZKXHG14qEiXEr2x4EOKDMxkcTa+9TYaE+ug== dependencies: debug "^4.3.2" sax "^1.2.4" builder-util-runtime@8.7.7: version "8.7.7" - resolved "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.7.tgz" - integrity sha512-RUfoXzVrmFFI0K/Oft0CtP1LpTIOlBeLJatt5DePTI0KlxE156am4SGUpqtbbdqZNm++LkV9mX4olBDcXyGPow== dependencies: debug "^4.3.2" sax "^1.2.4" builder-util@22.11.7: version "22.11.7" - resolved "https://registry.npmjs.org/builder-util/-/builder-util-22.11.7.tgz" - integrity sha512-ihqUe5ey82LM9qqQe0/oIcaSm9w+B9UjcsWJZxJliTBsbU+sErOpDFpHW+sim0veiTF/EIcGUh9HoduWw+l9FA== dependencies: - "7zip-bin" "~5.1.1" "@types/debug" "^4.1.5" "@types/fs-extra" "^9.0.11" + "7zip-bin" "~5.1.1" app-builder-bin "3.5.13" bluebird-lst "^1.0.9" builder-util-runtime "8.7.7" @@ -1712,18 +1511,12 @@ builder-util@22.11.7: builtin-status-codes@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= bytes@3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= cache-base@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== dependencies: collection-visit "^1.0.0" component-emitter "^1.2.1" @@ -1737,13 +1530,9 @@ cache-base@^1.0.1: cacheable-lookup@^5.0.3: version "5.0.4" - resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== cacheable-request@^6.0.0: version "6.1.0" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== dependencies: clone-response "^1.0.2" get-stream "^5.1.0" @@ -1755,8 +1544,6 @@ cacheable-request@^6.0.0: cacheable-request@^7.0.2: version "7.0.4" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz" - integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== dependencies: clone-response "^1.0.2" get-stream "^5.1.0" @@ -1766,47 +1553,39 @@ cacheable-request@^7.0.2: normalize-url "^6.0.1" responselike "^2.0.0" +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" get-intrinsic "^1.0.2" caller-callsite@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= dependencies: callsites "^2.0.0" caller-path@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= dependencies: caller-callsite "^2.0.0" callsites@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= camelcase@^5.0.0: version "5.3.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== camelcase@^6.2.0: version "6.2.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz" - integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== caniuse-api@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== dependencies: browserslist "^4.0.0" caniuse-lite "^1.0.0" @@ -1815,18 +1594,12 @@ caniuse-api@^3.0.0: caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001219: version "1.0.30001239" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz" - integrity sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ== caseless@~0.12.0: version "0.12.0" - resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= chalk@^1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" @@ -1834,10 +1607,22 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0: + version "2.4.2" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^2.4.1: + version "2.4.2" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^2.4.2: version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" @@ -1845,16 +1630,12 @@ chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" -"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.0: +chokidar@^3.5.0, "chokidar@>=3.0.0 <4.0.0": version "3.5.2" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz" - integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -1868,36 +1649,24 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: chrome-trace-event@^1.0.2: version "1.0.3" - resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== chromium-pickle-js@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz" - integrity sha1-BKEGZywYsIWrd02YPfo+oTjyIgU= ci-info@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== ci-info@^3.1.1: version "3.2.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz" - integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" - resolved "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" class-utils@^0.3.5: version "0.3.6" - resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: arr-union "^3.1.0" define-property "^0.2.5" @@ -1906,33 +1675,17 @@ class-utils@^0.3.5: cli-boxes@^2.2.1: version "2.2.1" - resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== cli-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" cli-spinners@^2.5.0: version "2.6.0" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz" - integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== - -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== - dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" cliui@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== dependencies: string-width "^3.1.0" strip-ansi "^5.2.0" @@ -1940,8 +1693,6 @@ cliui@^5.0.0: cliui@^7.0.2: version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.0" @@ -1949,25 +1700,17 @@ cliui@^7.0.2: clone-response@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= dependencies: mimic-response "^1.0.0" clone@^1.0.2: version "1.0.4" - resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= clone@^2.1.1: version "2.1.2" - resolved "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= coa@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== dependencies: "@types/q" "^1.5.1" chalk "^2.4.1" @@ -1975,110 +1718,77 @@ coa@^2.0.2: collection-visit@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= dependencies: map-visit "^1.0.0" object-visit "^1.0.0" color-convert@^1.9.0, color-convert@^1.9.1: version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-name@1.1.3: + version "1.1.3" color-string@^1.5.4: version "1.5.5" - resolved "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz" - integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== dependencies: color-name "^1.0.0" simple-swizzle "^0.2.2" color@^3.0.0: version "3.1.3" - resolved "https://registry.npmjs.org/color/-/color-3.1.3.tgz" - integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== dependencies: color-convert "^1.9.1" color-string "^1.5.4" colorette@^1.2.2: version "1.2.2" - resolved "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== colors@1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz" - integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" command-exists@^1.2.6: version "1.2.9" - resolved "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz" - integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +commander@^2.20.0: + version "2.20.3" + +commander@^5.0.0: + version "5.1.0" + +commander@^7.0.0: + version "7.2.0" commander@2.9.0: version "2.9.0" - resolved "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz" - integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= dependencies: graceful-readlink ">= 1.0.0" -commander@7, commander@^7.0.0: +commander@7: version "7.2.0" - resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" - integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== component-emitter@^1.2.1: version "1.3.0" - resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= concurrently@^5.2.0: version "5.3.0" - resolved "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz" - integrity sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ== dependencies: chalk "^2.4.2" date-fns "^2.0.1" @@ -2092,8 +1802,6 @@ concurrently@^5.2.0: configstore@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== dependencies: dot-prop "^5.2.0" graceful-fs "^4.1.2" @@ -2104,8 +1812,6 @@ configstore@^5.0.1: connect@^3.7.0: version "3.7.0" - resolved "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz" - integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== dependencies: debug "2.6.9" finalhandler "1.1.2" @@ -2114,77 +1820,48 @@ connect@^3.7.0: console-browserify@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== consolidate@^0.16.0: version "0.16.0" - resolved "https://registry.npmjs.org/consolidate/-/consolidate-0.16.0.tgz" - integrity sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ== dependencies: bluebird "^3.7.2" constants-browserify@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= content-disposition@0.5.2: version "0.5.2" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz" - integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ= convert-source-map@^1.7.0: version "1.8.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== dependencies: safe-buffer "~5.1.1" copy-descriptor@^0.1.0: version "0.1.1" - resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js@^3.2.1: version "3.15.1" - resolved "https://registry.npmjs.org/core-js/-/core-js-3.15.1.tgz" - integrity sha512-h8VbZYnc9pDzueiS2610IULDkpFFPunHwIpl8yRwFahAEEdSpHlTy3h3z3rKq5h11CaUdBEeRViu9AYvbxiMeg== -core-util-is@1.0.2, core-util-is@~1.0.0: +core-util-is@~1.0.0, core-util-is@1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= cosmiconfig@^5.0.0: version "5.2.1" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== dependencies: import-fresh "^2.0.0" is-directory "^0.3.1" js-yaml "^3.13.1" parse-json "^4.0.0" -crc@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" - integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== - dependencies: - buffer "^5.1.0" - create-ecdh@^4.0.0: version "4.0.4" - resolved "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== dependencies: bn.js "^4.1.0" elliptic "^6.5.3" create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== dependencies: cipher-base "^1.0.1" inherits "^2.0.1" @@ -2194,8 +1871,6 @@ create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" - resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== dependencies: cipher-base "^1.0.3" create-hash "^1.1.0" @@ -2206,15 +1881,11 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: cross-env@^7.0.2: version "7.0.3" - resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz" - integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== dependencies: cross-spawn "^7.0.1" cross-spawn@^6.0.4: version "6.0.5" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: nice-try "^1.0.4" path-key "^2.0.1" @@ -2224,8 +1895,6 @@ cross-spawn@^6.0.4: cross-spawn@^7.0.1: version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" @@ -2233,8 +1902,6 @@ cross-spawn@^7.0.1: crypto-browserify@^3.12.0: version "3.12.0" - resolved "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== dependencies: browserify-cipher "^1.0.0" browserify-sign "^4.0.0" @@ -2250,26 +1917,18 @@ crypto-browserify@^3.12.0: crypto-random-string@^2.0.0: 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== -css-color-names@0.0.4, css-color-names@^0.0.4: +css-color-names@^0.0.4, css-color-names@0.0.4: version "0.0.4" - resolved "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz" - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= css-declaration-sorter@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz" - integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== dependencies: postcss "^7.0.1" timsort "^0.3.0" css-modules-loader-core@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz" - integrity sha1-WQhmgpShvs0mGuCkziGwtVHyHRY= dependencies: icss-replace-symbols "1.1.0" postcss "6.0.1" @@ -2280,13 +1939,9 @@ css-modules-loader-core@^1.1.0: css-select-base-adapter@^0.1.1: version "0.1.1" - resolved "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== css-select@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== dependencies: boolbase "^1.0.0" css-what "^3.2.1" @@ -2295,42 +1950,30 @@ css-select@^2.0.0: css-selector-tokenizer@^0.7.0: version "0.7.3" - resolved "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz" - integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg== dependencies: cssesc "^3.0.0" fastparse "^1.1.2" -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - css-tree@^1.1.2: version "1.1.3" - resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== dependencies: mdn-data "2.0.14" source-map "^0.6.1" +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + css-what@^3.2.1: version "3.4.2" - resolved "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== cssesc@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== cssnano-preset-default@^4.0.8: version "4.0.8" - resolved "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz" - integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ== dependencies: css-declaration-sorter "^4.0.1" cssnano-util-raw-cache "^4.0.1" @@ -2365,30 +2008,20 @@ cssnano-preset-default@^4.0.8: cssnano-util-get-arguments@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz" - integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= cssnano-util-get-match@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz" - integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= cssnano-util-raw-cache@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz" - integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== dependencies: postcss "^7.0.0" cssnano-util-same-parent@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz" - integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== cssnano@^4.1.10, cssnano@^4.1.11: version "4.1.11" - resolved "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz" - integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g== dependencies: cosmiconfig "^5.0.0" cssnano-preset-default "^4.0.8" @@ -2397,51 +2030,35 @@ cssnano@^4.1.10, cssnano@^4.1.11: csso@^4.0.2: version "4.2.0" - resolved "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== dependencies: css-tree "^1.1.2" -cssom@0.3.x, cssom@^0.3.4: +cssom@^0.3.4, cssom@0.3.x: version "0.3.8" - resolved "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== cssstyle@^1.1.1: version "1.4.0" - resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz" - integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== dependencies: cssom "0.3.x" cssstyle@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-3.0.0.tgz#17ca9c87d26eac764bb8cfd00583cff21ce0277a" - integrity sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg== dependencies: rrweb-cssom "^0.6.0" csstype@^2.6.8: version "2.6.17" - resolved "https://registry.npmjs.org/csstype/-/csstype-2.6.17.tgz" - integrity sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A== -"d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3, d3-array@^3.2.0: +d3-array@^3.2.0, "d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3: version "3.2.4" - resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.4.tgz#15fec33b237f97ac5d7c986dc77da273a8ed0bb5" - integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg== dependencies: internmap "1 - 2" d3-axis@3: version "3.0.0" - resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-3.0.0.tgz#c42a4a13e8131d637b745fc2973824cfeaf93322" - integrity sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw== d3-brush@3: version "3.0.0" - resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-3.0.0.tgz#6f767c4ed8dcb79de7ede3e1c0f89e63ef64d31c" - integrity sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ== dependencies: d3-dispatch "1 - 3" d3-drag "2 - 3" @@ -2451,47 +2068,33 @@ d3-brush@3: d3-chord@3: version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-3.0.1.tgz#d156d61f485fce8327e6abf339cb41d8cbba6966" - integrity sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g== dependencies: d3-path "1 - 3" "d3-color@1 - 3", d3-color@3: version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2" - integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== d3-contour@4: version "4.0.2" - resolved "https://registry.yarnpkg.com/d3-contour/-/d3-contour-4.0.2.tgz#bb92063bc8c5663acb2422f99c73cbb6c6ae3bcc" - integrity sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA== dependencies: d3-array "^3.2.0" d3-delaunay@6: version "6.0.4" - resolved "https://registry.yarnpkg.com/d3-delaunay/-/d3-delaunay-6.0.4.tgz#98169038733a0a5babbeda55054f795bb9e4a58b" - integrity sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A== dependencies: delaunator "5" "d3-dispatch@1 - 3", d3-dispatch@3: version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz#5fc75284e9c2375c36c839411a0cf550cbfc4d5e" - integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg== "d3-drag@2 - 3", d3-drag@3: version "3.0.0" - resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-3.0.0.tgz#994aae9cd23c719f53b5e10e3a0a6108c69607ba" - integrity sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg== dependencies: d3-dispatch "1 - 3" d3-selection "3" "d3-dsv@1 - 3", d3-dsv@3: version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-3.0.1.tgz#c63af978f4d6a0d084a52a673922be2160789b73" - integrity sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q== dependencies: commander "7" iconv-lite "0.6" @@ -2499,20 +2102,14 @@ d3-delaunay@6: "d3-ease@1 - 3", d3-ease@3: version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-3.0.1.tgz#9658ac38a2140d59d346160f1f6c30fda0bd12f4" - integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w== d3-fetch@3: version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-fetch/-/d3-fetch-3.0.1.tgz#83141bff9856a0edb5e38de89cdcfe63d0a60a22" - integrity sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw== dependencies: d3-dsv "1 - 3" d3-force@3: version "3.0.0" - resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-3.0.0.tgz#3e2ba1a61e70888fe3d9194e30d6d14eece155c4" - integrity sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg== dependencies: d3-dispatch "1 - 3" d3-quadtree "1 - 3" @@ -2520,60 +2117,40 @@ d3-force@3: "d3-format@1 - 3", d3-format@3: version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641" - integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== d3-geo@3: version "3.1.1" - resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-3.1.1.tgz#6027cf51246f9b2ebd64f99e01dc7c3364033a4d" - integrity sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q== dependencies: d3-array "2.5.0 - 3" d3-hierarchy@3: version "3.1.2" - resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz#b01cd42c1eed3d46db77a5966cf726f8c09160c6" - integrity sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA== "d3-interpolate@1 - 3", "d3-interpolate@1.2.0 - 3", d3-interpolate@3: version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d" - integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== dependencies: d3-color "1 - 3" -"d3-path@1 - 3", d3-path@3, d3-path@^3.1.0: +d3-path@^3.1.0, "d3-path@1 - 3", d3-path@3: version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-3.1.0.tgz#22df939032fb5a71ae8b1800d61ddb7851c42526" - integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ== d3-polygon@3: version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-3.0.1.tgz#0b45d3dd1c48a29c8e057e6135693ec80bf16398" - integrity sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg== "d3-quadtree@1 - 3", d3-quadtree@3: version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-3.0.1.tgz#6dca3e8be2b393c9a9d514dabbd80a92deef1a4f" - integrity sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw== d3-random@3: version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-3.0.1.tgz#d4926378d333d9c0bfd1e6fa0194d30aebaa20f4" - integrity sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ== d3-scale-chromatic@3: version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz#34c39da298b23c20e02f1a4b239bd0f22e7f1314" - integrity sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ== dependencies: d3-color "1 - 3" d3-interpolate "1 - 3" d3-scale@4: version "4.0.2" - resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396" - integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ== dependencies: d3-array "2.10.0 - 3" d3-format "1 - 3" @@ -2583,39 +2160,27 @@ d3-scale@4: "d3-selection@2 - 3", d3-selection@3: version "3.0.0" - resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-3.0.0.tgz#c25338207efa72cc5b9bd1458a1a41901f1e1b31" - integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ== d3-shape@3: version "3.2.0" - resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-3.2.0.tgz#a1a839cbd9ba45f28674c69d7f855bcf91dfc6a5" - integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA== dependencies: d3-path "^3.1.0" "d3-time-format@2 - 4", d3-time-format@4: version "4.1.0" - resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a" - integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg== dependencies: d3-time "1 - 3" "d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@3: version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-3.1.0.tgz#9310db56e992e3c0175e1ef385e545e48a9bb5c7" - integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q== dependencies: d3-array "2 - 3" "d3-timer@1 - 3", d3-timer@3: version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" - integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== "d3-transition@2 - 3", d3-transition@3: version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-3.0.1.tgz#6869fdde1448868077fdd5989200cb61b2a1645f" - integrity sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w== dependencies: d3-color "1 - 3" d3-dispatch "1 - 3" @@ -2625,8 +2190,6 @@ d3-shape@3: d3-zoom@3: version "3.0.0" - resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-3.0.0.tgz#d13f4165c73217ffeaa54295cd6969b3e7aee8f3" - integrity sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw== dependencies: d3-dispatch "1 - 3" d3-drag "2 - 3" @@ -2636,8 +2199,6 @@ d3-zoom@3: d3@^7.9.0: version "7.9.0" - resolved "https://registry.yarnpkg.com/d3/-/d3-7.9.0.tgz#579e7acb3d749caf8860bd1741ae8d371070cd5d" - integrity sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA== dependencies: d3-array "3" d3-axis "3" @@ -2672,15 +2233,11 @@ d3@^7.9.0: dashdash@^1.12.0: version "1.14.1" - resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= dependencies: assert-plus "^1.0.0" data-urls@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz" - integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== dependencies: abab "^2.0.0" whatwg-mimetype "^2.2.0" @@ -2688,8 +2245,6 @@ data-urls@^1.1.0: data-urls@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-4.0.0.tgz#333a454eca6f9a5b7b0f1013ff89074c3f522dd4" - integrity sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g== dependencies: abab "^2.0.6" whatwg-mimetype "^3.0.0" @@ -2697,163 +2252,116 @@ data-urls@^4.0.0: date-fns@^2.0.1: version "2.22.1" - resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.22.1.tgz" - integrity sha512-yUFPQjrxEmIsMqlHhAhmxkuH769baF21Kk+nZwZGyrMoyLA+LugaQtC0+Tqf9CBUUULWwUJt6Q5ySI3LJDDCGg== date-time@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz" - integrity sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg== dependencies: time-zone "^1.0.0" -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: +debug@^2.2.0: version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== +debug@^2.3.3: + version "2.6.9" dependencies: - ms "2.1.2" + ms "2.0.0" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@4: version "4.3.1" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" debug@^4.3.2: version "4.3.2" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: ms "2.1.2" +debug@2.6.9: + version "2.6.9" + dependencies: + ms "2.0.0" + decamelize@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= decimal.js@^10.4.3: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + version "10.5.0" decode-uri-component@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= decompress-response@^3.3.0: version "3.3.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= dependencies: mimic-response "^1.0.0" decompress-response@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: mimic-response "^3.1.0" deep-extend@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-is@~0.1.3: version "0.1.3" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= defaults@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= dependencies: clone "^1.0.2" defer-to-connect@^1.0.1: version "1.1.3" - resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== defer-to-connect@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== define-properties@^1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: object-keys "^1.0.12" define-property@^0.2.5: version "0.2.5" - resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= dependencies: is-descriptor "^1.0.0" define-property@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== dependencies: is-descriptor "^1.0.2" isobject "^3.0.1" delaunator@5: version "5.0.1" - resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-5.0.1.tgz#39032b08053923e924d6094fe2cde1a99cc51278" - integrity sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw== dependencies: robust-predicates "^3.0.2" delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= des.js@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" detect-libc@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= detect-node@^2.0.4: version "2.1.0" - resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== diffie-hellman@^5.0.0: version "5.0.3" - resolved "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== dependencies: bn.js "^4.1.0" miller-rabin "^4.0.0" @@ -2861,8 +2369,6 @@ diffie-hellman@^5.0.0: dir-compare@^2.4.0: version "2.4.0" - resolved "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz" - integrity sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA== dependencies: buffer-equal "1.0.0" colors "1.0.3" @@ -2871,15 +2377,11 @@ dir-compare@^2.4.0: dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" dmg-builder@22.11.7: version "22.11.7" - resolved "https://registry.npmjs.org/dmg-builder/-/dmg-builder-22.11.7.tgz" - integrity sha512-+I+XfP2DODHB6PwFANgpH/WMzzCA5r5XoMvbFCIYjQjJpXlO0XnqQaamzFl2vh/Wz/Qt0d0lJMgRy8gKR3MGdQ== dependencies: app-builder-lib "22.11.7" builder-util "22.11.7" @@ -2890,92 +2392,56 @@ dmg-builder@22.11.7: optionalDependencies: dmg-license "^1.0.9" -dmg-license@^1.0.9: - version "1.0.11" - resolved "https://registry.yarnpkg.com/dmg-license/-/dmg-license-1.0.11.tgz#7b3bc3745d1b52be7506b4ee80cb61df6e4cd79a" - integrity sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q== - 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" - -dom-serializer@0: - version "0.2.2" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== +dom-serializer@^1.0.1: + version "1.3.2" dependencies: domelementtype "^2.0.1" + domhandler "^4.2.0" entities "^2.0.0" -dom-serializer@^1.0.1: - version "1.3.2" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz" - integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== +dom-serializer@0: + version "0.2.2" dependencies: domelementtype "^2.0.1" - domhandler "^4.2.0" entities "^2.0.0" domain-browser@^3.5.0: version "3.5.0" - resolved "https://registry.npmjs.org/domain-browser/-/domain-browser-3.5.0.tgz" - integrity sha512-zrzUu6auyZWRexjCEPJnfWc30Hupxh2lJZOJAF3qa2bCuD4O/55t0FvQt3ZMhEw++gjNkwdkOVZh8yA32w/Vfw== - -domelementtype@1: - version "1.3.1" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz" - integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + +domelementtype@1: + version "1.3.1" domexception@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz" - integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== dependencies: webidl-conversions "^4.0.2" domexception@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" - integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== dependencies: webidl-conversions "^7.0.0" domhandler@^3.3.0: version "3.3.0" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz" - integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== dependencies: domelementtype "^2.0.1" domhandler@^4.0.0, domhandler@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz" - integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== dependencies: domelementtype "^2.2.0" domutils@^1.7.0: version "1.7.0" - resolved "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== dependencies: dom-serializer "0" domelementtype "1" domutils@^2.4.2, domutils@^2.5.2: version "2.7.0" - resolved "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz" - integrity sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg== dependencies: dom-serializer "^1.0.1" domelementtype "^2.2.0" @@ -2983,60 +2449,47 @@ domutils@^2.4.2, domutils@^2.5.2: dot-prop@^5.2.0: version "5.3.0" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== dependencies: is-obj "^2.0.0" dotenv-expand@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz" - integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== dotenv@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz" - integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== dotenv@^9.0.2: version "9.0.2" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz" - integrity sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg== + +dunder-proto@^1.0.1: + version "1.0.1" + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" duplexer3@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= ecc-jsbn@~0.1.1: version "0.1.2" - resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= dependencies: jsbn "~0.1.0" safer-buffer "^2.1.0" ee-first@1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= ejs@^2.6.1: version "2.7.4" - resolved "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz" - integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== ejs@^3.1.6: version "3.1.6" - resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz" - integrity sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw== dependencies: jake "^10.6.1" electron-builder@^22.11.7: version "22.11.7" - resolved "https://registry.npmjs.org/electron-builder/-/electron-builder-22.11.7.tgz" - integrity sha512-yQExSLt7Hbz/P8lLkZDdE/OnJJ7NCX+uiQcV+XIH0TeEZcD87ZnSqBBzGUN5akySU4BXXlrVZKeUsXACWrm5Kw== dependencies: "@types/yargs" "^16.0.2" app-builder-lib "22.11.7" @@ -3053,26 +2506,18 @@ electron-builder@^22.11.7: electron-debug@^3.2.0: version "3.2.0" - resolved "https://registry.npmjs.org/electron-debug/-/electron-debug-3.2.0.tgz" - integrity sha512-7xZh+LfUvJ52M9rn6N+tPuDw6oRAjxUj9SoxAZfJ0hVCXhZCsdkrSt7TgXOiWiEOBgEV8qwUIO/ScxllsPS7ow== dependencies: electron-is-dev "^1.1.0" electron-localshortcut "^3.1.0" electron-is-accelerator@^0.1.0: version "0.1.2" - resolved "https://registry.npmjs.org/electron-is-accelerator/-/electron-is-accelerator-0.1.2.tgz" - integrity sha1-UJ5RDCala1Xhf4Y6SwThEYRqsns= electron-is-dev@^1.1.0, electron-is-dev@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-1.2.0.tgz" - integrity sha512-R1oD5gMBPS7PVU8gJwH6CtT0e6VSoD0+SzSnYpNm+dBkcijgA+K7VAMHDfnRq/lkKPZArpzplTW6jfiMYosdzw== electron-localshortcut@^3.1.0: version "3.2.1" - resolved "https://registry.npmjs.org/electron-localshortcut/-/electron-localshortcut-3.2.1.tgz" - integrity sha512-DWvhKv36GsdXKnaFFhEiK8kZZA+24/yFLgtTwJJHc7AFgDjNRIBJZ/jq62Y/dWv9E4ypYwrVWN2bVrCYw1uv7Q== dependencies: debug "^4.0.1" electron-is-accelerator "^0.1.0" @@ -3081,8 +2526,6 @@ electron-localshortcut@^3.1.0: electron-publish@22.11.7: version "22.11.7" - resolved "https://registry.npmjs.org/electron-publish/-/electron-publish-22.11.7.tgz" - integrity sha512-A4EhRRNBVz4SPzUlBrPO6BmuyDeI0pyprggPAV9rQ+SDVSnSB/WKPot9JwWMyArkGj3AUUTMNVT6hwZhMvhfqw== dependencies: "@types/fs-extra" "^9.0.11" builder-util "22.11.7" @@ -3094,8 +2537,6 @@ electron-publish@22.11.7: electron-reloader@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/electron-reloader/-/electron-reloader-1.2.1.tgz" - integrity sha512-S7rcXXImlGXsEAGwB8tJ/nLrvAFzO95IS0Ux27A8XjRrDRFKj46O2aahaZ9D908FIj+BzywgNCofHQO5EhwioA== dependencies: chalk "^4.1.0" chokidar "^3.5.0" @@ -3105,13 +2546,9 @@ electron-reloader@^1.2.1: electron-to-chromium@^1.3.723: version "1.3.756" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.756.tgz" - integrity sha512-WsmJym1TMeHVndjPjczTFbnRR/c4sbzg8fBFtuhlb2Sru3i/S1VGpzDSrv/It8ctMU2bj8G7g7/O3FzYMGw6eA== electron@^26.2.2: version "26.6.10" - resolved "https://registry.npmjs.org/electron/-/electron-26.6.10.tgz" - integrity sha512-pV2SD0RXzAiNRb/2yZrsVmVkBOMrf+DVsPulIgRjlL0+My9BL5spFuhHVMQO9yHl9tFpWtuRpQv0ofM/i9P8xg== dependencies: "@electron/get" "^2.0.0" "@types/node" "^18.11.18" @@ -3119,8 +2556,6 @@ electron@^26.2.2: elliptic@^6.5.3: version "6.5.4" - resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== dependencies: bn.js "^4.11.9" brorand "^1.1.0" @@ -3132,23 +2567,15 @@ elliptic@^6.5.3: emoji-regex@^7.0.1: version "7.0.3" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emojis-list@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== emphasize@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/emphasize/-/emphasize-4.2.0.tgz" - integrity sha512-yGKvcFUHlBsUPwlxTlzKLR8+zhpbitkFOMCUxN8fTJng9bdH3WNzUGkhdaGdjndSUgqmMPBN7umfwnUdLz5Axg== dependencies: chalk "^4.0.0" highlight.js "~10.4.0" @@ -3156,42 +2583,28 @@ emphasize@^4.2.0: encodeurl@~1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= end-of-stream@^1.1.0: 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== dependencies: once "^1.4.0" entities@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -entities@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== +entities@^6.0.0: + version "6.0.1" env-paths@^2.2.0: version "2.2.1" - resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" es-abstract@^1.17.2, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: version "1.18.3" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz" - integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" @@ -3210,10 +2623,27 @@ es-abstract@^1.17.2, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es- string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.1" +es-define-property@^1.0.1: + version "1.0.1" + +es-errors@^1.3.0: + version "1.3.0" + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + es-to-primitive@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" is-date-object "^1.0.1" @@ -3221,43 +2651,27 @@ es-to-primitive@^1.2.1: es6-error@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz" - integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== es6-object-assign@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz" - integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw= escalade@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-goat@^2.0.0: version "2.1.1" - resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== escape-html@~1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escodegen@^1.11.0: version "1.14.3" - resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== dependencies: esprima "^4.0.1" estraverse "^4.2.0" @@ -3268,46 +2682,30 @@ escodegen@^1.11.0: esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== estraverse@^4.2.0: version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estree-walker@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== eventemitter3@^4.0.0: version "4.0.7" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== events@^3.1.0: version "3.3.0" - resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== dependencies: md5.js "^1.3.4" safe-buffer "^5.1.1" expand-brackets@^2.1.4: version "2.1.4" - resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -3319,28 +2717,26 @@ expand-brackets@^2.1.4: extend-shallow@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= dependencies: is-extendable "^0.1.0" -extend-shallow@^3.0.0, extend-shallow@^3.0.2: +extend-shallow@^3.0.0: + version "3.0.2" + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend-shallow@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" extend@~3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== extglob@^2.0.4: version "2.0.4" - resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== dependencies: array-unique "^0.3.2" define-property "^1.0.0" @@ -3353,8 +2749,6 @@ extglob@^2.0.4: extract-zip@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz" - integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== dependencies: debug "^4.1.1" get-stream "^5.1.0" @@ -3362,108 +2756,76 @@ extract-zip@^2.0.1: optionalDependencies: "@types/yauzl" "^2.9.1" -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - extsprintf@^1.2.0: version "1.4.0" - resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.0.tgz" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +extsprintf@1.3.0: + version "1.3.0" fast-deep-equal@^3.1.1: 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== -fast-glob@3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.1.tgz" - integrity sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g== +fast-glob@^3.1.1: + version "3.2.5" dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" glob-parent "^5.1.0" merge2 "^1.3.0" micromatch "^4.0.2" + picomatch "^2.2.1" -fast-glob@^3.1.1: - version "3.2.5" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz" - integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== +fast-glob@3.1.1: + version "3.1.1" dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" glob-parent "^5.1.0" merge2 "^1.3.0" micromatch "^4.0.2" - picomatch "^2.2.1" fast-json-stable-stringify@^2.0.0: 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== fast-levenshtein@~2.0.6: version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fast-url-parser@1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz" - integrity sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0= dependencies: punycode "^1.3.2" fastest-levenshtein@^1.0.8: version "1.0.12" - resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz" - integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== fastparse@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz" - integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== fastq@^1.6.0: version "1.11.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz" - integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== dependencies: reusify "^1.0.4" fault@^1.0.0: version "1.0.4" - resolved "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz" - integrity sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA== dependencies: format "^0.2.0" fd-slicer@~1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" - integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= dependencies: pend "~1.2.0" filelist@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz" - integrity sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ== dependencies: minimatch "^3.0.4" filesize@^6.1.0: version "6.3.0" - resolved "https://registry.npmjs.org/filesize/-/filesize-6.3.0.tgz" - integrity sha512-ytx0ruGpDHKWVoiui6+BY/QMNngtDQ/pJaFwfBpQif0J63+E8DLdFyqS3NkKQn7vIruUEpoGD9JUJSg7Kp+I0g== fill-range@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" @@ -3472,15 +2834,11 @@ fill-range@^4.0.0: fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" finalhandler@1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== dependencies: debug "2.6.9" encodeurl "~1.0.2" @@ -3492,52 +2850,38 @@ finalhandler@1.1.2: find-up@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: locate-path "^3.0.0" find-up@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" path-exists "^4.0.0" follow-redirects@^1.0.0, follow-redirects@^1.10.0: version "1.14.1" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz" - integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== for-in@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= foreach@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz" - integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= forever-agent@~0.6.1: version "0.6.1" - resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + version "4.0.3" dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" mime-types "^2.1.12" form-data@~2.3.2: version "2.3.3" - resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== dependencies: asynckit "^0.4.0" combined-stream "^1.0.6" @@ -3545,20 +2889,14 @@ form-data@~2.3.2: format@^0.2.0: version "0.2.2" - resolved "https://registry.npmjs.org/format/-/format-0.2.2.tgz" - integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= fragment-cache@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= dependencies: map-cache "^0.2.2" fs-extra@^10.0.0: version "10.0.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz" - integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -3566,17 +2904,21 @@ fs-extra@^10.0.0: fs-extra@^8.1.0: version "8.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: graceful-fs "^4.2.0" jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.0, fs-extra@^9.0.1: +fs-extra@^9.0.0: + version "9.1.0" + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^9.0.1: version "9.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: at-least-node "^1.0.0" graceful-fs "^4.2.0" @@ -3585,87 +2927,69 @@ fs-extra@^9.0.0, fs-extra@^9.0.1: fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.1, function-bind@^1.1.2: + version "1.1.2" generic-names@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz" - integrity sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ== dependencies: loader-utils "^1.1.0" gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.2.6: + version "1.3.0" dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" get-port@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz" - integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== + +get-proto@^1.0.1: + version "1.0.1" + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" get-stream@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" get-stream@^5.1.0: version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" - resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= getpass@^0.1.1: version "0.1.7" - resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= dependencies: assert-plus "^1.0.0" glob-parent@^5.1.0, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.7" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -3676,8 +3000,6 @@ glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: global-agent@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz" - integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q== dependencies: boolean "^3.0.1" es6-error "^4.1.1" @@ -3688,34 +3010,24 @@ global-agent@^3.0.0: global-dirs@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz" - integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== dependencies: ini "2.0.0" globals@^11.1.0: version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.2.0: version "13.9.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz" - integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA== dependencies: type-fest "^0.20.2" globalthis@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz" - integrity sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ== dependencies: define-properties "^1.1.3" globby@^11.0.3: version "11.0.4" - resolved "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz" - integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" @@ -3724,10 +3036,11 @@ globby@^11.0.3: merge2 "^1.3.0" slash "^3.0.0" +gopd@^1.2.0: + version "1.2.0" + got@^11.8.5: version "11.8.6" - resolved "https://registry.npmjs.org/got/-/got-11.8.6.tgz" - integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== dependencies: "@sindresorhus/is" "^4.0.0" "@szmarczak/http-timer" "^4.0.5" @@ -3743,8 +3056,6 @@ got@^11.8.5: got@^9.6.0: version "9.6.0" - resolved "https://registry.npmjs.org/got/-/got-9.6.0.tgz" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== dependencies: "@sindresorhus/is" "^0.14.0" "@szmarczak/http-timer" "^1.1.2" @@ -3760,63 +3071,46 @@ got@^9.6.0: graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.6" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== "graceful-readlink@>= 1.0.0": version "1.0.1" - resolved "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" - integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= har-schema@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= har-validator@~5.1.3: version "5.1.5" - resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== dependencies: ajv "^6.12.3" har-schema "^2.0.0" has-ansi@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= dependencies: ansi-regex "^2.0.0" has-bigints@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== has-flag@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.1, has-symbols@^1.0.2: +has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + +has-tostringtag@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + dependencies: + has-symbols "^1.0.3" has-value@^0.3.1: version "0.3.1" - resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -3824,8 +3118,6 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -3833,33 +3125,23 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= has-values@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= dependencies: is-number "^3.0.0" kind-of "^4.0.0" has-yarn@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== has@^1.0.0, has@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" hash-base@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: inherits "^2.0.4" readable-stream "^3.6.0" @@ -3867,31 +3149,26 @@ hash-base@^3.0.0: hash-sum@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz" - integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" - resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== dependencies: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hasown@^2.0.2: + version "2.0.2" + dependencies: + function-bind "^1.1.2" + hex-color-regex@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz" - integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== highlight.js@~10.4.0: version "10.4.1" - resolved "https://registry.npmjs.org/highlight.js/-/highlight.js-10.4.1.tgz" - integrity sha512-yR5lWvNz7c85OhVAEAeFhVCc/GV4C30Fjzc/rCP0aCWzc1UUOPUk55dK/qdwTZHBvMZo+eZ2jpk62ndX/xMFlg== hmac-drbg@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" @@ -3899,49 +3176,33 @@ hmac-drbg@^1.0.1: hosted-git-info@^2.1.4: version "2.8.9" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== hosted-git-info@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz" - integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== dependencies: lru-cache "^6.0.0" hsl-regex@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz" - integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= hsla-regex@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz" - integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= html-encoding-sniffer@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz" - integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== dependencies: whatwg-encoding "^1.0.1" html-encoding-sniffer@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" - integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== dependencies: whatwg-encoding "^2.0.0" html-tags@^1.0.0: version "1.2.0" - resolved "https://registry.npmjs.org/html-tags/-/html-tags-1.2.0.tgz" - integrity sha1-x43mW1Zjqll5id0rerSSANfk25g= htmlnano@^0.2.2: version "0.2.9" - resolved "https://registry.npmjs.org/htmlnano/-/htmlnano-0.2.9.tgz" - integrity sha512-jWTtP3dCd7R8x/tt9DK3pvpcQd7HDMcRPUqPxr/i9989q2k5RHIhmlRDFeyQ/LSd8IKrteG8Ce5g0Ig4eGIipg== dependencies: cssnano "^4.1.11" posthtml "^0.15.1" @@ -3955,8 +3216,6 @@ htmlnano@^0.2.2: htmlparser2@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz" - integrity sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ== dependencies: domelementtype "^2.0.1" domhandler "^3.3.0" @@ -3965,8 +3224,6 @@ htmlparser2@^5.0.1: htmlparser2@^6.0.0: version "6.1.0" - resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== dependencies: domelementtype "^2.0.1" domhandler "^4.0.0" @@ -3975,13 +3232,9 @@ htmlparser2@^6.0.0: http-cache-semantics@^4.0.0: 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== http-proxy-agent@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== dependencies: "@tootallnate/once" "2" agent-base "6" @@ -3989,8 +3242,6 @@ http-proxy-agent@^5.0.0: http-proxy-middleware@^1.0.0: version "1.3.1" - resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz" - integrity sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg== dependencies: "@types/http-proxy" "^1.17.5" http-proxy "^1.18.1" @@ -4000,8 +3251,6 @@ http-proxy-middleware@^1.0.0: http-proxy@^1.18.1: version "1.18.1" - resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: eventemitter3 "^4.0.0" follow-redirects "^1.0.0" @@ -4009,8 +3258,6 @@ http-proxy@^1.18.1: http-signature@~1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" @@ -4018,218 +3265,140 @@ http-signature@~1.2.0: http2-wrapper@^1.0.0-beta.5.2: version "1.0.3" - resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== dependencies: quick-lru "^5.1.1" resolve-alpn "^1.0.0" https-browserify@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= https-proxy-agent@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" debug "4" -iconv-corefoundation@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz#31065e6ab2c9272154c8b0821151e2c88f1b002a" - integrity sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ== +iconv-lite@^0.6.2, iconv-lite@0.6, iconv-lite@0.6.3: + version "0.6.3" dependencies: - cli-truncate "^2.1.0" - node-addon-api "^1.6.3" + safer-buffer ">= 2.1.2 < 3.0.0" iconv-lite@0.4.24: version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@0.6, iconv-lite@0.6.3, iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -icss-replace-symbols@1.1.0, icss-replace-symbols@^1.1.0: +icss-replace-symbols@^1.1.0, icss-replace-symbols@1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz" - integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= icss-utils@^4.0.0, icss-utils@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz" - integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== dependencies: postcss "^7.0.14" icss-utils@^5.0.0: version "5.1.0" - resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== ieee754@^1.1.13: version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== iferr@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/iferr/-/iferr-1.0.2.tgz" - integrity sha512-9AfeLfji44r5TKInjhz3W9DyZI1zR1JAf2hVBMGhddAKPqBsupb89jGfbCTHIGZd6fGZl9WlHdn4AObygyMKwg== ignore@^5.1.4: version "5.1.8" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== import-fresh@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= dependencies: caller-path "^2.0.0" resolve-from "^3.0.0" import-lazy@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= indexes-of@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= inflight@^1.0.4: version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2: version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== ini@~1.3.0: version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +ini@2.0.0: + version "2.0.0" "internmap@1 - 2": version "2.0.3" - resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" - integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== is-absolute-url@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz" - integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= is-absolute-url@^3.0.1: version "3.0.3" - resolved "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz" - integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== is-accessor-descriptor@^0.1.6: version "0.1.6" - resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= dependencies: kind-of "^3.0.2" is-accessor-descriptor@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== dependencies: kind-of "^6.0.0" is-arguments@^1.0.4: version "1.1.0" - resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz" - integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== dependencies: call-bind "^1.0.0" is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-arrayish@^0.3.1: version "0.3.2" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-bigint@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz" - integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-boolean-object@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz" - integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== dependencies: call-bind "^1.0.2" is-buffer@^1.1.5: version "1.1.6" - resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-callable@^1.1.4, is-callable@^1.2.3: version "1.2.3" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== is-ci@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== dependencies: ci-info "^2.0.0" is-ci@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz" - integrity sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ== dependencies: ci-info "^3.1.1" is-color-stop@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz" - integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= dependencies: css-color-names "^0.0.4" hex-color-regex "^1.1.0" @@ -4240,34 +3409,24 @@ is-color-stop@^1.0.0: is-core-module@^2.2.0: version "2.4.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz" - integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== dependencies: has "^1.0.3" is-data-descriptor@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= dependencies: kind-of "^3.0.2" is-data-descriptor@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: kind-of "^6.0.0" is-date-object@^1.0.1: version "1.0.4" - resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz" - integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== is-descriptor@^0.1.0: version "0.1.6" - resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== dependencies: is-accessor-descriptor "^0.1.6" is-data-descriptor "^0.1.4" @@ -4275,8 +3434,6 @@ is-descriptor@^0.1.0: is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: is-accessor-descriptor "^1.0.0" is-data-descriptor "^1.0.0" @@ -4284,164 +3441,108 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-directory@^0.3.1: version "0.3.1" - resolved "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= is-docker@^2.0.0: version "2.2.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" - resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= is-extendable@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== dependencies: is-plain-object "^2.0.4" is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-fullwidth-code-point@^2.0.0: 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= is-fullwidth-code-point@^3.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== is-generator-function@^1.0.7: version "1.0.9" - resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz" - integrity sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A== is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" is-html@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/is-html/-/is-html-1.1.0.tgz" - integrity sha1-4E8cGNOUhRETlvmgJz6rUa8hhGQ= dependencies: html-tags "^1.0.0" is-installed-globally@^0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz" - integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== dependencies: global-dirs "^3.0.0" is-path-inside "^3.0.2" is-interactive@^1.0.0: 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== is-nan@^1.2.1: version "1.3.2" - resolved "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz" - integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== dependencies: call-bind "^1.0.0" define-properties "^1.1.3" is-negative-zero@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== is-npm@^5.0.0: 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== is-number-object@^1.0.4: version "1.0.5" - resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz" - integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== is-number@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: kind-of "^3.0.2" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-obj@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== is-path-inside@^3.0.2: 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== is-plain-obj@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz" - integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-potential-custom-element-name@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== is-regex@^1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz" - integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== dependencies: call-bind "^1.0.2" has-symbols "^1.0.2" is-resolvable@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== is-string@^1.0.5, is-string@^1.0.6: version "1.0.6" - resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz" - integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" - resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: has-symbols "^1.0.2" is-typed-array@^1.1.3: version "1.1.5" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz" - integrity sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug== dependencies: available-typed-arrays "^1.0.2" call-bind "^1.0.2" @@ -4451,72 +3552,46 @@ is-typed-array@^1.1.3: is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== is-url@^1.2.2: version "1.2.4" - resolved "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz" - integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== is-windows@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-wsl@^2.1.1: 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" is-yarn-global@^0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== -isarray@1.0.0, isarray@~1.0.0: +isarray@~1.0.0, isarray@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= isbinaryfile@^4.0.8: version "4.0.8" - resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz" - integrity sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= isobject@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= isstream@~0.1.2: version "0.1.2" - resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= jake@^10.6.1: version "10.8.2" - resolved "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz" - integrity sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A== dependencies: async "0.9.x" chalk "^2.4.2" @@ -4525,8 +3600,6 @@ jake@^10.6.1: joi@^17.3.0: version "17.4.0" - resolved "https://registry.npmjs.org/joi/-/joi-17.4.0.tgz" - integrity sha512-F4WiW2xaV6wc1jxete70Rw4V/VuMd6IN+a5ilZsxG4uYtUXWu2kq9W5P2dz30e7Gmw8RCbY/u/uk+dMPma9tAg== dependencies: "@hapi/hoek" "^9.0.0" "@hapi/topo" "^5.0.0" @@ -4535,70 +3608,29 @@ joi@^17.3.0: "@sideway/pinpoint" "^2.0.0" js-interpreter@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/js-interpreter/-/js-interpreter-5.1.1.tgz#dbe0c01c4b986c1b6c68ed90e39b9b9fb62b285b" - integrity sha512-LsN3y0ja1UUUOmxxaK2ikEVLqdR1hZjixNg5UDWtFao2BxjM6AWVah45SpRtntPiQdhWmpfl/rHKA32JqZ7RjA== + version "5.2.1" dependencies: minimist "^1.2.8" js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" jsbn@~0.1.0: version "0.1.1" - resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsdom@22.1.0: - version "22.1.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-22.1.0.tgz#0fca6d1a37fbeb7f4aac93d1090d782c56b611c8" - integrity sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw== - dependencies: - abab "^2.0.6" - cssstyle "^3.0.0" - data-urls "^4.0.0" - decimal.js "^10.4.3" - domexception "^4.0.0" - form-data "^4.0.0" - html-encoding-sniffer "^3.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.1" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.4" - parse5 "^7.1.2" - rrweb-cssom "^0.6.0" - saxes "^6.0.0" - symbol-tree "^3.2.4" - tough-cookie "^4.1.2" - w3c-xmlserializer "^4.0.0" - webidl-conversions "^7.0.0" - whatwg-encoding "^2.0.0" - whatwg-mimetype "^3.0.0" - whatwg-url "^12.0.1" - ws "^8.13.0" - xml-name-validator "^4.0.0" jsdom@^14.1.0: version "14.1.0" - resolved "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz" - integrity sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng== dependencies: abab "^2.0.0" acorn "^6.0.4" @@ -4627,71 +3659,84 @@ jsdom@^14.1.0: ws "^6.1.2" xml-name-validator "^3.0.0" +jsdom@22.1.0: + version "22.1.0" + dependencies: + abab "^2.0.6" + cssstyle "^3.0.0" + data-urls "^4.0.0" + decimal.js "^10.4.3" + domexception "^4.0.0" + form-data "^4.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.4" + parse5 "^7.1.2" + rrweb-cssom "^0.6.0" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^4.1.2" + w3c-xmlserializer "^4.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^12.0.1" + ws "^8.13.0" + xml-name-validator "^4.0.0" + jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== json-buffer@3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= json-buffer@3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-parse-better-errors@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== json-schema-traverse@^0.4.1: 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== json-schema@0.2.3: version "0.2.3" - resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= json-source-map@^0.6.1: version "0.6.1" - resolved "https://registry.npmjs.org/json-source-map/-/json-source-map-0.6.1.tgz" - integrity sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg== json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= json5@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== dependencies: minimist "^1.2.0" -json5@^2.1.0, json5@^2.1.2, json5@^2.2.0: +json5@^2.1.0: + version "2.2.0" + dependencies: + minimist "^1.2.5" + +json5@^2.1.2: + version "2.2.0" + dependencies: + minimist "^1.2.5" + +json5@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== dependencies: minimist "^1.2.5" jsonfile@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= optionalDependencies: graceful-fs "^4.1.6" jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" optionalDependencies: @@ -4699,8 +3744,6 @@ jsonfile@^6.0.1: jsprim@^1.2.2: version "1.4.1" - resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= dependencies: assert-plus "1.0.0" extsprintf "1.3.0" @@ -4709,76 +3752,55 @@ jsprim@^1.2.2: keyboardevent-from-electron-accelerator@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/keyboardevent-from-electron-accelerator/-/keyboardevent-from-electron-accelerator-2.0.0.tgz" - integrity sha512-iQcmNA0M4ETMNi0kG/q0h/43wZk7rMeKYrXP7sqKIJbHkTU8Koowgzv+ieR/vWJbOwxx5nDC3UnudZ0aLSu4VA== keyboardevents-areequal@^0.2.1: version "0.2.2" - resolved "https://registry.npmjs.org/keyboardevents-areequal/-/keyboardevents-areequal-0.2.2.tgz" - integrity sha512-Nv+Kr33T0mEjxR500q+I6IWisOQ0lK1GGOncV0kWE6n4KFmpcu7RUX5/2B0EUtX51Cb0HjZ9VJsSY3u4cBa0kw== keyv@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== dependencies: json-buffer "3.0.0" keyv@^4.0.0: version "4.5.4" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= dependencies: is-buffer "^1.1.5" kind-of@^5.0.0: version "5.1.0" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== -kind-of@^6.0.0, kind-of@^6.0.2: +kind-of@^6.0.0: + version "6.0.3" + +kind-of@^6.0.2: version "6.0.3" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== latest-version@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== dependencies: package-json "^6.3.0" lazy-val@^1.0.4, lazy-val@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz" - integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q== levn@~0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" loader-utils@^1.1.0: version "1.4.0" - resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== dependencies: big.js "^5.2.2" emojis-list "^3.0.0" @@ -4786,121 +3808,86 @@ loader-utils@^1.1.0: locate-path@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: p-locate "^3.0.0" path-exists "^3.0.0" locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash.camelcase@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" - integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= lodash.memoize@^4.1.2: version "4.1.2" - resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= lodash.sortby@^4.7.0: version "4.7.0" - resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= lodash.uniq@^4.5.0: version "4.5.0" - resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21: version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" is-unicode-supported "^0.1.0" lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== lowercase-keys@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== lowlight@~1.17.0: version "1.17.0" - resolved "https://registry.npmjs.org/lowlight/-/lowlight-1.17.0.tgz" - integrity sha512-vmtBgYKD+QVNy7tIa7ulz5d//Il9R4MooOVh4nkOf9R9Cb/Dk5TXMSTieg/vDulkBkIWj59/BIlyFQxT9X1oAQ== dependencies: fault "^1.0.0" highlight.js "~10.4.0" lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" magic-string@^0.25.7: version "0.25.7" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz" - integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== dependencies: sourcemap-codec "^1.4.4" make-dir@^3.0.0: 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== dependencies: semver "^6.0.0" map-cache@^0.2.2: version "0.2.2" - resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= map-visit@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= dependencies: object-visit "^1.0.0" matcher@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz" - integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== dependencies: escape-string-regexp "^4.0.0" +math-intrinsics@^1.1.0: + version "1.1.0" + md5.js@^1.3.4: version "1.3.5" - resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== dependencies: hash-base "^3.0.0" inherits "^2.0.1" @@ -4908,30 +3895,20 @@ md5.js@^1.3.4: mdn-data@2.0.14: version "2.0.14" - resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== mdn-data@2.0.4: version "2.0.4" - resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== merge-source-map@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz" - integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== dependencies: source-map "^0.6.1" merge2@^1.3.0: version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^3.0.4: version "3.1.10" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -4949,125 +3926,80 @@ micromatch@^3.0.4: micromatch@^4.0.2: version "4.0.4" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== dependencies: braces "^3.0.1" picomatch "^2.2.3" miller-rabin@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== dependencies: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.48.0: - version "1.48.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz" - integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== - mime-db@~1.33.0: version "1.33.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz" - integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== -mime-types@2.1.18: - version "2.1.18" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz" - integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== - dependencies: - mime-db "~1.33.0" +mime-db@1.48.0: + version "1.48.0" mime-types@^2.1.12, mime-types@~2.1.19: version "2.1.31" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz" - integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== dependencies: mime-db "1.48.0" +mime-types@2.1.18: + version "2.1.18" + dependencies: + mime-db "~1.33.0" + mime@^2.5.2: version "2.5.2" - resolved "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== mimic-response@^3.1.0: 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== minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimalistic-crypto-utils@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@3.0.4, minimatch@^3.0.4: +minimatch@^3.0.4, minimatch@3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -minimist@^1.2.8: +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.8: version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== mixin-deep@^1.2.0: version "1.3.2" - resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== dependencies: for-in "^1.0.2" is-extendable "^1.0.1" mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.5" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" ms@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= ms@2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== nanoid@^3.1.23: version "3.1.23" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz" - integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== nanomatch@^1.2.9: version "1.2.13" - resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -5083,43 +4015,24 @@ nanomatch@^1.2.9: ncp@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz" - integrity sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= nice-try@^1.0.4: version "1.0.5" - resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -node-addon-api@^1.6.3: - version "1.7.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d" - integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg== node-addon-api@^3.0.2: version "3.2.1" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" - integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== node-forge@^0.10.0: version "0.10.0" - resolved "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== node-gyp-build@^4.2.3: version "4.2.3" - resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz" - integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== node-releases@^1.1.71: version "1.1.73" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz" - integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== normalize-package-data@^2.3.2: version "2.5.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" resolve "^1.10.0" @@ -5128,55 +4041,32 @@ normalize-package-data@^2.3.2: normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-url@^3.0.0: version "3.3.0" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== normalize-url@^4.1.0: version "4.5.1" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== normalize-url@^6.0.1: version "6.1.0" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== nth-check@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== dependencies: boolbase "~1.0.0" nullthrows@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz" - integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== -nwsapi@^2.1.3: - version "2.2.0" - resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== - -nwsapi@^2.2.4: - version "2.2.8" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.8.tgz#a3552e65b74bf8cc89d0480c4132b61dbe54eccf" - integrity sha512-GU/I3lTEFQ9mkEm07Q7HvdRajss8E1wVMGOk3/lHl60QPseG+B3BIQY+JUjYWw7gF8cCeoQCXd4N7DB7avw0Rg== +nwsapi@^2.1.3, nwsapi@^2.2.4: + version "2.2.20" oauth-sign@~0.9.0: version "0.9.0" - resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== object-copy@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" @@ -5184,33 +4074,23 @@ object-copy@^0.1.0: object-inspect@^1.10.3: version "1.10.3" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz" - integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== object-is@^1.0.1: version "1.1.5" - resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object-visit@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= dependencies: isobject "^3.0.0" object.assign@^4.1.2: version "4.1.2" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== dependencies: call-bind "^1.0.0" define-properties "^1.1.3" @@ -5219,8 +4099,6 @@ object.assign@^4.1.2: object.getownpropertydescriptors@^2.1.0: version "2.1.2" - resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz" - integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" @@ -5228,15 +4106,11 @@ object.getownpropertydescriptors@^2.1.0: object.pick@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: isobject "^3.0.1" object.values@^1.1.0: version "1.1.4" - resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz" - integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" @@ -5244,37 +4118,27 @@ object.values@^1.1.0: on-finished@~2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= dependencies: ee-first "1.1.1" once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" onetime@^5.1.0: version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" open@^7.0.3: version "7.4.2" - resolved "https://registry.npmjs.org/open/-/open-7.4.2.tgz" - integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== dependencies: is-docker "^2.0.0" is-wsl "^2.1.1" optionator@^0.8.1: version "0.8.3" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== dependencies: deep-is "~0.1.3" fast-levenshtein "~2.0.6" @@ -5285,8 +4149,6 @@ optionator@^0.8.1: ora@^5.2.0: version "5.4.1" - resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== dependencies: bl "^4.1.0" chalk "^4.1.0" @@ -5300,56 +4162,38 @@ ora@^5.2.0: os-browserify@^0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= p-cancelable@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== p-cancelable@^2.0.0: version "2.1.1" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== p-limit@^2.0.0: version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^3.0.0: 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== dependencies: p-limit "^2.0.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" p-try@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== package-json@^6.3.0: version "6.5.0" - resolved "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== dependencies: got "^9.6.0" registry-auth-token "^4.0.0" @@ -5358,13 +4202,9 @@ package-json@^6.3.0: pako@~1.0.5: version "1.0.11" - resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== parcel@2.0.0-beta.3.1: version "2.0.0-beta.3.1" - resolved "https://registry.npmjs.org/parcel/-/parcel-2.0.0-beta.3.1.tgz" - integrity sha512-jwNwDM/OILzzBAIMZZ/b+PA5DFQ+4ZTaINliSslyY/ZOfwjjkHMlmMddyj6iogLq+n74LE8pBGn3+V5ej4CH1Q== dependencies: "@parcel/config-default" "2.0.0-beta.3.1" "@parcel/core" "2.0.0-beta.3.1" @@ -5383,8 +4223,6 @@ parcel@2.0.0-beta.3.1: parse-asn1@^5.0.0, parse-asn1@^5.1.5: version "5.1.6" - resolved "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== dependencies: asn1.js "^5.2.0" browserify-aes "^1.0.0" @@ -5394,88 +4232,56 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5: parse-json@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse5@5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz" - integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== - parse5@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" - integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + version "7.3.0" dependencies: - entities "^4.4.0" + entities "^6.0.0" + +parse5@5.1.0: + version "5.1.0" parseurl@~1.3.3: version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== pascalcase@^0.1.1: version "0.1.1" - resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= path-browserify@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== path-exists@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-is-inside@1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= path-key@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= path-key@^3.1.0: version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-to-regexp@2.2.1: version "2.2.1" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz" - integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== path-type@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pbkdf2@^3.0.3: version "3.1.2" - resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -5485,47 +4291,24 @@ pbkdf2@^3.0.3: pend@~1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" - integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= performance-now@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: version "2.3.0" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== pify@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -plist@^3.0.4: - version "3.1.0" - resolved "https://registry.yarnpkg.com/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9" - integrity sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ== - dependencies: - "@xmldom/xmldom" "^0.8.8" - base64-js "^1.5.1" - xmlbuilder "^15.1.1" pn@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz" - integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== posix-character-classes@^0.1.0: version "0.1.1" - resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= postcss-calc@^7.0.1: version "7.0.5" - resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz" - integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== dependencies: postcss "^7.0.27" postcss-selector-parser "^6.0.2" @@ -5533,8 +4316,6 @@ postcss-calc@^7.0.1: postcss-colormin@^4.0.3: version "4.0.3" - resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz" - integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== dependencies: browserslist "^4.0.0" color "^3.0.0" @@ -5544,44 +4325,32 @@ postcss-colormin@^4.0.3: postcss-convert-values@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz" - integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== dependencies: postcss "^7.0.0" postcss-value-parser "^3.0.0" postcss-discard-comments@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz" - integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== dependencies: postcss "^7.0.0" postcss-discard-duplicates@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz" - integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== dependencies: postcss "^7.0.0" postcss-discard-empty@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz" - integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== dependencies: postcss "^7.0.0" postcss-discard-overridden@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz" - integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== dependencies: postcss "^7.0.0" postcss-merge-longhand@^4.0.11: version "4.0.11" - resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz" - integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== dependencies: css-color-names "0.0.4" postcss "^7.0.0" @@ -5590,8 +4359,6 @@ postcss-merge-longhand@^4.0.11: postcss-merge-rules@^4.0.3: version "4.0.3" - resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz" - integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== dependencies: browserslist "^4.0.0" caniuse-api "^3.0.0" @@ -5602,16 +4369,12 @@ postcss-merge-rules@^4.0.3: postcss-minify-font-values@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz" - integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== dependencies: postcss "^7.0.0" postcss-value-parser "^3.0.0" postcss-minify-gradients@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz" - integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== dependencies: cssnano-util-get-arguments "^4.0.0" is-color-stop "^1.0.0" @@ -5620,8 +4383,6 @@ postcss-minify-gradients@^4.0.2: postcss-minify-params@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz" - integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== dependencies: alphanum-sort "^1.0.0" browserslist "^4.0.0" @@ -5632,45 +4393,27 @@ postcss-minify-params@^4.0.2: postcss-minify-selectors@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz" - integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== dependencies: alphanum-sort "^1.0.0" has "^1.0.0" postcss "^7.0.0" postcss-selector-parser "^3.0.0" -postcss-modules-extract-imports@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz" - integrity sha1-thTJcgvmgW6u41+zpfqh26agXds= - dependencies: - postcss "^6.0.1" - postcss-modules-extract-imports@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz" - integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== dependencies: postcss "^7.0.5" postcss-modules-extract-imports@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== -postcss-modules-local-by-default@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz" - integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= +postcss-modules-extract-imports@1.1.0: + version "1.1.0" dependencies: - css-selector-tokenizer "^0.7.0" postcss "^6.0.1" postcss-modules-local-by-default@^3.0.2: version "3.0.3" - resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz" - integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== dependencies: icss-utils "^4.1.1" postcss "^7.0.32" @@ -5679,63 +4422,53 @@ postcss-modules-local-by-default@^3.0.2: postcss-modules-local-by-default@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz" - integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== dependencies: icss-utils "^5.0.0" postcss-selector-parser "^6.0.2" postcss-value-parser "^4.1.0" -postcss-modules-scope@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz" - integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= +postcss-modules-local-by-default@1.2.0: + version "1.2.0" dependencies: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" postcss-modules-scope@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz" - integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== dependencies: postcss "^7.0.6" postcss-selector-parser "^6.0.0" postcss-modules-scope@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== dependencies: postcss-selector-parser "^6.0.4" -postcss-modules-values@1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz" - integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= +postcss-modules-scope@1.1.0: + version "1.1.0" dependencies: - icss-replace-symbols "^1.1.0" + css-selector-tokenizer "^0.7.0" postcss "^6.0.1" postcss-modules-values@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz" - integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== dependencies: icss-utils "^4.0.0" postcss "^7.0.6" postcss-modules-values@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== dependencies: icss-utils "^5.0.0" +postcss-modules-values@1.3.0: + version "1.3.0" + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" + postcss-modules@^3.2.2: version "3.2.2" - resolved "https://registry.npmjs.org/postcss-modules/-/postcss-modules-3.2.2.tgz" - integrity sha512-JQ8IAqHELxC0N6tyCg2UF40pACY5oiL6UpiqqcIFRWqgDYO8B0jnxzoQ0EOpPrWXvcpu6BSbQU/3vSiq7w8Nhw== dependencies: generic-names "^2.0.1" icss-replace-symbols "^1.1.0" @@ -5749,8 +4482,6 @@ postcss-modules@^3.2.2: postcss-modules@^4.0.0: version "4.1.3" - resolved "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.1.3.tgz" - integrity sha512-dBT39hrXe4OAVYJe/2ZuIZ9BzYhOe7t+IhedYeQ2OxKwDpAGlkEN/fR0fGnrbx4BvgbMReRX4hCubYK9cE/pJQ== dependencies: generic-names "^2.0.1" icss-replace-symbols "^1.1.0" @@ -5763,15 +4494,11 @@ postcss-modules@^4.0.0: postcss-normalize-charset@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz" - integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== dependencies: postcss "^7.0.0" postcss-normalize-display-values@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz" - integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== dependencies: cssnano-util-get-match "^4.0.0" postcss "^7.0.0" @@ -5779,8 +4506,6 @@ postcss-normalize-display-values@^4.0.2: postcss-normalize-positions@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz" - integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== dependencies: cssnano-util-get-arguments "^4.0.0" has "^1.0.0" @@ -5789,8 +4514,6 @@ postcss-normalize-positions@^4.0.2: postcss-normalize-repeat-style@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz" - integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== dependencies: cssnano-util-get-arguments "^4.0.0" cssnano-util-get-match "^4.0.0" @@ -5799,8 +4522,6 @@ postcss-normalize-repeat-style@^4.0.2: postcss-normalize-string@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz" - integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== dependencies: has "^1.0.0" postcss "^7.0.0" @@ -5808,8 +4529,6 @@ postcss-normalize-string@^4.0.2: postcss-normalize-timing-functions@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz" - integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== dependencies: cssnano-util-get-match "^4.0.0" postcss "^7.0.0" @@ -5817,8 +4536,6 @@ postcss-normalize-timing-functions@^4.0.2: postcss-normalize-unicode@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz" - integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== dependencies: browserslist "^4.0.0" postcss "^7.0.0" @@ -5826,8 +4543,6 @@ postcss-normalize-unicode@^4.0.1: postcss-normalize-url@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz" - integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== dependencies: is-absolute-url "^2.0.0" normalize-url "^3.0.0" @@ -5836,16 +4551,12 @@ postcss-normalize-url@^4.0.1: postcss-normalize-whitespace@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz" - integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== dependencies: postcss "^7.0.0" postcss-value-parser "^3.0.0" postcss-ordered-values@^4.1.2: version "4.1.2" - resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz" - integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== dependencies: cssnano-util-get-arguments "^4.0.0" postcss "^7.0.0" @@ -5853,8 +4564,6 @@ postcss-ordered-values@^4.1.2: postcss-reduce-initial@^4.0.3: version "4.0.3" - resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz" - integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== dependencies: browserslist "^4.0.0" caniuse-api "^3.0.0" @@ -5863,27 +4572,14 @@ postcss-reduce-initial@^4.0.3: postcss-reduce-transforms@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz" - integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== dependencies: cssnano-util-get-match "^4.0.0" has "^1.0.0" postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-selector-parser@6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz" - integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== - dependencies: - cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - postcss-selector-parser@^3.0.0: version "3.1.2" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz" - integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== dependencies: dot-prop "^5.2.0" indexes-of "^1.0.1" @@ -5891,16 +4587,19 @@ postcss-selector-parser@^3.0.0: postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: version "6.0.6" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz" - integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" +postcss-selector-parser@6.0.2: + version "6.0.2" + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + postcss-svgo@^4.0.3: version "4.0.3" - resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz" - integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw== dependencies: postcss "^7.0.0" postcss-value-parser "^3.0.0" @@ -5908,8 +4607,6 @@ postcss-svgo@^4.0.3: postcss-unique-selectors@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz" - integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== dependencies: alphanum-sort "^1.0.0" postcss "^7.0.0" @@ -5917,36 +4614,15 @@ postcss-unique-selectors@^4.0.1: postcss-value-parser@^3.0.0: version "3.3.1" - resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: +postcss-value-parser@^4.0.2: version "4.1.0" - resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz" - integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz" - integrity sha1-AA29H47vIXqjaLmiEsX8QLKo8/I= - dependencies: - chalk "^1.1.3" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@7.0.32: - version "7.0.32" - resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz" - integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" +postcss-value-parser@^4.1.0: + version "4.1.0" postcss@^6.0.1: version "6.0.23" - resolved "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz" - integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== dependencies: chalk "^2.4.1" source-map "^0.6.1" @@ -5954,93 +4630,88 @@ postcss@^6.0.1: postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: version "7.0.36" - resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz" - integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw== dependencies: chalk "^2.4.2" source-map "^0.6.1" supports-color "^6.1.0" -postcss@^8.0.5, postcss@^8.1.10, postcss@^8.2.1: +postcss@^8.0.0, postcss@^8.1.0, postcss@^8.1.10: + version "8.3.5" + dependencies: + colorette "^1.2.2" + nanoid "^3.1.23" + source-map-js "^0.6.2" + +postcss@^8.0.5: + version "8.3.5" + dependencies: + colorette "^1.2.2" + nanoid "^3.1.23" + source-map-js "^0.6.2" + +postcss@^8.2.1: version "8.3.5" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz" - integrity sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA== dependencies: colorette "^1.2.2" nanoid "^3.1.23" source-map-js "^0.6.2" +postcss@6.0.1: + version "6.0.1" + dependencies: + chalk "^1.1.3" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@7.0.32: + version "7.0.32" + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + posthtml-parser@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.6.0.tgz" - integrity sha512-5ffwKQNgtVHdhZniWxu+1ryvaZv5l25HPLUV6W5xy5nYVWMXtvjtwRnbSpfbKFvbyl7XI+d4AqkjmonkREqnXA== dependencies: htmlparser2 "^5.0.1" posthtml-parser@^0.7.2: version "0.7.2" - resolved "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.7.2.tgz" - integrity sha512-LjEEG/3fNcWZtBfsOE3Gbyg1Li4CmsZRkH1UmbMR7nKdMXVMYI3B4/ZMiCpaq8aI1Aym4FRMMW9SAOLSwOnNsQ== dependencies: htmlparser2 "^6.0.0" posthtml-render@^1.3.1, posthtml-render@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz" - integrity sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw== posthtml@^0.15.1: version "0.15.2" - resolved "https://registry.npmjs.org/posthtml/-/posthtml-0.15.2.tgz" - integrity sha512-YugEJ5ze/0DLRIVBjCpDwANWL4pPj1kHJ/2llY8xuInr0nbkon3qTiMPe5LQa+cCwNjxS7nAZZTp+1M+6mT4Zg== dependencies: posthtml-parser "^0.7.2" posthtml-render "^1.3.1" prelude-ls@~1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= prepend-http@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= prettier@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz" - integrity sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA== process-nextick-args@~2.0.0: 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== process@^0.11.10: version "0.11.10" - resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= progress@^2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -psl@^1.1.28: +psl@^1.1.28, psl@^1.1.33: version "1.8.0" - resolved "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== public-encrypt@^4.0.0: version "4.0.3" - resolved "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== dependencies: bn.js "^4.1.0" browserify-rsa "^4.0.0" @@ -6051,43 +4722,29 @@ public-encrypt@^4.0.0: pump@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" once "^1.3.1" -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@^1.3.2, punycode@^1.4.1: +punycode@^1.3.2: version "1.4.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +punycode@^1.4.1: + version "1.4.1" -punycode@^2.3.0: +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +punycode@1.3.2: + version "1.3.2" pupa@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz" - integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== dependencies: escape-goat "^2.0.0" purgecss@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/purgecss/-/purgecss-2.3.0.tgz" - integrity sha512-BE5CROfVGsx2XIhxGuZAT7rTH9lLeQx/6M0P7DTXQH4IUc3BBzs9JUzt4yzGf3JrH9enkeq6YJBe9CTtkm1WmQ== dependencies: commander "^5.0.0" glob "^7.0.0" @@ -6096,68 +4753,44 @@ purgecss@^2.3.0: q@^1.1.2: version "1.5.1" - resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= qs@~6.5.2: version "6.5.2" - resolved "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== querystring-es3@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= querystring@^0.2.0: version "0.2.1" - resolved "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz" - integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== + +querystring@0.2.0: + version "0.2.0" querystringify@^2.1.1: version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== quick-lru@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" randomfill@^1.0.3: version "1.0.4" - resolved "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== dependencies: randombytes "^2.0.5" safe-buffer "^5.1.0" range-parser@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz" - integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= rc@^1.2.8: version "1.2.8" - resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" ini "~1.3.0" @@ -6166,13 +4799,9 @@ rc@^1.2.8: react-refresh@^0.9.0: version "0.9.0" - resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz" - integrity sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ== read-config-file@6.2.0: 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== dependencies: dotenv "^9.0.2" dotenv-expand "^5.1.0" @@ -6182,17 +4811,20 @@ read-config-file@6.2.0: read-pkg@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz" - integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc= dependencies: normalize-package-data "^2.3.2" parse-json "^4.0.0" pify "^3.0.0" +readable-stream@^3.0.0, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + "readable-stream@1 || 2": version "2.3.7" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -6202,79 +4834,50 @@ read-pkg@^4.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.0, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== dependencies: extend-shallow "^3.0.2" safe-regex "^1.1.0" registry-auth-token@^4.0.0: version "4.2.1" - resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz" - integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== dependencies: rc "^1.2.8" registry-url@^5.0.0: version "5.1.0" - resolved "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== dependencies: rc "^1.2.8" relateurl@^0.2.7: version "0.2.7" - resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= repeat-element@^1.1.2: version "1.1.4" - resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== repeat-string@^1.6.1: version "1.6.1" - resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= request-promise-core@1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== dependencies: lodash "^4.17.19" request-promise-native@^1.0.5: version "1.0.9" - resolved "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== dependencies: request-promise-core "1.1.4" stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.88.0: +request@^2.34, request@^2.88.0: version "2.88.2" - resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" @@ -6299,103 +4902,69 @@ request@^2.88.0: require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= require-main-filename@^2.0.0: 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== requires-port@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= resolve-alpn@^1.0.0: version "1.2.1" - resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== resolve-from@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= resolve-url@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= resolve@^1.10.0: version "1.20.0" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== dependencies: is-core-module "^2.2.0" path-parse "^1.0.6" responselike@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= dependencies: lowercase-keys "^1.0.0" responselike@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== dependencies: lowercase-keys "^2.0.0" restore-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" signal-exit "^3.0.2" ret@~0.1.10: version "0.1.15" - resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== reusify@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rgb-regex@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz" - integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= rgba-regex@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz" - integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== dependencies: hash-base "^3.0.0" inherits "^2.0.1" roarr@^2.15.3: version "2.15.4" - resolved "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz" - integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== dependencies: boolean "^3.0.1" detect-node "^2.0.4" @@ -6406,135 +4975,112 @@ roarr@^2.15.3: robust-predicates@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.2.tgz#d5b28528c4824d20fc48df1928d41d9efa1ad771" - integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg== rrweb-cssom@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1" - integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw== run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" rw@1: version "1.3.3" - resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" - integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== -rxjs@^6.5.2, rxjs@^6.6.3: +rxjs@^6.5.2: + version "6.6.7" + dependencies: + tslib "^1.9.0" + +rxjs@^6.6.3: version "6.6.7" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== dependencies: tslib "^1.9.0" rxjs@^7.8.1: version "7.8.1" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-regex@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +safer-buffer@^2.0.2, safer-buffer@^2.1.0, "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0: version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sanitize-filename@^1.6.3: version "1.6.3" - resolved "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz" - integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== dependencies: truncate-utf8-bytes "^1.0.0" sass@^1.32.4, sass@^1.35.1: version "1.35.1" - resolved "https://registry.npmjs.org/sass/-/sass-1.35.1.tgz" - integrity sha512-oCisuQJstxMcacOPmxLNiLlj4cUyN2+8xJnG7VanRoh2GOLr9RqkvI4AxA4a6LHVg/rsu+PmxXeGhrdSF9jCiQ== dependencies: chokidar ">=3.0.0 <4.0.0" sax@^1.2.4, sax@~1.2.4: version "1.2.4" - resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== saxes@^3.1.9: version "3.1.11" - resolved "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz" - integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== dependencies: xmlchars "^2.1.1" saxes@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" - integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== dependencies: xmlchars "^2.2.0" semver-compare@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz" - integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= semver-diff@^3.1.1: 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== dependencies: semver "^6.3.0" -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.7.0: +semver@^5.4.1, semver@^5.5.0, semver@^5.7.0, "semver@2 || 3 || 4 || 5": version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: +semver@^6.0.0: + version "6.3.0" + +semver@^6.2.0: + version "6.3.0" + +semver@^6.3.0: version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: +semver@^7.3.2: + version "7.3.5" + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.4: + version "7.3.5" + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.5: version "7.3.5" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" serialize-error@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz" - integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== dependencies: type-fest "^0.13.1" serve-handler@^6.0.0: version "6.1.3" - resolved "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz" - integrity sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w== dependencies: bytes "3.0.0" content-disposition "0.5.2" @@ -6547,13 +5093,9 @@ serve-handler@^6.0.0: set-blocking@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" @@ -6562,85 +5104,49 @@ set-value@^2.0.0, set-value@^2.0.1: setimmediate@^1.0.4: version "1.0.5" - resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" - resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" shebang-command@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: shebang-regex "^1.0.0" shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== signal-exit@^3.0.2: version "3.0.3" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== simple-swizzle@^0.2.2: version "0.2.2" - resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= dependencies: is-arrayish "^0.3.1" slash@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" slice-ansi@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: ansi-styles "^4.0.0" astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -smart-buffer@^4.0.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - snapdragon-node@^2.0.1: version "2.1.1" - resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: define-property "^1.0.0" isobject "^3.0.0" @@ -6648,15 +5154,11 @@ snapdragon-node@^2.0.1: snapdragon-util@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== dependencies: kind-of "^3.2.0" snapdragon@^0.8.1: version "0.8.2" - resolved "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== dependencies: base "^0.11.1" debug "^2.2.0" @@ -6669,13 +5171,9 @@ snapdragon@^0.8.1: source-map-js@^0.6.2: version "0.6.2" - resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz" - integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== source-map-resolve@^0.5.0: version "0.5.3" - resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: atob "^2.1.2" decode-uri-component "^0.2.0" @@ -6685,101 +5183,70 @@ source-map-resolve@^0.5.0: source-map-support@^0.5.19, source-map-support@~0.5.19: version "0.5.19" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" source-map-url@^0.4.0: version "0.4.1" - resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== -source-map@^0.5.0, source-map@^0.5.6: +source-map@^0.5.0: + version "0.5.7" + +source-map@^0.5.6: version "0.5.7" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@~0.7.2: version "0.7.3" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== sourcemap-codec@^1.4.4: version "1.4.8" - resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== spawn-command@^0.0.2-1: version "0.0.2-1" - resolved "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz" - integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A= spdx-correct@^3.0.0: version "3.1.1" - resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: version "2.3.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: version "3.0.9" - resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz" - integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" - resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== dependencies: extend-shallow "^3.0.0" split2@^3.1.1: version "3.2.2" - resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== dependencies: readable-stream "^3.0.0" sprintf-js@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz" - integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= srcset@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/srcset/-/srcset-3.0.1.tgz" - integrity sha512-MM8wDGg5BQJEj94tDrZDrX9wrC439/Eoeg3sgmVLPMjHgrAFeXAKk3tmFlCbKw5k+yOEhPXRpPlRcisQmqWVSQ== sshpk@^1.7.0: version "1.16.1" - resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -6793,51 +5260,45 @@ sshpk@^1.7.0: stable@^0.1.8: version "0.1.8" - resolved "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== stat-mode@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz" - integrity sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg== static-extend@^0.1.1: version "0.1.2" - resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= dependencies: define-property "^0.2.5" object-copy "^0.1.0" statuses@~1.5.0: version "1.5.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= stealthy-require@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= stream-http@^3.1.0: version "3.2.0" - resolved "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz" - integrity sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A== dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.4" readable-stream "^3.6.0" xtend "^4.0.2" +string_decoder@^1.1.1, string_decoder@^1.3.0: + version "1.3.0" + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + dependencies: + safe-buffer "~5.1.0" + string-hash@^1.1.1: version "1.1.3" - resolved "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz" - integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== dependencies: emoji-regex "^7.0.1" is-fullwidth-code-point "^2.0.0" @@ -6845,8 +5306,6 @@ string-width@^3.0.0, string-width@^3.1.0: string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: version "4.2.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" @@ -6854,64 +5313,36 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: string.prototype.trimend@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" string.prototype.trimstart@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" -string_decoder@^1.1.1, string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - strip-ansi@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: ansi-regex "^4.1.0" strip-ansi@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== dependencies: ansi-regex "^5.0.0" strip-json-comments@~2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= stylehacks@^4.0.0: version "4.0.3" - resolved "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz" - integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== dependencies: browserslist "^4.0.0" postcss "^7.0.0" @@ -6919,48 +5350,34 @@ stylehacks@^4.0.0: sumchecker@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz" - integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== dependencies: debug "^4.1.0" supports-color@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= supports-color@^3.2.3: version "3.2.3" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= dependencies: has-flag "^1.0.0" supports-color@^5.3.0, supports-color@^5.4.0: version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^6.1.0: version "6.1.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" svgo@^1.0.0, svgo@^1.3.2: version "1.3.2" - resolved "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== dependencies: chalk "^2.4.1" coa "^2.0.2" @@ -6978,26 +5395,18 @@ svgo@^1.0.0, svgo@^1.3.2: symbol-tree@^3.2.2, symbol-tree@^3.2.4: version "3.2.4" - resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== temp-file@^3.4.0: version "3.4.0" - resolved "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz" - integrity sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg== dependencies: async-exit-hook "^2.0.1" fs-extra "^10.0.0" term-size@^2.2.1: version "2.2.1" - resolved "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz" - integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== terser@^5.2.0, terser@^5.6.1: version "5.7.0" - resolved "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz" - integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g== dependencies: commander "^2.20.0" source-map "~0.7.2" @@ -7005,71 +5414,49 @@ terser@^5.2.0, terser@^5.6.1: time-zone@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz" - integrity sha1-mcW/VZWJZq9tBtg73zgA3IL67F0= timers-browserify@^2.0.11: version "2.0.12" - resolved "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz" - integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== dependencies: setimmediate "^1.0.4" timsort@^0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz" - integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= tmp-promise@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.2.tgz" - integrity sha512-OyCLAKU1HzBjL6Ev3gxUeraJNlbNingmi8IrHHEsYH8LTmEuhvYfqvhn2F/je+mjf4N58UmZ96OMEy1JanSCpA== dependencies: tmp "^0.2.0" tmp@^0.2.0: version "0.2.1" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== dependencies: rimraf "^3.0.0" to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= to-object-path@^0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= dependencies: kind-of "^3.0.2" to-readable-stream@^1.0.0: 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== to-regex-range@^2.1.0: version "2.1.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= dependencies: is-number "^3.0.0" repeat-string "^1.6.1" to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: define-property "^2.0.2" extend-shallow "^3.0.2" @@ -7078,16 +5465,12 @@ to-regex@^3.0.1, to-regex@^3.0.2: tough-cookie@^2.3.3, tough-cookie@^2.5.0, tough-cookie@~2.5.0: version "2.5.0" - resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== dependencies: psl "^1.1.28" punycode "^2.1.1" tough-cookie@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== + version "4.1.4" dependencies: psl "^1.1.33" punycode "^2.1.1" @@ -7096,90 +5479,60 @@ tough-cookie@^4.1.2: tr46@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= dependencies: punycode "^2.1.0" tr46@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-4.1.1.tgz#281a758dcc82aeb4fe38c7dfe4d11a395aac8469" - integrity sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw== dependencies: punycode "^2.3.0" tree-kill@^1.2.2: version "1.2.2" - resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== truncate-utf8-bytes@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz" - integrity sha1-QFkjkJWS1W94pYGENLC3hInKXys= dependencies: utf8-byte-length "^1.0.1" tslib@^1.9.0: version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.1.0: version "2.6.2" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== tty-browserify@^0.0.1: version "0.0.1" - resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz" - integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= dependencies: safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" - resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= type-check@~0.3.2: version "0.3.2" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= dependencies: prelude-ls "~1.1.2" type-fest@^0.13.1: version "0.13.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz" - integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== type-fest@^0.20.2: 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== typedarray-to-buffer@^3.1.5: 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== dependencies: is-typedarray "^1.0.0" typescript@^4.3.2: version "4.3.4" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.3.4.tgz" - integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew== unbox-primitive@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== dependencies: function-bind "^1.1.1" has-bigints "^1.0.1" @@ -7188,8 +5541,6 @@ unbox-primitive@^1.0.1: uncss@^0.17.3: version "0.17.3" - resolved "https://registry.npmjs.org/uncss/-/uncss-0.17.3.tgz" - integrity sha512-ksdDWl81YWvF/X14fOSw4iu8tESDHFIeyKIeDrK6GEVTQvqJc1WlOEXqostNwOCi3qAj++4EaLsdAgPmUbEyog== dependencies: commander "^2.20.0" glob "^7.1.4" @@ -7203,13 +5554,9 @@ uncss@^0.17.3: undici-types@~5.26.4: version "5.26.5" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== union-value@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== dependencies: arr-union "^3.1.0" get-value "^2.0.6" @@ -7218,58 +5565,38 @@ union-value@^1.0.0: uniq@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= uniqs@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz" - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= unique-string@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== dependencies: crypto-random-string "^2.0.0" universalify@^0.1.0: version "0.1.2" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== universalify@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== universalify@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== unpipe@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= unquote@~1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= unset-value@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= dependencies: has-value "^0.3.1" isobject "^3.0.0" update-notifier@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz" - integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== dependencies: boxen "^5.0.0" chalk "^4.1.0" @@ -7288,58 +5615,40 @@ update-notifier@^5.1.0: uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" urix@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= url-parse-lax@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= dependencies: prepend-http "^2.0.0" url-parse@^1.5.3: version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== dependencies: querystringify "^2.1.1" requires-port "^1.0.0" url@^0.11.0: version "0.11.0" - resolved "https://registry.npmjs.org/url/-/url-0.11.0.tgz" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= dependencies: punycode "1.3.2" querystring "0.2.0" use@^3.1.0: version "3.1.1" - resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== utf8-byte-length@^1.0.1: version "1.0.4" - resolved "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz" - integrity sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= util.promisify@~1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== dependencies: define-properties "^1.1.3" es-abstract "^1.17.2" @@ -7348,8 +5657,6 @@ util.promisify@~1.0.0: util@^0.12.0, util@^0.12.3: version "0.12.4" - resolved "https://registry.npmjs.org/util/-/util-0.12.4.tgz" - integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== dependencies: inherits "^2.0.3" is-arguments "^1.0.4" @@ -7360,45 +5667,24 @@ util@^0.12.0, util@^0.12.3: utils-merge@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= uuid@^3.3.2: version "3.4.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== v8-compile-cache@^2.0.0: version "2.3.0" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== validate-npm-package-license@^3.0.1: version "3.0.4" - resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" vendors@^1.0.0: version "1.0.4" - resolved "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz" - integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== verror@1.10.0: version "1.10.0" - resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -verror@^1.10.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.1.tgz#4bf09eeccf4563b109ed4b3d458380c972b0cdeb" - integrity sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg== dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" @@ -7406,13 +5692,9 @@ verror@^1.10.0: vm-browserify@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== -vue@^3.0.0: +vue@^3.0.0, vue@3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/vue/-/vue-3.1.2.tgz" - integrity sha512-q/rbKpb7aofax4ugqu2k/uj7BYuNPcd6Z5/qJtfkJQsE0NkwVoCyeSh7IZGH61hChwYn3CEkh4bHolvUPxlQ+w== dependencies: "@vue/compiler-dom" "3.1.2" "@vue/runtime-dom" "3.1.2" @@ -7420,15 +5702,11 @@ vue@^3.0.0: w3c-hr-time@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== dependencies: browser-process-hrtime "^1.0.0" w3c-xmlserializer@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz" - integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== dependencies: domexception "^1.0.1" webidl-conversions "^4.0.2" @@ -7436,15 +5714,11 @@ w3c-xmlserializer@^1.1.2: w3c-xmlserializer@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" - integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== dependencies: xml-name-validator "^4.0.0" -wait-on@^5.0.0: +wait-on@^5.3.0: version "5.3.0" - resolved "https://registry.npmjs.org/wait-on/-/wait-on-5.3.0.tgz" - integrity sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg== dependencies: axios "^0.21.1" joi "^17.3.0" @@ -7454,57 +5728,39 @@ wait-on@^5.0.0: wcwidth@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= dependencies: defaults "^1.0.3" webidl-conversions@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== webidl-conversions@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" - integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== dependencies: iconv-lite "0.4.24" whatwg-encoding@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" - integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== dependencies: iconv-lite "0.6.3" whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== whatwg-mimetype@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" - integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== whatwg-url@^12.0.0, whatwg-url@^12.0.1: version "12.0.1" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-12.0.1.tgz#fd7bcc71192e7c3a2a97b9a8d6b094853ed8773c" - integrity sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ== dependencies: tr46 "^4.1.1" webidl-conversions "^7.0.0" whatwg-url@^7.0.0: version "7.1.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== dependencies: lodash.sortby "^4.7.0" tr46 "^1.0.1" @@ -7512,8 +5768,6 @@ whatwg-url@^7.0.0: which-boxed-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== dependencies: is-bigint "^1.0.1" is-boolean-object "^1.1.0" @@ -7523,13 +5777,9 @@ which-boxed-primitive@^1.0.2: which-module@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= which-typed-array@^1.1.2: version "1.1.4" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz" - integrity sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA== dependencies: available-typed-arrays "^1.0.2" call-bind "^1.0.0" @@ -7541,34 +5791,24 @@ which-typed-array@^1.1.2: which@^1.2.9: version "1.3.1" - resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" which@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" widest-line@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== dependencies: string-width "^4.0.0" word-wrap@~1.2.3: version "1.2.3" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== wrap-ansi@^5.1.0: 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== dependencies: ansi-styles "^3.2.0" string-width "^3.0.0" @@ -7576,8 +5816,6 @@ wrap-ansi@^5.1.0: wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" @@ -7585,13 +5823,9 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= write-file-atomic@^3.0.0: 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== dependencies: imurmurhash "^0.1.4" is-typedarray "^1.0.0" @@ -7600,88 +5834,53 @@ write-file-atomic@^3.0.0: ws@^6.1.2: version "6.2.2" - resolved "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz" - integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== dependencies: async-limiter "~1.0.0" ws@^7.0.0: - version "7.5.0" - resolved "https://registry.npmjs.org/ws/-/ws-7.5.0.tgz" - integrity sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw== + version "7.5.10" -ws@^8.13.0: - version "8.16.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" - integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== +ws@^8.13.0, ws@^8.18.2: + version "8.18.2" xdg-basedir@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== xml-name-validator@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== xml-name-validator@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" - integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== - -xmlbuilder@>=11.0.1, xmlbuilder@^15.1.1: - version "15.1.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" - integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== xmlchars@^2.1.1, xmlchars@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== xtend@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^4.0.0: version "4.0.3" - resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== y18n@^5.0.5: version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yargs-parser@^13.1.2: version "13.1.2" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" yargs-parser@^20.2.2: version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs@^13.3.0: version "13.3.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== dependencies: cliui "^5.0.0" find-up "^3.0.0" @@ -7696,8 +5895,6 @@ yargs@^13.3.0: yargs@^17.0.1: version "17.0.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.0.1.tgz" - integrity sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ== dependencies: cliui "^7.0.2" escalade "^3.1.1" @@ -7709,13 +5906,9 @@ yargs@^17.0.1: yauzl@^2.10.0: version "2.10.0" - resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" - integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= dependencies: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==