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
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
+
-
-
-
-
-
+
+
-
-
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
- 0%
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+ 0%
+
-
+
+
+ ">
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+