diff --git a/.DS_Store b/.DS_Store
deleted file mode 100644
index 34e02539..00000000
Binary files a/.DS_Store and /dev/null differ
diff --git a/.coverage b/.coverage
deleted file mode 100644
index 47b233d4..00000000
Binary files a/.coverage and /dev/null differ
diff --git a/.github/actions/build-desktop/action.yml b/.github/actions/build-desktop/action.yml
new file mode 100644
index 00000000..082c0917
--- /dev/null
+++ b/.github/actions/build-desktop/action.yml
@@ -0,0 +1,138 @@
+name: Build desktop
+description: Fetch Couchbase Lite C, build Python bindings, PyInstaller, package unsigned artifacts.
+
+inputs:
+ os:
+ description: "macos or windows"
+ required: true
+ version:
+ description: "Version string used in artifact filenames (e.g. 4.0.0-beta)"
+ required: true
+
+runs:
+ using: composite
+ steps:
+ - name: Fetch libcblite (macOS)
+ if: inputs.os == 'macos'
+ working-directory: ${{ github.workspace }}/app
+ shell: bash
+ env:
+ CBL_VERSION: "3.2.4"
+ run: |
+ chmod +x scripts/fetch_libcblite_macos.sh
+ ./scripts/fetch_libcblite_macos.sh
+ echo "CBL_MACOS_DYLIB=${{ github.workspace }}/app/vendor/macos/libcblite.3.dylib" >> "$GITHUB_ENV"
+
+ - name: Fetch libcblite (Windows)
+ if: inputs.os == 'windows'
+ working-directory: ${{ github.workspace }}/app
+ shell: pwsh
+ env:
+ CBL_VERSION: "3.2.4"
+ run: |
+ powershell -File .\scripts\fetch_libcblite_windows.ps1
+ "CBL_WINDOWS_DLL=$env:GITHUB_WORKSPACE\app\vendor\windows\cblite.dll" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
+
+ - name: Build Couchbase Lite Python bindings (macOS)
+ if: inputs.os == 'macos'
+ shell: bash
+ run: |
+ python -m pip install --upgrade pip
+ python -m pip install cffi setuptools
+ git clone https://github.com/couchbaselabs/couchbase-lite-python.git "${RUNNER_TEMP}/cbl-py"
+ git -C "${RUNNER_TEMP}/cbl-py" checkout 2d1c79041de30a26a8b7f632d52a89fc031f1600
+ # Same recipe as app/Dockerfile: run build.py from CouchbaseLite/.
+ (
+ cd "${RUNNER_TEMP}/cbl-py/CouchbaseLite"
+ python ../build.py \
+ --include "${{ github.workspace }}/app/vendor/macos/include" \
+ --library "${{ github.workspace }}/app/vendor/macos/libcblite.3.dylib"
+ )
+ echo "PYTHONPATH=${RUNNER_TEMP}/cbl-py${PYTHONPATH:+:${PYTHONPATH}}" >> "$GITHUB_ENV"
+
+ - name: Build Couchbase Lite Python bindings (Windows)
+ if: inputs.os == 'windows'
+ shell: pwsh
+ run: |
+ python -m pip install --upgrade pip
+ python -m pip install cffi setuptools
+ $clone = Join-Path $env:RUNNER_TEMP "cbl-py"
+ git clone https://github.com/couchbaselabs/couchbase-lite-python.git $clone
+ git -C $clone checkout 2d1c79041de30a26a8b7f632d52a89fc031f1600
+ $include = Join-Path $env:GITHUB_WORKSPACE "app\vendor\windows\include"
+ $library = Join-Path $env:GITHUB_WORKSPACE "app\vendor\windows\cblite.lib"
+ if (-not (Test-Path $library)) {
+ $library = Join-Path $env:GITHUB_WORKSPACE "app\vendor\windows\cblite.dll"
+ }
+ Push-Location (Join-Path $clone "CouchbaseLite")
+ python ..\build.py --include $include --library $library
+ Pop-Location
+ "PYTHONPATH=$clone;$env:PYTHONPATH" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
+
+ - name: Install desktop Python deps
+ working-directory: ${{ github.workspace }}/app
+ shell: bash
+ run: |
+ python -m pip install -r requirements-desktop.txt
+
+ - name: PyInstaller (macOS)
+ if: inputs.os == 'macos'
+ working-directory: ${{ github.workspace }}/app
+ shell: bash
+ run: |
+ pyinstaller build_mac.spec --clean --noconfirm
+ test -d dist/QueryAnalyzer.app
+
+ - name: Package UNSIGNED arm64 DMG (macOS)
+ if: inputs.os == 'macos'
+ working-directory: ${{ github.workspace }}/app
+ shell: bash
+ run: |
+ ARCH="$(uname -m)"
+ case "$ARCH" in
+ arm64) ARCH_LABEL=arm64 ;;
+ x86_64) ARCH_LABEL=x86_64 ;;
+ *) ARCH_LABEL="$ARCH" ;;
+ esac
+ mkdir -p dist/dmg
+ cp -R dist/QueryAnalyzer.app dist/dmg/
+ ln -s /Applications dist/dmg/Applications
+ cat > dist/dmg/README.txt << 'EOF'
+Couchbase Query Analyzer — unsigned beta
+
+This build is NOT code-signed or notarized. Gatekeeper will block the
+first launch. After dragging QueryAnalyzer.app into Applications:
+
+ xattr -dr com.apple.quarantine /Applications/QueryAnalyzer.app
+
+Then double-click. A Terminal window shows live logs and your browser
+opens http://localhost:8080. Use the menubar icon (🔍) → Quit to stop.
+
+This artifact is Apple Silicon (arm64) when built on macos-latest.
+Intel Macs need a separate x86_64 build.
+EOF
+ hdiutil create -volname "QueryAnalyzer-Beta" \
+ -srcfolder dist/dmg \
+ -ov -format UDZO \
+ "dist/QueryAnalyzer-${{ inputs.version }}-UNSIGNED-${ARCH_LABEL}.dmg"
+ echo "DESKTOP_ARTIFACT=app/dist/QueryAnalyzer-${{ inputs.version }}-UNSIGNED-${ARCH_LABEL}.dmg" >> "$GITHUB_ENV"
+
+ - name: PyInstaller (Windows, onedir)
+ if: inputs.os == 'windows'
+ working-directory: ${{ github.workspace }}/app
+ shell: pwsh
+ run: |
+ pyinstaller build_win.spec --clean --noconfirm
+ if (-not (Test-Path "dist\QueryAnalyzer\QueryAnalyzer.exe")) {
+ throw "PyInstaller did not produce dist\QueryAnalyzer\QueryAnalyzer.exe"
+ }
+
+ - name: Package UNSIGNED x64 zip (Windows)
+ if: inputs.os == 'windows'
+ working-directory: ${{ github.workspace }}/app
+ shell: pwsh
+ run: |
+ $zip = "dist\QueryAnalyzer-${{ inputs.version }}-UNSIGNED-x64.zip"
+ if (Test-Path $zip) { Remove-Item $zip -Force }
+ Compress-Archive -Path "dist\QueryAnalyzer\*" -DestinationPath $zip
+ "DESKTOP_ARTIFACT=app/dist/QueryAnalyzer-${{ inputs.version }}-UNSIGNED-x64.zip" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index e53559f2..5df8a6da 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -31,7 +31,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v5
with:
- python-version: '3.11'
+ python-version-file: '.python-version'
cache: 'pip'
cache-dependency-path: tests/requirements-dev.txt
diff --git a/.github/workflows/liquid-dryrun.yml b/.github/workflows/liquid-dryrun.yml
index 0dc6dc5d..b206e73c 100644
--- a/.github/workflows/liquid-dryrun.yml
+++ b/.github/workflows/liquid-dryrun.yml
@@ -104,7 +104,7 @@ jobs:
exit 1
# ==========================================================================
- # macOS app — private artifact only
+ # macOS app — private artifact only (CBL via build-desktop)
# ==========================================================================
build-macos:
name: Build macOS App (Private Artifact)
@@ -112,119 +112,22 @@ jobs:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
-
- uses: actions/setup-python@v5
with:
- python-version: '3.11'
-
- - name: Install dependencies
- working-directory: ./app
- run: |
- python -m pip install --upgrade pip
- pip install -r requirements.txt
- pip install pyinstaller rumps
-
- - name: Create PyInstaller spec
- working-directory: ./app
- run: |
- cat > QueryAnalyzer.spec << 'SPEC_EOF'
- # -*- mode: python ; coding: utf-8 -*-
-
- block_cipher = None
-
- a = Analysis(
- ['app.py'],
- pathex=[],
- binaries=[],
- datas=[
- ('index.html', '.'),
- ('assets', 'assets'),
- ('docs', 'docs'),
- ('config.json', '.'),
- ('ai_analyzer.py', '.'),
- ('ai_models_list.json.template', '.'),
- ('payload_reference.json.template', '.'),
- ('tray.py', '.'),
- ],
- hiddenimports=[
- 'flask', 'flask_cors',
- 'requests', 'openai', 'icecream', 'webbrowser', 'rumps',
- 'tray',
- ],
- hookspath=[],
- hooksconfig={},
- runtime_hooks=[],
- excludes=[],
- win_no_prefer_redirects=False,
- win_private_assemblies=False,
- cipher=block_cipher,
- noarchive=False,
- )
-
- pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
-
- exe = EXE(
- pyz, a.scripts, [],
- exclude_binaries=True,
- name='QueryAnalyzer',
- debug=False,
- bootloader_ignore_signals=False,
- strip=False,
- upx=True,
- # console=True so the .app launches a Terminal window with
- # live stdout/stderr (startup banner, "Opening browser…",
- # tracebacks). Easier debugging for unsigned beta builds.
- console=True,
- disable_windowed_traceback=False,
- argv_emulation=False,
- target_arch=None,
- codesign_identity=None,
- entitlements_file=None,
- )
-
- coll = COLLECT(exe, a.binaries, a.zipfiles, a.datas,
- strip=False, upx=True, upx_exclude=[], name='QueryAnalyzer')
-
- app = BUNDLE(
- coll,
- name='QueryAnalyzer.app',
- icon='assets/img/QueryAnalyzer.icns',
- bundle_identifier='io.fuj.cb.queryanalyzer',
- info_plist={
- 'CFBundleName': 'CB Query Analyzer (Beta)',
- 'CFBundleDisplayName': 'CB Query Analyzer (Beta)',
- 'CFBundleShortVersionString': '4.0.0',
- 'CFBundleVersion': '4.0.0',
- 'NSHighResolutionCapable': True,
- 'LSBackgroundOnly': False,
- 'LSUIElement': False,
- },
- )
- SPEC_EOF
-
- - name: Build with PyInstaller
- working-directory: ./app
- run: pyinstaller QueryAnalyzer.spec --clean --noconfirm
-
- - name: Create DMG
- working-directory: ./app
- run: |
- mkdir -p dist/dmg
- cp -R dist/QueryAnalyzer.app dist/dmg/
- hdiutil create -volname "QueryAnalyzer-Beta" \
- -srcfolder dist/dmg \
- -ov -format UDZO \
- dist/QueryAnalyzer-${{ needs.version.outputs.version }}-macos.dmg
-
+ python-version-file: '.python-version'
+ - uses: ./.github/actions/build-desktop
+ with:
+ os: macos
+ version: ${{ needs.version.outputs.version }}
- name: Upload artifact (private to repo collaborators)
uses: actions/upload-artifact@v4
with:
name: QueryAnalyzer-${{ needs.version.outputs.version }}-macos
- path: app/dist/QueryAnalyzer-${{ needs.version.outputs.version }}-macos.dmg
+ path: app/dist/QueryAnalyzer-${{ needs.version.outputs.version }}-UNSIGNED-arm64.dmg
retention-days: 14
# ==========================================================================
- # Windows exe — private artifact only
+ # Windows onedir zip — private artifact only (CBL via build-desktop)
# ==========================================================================
build-windows:
name: Build Windows Executable (Private Artifact)
@@ -232,57 +135,18 @@ jobs:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
-
- uses: actions/setup-python@v5
with:
- python-version: '3.11'
-
- - name: Install dependencies
- working-directory: ./app
- run: |
- python -m pip install --upgrade pip
- pip install -r requirements.txt
- # pystray + Pillow power the system-tray icon (tray.py).
- pip install pyinstaller pystray Pillow
-
- - name: Build with PyInstaller
- working-directory: ./app
- run: |
- pyinstaller --name QueryAnalyzer `
- --onefile `
- --console `
- --icon "assets/img/app_icon.ico" `
- --add-data "index.html;." `
- --add-data "assets;assets" `
- --add-data "docs;docs" `
- --add-data "config.json;." `
- --add-data "ai_analyzer.py;." `
- --add-data "ai_models_list.json.template;." `
- --add-data "payload_reference.json.template;." `
- --add-data "tray.py;." `
- --hidden-import flask `
- --hidden-import flask_cors `
- --hidden-import requests `
- --hidden-import openai `
- --hidden-import icecream `
- --hidden-import webbrowser `
- --hidden-import pystray `
- --hidden-import PIL `
- --hidden-import tray `
- app.py
-
- - name: Create ZIP
- working-directory: ./app
- shell: pwsh
- run: |
- Compress-Archive -Path "dist\QueryAnalyzer.exe" `
- -DestinationPath "dist\QueryAnalyzer-${{ needs.version.outputs.version }}-windows.zip"
-
+ python-version-file: '.python-version'
+ - uses: ./.github/actions/build-desktop
+ with:
+ os: windows
+ version: ${{ needs.version.outputs.version }}
- name: Upload artifact (private to repo collaborators)
uses: actions/upload-artifact@v4
with:
name: QueryAnalyzer-${{ needs.version.outputs.version }}-windows
- path: app/dist/QueryAnalyzer-${{ needs.version.outputs.version }}-windows.zip
+ path: app/dist/QueryAnalyzer-${{ needs.version.outputs.version }}-UNSIGNED-x64.zip
retention-days: 14
# ==========================================================================
diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml
index bd9aaf07..29f28534 100644
--- a/.github/workflows/playwright.yml
+++ b/.github/workflows/playwright.yml
@@ -53,7 +53,7 @@ jobs:
- uses: actions/setup-python@v5
with:
- python-version: '3.11'
+ python-version-file: '.python-version'
- name: Install Node dependencies
run: npm ci
@@ -111,7 +111,7 @@ jobs:
- uses: actions/setup-python@v5
with:
- python-version: '3.11'
+ python-version-file: '.python-version'
- name: Install dependencies
working-directory: ./app
diff --git a/.github/workflows/qa-build.yml b/.github/workflows/qa-build.yml
index e0ec7d65..ba5352f5 100644
--- a/.github/workflows/qa-build.yml
+++ b/.github/workflows/qa-build.yml
@@ -41,7 +41,7 @@ jobs:
echo "📦 Building QA version: $VERSION"
# ==========================================================================
- # Build macOS App
+ # Build macOS App (CBL via build-desktop)
# ==========================================================================
build-macos:
name: Build macOS App
@@ -49,135 +49,22 @@ jobs:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
-
- uses: actions/setup-python@v5
with:
- python-version: '3.11'
-
- - name: Install dependencies
- working-directory: ./app
- run: |
- python -m pip install --upgrade pip
- pip install -r requirements.txt
- pip install pyinstaller rumps
-
- - name: Create PyInstaller spec
- working-directory: ./app
- run: |
- cat > QueryAnalyzer.spec << 'SPEC_EOF'
- # -*- mode: python ; coding: utf-8 -*-
-
- block_cipher = None
-
- a = Analysis(
- ['app.py'],
- pathex=[],
- binaries=[],
- datas=[
- ('index.html', '.'),
- ('assets', 'assets'),
- ('docs', 'docs'),
- ('config.json', '.'),
- ('ai_analyzer.py', '.'),
- ('ai_models_list.json.template', '.'),
- ('payload_reference.json.template', '.'),
- ('tray.py', '.'),
- ],
- hiddenimports=[
- 'flask',
- 'flask_cors',
- 'requests',
- 'openai',
- 'icecream',
- 'webbrowser',
- 'rumps',
- 'tray',
- ],
- hookspath=[],
- hooksconfig={},
- runtime_hooks=[],
- excludes=[],
- win_no_prefer_redirects=False,
- win_private_assemblies=False,
- cipher=block_cipher,
- noarchive=False,
- )
-
- pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
-
- exe = EXE(
- pyz,
- a.scripts,
- [],
- exclude_binaries=True,
- name='QueryAnalyzer',
- debug=False,
- bootloader_ignore_signals=False,
- strip=False,
- upx=True,
- # console=True so the .app launches a Terminal window with
- # live stdout/stderr (startup banner, "Opening browser…",
- # tracebacks). Easier debugging for unsigned QA builds.
- console=True,
- disable_windowed_traceback=False,
- argv_emulation=False,
- target_arch=None,
- codesign_identity=None,
- entitlements_file=None,
- )
-
- coll = COLLECT(
- exe,
- a.binaries,
- a.zipfiles,
- a.datas,
- strip=False,
- upx=True,
- upx_exclude=[],
- name='QueryAnalyzer',
- )
-
- app = BUNDLE(
- coll,
- name='QueryAnalyzer.app',
- icon='assets/img/QueryAnalyzer.icns',
- bundle_identifier='io.fuj.cb.queryanalyzer',
- info_plist={
- 'CFBundleName': 'CB Query Analyzer',
- 'CFBundleDisplayName': 'CB Query Analyzer',
- 'CFBundleShortVersionString': '4.0.0',
- 'CFBundleVersion': '4.0.0',
- 'NSHighResolutionCapable': True,
- 'LSBackgroundOnly': False,
- 'LSUIElement': False,
- },
- )
- SPEC_EOF
-
- - name: Build with PyInstaller
- working-directory: ./app
- run: |
- pyinstaller QueryAnalyzer.spec --clean --noconfirm
-
- - name: Create DMG
- working-directory: ./app
- run: |
- mkdir -p dist/dmg
- cp -R dist/QueryAnalyzer.app dist/dmg/
- hdiutil create -volname "QueryAnalyzer-QA" \
- -srcfolder dist/dmg \
- -ov -format UDZO \
- dist/QueryAnalyzer-${{ needs.version.outputs.version }}-macos.dmg
-
+ python-version-file: '.python-version'
+ - uses: ./.github/actions/build-desktop
+ with:
+ os: macos
+ version: ${{ needs.version.outputs.version }}
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: QueryAnalyzer-${{ needs.version.outputs.version }}-macos
- path: app/dist/QueryAnalyzer-${{ needs.version.outputs.version }}-macos.dmg
+ path: app/dist/QueryAnalyzer-${{ needs.version.outputs.version }}-UNSIGNED-arm64.dmg
retention-days: 14
# ==========================================================================
- # Build Windows Executable
+ # Build Windows onedir zip (CBL via build-desktop)
# ==========================================================================
build-windows:
name: Build Windows Executable
@@ -185,56 +72,18 @@ jobs:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
-
- uses: actions/setup-python@v5
with:
- python-version: '3.11'
-
- - name: Install dependencies
- working-directory: ./app
- run: |
- python -m pip install --upgrade pip
- pip install -r requirements.txt
- # pystray + Pillow power the system-tray icon (tray.py).
- pip install pyinstaller pystray Pillow
-
- - name: Build with PyInstaller
- working-directory: ./app
- run: |
- pyinstaller --name QueryAnalyzer `
- --onefile `
- --console `
- --icon "assets/img/app_icon.ico" `
- --add-data "index.html;." `
- --add-data "assets;assets" `
- --add-data "docs;docs" `
- --add-data "config.json;." `
- --add-data "ai_analyzer.py;." `
- --add-data "ai_models_list.json.template;." `
- --add-data "payload_reference.json.template;." `
- --add-data "tray.py;." `
- --hidden-import flask `
- --hidden-import flask_cors `
- --hidden-import requests `
- --hidden-import openai `
- --hidden-import icecream `
- --hidden-import webbrowser `
- --hidden-import pystray `
- --hidden-import PIL `
- --hidden-import tray `
- app.py
-
- - name: Create ZIP
- working-directory: ./app
- shell: pwsh
- run: |
- Compress-Archive -Path "dist\QueryAnalyzer.exe" -DestinationPath "dist\QueryAnalyzer-${{ needs.version.outputs.version }}-windows.zip"
-
+ python-version-file: '.python-version'
+ - uses: ./.github/actions/build-desktop
+ with:
+ os: windows
+ version: ${{ needs.version.outputs.version }}
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: QueryAnalyzer-${{ needs.version.outputs.version }}-windows
- path: app/dist/QueryAnalyzer-${{ needs.version.outputs.version }}-windows.zip
+ path: app/dist/QueryAnalyzer-${{ needs.version.outputs.version }}-UNSIGNED-x64.zip
retention-days: 14
# ==========================================================================
@@ -263,7 +112,7 @@ jobs:
run: ls -la ./artifacts/
- name: Create Pre-Release
- uses: softprops/action-gh-release@v1
+ uses: softprops/action-gh-release@v2
with:
tag_name: ${{ needs.version.outputs.tag }}
name: "🧪 QA Build - ${{ needs.version.outputs.version }}"
@@ -276,8 +125,8 @@ jobs:
| Platform | File |
|----------|------|
- | macOS | `QueryAnalyzer-${{ needs.version.outputs.version }}-macos.dmg` |
- | Windows | `QueryAnalyzer-${{ needs.version.outputs.version }}-windows.zip` |
+ | macOS | `QueryAnalyzer-${{ needs.version.outputs.version }}-UNSIGNED-arm64.dmg` |
+ | Windows | `QueryAnalyzer-${{ needs.version.outputs.version }}-UNSIGNED-x64.zip` |
### Testing Checklist
@@ -298,7 +147,7 @@ jobs:
draft: false
prerelease: true
files: |
- ./artifacts/QueryAnalyzer-${{ needs.version.outputs.version }}-macos.dmg
- ./artifacts/QueryAnalyzer-${{ needs.version.outputs.version }}-windows.zip
+ ./artifacts/QueryAnalyzer-${{ needs.version.outputs.version }}-UNSIGNED-arm64.dmg
+ ./artifacts/QueryAnalyzer-${{ needs.version.outputs.version }}-UNSIGNED-x64.zip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/release-4.0.0-beta.yml b/.github/workflows/release-4.0.0-beta.yml
index 9c76bfe9..7f72ec89 100644
--- a/.github/workflows/release-4.0.0-beta.yml
+++ b/.github/workflows/release-4.0.0-beta.yml
@@ -70,6 +70,7 @@ jobs:
# ==========================================================================
# macOS app (.dmg) — published to GitHub Release
+ # Uses app/build_mac.spec + fetch_libcblite_macos.sh + couchbase-lite-python.
# ==========================================================================
build-macos:
name: Build macOS .dmg
@@ -79,116 +80,23 @@ jobs:
- uses: actions/setup-python@v5
with:
- python-version: '3.11'
+ python-version-file: '.python-version'
- - name: Install dependencies
- working-directory: ./app
- run: |
- python -m pip install --upgrade pip
- pip install -r requirements.txt
- # rumps powers the macOS menubar tray icon (tray.py).
- pip install pyinstaller rumps
-
- - name: Create PyInstaller spec
- working-directory: ./app
- run: |
- cat > QueryAnalyzer.spec << 'SPEC_EOF'
- # -*- mode: python ; coding: utf-8 -*-
-
- block_cipher = None
-
- a = Analysis(
- ['app.py'],
- pathex=[],
- binaries=[],
- datas=[
- ('index.html', '.'),
- ('assets', 'assets'),
- ('docs', 'docs'),
- ('config.json', '.'),
- ('ai_analyzer.py', '.'),
- ('ai_models_list.json.template', '.'),
- ('payload_reference.json.template', '.'),
- ('tray.py', '.'),
- ],
- hiddenimports=[
- 'flask', 'flask_cors',
- 'requests', 'openai', 'icecream', 'webbrowser', 'rumps',
- 'tray',
- ],
- hookspath=[],
- hooksconfig={},
- runtime_hooks=[],
- excludes=[],
- win_no_prefer_redirects=False,
- win_private_assemblies=False,
- cipher=block_cipher,
- noarchive=False,
- )
-
- pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
-
- exe = EXE(
- pyz, a.scripts, [],
- exclude_binaries=True,
- name='QueryAnalyzer',
- debug=False,
- bootloader_ignore_signals=False,
- strip=False,
- upx=True,
- # console=True so users see live stdout/stderr (startup banner,
- # "Opening browser…", tracebacks). Tray icon lets them Quit.
- console=True,
- disable_windowed_traceback=False,
- argv_emulation=False,
- target_arch=None,
- codesign_identity=None,
- entitlements_file=None,
- )
-
- coll = COLLECT(exe, a.binaries, a.zipfiles, a.datas,
- strip=False, upx=True, upx_exclude=[], name='QueryAnalyzer')
-
- app = BUNDLE(
- coll,
- name='QueryAnalyzer.app',
- icon='assets/img/QueryAnalyzer.icns',
- bundle_identifier='io.fuj.cb.queryanalyzer',
- info_plist={
- 'CFBundleName': 'CB Query Analyzer (Beta)',
- 'CFBundleDisplayName': 'CB Query Analyzer (Beta)',
- 'CFBundleShortVersionString': '4.0.0',
- 'CFBundleVersion': '4.0.0',
- 'NSHighResolutionCapable': True,
- 'LSBackgroundOnly': False,
- 'LSUIElement': False,
- },
- )
- SPEC_EOF
-
- - name: Build with PyInstaller
- working-directory: ./app
- run: pyinstaller QueryAnalyzer.spec --clean --noconfirm
-
- - name: Create DMG
- working-directory: ./app
- run: |
- mkdir -p dist/dmg
- cp -R dist/QueryAnalyzer.app dist/dmg/
- hdiutil create -volname "QueryAnalyzer-Beta" \
- -srcfolder dist/dmg \
- -ov -format UDZO \
- "dist/QueryAnalyzer-${RELEASE_VERSION}-macos.dmg"
+ - uses: ./.github/actions/build-desktop
+ with:
+ os: macos
+ version: ${{ env.RELEASE_VERSION }}
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: macos-dmg
- path: app/dist/QueryAnalyzer-${{ env.RELEASE_VERSION }}-macos.dmg
+ path: app/dist/QueryAnalyzer-${{ env.RELEASE_VERSION }}-UNSIGNED-arm64.dmg
retention-days: 14
# ==========================================================================
- # Windows .exe — published to GitHub Release
+ # Windows onedir zip — published to GitHub Release
+ # Uses app/build_win.spec + fetch_libcblite_windows.ps1 + couchbase-lite-python.
# ==========================================================================
build-windows:
name: Build Windows .exe
@@ -198,54 +106,18 @@ jobs:
- uses: actions/setup-python@v5
with:
- python-version: '3.11'
+ python-version-file: '.python-version'
- - name: Install dependencies
- working-directory: ./app
- run: |
- python -m pip install --upgrade pip
- pip install -r requirements.txt
- # pystray + Pillow power the system-tray icon (tray.py).
- pip install pyinstaller pystray Pillow
-
- - name: Build with PyInstaller
- working-directory: ./app
- run: |
- pyinstaller --name QueryAnalyzer `
- --onefile `
- --console `
- --icon "assets/img/app_icon.ico" `
- --add-data "index.html;." `
- --add-data "assets;assets" `
- --add-data "docs;docs" `
- --add-data "config.json;." `
- --add-data "ai_analyzer.py;." `
- --add-data "ai_models_list.json.template;." `
- --add-data "payload_reference.json.template;." `
- --add-data "tray.py;." `
- --hidden-import flask `
- --hidden-import flask_cors `
- --hidden-import requests `
- --hidden-import openai `
- --hidden-import icecream `
- --hidden-import webbrowser `
- --hidden-import pystray `
- --hidden-import PIL `
- --hidden-import tray `
- app.py
-
- - name: Create ZIP
- working-directory: ./app
- shell: pwsh
- run: |
- Compress-Archive -Path "dist\QueryAnalyzer.exe" `
- -DestinationPath "dist\QueryAnalyzer-${{ env.RELEASE_VERSION }}-windows.zip"
+ - uses: ./.github/actions/build-desktop
+ with:
+ os: windows
+ version: ${{ env.RELEASE_VERSION }}
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: windows-zip
- path: app/dist/QueryAnalyzer-${{ env.RELEASE_VERSION }}-windows.zip
+ path: app/dist/QueryAnalyzer-${{ env.RELEASE_VERSION }}-UNSIGNED-x64.zip
retention-days: 14
# ==========================================================================
@@ -294,13 +166,17 @@ jobs:
| Platform | File / Command |
|----------|----------------|
| Docker | `docker pull ${{ secrets.DOCKERHUB_USERNAME }}/couchbase-query-analyzer:4.0.0-beta` |
- | macOS | `QueryAnalyzer-4.0.0-beta-macos.dmg` (see Assets below) |
- | Windows | `QueryAnalyzer-4.0.0-beta-windows.zip` (see Assets below) |
+ | macOS | `QueryAnalyzer-4.0.0-beta-UNSIGNED-arm64.dmg` (Apple Silicon, unsigned) |
+ | Windows | `QueryAnalyzer-4.0.0-beta-UNSIGNED-x64.zip` (onedir, unsigned — not a Setup.exe) |
+
+ Both desktop builds bundle `libcblite` / `cblite.dll` (Couchbase Lite).
+ Open **http://localhost:8080**.
### macOS first-run
- Builds are not yet code-signed, so macOS Gatekeeper will block
- the first launch. After dragging the app into `/Applications`:
+ Builds are **unsigned** and **Apple Silicon only**. Gatekeeper will
+ block the first launch. The DMG also contains `README.txt` with
+ this command. After dragging the app into `/Applications`:
```bash
xattr -dr com.apple.quarantine /Applications/QueryAnalyzer.app
@@ -312,9 +188,10 @@ jobs:
### Windows
- Unzip and run `QueryAnalyzer.exe`. A console window appears with
- live logs; the system-tray icon (bottom-right) → **Quit** stops
- the server.
+ Unzip the folder and run `QueryAnalyzer.exe` (keep `cblite.dll`
+ next to the exe). A console window appears with live logs; the
+ system-tray icon → **Quit** stops the server. SmartScreen will
+ warn because the build is unsigned.
---
@@ -322,8 +199,8 @@ jobs:
**Commit**: `${{ github.sha }}`
**Workflow run**: ${{ github.run_id }}
files: |
- ./artifacts/QueryAnalyzer-${{ env.RELEASE_VERSION }}-macos.dmg
- ./artifacts/QueryAnalyzer-${{ env.RELEASE_VERSION }}-windows.zip
+ ./artifacts/QueryAnalyzer-${{ env.RELEASE_VERSION }}-UNSIGNED-arm64.dmg
+ ./artifacts/QueryAnalyzer-${{ env.RELEASE_VERSION }}-UNSIGNED-x64.zip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 5e7505fd..e4b0bbe8 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -42,7 +42,7 @@ jobs:
- name: Create Release
id: create_release
- uses: softprops/action-gh-release@v1
+ uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.version.outputs.TAG }}
name: "Couchbase Query Analyzer ${{ steps.version.outputs.TAG }}"
@@ -59,7 +59,7 @@ jobs:
### What's New
- See [CHANGELOG.md](https://github.com/${{ github.repository }}/blob/main/CHANGELOG.md) for details.
+ See [release_notes.md](https://github.com/${{ github.repository }}/blob/main/release_notes.md) for details.
---
@@ -70,7 +70,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# ==========================================================================
- # Build macOS App
+ # Build macOS App (CBL via build-desktop)
# ==========================================================================
build-macos:
name: Build macOS App
@@ -79,130 +79,22 @@ jobs:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
-
- uses: actions/setup-python@v5
with:
- python-version: '3.11'
-
- - name: Install dependencies
- working-directory: ./app
- run: |
- python -m pip install --upgrade pip
- pip install -r requirements.txt
- pip install pyinstaller rumps
-
- - name: Create PyInstaller spec
- working-directory: ./app
- run: |
- cat > QueryAnalyzer.spec << 'SPEC_EOF'
- # -*- mode: python ; coding: utf-8 -*-
-
- block_cipher = None
-
- a = Analysis(
- ['app.py'],
- pathex=[],
- binaries=[],
- datas=[
- ('index.html', '.'),
- ('assets', 'assets'),
- ('docs', 'docs'),
- ('config.json', '.'),
- ('ai_analyzer.py', '.'),
- ('ai_models_list.json.template', '.'),
- ('payload_reference.json.template', '.'),
- ],
- hiddenimports=[
- 'flask',
- 'flask_cors',
- 'requests',
- 'openai',
- 'icecream',
- 'webbrowser',
- 'rumps',
- ],
- hookspath=[],
- hooksconfig={},
- runtime_hooks=[],
- excludes=[],
- win_no_prefer_redirects=False,
- win_private_assemblies=False,
- cipher=block_cipher,
- noarchive=False,
- )
-
- pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
-
- exe = EXE(
- pyz,
- a.scripts,
- [],
- exclude_binaries=True,
- name='QueryAnalyzer',
- debug=False,
- bootloader_ignore_signals=False,
- strip=False,
- upx=True,
- console=False,
- disable_windowed_traceback=False,
- argv_emulation=False,
- target_arch=None,
- codesign_identity=None,
- entitlements_file=None,
- )
-
- coll = COLLECT(
- exe,
- a.binaries,
- a.zipfiles,
- a.datas,
- strip=False,
- upx=True,
- upx_exclude=[],
- name='QueryAnalyzer',
- )
-
- app = BUNDLE(
- coll,
- name='QueryAnalyzer.app',
- icon='assets/img/QueryAnalyzer.icns',
- bundle_identifier='io.fuj.cb.queryanalyzer',
- info_plist={
- 'CFBundleName': 'CB Query Analyzer',
- 'CFBundleDisplayName': 'CB Query Analyzer',
- 'CFBundleShortVersionString': '${{ needs.create-release.outputs.version }}',
- 'CFBundleVersion': '${{ needs.create-release.outputs.version }}',
- 'NSHighResolutionCapable': True,
- 'LSBackgroundOnly': False,
- 'LSUIElement': False,
- },
- )
- SPEC_EOF
-
- - name: Build with PyInstaller
- working-directory: ./app
- run: |
- pyinstaller QueryAnalyzer.spec --clean --noconfirm
-
- - name: Create DMG
- working-directory: ./app
- run: |
- mkdir -p dist/dmg
- cp -R dist/QueryAnalyzer.app dist/dmg/
- hdiutil create -volname "QueryAnalyzer" \
- -srcfolder dist/dmg \
- -ov -format UDZO \
- dist/QueryAnalyzer-${{ needs.create-release.outputs.version }}-macos.dmg
-
+ python-version-file: '.python-version'
+ - uses: ./.github/actions/build-desktop
+ with:
+ os: macos
+ version: ${{ needs.create-release.outputs.version }}
- name: Upload to Release
- uses: softprops/action-gh-release@v1
+ uses: softprops/action-gh-release@v2
with:
- files: app/dist/QueryAnalyzer-${{ needs.create-release.outputs.version }}-macos.dmg
+ files: app/dist/QueryAnalyzer-${{ needs.create-release.outputs.version }}-UNSIGNED-arm64.dmg
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# ==========================================================================
- # Build Windows Executable
+ # Build Windows onedir zip (CBL via build-desktop)
# ==========================================================================
build-windows:
name: Build Windows Executable
@@ -211,52 +103,17 @@ jobs:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
-
- uses: actions/setup-python@v5
with:
- python-version: '3.11'
-
- - name: Install dependencies
- working-directory: ./app
- run: |
- python -m pip install --upgrade pip
- pip install -r requirements.txt
- pip install pyinstaller
-
- - name: Build with PyInstaller
- working-directory: ./app
- run: |
- pyinstaller --name QueryAnalyzer `
- --onefile `
- --windowed `
- --icon "assets/img/app_icon.ico" `
- --add-data "index.html;." `
- --add-data "assets;assets" `
- --add-data "docs;docs" `
- --add-data "config.json;." `
- --add-data "ai_analyzer.py;." `
- --add-data "ai_models_list.json.template;." `
- --add-data "payload_reference.json.template;." `
- --hidden-import flask `
- --hidden-import flask_cors `
- --hidden-import requests `
- --hidden-import openai `
- --hidden-import icecream `
- --hidden-import webbrowser `
- --hidden-import pystray `
- --hidden-import PIL `
- app.py
-
- - name: Create ZIP
- working-directory: ./app
- shell: pwsh
- run: |
- Compress-Archive -Path "dist\QueryAnalyzer.exe" -DestinationPath "dist\QueryAnalyzer-${{ needs.create-release.outputs.version }}-windows.zip"
-
+ python-version-file: '.python-version'
+ - uses: ./.github/actions/build-desktop
+ with:
+ os: windows
+ version: ${{ needs.create-release.outputs.version }}
- name: Upload to Release
- uses: softprops/action-gh-release@v1
+ uses: softprops/action-gh-release@v2
with:
- files: app/dist/QueryAnalyzer-${{ needs.create-release.outputs.version }}-windows.zip
+ files: app/dist/QueryAnalyzer-${{ needs.create-release.outputs.version }}-UNSIGNED-x64.zip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.gitignore b/.gitignore
index 245b192f..bf029bab 100644
--- a/.gitignore
+++ b/.gitignore
@@ -62,8 +62,9 @@ __pycache__/
# Distribution / packaging
*.egg
*.egg-info/
-dist/
-build/
+/dist/
+/build/
+app/dist/
eggs/
parts/
var/
@@ -142,3 +143,6 @@ _apollo_web/
# ------------------------------------------------------------------------------
app/data/
app/logs/*.log
+
+# Downloaded Couchbase Lite C artifacts (fetch_libcblite_*.sh/ps1)
+app/vendor/
diff --git a/.python-version b/.python-version
index 2419ad5b..e4fba218 100644
--- a/.python-version
+++ b/.python-version
@@ -1 +1 @@
-3.11.9
+3.12
diff --git a/AGENT.md b/AGENT.md
index e9d02026..782d7435 100644
--- a/AGENT.md
+++ b/AGENT.md
@@ -10,11 +10,12 @@ The Couchbase Query Analyzer is a tool for analyzing N1QL query performance from
- Single-page HTML application with embedded CSS/JS
- Input: JSON from `SELECT *, meta().plan FROM system:completed_requests`
-### Server Edition (v4.0.0) - `/app/*`
-- **Flask web server** with Couchbase integration
-- Stores analysis data, user preferences, and AI analysis results in Couchbase Server
-- AI-powered query analysis via OpenAI, Anthropic Claude, or Grok APIs
-- Distributed as: **Docker Image**, **macOS App**, **Windows Executable**
+### Server Edition (v4.0.0-Beta.2) - `/app/*`
+- **Flask web server** with **embedded Couchbase Lite** persistence (the Server SDK is gone)
+- Stores analysis data, user preferences, and AI analysis results in CBL
+- AI-powered query analysis via OpenAI, Anthropic Claude, xAI Grok, or Google Gemini
+- Distributed as: **Docker Image**, **unsigned macOS .app / DMG**, **unsigned Windows onedir zip**
+- Default URL: **http://localhost:8080** (`PORT` env var overrides)
---
@@ -197,8 +198,8 @@ No installation needed - just open `/en/index.html` in browser.
#### Option A: Docker
```bash
-docker run -p 5000:5000 couchbase-query-analyzer:4.0.0
-# Open http://localhost:5000
+cd app && docker compose up --build
+# Open http://localhost:8080
```
#### Option B: Local Development
@@ -208,13 +209,13 @@ cd app
source venv/bin/activate
pip install -r requirements.txt
python app.py
-# Open http://localhost:5000
+# Open http://localhost:8080
```
#### Option C: Standalone Executables
-Download from GitHub Releases:
-- `QueryAnalyzer-4.0.0.dmg` (macOS)
-- `QueryAnalyzer-4.0.0-Setup.exe` (Windows)
+Download from GitHub Releases (unsigned beta):
+- `QueryAnalyzer-4.0.0-beta-UNSIGNED-arm64.dmg` (macOS, Apple Silicon)
+- `QueryAnalyzer-4.0.0-beta-UNSIGNED-x64.zip` (Windows onedir)
---
diff --git a/README.md b/README.md
index d32dff85..439fd51a 100644
--- a/README.md
+++ b/README.md
@@ -19,62 +19,72 @@ A web-based tool for analyzing Couchbase N1QL query performance and execution pl
---
-## Server Edition (v4.0.0-Beta) — Quick Start
+## Server Edition (v4.0.0-Beta.2) — Quick Start
-The Server Edition is a Flask backend with **embedded Couchbase Lite** persistence and AI-powered query analysis (OpenAI / Anthropic Claude / xAI Grok). No external Couchbase Server is needed for the app's own data.
+The Server Edition is a Flask backend with **embedded Couchbase Lite** persistence and AI-powered query analysis (OpenAI / Anthropic Claude / xAI Grok / Google Gemini). No external Couchbase Server is needed for the app's own data. **Couchbase Lite is the only storage backend** — the Couchbase Server SDK has been removed.
+
+Docker, local Python, and the desktop builds all listen on **http://localhost:8080** by default (`PORT` env var overrides).
### Option A — Docker (recommended)
-From the project root:
+From `app/` (compose + Dockerfile live there):
```bash
+cd app
docker compose up --build # build & run (foreground)
docker compose up -d # detached
docker compose logs -f # tail logs
docker compose down # stop
```
-Open **http://localhost:5000**.
+Open **http://localhost:8080**.
The compose stack runs `gunicorn -w 1` inside the container (single worker is **required** — embedded Couchbase Lite is single-writer per process). The CBL database lives in the named volume `cbl-data` and persists across container rebuilds.
-Environment knobs (defaults shown, overridable in [`docker-compose.yml`](docker-compose.yml)):
+Environment knobs (defaults shown, overridable in [`app/docker-compose.yml`](app/docker-compose.yml)):
| Var | Default | Purpose |
|---|---|---|
-| `STORAGE_BACKEND` | `cbl` | `cbl` = embedded Couchbase Lite, `server` = legacy external Couchbase Server |
| `CBL_DB_DIR` | `/app/data` | Where the `.cblite2` directory lives |
| `CBL_DB_NAME` | `cb_tools_db` | Database name |
+| `PORT` | `8080` | Container listen port (map host with `HOST_PORT`) |
> **Note for macOS/Windows users:** if your **production** Couchbase Server (the one holding `system:completed_requests`) runs on the host machine, use `host.docker.internal` instead of `localhost` in the connection URL. The Server Edition itself no longer needs an external Couchbase Server.
### Option B — Local Python (development)
-From the project root:
-
```bash
+cd app
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
-python app.py
+# CBL bindings are not on PyPI — without them the app starts but
+# persistence endpoints return 503. Use Docker for a batteries-included run.
+python app.py # http://localhost:8080
```
-Open **http://localhost:8888** (port 8888 is the default for `python app.py`; Docker uses 5000).
-
The CBL database is created on first run under your OS's user-data directory (`~/Library/Application Support/CouchbaseQueryAnalyzer/data/cb_tools_db.cblite2/` on macOS, `%LOCALAPPDATA%\Couchbase\CouchbaseQueryAnalyzer\data\` on Windows, `~/.local/share/CouchbaseQueryAnalyzer/data/` on Linux). Override with `CBL_DB_DIR`.
-> **CBL bindings:** the [`CouchbaseLite`](https://github.com/couchbaselabs/couchbase-lite-python) Python package is **not** on PyPI. The Dockerfile and PyInstaller specs build it from source against `libcblite`. If you run locally without it, the Server Edition falls back to `STORAGE_BACKEND=server` (external Couchbase Server) automatically. Set `STORAGE_BACKEND=cbl` to force CBL and get a clear error if the bindings are missing.
+> **CBL bindings:** the [`CouchbaseLite`](https://github.com/couchbaselabs/couchbase-lite-python) Python package is **not** on PyPI. The Dockerfile and PyInstaller specs build it from source against `libcblite`. There is no fallback to an external Couchbase Server.
-See [`app/docs/work/02_CBL_STORE_MODULE.md`](app/docs/work/02_CBL_STORE_MODULE.md) for the storage layer design and [`app/docs/work/03_APP_PY_REFACTOR.md`](app/docs/work/03_APP_PY_REFACTOR.md) for the endpoint mapping.
+See [`app/docs/work/CB_TO_CBL/02_CBL_STORE_MODULE.md`](app/docs/work/CB_TO_CBL/02_CBL_STORE_MODULE.md) for the storage layer design.
### Option C — Native macOS / Windows binary
-Built via GitHub Actions with PyInstaller (specs at the project root: [`build_mac.spec`](build_mac.spec), [`build_win.spec`](build_win.spec)). Download from the **Releases** page:
+Built via GitHub Actions with PyInstaller (specs in `app/`: [`app/build_mac.spec`](app/build_mac.spec), [`app/build_win.spec`](app/build_win.spec)). Download from the **Releases** page:
+
+- `QueryAnalyzer-4.0.0-beta-UNSIGNED-arm64.dmg` (macOS, Apple Silicon, **unsigned**)
+- `QueryAnalyzer-4.0.0-beta-UNSIGNED-x64.zip` (Windows onedir zip, **unsigned** — not an MSI installer)
-- `QueryAnalyzer-4.0.0-Beta.dmg` (macOS)
-- `QueryAnalyzer-4.0.0-Beta-Setup.exe` (Windows)
+Both bundle `libcblite.dylib` / `cblite.dll` — no external Couchbase Server is needed. They run as a tray/menu-bar app and open the analyzer at **http://localhost:8080**.
+
+**macOS first launch:** Gatekeeper blocks unsigned apps. After dragging into `/Applications`:
+
+```bash
+xattr -dr com.apple.quarantine /Applications/QueryAnalyzer.app
+```
-Both bundle `libcblite.dylib` / `cblite.dll` — no external Couchbase Server is needed. They run as a tray/menu-bar app and open the analyzer in your default browser.
+The same command is in `README.txt` inside the DMG.
### Server Edition AI Provider Support
@@ -83,6 +93,7 @@ Both bundle `libcblite.dylib` / `cblite.dll` — no external Couchbase Server is
| OpenAI | GPT-4o, GPT-4o-mini, o3, o4-mini |
| Anthropic Claude | Claude 3.5 Sonnet, Claude 3.5 Haiku, Claude 4 |
| xAI Grok | Grok-3, Grok-4 |
+| Google Gemini | Gemini 2.5 / 2.0 / 1.5 |
| Custom | Any OpenAI-compatible endpoint |
---
@@ -198,24 +209,22 @@ Pick sections (Dashboard, Timeline, Query Groups, etc.), include filters/header
```
cb_completed_request/
-├── app.py # Server Edition v4.0.0-Beta entry (Flask + CBL routing)
-├── app_base.py # v4.x Flask app, imported & extended by app.py
-├── cbl_store.py # Embedded Couchbase Lite storage layer
-├── ai_analyzer.py # AI provider integrations (OpenAI/Claude/Grok)
-├── blob_storage.py # Compressed blob facade backed by CBLStore
-├── migrate_to_cbl.py # One-shot CB-Server → CBL migration tool
-├── Dockerfile # Builds libcblite + CBL Python bindings + Flask app
-├── docker-compose.yml # `docker compose up` to run Server Edition
-├── build_mac.spec # PyInstaller spec — macOS .app
-├── build_win.spec # PyInstaller spec — Windows .exe
-├── requirements.txt # Python deps (CBL bindings come from build pipeline)
-├── app/ # Reference / legacy + design docs (`docs/work/*.md`)
-├── en/ # Static Edition v3.29.3 (single-file HTML)
-├── old_pre_4_0/ # Archived pre-4.0 files (de/es/pt + legacy assets)
-├── playwright/ # E2E tests (both editions)
-├── tests/ # Python unit tests + Jest specs
-├── sample/ # Sample JSON data
-└── README.md # You are here
+├── app/ # Server Edition v4.0.0-Beta.2
+│ ├── app.py # Flask entry (CBL-backed routes)
+│ ├── app_base.py # Flask app object + non-storage endpoints
+│ ├── cbl_store.py # Embedded Couchbase Lite storage layer
+│ ├── ai_analyzer.py # AI provider integrations
+│ ├── Dockerfile # libcblite + CBL Python bindings + Flask
+│ ├── docker-compose.yml # `cd app && docker compose up --build`
+│ ├── build_mac.spec # PyInstaller spec — macOS .app
+│ ├── build_win.spec # PyInstaller spec — Windows onedir
+│ └── requirements.txt # Python deps (CBL bindings from the build)
+├── en/ # Static Edition v3.29.3 (single-file HTML)
+├── old_pre_4_0/ # Archived pre-4.0 files
+├── playwright/ # E2E tests (both editions)
+├── tests/ # Python unit tests + Jest specs
+├── sample/ # Sample JSON data
+└── README.md # You are here
```
See [`AGENT.md`](AGENT.md) for the full architecture overview, [`BIG_MOVE_4_0_0.md`](BIG_MOVE_4_0_0.md) for the v3 → v4 migration history, and [`app/docs/work/`](app/docs/work/) (12 numbered docs) for the v4 → v5 CBL migration design and post-review fixes.
@@ -265,5 +274,5 @@ See [`release_notes.md`](release_notes.md).
- Modern web browser with JavaScript enabled
- A Couchbase Server cluster (any recent version) **with query logging enabled** — this is the source of `system:completed_requests` data; the analyzer queries it read-only
- Read access to `system:completed_requests` (admin privileges)
-- For Server Edition v4.0.0-Beta: Docker, **or** Python 3.11+, **or** the macOS/Windows native installer
+- For Server Edition v4.0.0-Beta: Docker, **or** Python 3.12+, **or** the unsigned macOS/Windows desktop build
- **No external Couchbase Server is needed for app persistence** — the Server Edition embeds Couchbase Lite (CE)
diff --git a/app/.DS_Store b/app/.DS_Store
deleted file mode 100644
index 3fb41bd8..00000000
Binary files a/app/.DS_Store and /dev/null differ
diff --git a/app/.dockerignore b/app/.dockerignore
new file mode 100644
index 00000000..d5f056f8
--- /dev/null
+++ b/app/.dockerignore
@@ -0,0 +1,11 @@
+venv/
+.venv/
+__pycache__/
+*.pyc
+*.pyo
+data/
+logs/
+dist/
+build/
+.git/
+*.cblite2
diff --git a/app/Dockerfile b/app/Dockerfile
index ff078bd3..27ef3ff5 100644
--- a/app/Dockerfile
+++ b/app/Dockerfile
@@ -10,7 +10,8 @@ FROM python:3.12-slim AS base
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
- CBL_VERSION=3.2.1 \
+ CBL_VERSION=3.2.4 \
+ CBL_PYTHON_SHA=2d1c79041de30a26a8b7f632d52a89fc031f1600 \
CBL_DB_DIR=/app/data \
CBL_DB_NAME=cb_tools_db \
PORT=8080 \
@@ -54,7 +55,8 @@ RUN ARCH="$(dpkg --print-architecture)" && \
# ---- 3. Build the Python CFFI bindings ----
RUN pip install --no-cache-dir cffi setuptools && \
- git clone --depth 1 https://github.com/couchbaselabs/couchbase-lite-python.git /opt/cbl-python && \
+ git clone https://github.com/couchbaselabs/couchbase-lite-python.git /opt/cbl-python && \
+ git -C /opt/cbl-python checkout "${CBL_PYTHON_SHA}" && \
cd /opt/cbl-python/CouchbaseLite && \
python3 ../build.py \
--include /usr/local/include \
diff --git a/app/app.py b/app/app.py
index 9ceb171b..b42c02fb 100755
--- a/app/app.py
+++ b/app/app.py
@@ -32,13 +32,13 @@
from flask import jsonify, request, send_file
-# ----------------------------------------------------------------------------
-# Global version constant — single source of truth for the running app.
-# Bump this in every release per app/guides/RELEASE.md. The startup banner
-# below reads from __version__, and downstream modules / endpoints can
-# `from app import __version__` if they need to surface it.
-# ----------------------------------------------------------------------------
-__version__ = "4.0.0-Beta.2"
+from version import __version__
+from ports import ( # noqa: F401 — re-exported for tests / __main__
+ DEFAULT_PORT,
+ get_resource_path,
+ get_server_port,
+ _load_server_config,
+)
# Import the base app (registers Flask app + endpoints that don't depend on
# the external Couchbase Server SDK). All app data persistence now flows
@@ -48,88 +48,29 @@
import blob_storage
-# Print startup banner on module import (works with gunicorn + development)
-# This runs once when the app is initialized, before any requests arrive.
+# Print startup banner on module import (works with gunicorn + development).
+# Use the resolved port (env / config / 8080) — never a hard-coded 8888.
print(f"🚀 Starting Couchbase Query Analyzer v{__version__}")
print("📊 Backend: cbl (embedded Couchbase Lite)")
print(f"🌐 Open http://localhost:{PORT} in your browser")
print()
logger.info("startup version=%s port=%d", __version__, PORT)
-# Try to import CBL store
+# Try to import CBL store. cbl_store.py always imports even when the native
+# bindings are missing (it sets USE_CBL = False). CBL_AVAILABLE must follow
+# that flag, not "did the .py file import".
try:
- from cbl_store import CBLStore, USE_CBL
- CBL_AVAILABLE = True
+ from cbl_store import CBLStore, USE_CBL, get_store, reset_store
+ CBL_AVAILABLE = bool(USE_CBL)
except ImportError as e:
+ CBLStore = None # type: ignore
CBL_AVAILABLE = False
USE_CBL = False
+ get_store = lambda: None # noqa: E731
+ reset_store = lambda: None # noqa: E731
logger.warning("cbl store unavailable: %s", e)
-# ============================================================================
-# Server config (port + future server-side options)
-# ============================================================================
-
-def _load_server_config() -> dict:
- """
- Load server-side config from the first existing JSON file in:
- 1. $APP_CONFIG_FILE
- 2. ./config.json (sibling of app.py)
- 3. ./config.default.json (sibling of app.py)
-
- Only the top-level `server` key is consumed here (e.g. `server.port`).
- Everything else in config.json is consumed by the frontend.
-
- Errors loading the file are logged and ignored; defaults apply.
- """
- candidates = []
- env_path = os.environ.get('APP_CONFIG_FILE')
- if env_path:
- candidates.append(env_path)
- here = os.path.dirname(os.path.abspath(__file__))
- candidates.extend([
- os.path.join(here, 'config.json'),
- os.path.join(here, 'config.default.json'),
- ])
- for path in candidates:
- if not path or not os.path.isfile(path):
- continue
- try:
- with open(path, 'r') as f:
- data = json.load(f)
- logger.info("loaded server config path=%s", path)
- return data if isinstance(data, dict) else {}
- except Exception as e:
- logger.warning("failed to read config path=%s: %s", path, e)
- return {}
-
-
-def get_server_port(default: int = 8080) -> int:
- """
- Resolve the HTTP listen port. Priority:
- 1. $PORT env var (set by Docker / start scripts)
- 2. config.json `server.port`
- 3. `default` (8080)
-
- Note: When running in Docker the gunicorn CMD reads $PORT directly via
- shell expansion, so this helper is mainly used by the __main__ block
- and is also exposed for tests.
- """
- env = os.environ.get('PORT')
- if env:
- try:
- return int(env)
- except ValueError:
- logger.warning("ignoring invalid PORT env var=%s", env)
- cfg = _load_server_config().get('server') or {}
- val = cfg.get('port')
- if isinstance(val, int) and val > 0:
- return val
- if isinstance(val, str) and val.isdigit():
- return int(val)
- return default
-
-
# ============================================================================
# Backend helpers
# ============================================================================
@@ -141,21 +82,39 @@ def get_server_port(default: int = 8080) -> int:
def storage() -> Optional["CBLStore"]:
"""Return the singleton CBLStore (creates it on first call)."""
global _cbl_store
- if not CBL_AVAILABLE:
+ if not CBL_AVAILABLE or CBLStore is None:
return None
if _cbl_store is None:
- _cbl_store = CBLStore()
- logger.info("cbl storage initialized")
+ try:
+ _cbl_store = CBLStore()
+ logger.info("cbl storage initialized")
+ except Exception:
+ logger.exception("cbl storage failed to initialize")
+ return None
return _cbl_store
+def _reset_storage_cache() -> None:
+ """Drop cached wrappers after close_db() / import so the next call reopens."""
+ global _cbl_store, _cbl_blobs
+ _cbl_store = None
+ _cbl_blobs = None
+ try:
+ reset_store()
+ except Exception:
+ pass
+
+
def get_blobs() -> Optional[blob_storage.BlobStorage]:
"""Return the singleton blob storage facade backed by CBLStore."""
global _cbl_blobs
if not CBL_AVAILABLE:
return None
if _cbl_blobs is None:
- _cbl_blobs = blob_storage.BlobStorage(storage())
+ store = storage()
+ if not store:
+ return None
+ _cbl_blobs = blob_storage.BlobStorage(store)
logger.info("blob storage initialized")
return _cbl_blobs
@@ -208,7 +167,7 @@ def save_analyzer():
store = storage()
if not store:
- return jsonify({'success': False, 'error': 'CBL not available'}), 500
+ return jsonify({'success': False, 'error': 'CBL not available'}), 503
store.save_analyzer(request_id, name, analyzer_data)
return jsonify({'success': True, 'requestId': request_id, 'backend': 'cbl'})
@@ -222,7 +181,7 @@ def load_analyzer(request_id):
try:
store = storage()
if not store:
- return jsonify({'success': False, 'error': 'CBL not available'}), 500
+ return jsonify({'success': False, 'error': 'CBL not available'}), 503
doc = store.load_analyzer(request_id)
if not doc:
return jsonify({'success': False, 'error': 'Not found'}), 404
@@ -241,7 +200,7 @@ def delete_analyzer():
store = storage()
if not store:
- return jsonify({'success': False, 'error': 'CBL not available'}), 500
+ return jsonify({'success': False, 'error': 'CBL not available'}), 503
ok = store.delete_analyzer(request_id)
if not ok:
return jsonify({'success': False, 'error': 'Not found'}), 404
@@ -261,7 +220,7 @@ def save_preferences():
store = storage()
if not store:
- return jsonify({'success': False, 'error': 'CBL not available'}), 500
+ return jsonify({'success': False, 'error': 'CBL not available'}), 503
store.save_preferences(user_id, prefs)
return jsonify({'success': True, 'userId': user_id, 'backend': 'cbl'})
@@ -275,7 +234,7 @@ def load_preferences(user_id):
try:
store = storage()
if not store:
- return jsonify({'success': False, 'error': 'CBL not available'}), 500
+ return jsonify({'success': False, 'error': 'CBL not available'}), 503
prefs = store.load_preferences(user_id)
if prefs is None:
# First-time user: empty config
@@ -296,7 +255,7 @@ def load_preferences(user_id):
def ai_status(document_id):
store = storage()
if not store:
- return jsonify({'success': False, 'error': 'CBL not available'}), 500
+ return jsonify({'success': False, 'error': 'CBL not available'}), 503
# AI analysis docs are written by background_ai_task via store.save_analyzer
# into COLL_ANALYZER, not COLL_AI_HISTORY. Read from there.
@@ -329,7 +288,7 @@ def ai_history():
store = storage()
if not store:
- return jsonify({'success': False, 'error': 'CBL not available'}), 500
+ return jsonify({'success': False, 'error': 'CBL not available'}), 503
# AI analyses are stored in COLL_ANALYZER (via save_analyzer) with
# docType='ai_analysis' inside the blob. Scan and project the
@@ -383,7 +342,7 @@ def ai_cancel():
store = storage()
if not store:
- return jsonify({'success': False, 'error': 'CBL not available'}), 500
+ return jsonify({'success': False, 'error': 'CBL not available'}), 503
doc = store.load_analyzer(doc_id)
if not doc:
return jsonify({'success': False, 'error': 'Document not found'}), 404
@@ -408,7 +367,7 @@ def ai_clusters():
try:
store = storage()
if not store:
- return jsonify({'success': False, 'error': 'CBL not available'}), 500
+ return jsonify({'success': False, 'error': 'CBL not available'}), 503
data = request.json or {}
term = (data.get('term') or '').lower()
@@ -448,7 +407,7 @@ def ai_clusters():
def ai_stats():
store = storage()
if not store:
- return jsonify({'success': False, 'error': 'CBL not available'}), 500
+ return jsonify({'success': False, 'error': 'CBL not available'}), 503
rows = store.query(
"SELECT provider, COUNT(*) AS runs, "
"SUM(tokens_in) AS tokens_in, SUM(tokens_out) AS tokens_out "
@@ -463,7 +422,7 @@ def ai_stats():
def payload_reference_get():
store = storage()
if not store:
- return jsonify({'success': False, 'error': 'CBL not available'}), 500
+ return jsonify({'success': False, 'error': 'CBL not available'}), 503
data = store.get_payload_reference()
if data is None:
return jsonify({'success': False, 'error': 'Not found'}), 404
@@ -477,7 +436,7 @@ def payload_reference_load():
def payload_reference_seed():
store = storage()
if not store:
- return jsonify({'success': False, 'error': 'CBL not available'}), 500
+ return jsonify({'success': False, 'error': 'CBL not available'}), 503
template = os.path.join(DIRECTORY, 'payload_reference.json.template')
ok = store.seed_from_template('payload_reference', template)
return jsonify({'success': ok, 'backend': 'cbl'})
@@ -488,7 +447,7 @@ def payload_reference_save():
body = data.get('data', data)
store = storage()
if not store:
- return jsonify({'success': False, 'error': 'CBL not available'}), 500
+ return jsonify({'success': False, 'error': 'CBL not available'}), 503
store.save_payload_reference(body)
return jsonify({'success': True, 'backend': 'cbl'})
@@ -497,7 +456,7 @@ def payload_reference_save():
def models_get():
store = storage()
if not store:
- return jsonify({'success': False, 'error': 'CBL not available'}), 500
+ return jsonify({'success': False, 'error': 'CBL not available'}), 503
data = store.get_models_list()
if data is None:
return jsonify({'success': False, 'error': 'Not found'}), 404
@@ -511,7 +470,7 @@ def models_load():
def models_seed():
store = storage()
if not store:
- return jsonify({'success': False, 'error': 'CBL not available'}), 500
+ return jsonify({'success': False, 'error': 'CBL not available'}), 503
template = os.path.join(DIRECTORY, 'ai_models_list.json.template')
ok = store.seed_from_template('models_list', template)
return jsonify({'success': ok, 'backend': 'cbl'})
@@ -522,7 +481,7 @@ def models_save():
body = data.get('data', data)
store = storage()
if not store:
- return jsonify({'success': False, 'error': 'CBL not available'}), 500
+ return jsonify({'success': False, 'error': 'CBL not available'}), 503
store.save_models_list(body)
return jsonify({'success': True, 'backend': 'cbl'})
@@ -534,14 +493,14 @@ def models_save():
def storage_info():
store = storage()
if not store:
- return jsonify({'success': False, 'error': 'CBL not available'}), 500
+ return jsonify({'success': False, 'error': 'CBL not available'}), 503
return jsonify({'success': True, 'stats': store.stats(), 'backend': 'cbl'})
def storage_maintenance():
store = storage()
if not store:
- return jsonify({'success': False, 'error': 'CBL not available'}), 500
+ return jsonify({'success': False, 'error': 'CBL not available'}), 503
op = (request.json or {}).get('operation', 'compact')
return jsonify({'success': True, 'result': store.maintenance(op), 'backend': 'cbl'})
@@ -549,7 +508,7 @@ def storage_maintenance():
def storage_export():
store = storage()
if not store:
- return jsonify({'success': False, 'error': 'CBL not available'}), 500
+ return jsonify({'success': False, 'error': 'CBL not available'}), 503
path = store.export()
return send_file(
path,
@@ -564,8 +523,10 @@ def storage_import():
return jsonify({'success': False, 'error': 'No file provided'}), 400
store = storage()
if not store:
- return jsonify({'success': False, 'error': 'CBL not available'}), 500
+ return jsonify({'success': False, 'error': 'CBL not available'}), 503
result = store.import_from(request.files['file'])
+ # import_from() closes the DB; drop cached wrappers so the next request reopens.
+ _reset_storage_cache()
return jsonify({'success': True, 'result': result, 'backend': 'cbl'})
@@ -769,7 +730,7 @@ def _startup_banner(port: int) -> None:
import threading
import webbrowser
- PORT = get_server_port(default=8080)
+ PORT = get_server_port()
_startup_banner(PORT)
# ------------------------------------------------------------------
@@ -817,40 +778,36 @@ def _open_browser():
if is_supported():
print("🧭 Launching menubar/tray icon — use it to Quit cleanly.")
- # Flask runs on a daemon thread so the tray library can own the
- # main thread (NSApplication requirement on macOS).
+ # Flask on a non-daemon thread so a tray failure cannot kill the
+ # process. The tray library still owns the main thread (required
+ # by NSApplication on macOS). Bind 127.0.0.1 — this is a local
+ # helper, not a LAN server.
flask_thread = threading.Thread(
target=lambda: app.run(
- host='0.0.0.0',
+ host='127.0.0.1',
port=PORT,
debug=False,
use_reloader=False,
),
- daemon=True,
+ daemon=False,
name='flask-server',
)
flask_thread.start()
tray_ok = run_tray(PORT) if run_tray else False
if not tray_ok:
- # Tray failed to start — fall back to blocking on Flask so
- # the process doesn't exit immediately when daemon thread
- # is the only thing running.
logger.warning("tray failed; blocking on Flask thread")
flask_thread.join()
- # Tray exited cleanly → process is shutting down; nothing else
- # to do. (run_tray's Quit handler already calls os._exit.)
else:
- # Unsupported platform (e.g. Linux desktop) — just run Flask.
app.run(
- host='0.0.0.0',
+ host='127.0.0.1',
port=PORT,
debug=False,
use_reloader=False,
)
else:
app.run(
- host='0.0.0.0',
+ host='127.0.0.1',
port=PORT,
debug=False,
use_reloader=False,
diff --git a/app/app_base.py b/app/app_base.py
index fbb3a3d0..cd25451e 100644
--- a/app/app_base.py
+++ b/app/app_base.py
@@ -69,20 +69,12 @@
# Configure icecream
-# Use port 8888 by default (port 5000 is used by macOS AirPlay Receiver)
-# Playwright tests use PORT=5555
-PORT = int(os.environ.get('PORT', 8888))
-
-# Handle PyInstaller bundled resources
-def get_resource_path():
- """Get the correct resource path for both development and PyInstaller builds"""
- if getattr(sys, 'frozen', False):
- # Running as PyInstaller bundle
- return sys._MEIPASS
- else:
- # Running in development
- return os.path.dirname(os.path.abspath(__file__))
+# Default listen port is 8080 (port 5000 is used by macOS AirPlay Receiver).
+# Playwright sets PORT=5555. Docker / desktop bind whatever get_server_port()
+# resolves (env PORT, then config.json server.port, then 8080).
+from ports import DEFAULT_PORT, get_resource_path, get_server_port # noqa: E402
+PORT = get_server_port()
DIRECTORY = get_resource_path()
logger.info("Resource directory: %s", DIRECTORY)
@@ -90,23 +82,29 @@ def get_resource_path():
CORS(app) # Enable CORS for all routes
# ── Embedded Couchbase Lite (the only persistence layer) ────────────────
+# One process-wide CBLStore lives in cbl_store.get_store(). Do not construct
+# a second CBLStore here — CBL is single-writer and close_db() would leave
+# a stale wrapper.
try:
- from cbl_store import CBLStore, USE_CBL # type: ignore
+ from cbl_store import CBLStore, USE_CBL, get_store as _cbl_get_store # type: ignore
except Exception as _cbl_err: # noqa: BLE001 — CBL bindings might not be present in tests
CBLStore = None # type: ignore
USE_CBL = False
-
-_cbl_store_singleton = None
+ _cbl_get_store = lambda: None # noqa: E731
def _get_cbl_store():
- """Return the CBLStore singleton, or None if the bindings aren't available."""
- global _cbl_store_singleton
- if not USE_CBL or CBLStore is None:
- return None
- if _cbl_store_singleton is None:
- _cbl_store_singleton = CBLStore()
- return _cbl_store_singleton
+ """Return the process-wide CBLStore, or None if bindings aren't available.
+
+ Always go through ``app.storage()`` so there is a single owner. Fallback
+ to ``cbl_store.get_store()`` only if app.py has not been imported yet
+ (unit tests that import app_base in isolation).
+ """
+ try:
+ from app import storage as _app_storage
+ return _app_storage()
+ except Exception:
+ return _cbl_get_store()
# Static file serving
diff --git a/app/build/hooks/rt_set_cbl_path.py b/app/build/hooks/rt_set_cbl_path.py
new file mode 100644
index 00000000..b13d9843
--- /dev/null
+++ b/app/build/hooks/rt_set_cbl_path.py
@@ -0,0 +1,25 @@
+"""PyInstaller runtime hook: make libcblite discoverable via dlopen.
+
+On macOS the dylib is extracted into ``sys._MEIPASS``. On Windows, add that
+directory to the DLL search path so ``cblite.dll`` loads next to the exe.
+"""
+import os
+import sys
+
+if getattr(sys, "frozen", False):
+ base = getattr(sys, "_MEIPASS", os.path.dirname(sys.executable))
+ if sys.platform == "darwin":
+ os.environ["DYLD_LIBRARY_PATH"] = base + os.pathsep + os.environ.get("DYLD_LIBRARY_PATH", "")
+ # PyInstaller 6 onedir also keeps binaries next to the executable.
+ exe_dir = os.path.dirname(sys.executable)
+ os.environ["DYLD_LIBRARY_PATH"] = exe_dir + os.pathsep + os.environ["DYLD_LIBRARY_PATH"]
+ elif sys.platform == "win32":
+ try:
+ os.add_dll_directory(base)
+ except (OSError, AttributeError):
+ os.environ["PATH"] = base + os.pathsep + os.environ.get("PATH", "")
+ exe_dir = os.path.dirname(sys.executable)
+ try:
+ os.add_dll_directory(exe_dir)
+ except (OSError, AttributeError):
+ os.environ["PATH"] = exe_dir + os.pathsep + os.environ.get("PATH", "")
diff --git a/app/build/macos/entitlements.plist b/app/build/macos/entitlements.plist
new file mode 100644
index 00000000..cb3a17c9
--- /dev/null
+++ b/app/build/macos/entitlements.plist
@@ -0,0 +1,14 @@
+
+
+
+
+ com.apple.security.cs.allow-unsigned-executable-memory
+
+ com.apple.security.cs.disable-library-validation
+
+ com.apple.security.network.client
+
+ com.apple.security.network.server
+
+
+
diff --git a/app/build_mac.spec b/app/build_mac.spec
index 54f558ea..a7847fa8 100644
--- a/app/build_mac.spec
+++ b/app/build_mac.spec
@@ -1,95 +1,78 @@
# -*- mode: python ; coding: utf-8 -*-
"""
-PyInstaller spec file for Couchbase Query Analyzer - macOS Edition (v5.0.0)
+PyInstaller spec for Couchbase Query Analyzer — macOS (onedir .app).
-Builds a self-contained macOS application bundle with:
-- Flask web server backend
-- Couchbase Lite integration
-- Code signing and notarization support
-- Universal binary (Intel + Apple Silicon)
-
-Usage:
- pyinstaller build_mac.spec --clean
+cwd must be app/. Native libcblite is fetched by scripts/fetch_libcblite_macos.sh.
"""
import os
import sys
from pathlib import Path
-# PyInstaller build helpers
from PyInstaller.utils.hooks import collect_all
-# Spec lives at project root (post v5.0.0 migration)
-project_root = Path(__file__).parent
+project_root = Path(SPECPATH)
sys.path.insert(0, str(project_root))
-# ============================================================================
-# CONFIGURATION
-# ============================================================================
+from packaging_manifest import desktop_hiddenimports # noqa: E402
+from version import __version__ as APP_VERSION # noqa: E402
-APP_NAME = 'QueryAnalyzer'
-APP_VERSION = '5.0.0'
-BUNDLE_ID = 'io.fuj.queryanalyzer'
+APP_NAME = "QueryAnalyzer"
+BUNDLE_ID = "io.fuj.queryanalyzer"
-# CouchbaseLite binary paths — bundled libcblite.dylib for the .app
-# Set CBL_MACOS_DYLIB env var if your dylib lives elsewhere.
CBL_MACOS_DYLIB = os.environ.get(
- 'CBL_MACOS_DYLIB',
- str(project_root / 'vendor' / 'macos' / 'libcblite.3.dylib')
+ "CBL_MACOS_DYLIB",
+ str(project_root / "vendor" / "macos" / "libcblite.3.dylib"),
)
-
-# ============================================================================
-# COLLECT COUCHBASELITE RESOURCES
-# ============================================================================
+if not os.path.isfile(CBL_MACOS_DYLIB):
+ raise SystemExit(
+ f"missing CBL dylib: {CBL_MACOS_DYLIB}\n"
+ "Run: ./scripts/fetch_libcblite_macos.sh"
+ )
try:
- cbl_all = collect_all('CouchbaseLite')
- cbl_binaries = cbl_all[0] # binaries
- cbl_datas = cbl_all[1] # datas
- cbl_hidden = cbl_all[2] # hiddenimports
-except Exception as e:
- print(f"Warning: Could not collect CouchbaseLite resources: {e}")
- cbl_binaries = []
- cbl_datas = []
- cbl_hidden = []
+ cbl_all = collect_all("CouchbaseLite")
+ cbl_binaries, cbl_datas, cbl_hidden = cbl_all[0], cbl_all[1], cbl_all[2]
+except Exception as exc: # noqa: BLE001
+ print(f"Warning: Could not collect CouchbaseLite resources: {exc}")
+ cbl_binaries, cbl_datas, cbl_hidden = [], [], []
-# ============================================================================
-# BLOCK ANALYSIS
-# ============================================================================
+icns = project_root / "assets" / "img" / "QueryAnalyzer.icns"
+entitlements = project_root / "build" / "macos" / "entitlements.plist"
+runtime_hook = project_root / "build" / "hooks" / "rt_set_cbl_path.py"
block_cipher = None
-# ============================================================================
-# SPEC CONFIGURATION
-# ============================================================================
-
a = Analysis(
- ['app.py'],
- pathex=[],
- binaries=cbl_binaries + [
- (CBL_MACOS_DYLIB, '.') if os.path.exists(CBL_MACOS_DYLIB) else None
- ] if os.path.exists(CBL_MACOS_DYLIB) else cbl_binaries,
+ ["app.py"],
+ pathex=[str(project_root)],
+ binaries=cbl_binaries + [(CBL_MACOS_DYLIB, ".")],
datas=cbl_datas + [
- ('ai_analyzer.py', '.'),
- ('blob_storage.py', '.'),
- ('payload_reference.json.template', '.'),
- ('ai_models_list.json.template', '.'),
- ('index.html', '.'),
- ('assets', 'assets'),
- ('docs', 'docs'),
+ ("config.default.json", "."),
+ ("ai_analyzer.py", "."),
+ ("blob_storage.py", "."),
+ ("cbl_store.py", "."),
+ ("app_base.py", "."),
+ ("logging_config.py", "."),
+ ("tray.py", "."),
+ ("ports.py", "."),
+ ("version.py", "."),
+ ("toon_python.py", "."),
+ ("payload_reference.json.template", "."),
+ ("ai_models_list.json.template", "."),
+ ("index.html", "."),
+ ("assets", "assets"),
+ ("docs", "docs"),
],
- hiddenimports=cbl_hidden + [
- 'platformdirs',
- 'CouchbaseLite._PyCBL',
- 'flask',
- 'flask_cors',
+ hiddenimports=cbl_hidden + desktop_hiddenimports() + [
+ "CouchbaseLite._PyCBL",
+ "rumps",
+ "tray",
],
- hookspath=[os.path.join(project_root, 'build', 'hooks')],
+ hookspath=[],
hooksconfig={},
- runtime_hooks=[os.path.join(project_root, 'build', 'hooks', 'rt_set_cbl_path.py')],
+ runtime_hooks=[str(runtime_hook)],
excludedimports=[],
- win_no_prefer_redirects=False,
- win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
@@ -107,13 +90,12 @@ exe = EXE(
strip=False,
upx=True,
upx_exclude=[],
- runtime_tmpdir=None,
- console=False, # GUI app, no console window
+ console=True, # unsigned beta: Terminal shows the bind URL / tracebacks
disable_windowed_traceback=False,
- target_arch='universal2', # Intel + Apple Silicon
- codesign_identity=os.environ.get('APPLE_DEV_ID'),
- entitlements_file=os.path.join(project_root, 'build', 'macos', 'entitlements.plist'),
- icon=None,
+ target_arch=None, # native arch of the build Python (arm64 on macos-latest)
+ codesign_identity=os.environ.get("APPLE_DEV_ID") or None,
+ entitlements_file=str(entitlements) if entitlements.is_file() else None,
+ icon=str(icns) if icns.is_file() else None,
)
coll = COLLECT(
@@ -129,15 +111,18 @@ coll = COLLECT(
app = BUNDLE(
coll,
- name=f'{APP_NAME}.app',
- icon=None,
+ name=f"{APP_NAME}.app",
+ icon=str(icns) if icns.is_file() else None,
bundle_identifier=BUNDLE_ID,
info_plist={
- 'NSPrincipalClass': 'NSApplication',
- 'NSHighResolutionCapable': 'True',
- 'CFBundleVersion': APP_VERSION,
- 'CFBundleShortVersionString': APP_VERSION,
- 'NSRequiresIPhoneOS': False,
- 'LSMinimumSystemVersion': '11.0', # macOS Big Sur minimum
+ "NSPrincipalClass": "NSApplication",
+ "NSHighResolutionCapable": True,
+ "CFBundleName": "CB Query Analyzer (Beta)",
+ "CFBundleDisplayName": "CB Query Analyzer (Beta)",
+ "CFBundleVersion": APP_VERSION,
+ "CFBundleShortVersionString": APP_VERSION,
+ "LSMinimumSystemVersion": "11.0",
+ "LSBackgroundOnly": False,
+ "LSUIElement": False,
},
)
diff --git a/app/build_win.spec b/app/build_win.spec
index 3e2a9460..daf07576 100644
--- a/app/build_win.spec
+++ b/app/build_win.spec
@@ -1,97 +1,79 @@
# -*- mode: python ; coding: utf-8 -*-
"""
-PyInstaller spec file for Couchbase Query Analyzer - Windows Edition (v5.0.0)
+PyInstaller spec for Couchbase Query Analyzer — Windows (onedir).
-Builds a self-contained Windows executable with:
-- Flask web server backend
-- Couchbase Lite integration
-- Code signing support (Authenticode)
-- System tray integration (pystray)
-
-Usage:
- pyinstaller build_win.spec --clean
+onedir (not onefile) so cblite.dll sits next to the exe. cwd must be app/.
+Native DLL is fetched by scripts/fetch_libcblite_windows.ps1.
"""
import os
import sys
from pathlib import Path
-# PyInstaller build helpers
from PyInstaller.utils.hooks import collect_all
-# Spec lives at project root (post v5.0.0 migration)
-project_root = Path(__file__).parent
+project_root = Path(SPECPATH)
sys.path.insert(0, str(project_root))
-# ============================================================================
-# CONFIGURATION
-# ============================================================================
+from packaging_manifest import desktop_hiddenimports # noqa: E402
+from version import __version__ as APP_VERSION # noqa: E402
-APP_NAME = 'QueryAnalyzer'
-APP_VERSION = '5.0.0'
+APP_NAME = "QueryAnalyzer"
-# CouchbaseLite binary paths — bundled cblite.dll for the .exe.
-# Set CBL_WINDOWS_DLL env var if your DLL lives elsewhere.
CBL_WINDOWS_DLL = os.environ.get(
- 'CBL_WINDOWS_DLL',
- str(project_root / 'vendor' / 'windows' / 'cblite.dll')
+ "CBL_WINDOWS_DLL",
+ str(project_root / "vendor" / "windows" / "cblite.dll"),
)
-
-# ============================================================================
-# COLLECT COUCHBASELITE RESOURCES
-# ============================================================================
+if not os.path.isfile(CBL_WINDOWS_DLL):
+ raise SystemExit(
+ f"missing CBL dll: {CBL_WINDOWS_DLL}\n"
+ "Run: .\\scripts\\fetch_libcblite_windows.ps1"
+ )
try:
- cbl_all = collect_all('CouchbaseLite')
- cbl_binaries = cbl_all[0] # binaries
- cbl_datas = cbl_all[1] # datas
- cbl_hidden = cbl_all[2] # hiddenimports
-except Exception as e:
- print(f"Warning: Could not collect CouchbaseLite resources: {e}")
- cbl_binaries = []
- cbl_datas = []
- cbl_hidden = []
+ cbl_all = collect_all("CouchbaseLite")
+ cbl_binaries, cbl_datas, cbl_hidden = cbl_all[0], cbl_all[1], cbl_all[2]
+except Exception as exc: # noqa: BLE001
+ print(f"Warning: Could not collect CouchbaseLite resources: {exc}")
+ cbl_binaries, cbl_datas, cbl_hidden = [], [], []
-# ============================================================================
-# BLOCK ANALYSIS
-# ============================================================================
+ico = project_root / "assets" / "img" / "app_icon.ico"
+runtime_hook = project_root / "build" / "hooks" / "rt_set_cbl_path.py"
block_cipher = None
-# ============================================================================
-# SPEC CONFIGURATION
-# ============================================================================
-
a = Analysis(
- ['app.py'],
- pathex=[],
- binaries=cbl_binaries + [
- (CBL_WINDOWS_DLL, '.') if os.path.exists(CBL_WINDOWS_DLL) else None
- ] if os.path.exists(CBL_WINDOWS_DLL) else cbl_binaries,
+ ["app.py"],
+ pathex=[str(project_root)],
+ binaries=cbl_binaries + [(CBL_WINDOWS_DLL, ".")],
datas=cbl_datas + [
- ('ai_analyzer.py', '.'),
- ('blob_storage.py', '.'),
- ('payload_reference.json.template', '.'),
- ('ai_models_list.json.template', '.'),
- ('index.html', '.'),
- ('assets', 'assets'),
- ('docs', 'docs'),
+ ("config.default.json", "."),
+ ("ai_analyzer.py", "."),
+ ("blob_storage.py", "."),
+ ("cbl_store.py", "."),
+ ("app_base.py", "."),
+ ("logging_config.py", "."),
+ ("tray.py", "."),
+ ("ports.py", "."),
+ ("version.py", "."),
+ ("toon_python.py", "."),
+ ("payload_reference.json.template", "."),
+ ("ai_models_list.json.template", "."),
+ ("index.html", "."),
+ ("assets", "assets"),
+ ("docs", "docs"),
],
- hiddenimports=cbl_hidden + [
- 'platformdirs',
- 'CouchbaseLite._PyCBL',
- 'flask',
- 'flask_cors',
- 'pystray',
- 'PIL.Image',
- 'PIL.ImageDraw',
+ hiddenimports=cbl_hidden + desktop_hiddenimports() + [
+ "CouchbaseLite._PyCBL",
+ "pystray",
+ "PIL.Image",
+ "PIL.ImageDraw",
+ "tray",
],
- hookspath=[os.path.join(project_root, 'build', 'hooks')],
+ hookspath=[],
hooksconfig={},
- runtime_hooks=[os.path.join(project_root, 'build', 'hooks', 'rt_set_cbl_path.py')],
+ runtime_hooks=[str(runtime_hook)],
excludedimports=[],
- win_no_prefer_redirects=False,
- win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
@@ -101,22 +83,17 @@ pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
pyz,
a.scripts,
- a.binaries,
- a.zipfiles,
- a.datas,
[],
+ exclude_binaries=True,
name=APP_NAME,
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
- runtime_tmpdir=None,
- console=False, # GUI app, no console window
+ console=True, # unsigned beta: console shows the bind URL / tracebacks
disable_windowed_traceback=False,
- icon=os.path.join(project_root, 'build', 'windows', 'app_icon.ico')
- if os.path.exists(os.path.join(project_root, 'build', 'windows', 'app_icon.ico'))
- else None,
+ icon=str(ico) if ico.is_file() else None,
)
coll = COLLECT(
diff --git a/app/cbl_artifact.py b/app/cbl_artifact.py
new file mode 100644
index 00000000..bfa4a5eb
--- /dev/null
+++ b/app/cbl_artifact.py
@@ -0,0 +1,28 @@
+"""Couchbase Lite C community-edition artifact URLs.
+
+Used by the fetch scripts (documented) and by unit tests so download URLs
+cannot drift from the Dockerfile. Does not hit the network.
+"""
+
+CBL_VERSION = "3.2.4"
+# Pin the experimental Python bindings to a SHA that matches CBL C 3.2.4
+# (`where` on index config). `--depth 1` of master will drift and break the
+# CFFI compile against these headers.
+CBL_PYTHON_GIT = "https://github.com/couchbaselabs/couchbase-lite-python.git"
+CBL_PYTHON_SHA = "2d1c79041de30a26a8b7f632d52a89fc031f1600"
+BASE = "https://packages.couchbase.com/releases/couchbase-lite-c"
+
+# platform in {"macos", "windows-x86_64", "linux-x86_64", "linux-arm64"}
+_VALID_PLATFORMS = frozenset(
+ {"macos", "windows-x86_64", "linux-x86_64", "linux-arm64"}
+)
+
+
+def community_zip_url(version: str, platform: str) -> str:
+ if platform not in _VALID_PLATFORMS:
+ raise ValueError(f"unknown CBL platform: {platform}")
+ return f"{BASE}/{version}/couchbase-lite-c-community-{version}-{platform}.zip"
+
+
+def dylib_members():
+ return ("libcblite-community/lib/libcblite.3.dylib",)
diff --git a/app/cbl_store.py b/app/cbl_store.py
index 5e3b985b..e06b3ddd 100644
--- a/app/cbl_store.py
+++ b/app/cbl_store.py
@@ -71,6 +71,8 @@
_db_lock = threading.Lock()
_db: Optional["Database"] = None
_coll_cache: Dict[str, Any] = {} # name -> raw CBLCollection*
+_store_instance: Optional["CBLStore"] = None
+_store_lock = threading.Lock()
# ============================================================================
@@ -118,9 +120,10 @@ def get_db() -> "Database":
def close_db() -> None:
"""Close the singleton database and clear caches."""
- global _db
+ global _db, _store_instance
with _db_lock:
_coll_cache.clear()
+ _store_instance = None
if _db is not None:
try:
_db.close()
@@ -781,3 +784,25 @@ def stats(self) -> Dict[str, Any]:
out["db_path"] = str(Path(CBL_DB_DIR) / f"{CBL_DB_NAME}.cblite2")
return out
+
+
+def get_store() -> Optional["CBLStore"]:
+ """Process-wide CBLStore singleton. Returns None if bindings are missing."""
+ global _store_instance
+ if not USE_CBL:
+ return None
+ with _store_lock:
+ if _store_instance is None:
+ try:
+ _store_instance = CBLStore()
+ except Exception:
+ logger.exception("cbl storage failed to initialize")
+ return None
+ return _store_instance
+
+
+def reset_store() -> None:
+ """Drop the cached CBLStore wrapper (e.g. after close_db / import)."""
+ global _store_instance
+ with _store_lock:
+ _store_instance = None
diff --git a/app/config.json b/app/config.json
deleted file mode 100644
index de3de603..00000000
--- a/app/config.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "server": {
- "port": 8080
- },
- "cluster": {
- "name": "My Couchbase Cluster",
- "url": "http://localhost:8091",
- "username": "Administrator",
- "password": "password",
- "type": "Self-Hosted"
- },
- "clusterTypes": [
- "Self-Hosted",
- "Capella (DBaaS)"
- ],
- "bucketConfig": {
- "bucket": "cb_tools",
- "analyzerScope": "query",
- "analyzerCollection": "analyzer",
- "preferencesScope": "_default",
- "preferencesCollection": "_default"
- }
-}
diff --git a/app/docker-compose.yml b/app/docker-compose.yml
index 15e0a026..237420f5 100644
--- a/app/docker-compose.yml
+++ b/app/docker-compose.yml
@@ -18,7 +18,8 @@
#
# Notes:
# - Server Edition v4.0.0-Beta.2 uses embedded Couchbase Lite (no external DB needed).
-# - The Flask server uses STORAGE_BACKEND=cbl by default.
+# - Couchbase Lite is the only storage backend. The Server SDK is gone;
+# STORAGE_BACKEND is ignored if set.
# - User preferences and analyzer data stored in CBL at /app/data/cb_tools_db.cblite2/
# - gunicorn -w 1 is REQUIRED — CBL is single-writer.
@@ -32,7 +33,6 @@ services:
ports:
- "${HOST_PORT:-8080}:${PORT:-8080}"
environment:
- STORAGE_BACKEND: cbl
CBL_DB_DIR: /app/data
CBL_DB_NAME: cb_tools_db
PORT: "${PORT:-8080}"
diff --git a/app/index.html b/app/index.html
index 2b9a281c..bc949bf1 100644
--- a/app/index.html
+++ b/app/index.html
@@ -2,7 +2,7 @@
@@ -155,7 +155,7 @@
- v4.0.0-Beta
+ v4.0.0-Beta.2
diff --git a/app/packaging_manifest.py b/app/packaging_manifest.py
new file mode 100644
index 00000000..f5072e95
--- /dev/null
+++ b/app/packaging_manifest.py
@@ -0,0 +1,35 @@
+"""Contract for what a desktop (PyInstaller) bundle must contain.
+
+Imported by the spec files and by unit tests so the "CBL + tray + AI"
+surface cannot drift between macOS and Windows builds.
+"""
+
+REQUIRED_PY_MODULES = (
+ "cbl_store",
+ "blob_storage",
+ "app_base",
+ "logging_config",
+ "ai_analyzer",
+ "tray",
+ "CouchbaseLite",
+)
+
+REQUIRED_NATIVE = {
+ "darwin": "libcblite.3.dylib",
+ "win32": "cblite.dll",
+}
+
+
+def desktop_hiddenimports():
+ """PyInstaller hiddenimports that every desktop build must collect."""
+ extras = (
+ "ports",
+ "version",
+ "flask",
+ "flask_cors",
+ "openai",
+ "platformdirs",
+ "requests",
+ "icecream",
+ )
+ return list(REQUIRED_PY_MODULES) + list(extras)
diff --git a/app/ports.py b/app/ports.py
new file mode 100644
index 00000000..93cf24b7
--- /dev/null
+++ b/app/ports.py
@@ -0,0 +1,86 @@
+"""HTTP listen port + resource-path helpers shared by app.py and app_base.py.
+
+Kept in its own module so app_base can resolve PORT without importing app.py
+(which would be a circular import).
+"""
+from __future__ import annotations
+
+import json
+import logging
+import os
+import sys
+
+logger = logging.getLogger(__name__)
+
+DEFAULT_PORT = 8080
+
+
+def get_resource_path() -> str:
+ """Directory that holds bundled static files.
+
+ PyInstaller extracts datas into ``sys._MEIPASS``. Source runs use the
+ directory that contains this file (``app/``).
+ """
+ if getattr(sys, "frozen", False):
+ return sys._MEIPASS # type: ignore[attr-defined]
+ return os.path.dirname(os.path.abspath(__file__))
+
+
+def _load_server_config() -> dict:
+ """Load the first existing JSON config from the candidate list.
+
+ Search order:
+ 1. $APP_CONFIG_FILE
+ 2. config.json (optional user override next to the app)
+ 3. config.default.json (shipped default, bundled by PyInstaller)
+ """
+ candidates = []
+ env_path = os.environ.get("APP_CONFIG_FILE")
+ if env_path:
+ candidates.append(env_path)
+ here = get_resource_path()
+ candidates.extend(
+ [
+ os.path.join(here, "config.json"),
+ os.path.join(here, "config.default.json"),
+ ]
+ )
+ for path in candidates:
+ if not path or not os.path.isfile(path):
+ continue
+ try:
+ with open(path, "r", encoding="utf-8") as fh:
+ data = json.load(fh)
+ logger.info("loaded server config path=%s", path)
+ return data if isinstance(data, dict) else {}
+ except Exception as exc: # noqa: BLE001 — config is best-effort
+ logger.warning("failed to read config path=%s: %s", path, exc)
+ return {}
+
+
+def get_server_port(default: int = DEFAULT_PORT) -> int:
+ """Resolve the HTTP listen port.
+
+ Priority:
+ 1. $PORT env var (Docker / start scripts / Playwright)
+ 2. config.json ``server.port``
+ 3. ``default`` (8080)
+ """
+ env = os.environ.get("PORT")
+ if env:
+ try:
+ port = int(env)
+ if 0 < port < 65536:
+ return port
+ logger.warning("ignoring out-of-range PORT env var=%s", env)
+ except ValueError:
+ logger.warning("ignoring invalid PORT env var=%s", env)
+ cfg = _load_server_config().get("server") or {}
+ val = cfg.get("port")
+ if isinstance(val, int) and 0 < val < 65536:
+ return val
+ if isinstance(val, str) and val.isdigit():
+ port = int(val)
+ if 0 < port < 65536:
+ return port
+ return default
diff --git a/app/requirements-desktop.txt b/app/requirements-desktop.txt
new file mode 100644
index 00000000..566d86eb
--- /dev/null
+++ b/app/requirements-desktop.txt
@@ -0,0 +1,7 @@
+# Desktop (PyInstaller) extras on top of the Server Edition requirements.
+# Install with: pip install -r requirements-desktop.txt
+-r requirements.txt
+pyinstaller>=6,<7
+rumps>=0.4.0; sys_platform == "darwin"
+pystray>=0.19.0; sys_platform == "win32"
+Pillow>=10,<12
diff --git a/app/requirements.txt b/app/requirements.txt
index ee8c6a75..ca8afb1e 100644
--- a/app/requirements.txt
+++ b/app/requirements.txt
@@ -15,6 +15,9 @@ cffi>=1.16.0
# under the `toon_python` name so existing `import toon_python` call sites
# (e.g. in app_base.py) keep working unchanged.
python-toon>=0.1.0
+# OpenAI SDK is used for OpenAI + xAI Grok analysis. Anthropic uses requests.
+openai>=1.40.0,<2
+httpx>=0.27,<1
# Couchbase Lite Python bindings are NOT on PyPI; the Dockerfile and
# PyInstaller specs build them from couchbaselabs/couchbase-lite-python
# against libcblite (libcblite.so / libcblite.dylib / cblite.dll).
diff --git a/app/scripts/build_msi.ps1 b/app/scripts/build_msi.ps1
index 17d0bbbe..2fdaa5cd 100644
--- a/app/scripts/build_msi.ps1
+++ b/app/scripts/build_msi.ps1
@@ -144,17 +144,11 @@ $WxsContent = @"
-
+
-
@@ -212,6 +206,7 @@ $WxsContent = @"
+
@@ -238,7 +233,7 @@ $WxsContent = @"
$WxsContent | Out-File -FilePath $WxsFile -Encoding UTF8
-log_info "✓ WiX source created: $WxsFile"
+Write-Info "WiX source created: $WxsFile"
# ============================================================================
# Compile WiX source
diff --git a/app/scripts/fetch_libcblite_macos.sh b/app/scripts/fetch_libcblite_macos.sh
index 0849b7a7..0ac14cf1 100755
--- a/app/scripts/fetch_libcblite_macos.sh
+++ b/app/scripts/fetch_libcblite_macos.sh
@@ -1,96 +1,77 @@
#!/bin/bash
#
-# Fetch CouchbaseLite native dylib for macOS
-#
-# Downloads the universal binary (Intel + Apple Silicon) libcblite.3.dylib
-# from the official Couchbase repository and places it in vendor/macos/
+# Fetch Couchbase Lite C (community) for macOS and place libcblite.3.dylib
+# plus headers under app/vendor/macos/.
#
+# URL tree matches app/Dockerfile (releases/couchbase-lite-c//...).
# Usage: ./scripts/fetch_libcblite_macos.sh [--clean]
+#
+set -euo pipefail
-set -e
-
-# Configuration
-CBLITE_VERSION="3.1.0"
-DOWNLOAD_URL="https://packages.couchbase.com/couchbase-lite/swift/macos/libcblite-${CBLITE_VERSION}-macos-universal.zip"
-VENDOR_DIR="vendor/macos"
+APP_DIR="$(cd "$(dirname "$0")/.." && pwd)"
+CBL_VERSION="${CBL_VERSION:-3.2.4}"
+DEST="${APP_DIR}/vendor/macos"
+URL="https://packages.couchbase.com/releases/couchbase-lite-c/${CBL_VERSION}/couchbase-lite-c-community-${CBL_VERSION}-macos.zip"
DYLIB_NAME="libcblite.3.dylib"
-EXPECTED_FILE="${VENDOR_DIR}/${DYLIB_NAME}"
-# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
-NC='\033[0m' # No Color
-
-log_info() {
- echo -e "${GREEN}[INFO]${NC} $1"
-}
-
-log_warn() {
- echo -e "${YELLOW}[WARN]${NC} $1"
-}
+NC='\033[0m'
-log_error() {
- echo -e "${RED}[ERROR]${NC} $1"
-}
+log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
+log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
+log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
-# Parse command line arguments
CLEAN_MODE=false
while [[ $# -gt 0 ]]; do
- case $1 in
- --clean)
- CLEAN_MODE=true
- shift
- ;;
- *)
- log_error "Unknown argument: $1"
- exit 1
- ;;
+ case "$1" in
+ --clean) CLEAN_MODE=true; shift ;;
+ *) log_error "Unknown argument: $1"; exit 1 ;;
esac
done
-# Create vendor directory
-mkdir -p "$VENDOR_DIR"
+mkdir -p "${DEST}/include"
-# Clean if requested
if [ "$CLEAN_MODE" = true ]; then
- log_info "Cleaning existing dylib..."
- rm -f "$EXPECTED_FILE"
+ log_info "Cleaning existing dylib and headers..."
+ rm -f "${DEST}/${DYLIB_NAME}"
+ rm -rf "${DEST}/include"
+ mkdir -p "${DEST}/include"
fi
-# Check if dylib already exists
-if [ -f "$EXPECTED_FILE" ]; then
- log_info "✓ libcblite.3.dylib already exists at $EXPECTED_FILE"
- exit 0
-fi
-
-log_info "Downloading libcblite v$CBLITE_VERSION for macOS..."
+log_info "Downloading Couchbase Lite C ${CBL_VERSION} for macOS..."
+log_info "URL: ${URL}"
-# Create temporary directory
-TEMP_DIR=$(mktemp -d)
-trap "rm -rf $TEMP_DIR" EXIT
+TMP="$(mktemp -d)"
+trap 'rm -rf "$TMP"' EXIT
-# Download and extract
-if ! curl -fsSL "$DOWNLOAD_URL" -o "$TEMP_DIR/libcblite.zip"; then
- log_error "Failed to download libcblite from $DOWNLOAD_URL"
+HTTP_CODE="$(curl -sS -L -o "${TMP}/cbl.zip" -w "%{http_code}" "${URL}")"
+if [ "${HTTP_CODE}" != "200" ]; then
+ log_error "Download failed HTTP ${HTTP_CODE} from ${URL}"
exit 1
fi
-log_info "Extracting dylib..."
-if ! unzip -q "$TEMP_DIR/libcblite.zip" -d "$TEMP_DIR"; then
- log_error "Failed to extract dylib"
+log_info "Extracting archive..."
+unzip -q "${TMP}/cbl.zip" -d "${TMP}/extract"
+
+DYLIB="$(find "${TMP}/extract" -name "${DYLIB_NAME}" | head -1 || true)"
+if [ -z "${DYLIB}" ]; then
+ log_error "${DYLIB_NAME} not found in downloaded archive"
+ find "${TMP}/extract" -type f | head -50 >&2
exit 1
fi
+cp "${DYLIB}" "${DEST}/${DYLIB_NAME}"
-# Find and copy the dylib
-if [ -f "$TEMP_DIR/libcblite.3.dylib" ]; then
- cp "$TEMP_DIR/libcblite.3.dylib" "$EXPECTED_FILE"
-elif [ -f "$TEMP_DIR/libcblite/libcblite.3.dylib" ]; then
- cp "$TEMP_DIR/libcblite/libcblite.3.dylib" "$EXPECTED_FILE"
+# Also copy unversioned / sibling dylibs if present (loader sometimes wants them).
+find "$(dirname "${DYLIB}")" -name 'libcblite*.dylib' -exec cp {} "${DEST}/" \;
+
+INC="$(find "${TMP}/extract" -type d -name include | head -1 || true)"
+if [ -n "${INC}" ]; then
+ cp -R "${INC}/." "${DEST}/include/"
else
- log_error "libcblite.3.dylib not found in downloaded archive"
- exit 1
+ log_warn "No include/ directory in archive — CFFI build may fail"
fi
-log_info "✓ libcblite.3.dylib downloaded and placed at $EXPECTED_FILE"
-log_info "File size: $(ls -lh $EXPECTED_FILE | awk '{print $5}')"
+log_info "✓ ${DYLIB_NAME} placed at ${DEST}/${DYLIB_NAME}"
+log_info "File size: $(ls -lh "${DEST}/${DYLIB_NAME}" | awk '{print $5}')"
diff --git a/app/scripts/fetch_libcblite_windows.ps1 b/app/scripts/fetch_libcblite_windows.ps1
index 45461bb4..edc1e5f1 100644
--- a/app/scripts/fetch_libcblite_windows.ps1
+++ b/app/scripts/fetch_libcblite_windows.ps1
@@ -1,109 +1,95 @@
#
-# Fetch CouchbaseLite native DLL for Windows
-#
-# Downloads cblite.dll from the official Couchbase repository
-# and places it in vendor/windows/
+# Fetch Couchbase Lite C (community) for Windows and place cblite.dll
+# plus headers under app/vendor/windows/.
#
+# URL tree matches app/Dockerfile (releases/couchbase-lite-c//...).
# Usage: .\scripts\fetch_libcblite_windows.ps1 [-Clean]
-
+#
param(
[switch]$Clean
)
-# Configuration
-$CBL_VERSION = "3.1.0"
-$DOWNLOAD_URL = "https://packages.couchbase.com/couchbase-lite/cpp/windows/cblite-${CBL_VERSION}-windows-x64.zip"
-$VENDOR_DIR = "vendor\windows"
-$DLL_NAME = "cblite.dll"
-$EXPECTED_FILE = Join-Path $VENDOR_DIR $DLL_NAME
+$ErrorActionPreference = "Stop"
-function Write-Info {
- param([string]$Message)
- Write-Host "[INFO] $Message" -ForegroundColor Green
-}
+$AppDir = Split-Path -Parent $PSScriptRoot
+$CblVersion = if ($env:CBL_VERSION) { $env:CBL_VERSION } else { "3.2.4" }
+$Dest = Join-Path $AppDir "vendor\windows"
+$Url = "https://packages.couchbase.com/releases/couchbase-lite-c/$CblVersion/couchbase-lite-c-community-$CblVersion-windows-x86_64.zip"
+$DllName = "cblite.dll"
+$ExpectedFile = Join-Path $Dest $DllName
-function Write-Warn {
- param([string]$Message)
- Write-Host "[WARN] $Message" -ForegroundColor Yellow
-}
+function Write-Info([string]$Message) { Write-Host "[INFO] $Message" -ForegroundColor Green }
+function Write-Warn([string]$Message) { Write-Host "[WARN] $Message" -ForegroundColor Yellow }
+function Write-Err([string]$Message) { Write-Host "[ERROR] $Message" -ForegroundColor Red }
-function Write-Error {
- param([string]$Message)
- Write-Host "[ERROR] $Message" -ForegroundColor Red
-}
+New-Item -ItemType Directory -Path (Join-Path $Dest "include") -Force | Out-Null
-# Create vendor directory
-if (-not (Test-Path $VENDOR_DIR)) {
- New-Item -ItemType Directory -Path $VENDOR_DIR -Force | Out-Null
-}
-
-# Clean if requested
if ($Clean) {
- Write-Info "Cleaning existing DLL..."
- if (Test-Path $EXPECTED_FILE) {
- Remove-Item $EXPECTED_FILE -Force
- }
-}
-
-# Check if DLL already exists
-if (Test-Path $EXPECTED_FILE) {
- Write-Info "✓ cblite.dll already exists at $EXPECTED_FILE"
- exit 0
+ Write-Info "Cleaning existing DLL and headers..."
+ if (Test-Path $ExpectedFile) { Remove-Item $ExpectedFile -Force }
+ $inc = Join-Path $Dest "include"
+ if (Test-Path $inc) { Remove-Item $inc -Recurse -Force }
+ New-Item -ItemType Directory -Path $inc -Force | Out-Null
}
-Write-Info "Downloading cblite v$CBL_VERSION for Windows..."
-
-# Create temporary directory
-$TEMP_DIR = New-TemporaryFile | ForEach-Object { Remove-Item $_; New-Item -ItemType Directory -Path $_ }
+Write-Info "Downloading Couchbase Lite C $CblVersion for Windows..."
+Write-Info "URL: $Url"
+$TempDir = Join-Path ([System.IO.Path]::GetTempPath()) ("cbl-fetch-" + [guid]::NewGuid().ToString())
+New-Item -ItemType Directory -Path $TempDir -Force | Out-Null
try {
- # Download
- $ZipFile = Join-Path $TEMP_DIR "cblite.zip"
+ $ZipFile = Join-Path $TempDir "cbl.zip"
try {
- Invoke-WebRequest -Uri $DOWNLOAD_URL -OutFile $ZipFile -ErrorAction Stop
+ $response = Invoke-WebRequest -Uri $Url -OutFile $ZipFile -PassThru
+ if ($response.StatusCode -ne 200) {
+ Write-Err "Download failed HTTP $($response.StatusCode) from $Url"
+ exit 1
+ }
}
catch {
- Write-Error "Failed to download cblite from $DOWNLOAD_URL"
+ Write-Err "Failed to download cblite from $Url"
+ Write-Err $_.Exception.Message
exit 1
}
- Write-Info "Extracting DLL..."
- try {
- Expand-Archive -Path $ZipFile -DestinationPath $TEMP_DIR -Force -ErrorAction Stop
- }
- catch {
- Write-Error "Failed to extract DLL"
+ Write-Info "Extracting archive..."
+ Expand-Archive -Path $ZipFile -DestinationPath (Join-Path $TempDir "extract") -Force
+
+ $dll = Get-ChildItem -Path (Join-Path $TempDir "extract") -Filter $DllName -Recurse -ErrorAction SilentlyContinue |
+ Select-Object -First 1
+ if (-not $dll) {
+ Write-Err "$DllName not found in downloaded archive"
exit 1
}
+ Copy-Item -Path $dll.FullName -Destination $ExpectedFile -Force
- # Find and copy the DLL
- $DllFound = $false
- $PossiblePaths = @(
- (Join-Path $TEMP_DIR $DLL_NAME),
- (Join-Path $TEMP_DIR "bin" $DLL_NAME),
- (Join-Path $TEMP_DIR "cblite" $DLL_NAME),
- (Join-Path $TEMP_DIR "cblite" "bin" $DLL_NAME),
- (Get-ChildItem -Path $TEMP_DIR -Filter $DLL_NAME -Recurse -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty FullName)
- )
+ Get-ChildItem -Path $dll.DirectoryName -Filter "cblite*.dll" | ForEach-Object {
+ Copy-Item $_.FullName -Destination $Dest -Force
+ }
- foreach ($Path in $PossiblePaths) {
- if ($Path -and (Test-Path $Path)) {
- Copy-Item -Path $Path -Destination $EXPECTED_FILE -Force
- $DllFound = $true
- break
- }
+ # Import lib is required to compile the CFFI bindings (runtime still uses the DLL).
+ $lib = Get-ChildItem -Path (Join-Path $TempDir "extract") -Filter "cblite.lib" -Recurse -ErrorAction SilentlyContinue |
+ Select-Object -First 1
+ if ($lib) {
+ Copy-Item -Path $lib.FullName -Destination (Join-Path $Dest "cblite.lib") -Force
+ }
+ else {
+ Write-Warn "cblite.lib not found in archive — CFFI build may fail"
}
- if (-not $DllFound) {
- Write-Error "cblite.dll not found in downloaded archive"
- exit 1
+ $incDir = Get-ChildItem -Path (Join-Path $TempDir "extract") -Directory -Recurse -Filter "include" |
+ Select-Object -First 1
+ if ($incDir) {
+ Copy-Item -Path (Join-Path $incDir.FullName "*") -Destination (Join-Path $Dest "include") -Recurse -Force
+ }
+ else {
+ Write-Warn "No include/ directory in archive — CFFI build may fail"
}
- $FileSize = (Get-Item $EXPECTED_FILE).Length
- Write-Info "✓ cblite.dll downloaded and placed at $EXPECTED_FILE"
+ $FileSize = (Get-Item $ExpectedFile).Length
+ Write-Info "✓ $DllName placed at $ExpectedFile"
Write-Info "File size: $FileSize bytes"
}
finally {
- # Cleanup
- Remove-Item -Path $TEMP_DIR -Recurse -Force -ErrorAction SilentlyContinue
+ Remove-Item -Path $TempDir -Recurse -Force -ErrorAction SilentlyContinue
}
diff --git a/app/scripts/sign_and_notarize_macos.sh b/app/scripts/sign_and_notarize_macos.sh
index c47c41d7..1545d56a 100755
--- a/app/scripts/sign_and_notarize_macos.sh
+++ b/app/scripts/sign_and_notarize_macos.sh
@@ -50,11 +50,10 @@ if [ -z "$APPLE_DEV_ID" ]; then
exit 1
fi
-# Check for dylib
-DYLIB_PATH="$APP_BUNDLE/Contents/MacOS/libcblite.3.dylib"
-if [ ! -f "$DYLIB_PATH" ]; then
- log_warn "libcblite.3.dylib not found at $DYLIB_PATH"
- DYLIB_PATH=""
+# PyInstaller puts dylibs under Contents/Frameworks or Contents/Resources.
+DYLIB_PATH="$(find "$APP_BUNDLE/Contents" -name 'libcblite*.dylib' 2>/dev/null | head -1 || true)"
+if [ -z "$DYLIB_PATH" ]; then
+ log_warn "libcblite*.dylib not found anywhere under $APP_BUNDLE/Contents"
fi
# ============================================================================
diff --git a/app/version.py b/app/version.py
new file mode 100644
index 00000000..94888042
--- /dev/null
+++ b/app/version.py
@@ -0,0 +1,7 @@
+"""Single source of truth for the Server Edition version string.
+
+Import this module from app.py, PyInstaller specs, and tests. Do not copy
+the version into HTML/Dockerfile/specs by hand without updating here first.
+"""
+
+__version__ = "4.0.0-Beta.2"
diff --git a/node_modules/.bin/acorn b/node_modules/.bin/acorn
deleted file mode 120000
index cf767603..00000000
--- a/node_modules/.bin/acorn
+++ /dev/null
@@ -1 +0,0 @@
-../acorn/bin/acorn
\ No newline at end of file
diff --git a/node_modules/.bin/baseline-browser-mapping b/node_modules/.bin/baseline-browser-mapping
deleted file mode 120000
index d2961883..00000000
--- a/node_modules/.bin/baseline-browser-mapping
+++ /dev/null
@@ -1 +0,0 @@
-../baseline-browser-mapping/dist/cli.js
\ No newline at end of file
diff --git a/node_modules/.bin/browserslist b/node_modules/.bin/browserslist
deleted file mode 120000
index 3cd991b2..00000000
--- a/node_modules/.bin/browserslist
+++ /dev/null
@@ -1 +0,0 @@
-../browserslist/cli.js
\ No newline at end of file
diff --git a/node_modules/.bin/create-jest b/node_modules/.bin/create-jest
deleted file mode 120000
index 8d6301e0..00000000
--- a/node_modules/.bin/create-jest
+++ /dev/null
@@ -1 +0,0 @@
-../create-jest/bin/create-jest.js
\ No newline at end of file
diff --git a/node_modules/.bin/escodegen b/node_modules/.bin/escodegen
deleted file mode 120000
index 01a7c325..00000000
--- a/node_modules/.bin/escodegen
+++ /dev/null
@@ -1 +0,0 @@
-../escodegen/bin/escodegen.js
\ No newline at end of file
diff --git a/node_modules/.bin/esgenerate b/node_modules/.bin/esgenerate
deleted file mode 120000
index 7d0293e6..00000000
--- a/node_modules/.bin/esgenerate
+++ /dev/null
@@ -1 +0,0 @@
-../escodegen/bin/esgenerate.js
\ No newline at end of file
diff --git a/node_modules/.bin/esparse b/node_modules/.bin/esparse
deleted file mode 120000
index 7423b18b..00000000
--- a/node_modules/.bin/esparse
+++ /dev/null
@@ -1 +0,0 @@
-../esprima/bin/esparse.js
\ No newline at end of file
diff --git a/node_modules/.bin/esvalidate b/node_modules/.bin/esvalidate
deleted file mode 120000
index 16069eff..00000000
--- a/node_modules/.bin/esvalidate
+++ /dev/null
@@ -1 +0,0 @@
-../esprima/bin/esvalidate.js
\ No newline at end of file
diff --git a/node_modules/.bin/he b/node_modules/.bin/he
deleted file mode 120000
index 2a8eb5e0..00000000
--- a/node_modules/.bin/he
+++ /dev/null
@@ -1 +0,0 @@
-../he/bin/he
\ No newline at end of file
diff --git a/node_modules/.bin/http-server b/node_modules/.bin/http-server
deleted file mode 120000
index cb3b6668..00000000
--- a/node_modules/.bin/http-server
+++ /dev/null
@@ -1 +0,0 @@
-../http-server/bin/http-server
\ No newline at end of file
diff --git a/node_modules/.bin/import-local-fixture b/node_modules/.bin/import-local-fixture
deleted file mode 120000
index ff4b1048..00000000
--- a/node_modules/.bin/import-local-fixture
+++ /dev/null
@@ -1 +0,0 @@
-../import-local/fixtures/cli.js
\ No newline at end of file
diff --git a/node_modules/.bin/jest b/node_modules/.bin/jest
deleted file mode 120000
index 61c18615..00000000
--- a/node_modules/.bin/jest
+++ /dev/null
@@ -1 +0,0 @@
-../jest/bin/jest.js
\ No newline at end of file
diff --git a/node_modules/.bin/js-yaml b/node_modules/.bin/js-yaml
deleted file mode 120000
index 9dbd010d..00000000
--- a/node_modules/.bin/js-yaml
+++ /dev/null
@@ -1 +0,0 @@
-../js-yaml/bin/js-yaml.js
\ No newline at end of file
diff --git a/node_modules/.bin/jsesc b/node_modules/.bin/jsesc
deleted file mode 120000
index 7237604c..00000000
--- a/node_modules/.bin/jsesc
+++ /dev/null
@@ -1 +0,0 @@
-../jsesc/bin/jsesc
\ No newline at end of file
diff --git a/node_modules/.bin/json5 b/node_modules/.bin/json5
deleted file mode 120000
index 217f3798..00000000
--- a/node_modules/.bin/json5
+++ /dev/null
@@ -1 +0,0 @@
-../json5/lib/cli.js
\ No newline at end of file
diff --git a/node_modules/.bin/mime b/node_modules/.bin/mime
deleted file mode 120000
index fbb7ee0e..00000000
--- a/node_modules/.bin/mime
+++ /dev/null
@@ -1 +0,0 @@
-../mime/cli.js
\ No newline at end of file
diff --git a/node_modules/.bin/node-which b/node_modules/.bin/node-which
deleted file mode 120000
index 6f8415ec..00000000
--- a/node_modules/.bin/node-which
+++ /dev/null
@@ -1 +0,0 @@
-../which/bin/node-which
\ No newline at end of file
diff --git a/node_modules/.bin/opener b/node_modules/.bin/opener
deleted file mode 120000
index 891b847f..00000000
--- a/node_modules/.bin/opener
+++ /dev/null
@@ -1 +0,0 @@
-../opener/bin/opener-bin.js
\ No newline at end of file
diff --git a/node_modules/.bin/parser b/node_modules/.bin/parser
deleted file mode 120000
index ce7bf97e..00000000
--- a/node_modules/.bin/parser
+++ /dev/null
@@ -1 +0,0 @@
-../@babel/parser/bin/babel-parser.js
\ No newline at end of file
diff --git a/node_modules/.bin/playwright b/node_modules/.bin/playwright
deleted file mode 120000
index c30d07fa..00000000
--- a/node_modules/.bin/playwright
+++ /dev/null
@@ -1 +0,0 @@
-../@playwright/test/cli.js
\ No newline at end of file
diff --git a/node_modules/.bin/playwright-core b/node_modules/.bin/playwright-core
deleted file mode 120000
index 08d6c281..00000000
--- a/node_modules/.bin/playwright-core
+++ /dev/null
@@ -1 +0,0 @@
-../playwright-core/cli.js
\ No newline at end of file
diff --git a/node_modules/.bin/resolve b/node_modules/.bin/resolve
deleted file mode 120000
index b6afda6c..00000000
--- a/node_modules/.bin/resolve
+++ /dev/null
@@ -1 +0,0 @@
-../resolve/bin/resolve
\ No newline at end of file
diff --git a/node_modules/.bin/semver b/node_modules/.bin/semver
deleted file mode 120000
index 5aaadf42..00000000
--- a/node_modules/.bin/semver
+++ /dev/null
@@ -1 +0,0 @@
-../semver/bin/semver.js
\ No newline at end of file
diff --git a/node_modules/.bin/update-browserslist-db b/node_modules/.bin/update-browserslist-db
deleted file mode 120000
index b11e16f3..00000000
--- a/node_modules/.bin/update-browserslist-db
+++ /dev/null
@@ -1 +0,0 @@
-../update-browserslist-db/cli.js
\ No newline at end of file
diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json
deleted file mode 100644
index 7c1fbbae..00000000
--- a/node_modules/.package-lock.json
+++ /dev/null
@@ -1,4764 +0,0 @@
-{
- "name": "cb-completed-request",
- "version": "0.0.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "node_modules/@babel/code-frame": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
- "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.27.1",
- "js-tokens": "^4.0.0",
- "picocolors": "^1.1.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/compat-data": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz",
- "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/core": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz",
- "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@babel/generator": "^7.28.5",
- "@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-module-transforms": "^7.28.3",
- "@babel/helpers": "^7.28.4",
- "@babel/parser": "^7.28.5",
- "@babel/template": "^7.27.2",
- "@babel/traverse": "^7.28.5",
- "@babel/types": "^7.28.5",
- "@jridgewell/remapping": "^2.3.5",
- "convert-source-map": "^2.0.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.3",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
- }
- },
- "node_modules/@babel/generator": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz",
- "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.28.5",
- "@babel/types": "^7.28.5",
- "@jridgewell/gen-mapping": "^0.3.12",
- "@jridgewell/trace-mapping": "^0.3.28",
- "jsesc": "^3.0.2"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-compilation-targets": {
- "version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
- "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/compat-data": "^7.27.2",
- "@babel/helper-validator-option": "^7.27.1",
- "browserslist": "^4.24.0",
- "lru-cache": "^5.1.1",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-globals": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
- "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-imports": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
- "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/traverse": "^7.27.1",
- "@babel/types": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-transforms": {
- "version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz",
- "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-module-imports": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.27.1",
- "@babel/traverse": "^7.28.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-plugin-utils": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
- "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-string-parser": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
- "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
- "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-option": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
- "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helpers": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz",
- "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/template": "^7.27.2",
- "@babel/types": "^7.28.4"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/parser": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz",
- "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.28.5"
- },
- "bin": {
- "parser": "bin/babel-parser.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/plugin-syntax-async-generators": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
- "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-bigint": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
- "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-class-properties": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
- "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.12.13"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-class-static-block": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
- "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-import-attributes": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz",
- "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-import-meta": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
- "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-json-strings": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
- "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz",
- "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
- "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-numeric-separator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
- "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-optional-catch-binding": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-optional-chaining": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-private-property-in-object": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
- "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-top-level-await": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
- "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz",
- "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/template": {
- "version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
- "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@babel/parser": "^7.27.2",
- "@babel/types": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz",
- "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@babel/generator": "^7.28.5",
- "@babel/helper-globals": "^7.28.0",
- "@babel/parser": "^7.28.5",
- "@babel/template": "^7.27.2",
- "@babel/types": "^7.28.5",
- "debug": "^4.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/types": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
- "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-string-parser": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.28.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@bcoe/v8-coverage": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
- "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@istanbuljs/load-nyc-config": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
- "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "camelcase": "^5.3.1",
- "find-up": "^4.1.0",
- "get-package-type": "^0.1.0",
- "js-yaml": "^3.13.1",
- "resolve-from": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@istanbuljs/schema": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
- "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@jest/console": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
- "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "jest-message-util": "^29.7.0",
- "jest-util": "^29.7.0",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/core": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
- "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/console": "^29.7.0",
- "@jest/reporters": "^29.7.0",
- "@jest/test-result": "^29.7.0",
- "@jest/transform": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.9",
- "jest-changed-files": "^29.7.0",
- "jest-config": "^29.7.0",
- "jest-haste-map": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-regex-util": "^29.6.3",
- "jest-resolve": "^29.7.0",
- "jest-resolve-dependencies": "^29.7.0",
- "jest-runner": "^29.7.0",
- "jest-runtime": "^29.7.0",
- "jest-snapshot": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-validate": "^29.7.0",
- "jest-watcher": "^29.7.0",
- "micromatch": "^4.0.4",
- "pretty-format": "^29.7.0",
- "slash": "^3.0.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
- }
- },
- "node_modules/@jest/environment": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
- "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/fake-timers": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "jest-mock": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/expect": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
- "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "expect": "^29.7.0",
- "jest-snapshot": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/expect-utils": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
- "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "jest-get-type": "^29.6.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/fake-timers": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
- "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "@sinonjs/fake-timers": "^10.0.2",
- "@types/node": "*",
- "jest-message-util": "^29.7.0",
- "jest-mock": "^29.7.0",
- "jest-util": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/globals": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
- "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/environment": "^29.7.0",
- "@jest/expect": "^29.7.0",
- "@jest/types": "^29.6.3",
- "jest-mock": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/reporters": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
- "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^29.7.0",
- "@jest/test-result": "^29.7.0",
- "@jest/transform": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@jridgewell/trace-mapping": "^0.3.18",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^6.0.0",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.1.3",
- "jest-message-util": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-worker": "^29.7.0",
- "slash": "^3.0.0",
- "string-length": "^4.0.1",
- "strip-ansi": "^6.0.0",
- "v8-to-istanbul": "^9.0.1"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
- }
- },
- "node_modules/@jest/schemas": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
- "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@sinclair/typebox": "^0.27.8"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/source-map": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
- "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/trace-mapping": "^0.3.18",
- "callsites": "^3.0.0",
- "graceful-fs": "^4.2.9"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/test-result": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
- "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/console": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "collect-v8-coverage": "^1.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/test-sequencer": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
- "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/test-result": "^29.7.0",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.7.0",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/transform": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
- "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/core": "^7.11.6",
- "@jest/types": "^29.6.3",
- "@jridgewell/trace-mapping": "^0.3.18",
- "babel-plugin-istanbul": "^6.1.1",
- "chalk": "^4.0.0",
- "convert-source-map": "^2.0.0",
- "fast-json-stable-stringify": "^2.1.0",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.7.0",
- "jest-regex-util": "^29.6.3",
- "jest-util": "^29.7.0",
- "micromatch": "^4.0.4",
- "pirates": "^4.0.4",
- "slash": "^3.0.0",
- "write-file-atomic": "^4.0.2"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/types": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
- "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/schemas": "^29.6.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.13",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
- "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.5.0",
- "@jridgewell/trace-mapping": "^0.3.24"
- }
- },
- "node_modules/@jridgewell/remapping": {
- "version": "2.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
- "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.24"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
- "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
- "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.31",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
- "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "node_modules/@playwright/test": {
- "version": "1.56.1",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.56.1.tgz",
- "integrity": "sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==",
- "dev": true,
- "dependencies": {
- "playwright": "1.56.1"
- },
- "bin": {
- "playwright": "cli.js"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@playwright/test/node_modules/playwright": {
- "version": "1.56.1",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.1.tgz",
- "integrity": "sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==",
- "dev": true,
- "dependencies": {
- "playwright-core": "1.56.1"
- },
- "bin": {
- "playwright": "cli.js"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "fsevents": "2.3.2"
- }
- },
- "node_modules/@sinclair/typebox": {
- "version": "0.27.8",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
- "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@sinonjs/commons": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
- "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "type-detect": "4.0.8"
- }
- },
- "node_modules/@sinonjs/fake-timers": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
- "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@sinonjs/commons": "^3.0.0"
- }
- },
- "node_modules/@tootallnate/once": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
- "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@types/babel__core": {
- "version": "7.20.5",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
- "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.20.7",
- "@babel/types": "^7.20.7",
- "@types/babel__generator": "*",
- "@types/babel__template": "*",
- "@types/babel__traverse": "*"
- }
- },
- "node_modules/@types/babel__generator": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
- "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.0.0"
- }
- },
- "node_modules/@types/babel__template": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
- "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0"
- }
- },
- "node_modules/@types/babel__traverse": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
- "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.28.2"
- }
- },
- "node_modules/@types/graceful-fs": {
- "version": "4.1.9",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
- "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/istanbul-lib-coverage": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
- "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/istanbul-lib-report": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
- "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/istanbul-lib-coverage": "*"
- }
- },
- "node_modules/@types/istanbul-reports": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
- "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/istanbul-lib-report": "*"
- }
- },
- "node_modules/@types/jsdom": {
- "version": "20.0.1",
- "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz",
- "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*",
- "@types/tough-cookie": "*",
- "parse5": "^7.0.0"
- }
- },
- "node_modules/@types/node": {
- "version": "24.10.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz",
- "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "undici-types": "~7.16.0"
- }
- },
- "node_modules/@types/stack-utils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
- "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/tough-cookie": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz",
- "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/yargs": {
- "version": "17.0.35",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
- "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/@types/yargs-parser": {
- "version": "21.0.3",
- "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
- "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/abab": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
- "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
- "deprecated": "Use your platform's native atob() and btoa() methods instead",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/acorn": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
- "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-globals": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz",
- "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "acorn": "^8.1.0",
- "acorn-walk": "^8.0.2"
- }
- },
- "node_modules/acorn-walk": {
- "version": "8.3.4",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
- "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "acorn": "^8.11.0"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "type-fest": "^0.21.3"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "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": {
- "sprintf-js": "~1.0.2"
- }
- },
- "node_modules/async": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
- "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
- "dev": true
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/babel-jest": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
- "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/transform": "^29.7.0",
- "@types/babel__core": "^7.1.14",
- "babel-plugin-istanbul": "^6.1.1",
- "babel-preset-jest": "^29.6.3",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.8.0"
- }
- },
- "node_modules/babel-plugin-istanbul": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
- "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-instrument": "^5.0.4",
- "test-exclude": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
- "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@babel/core": "^7.12.3",
- "@babel/parser": "^7.14.7",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.2.0",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/babel-plugin-jest-hoist": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
- "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/template": "^7.3.3",
- "@babel/types": "^7.3.3",
- "@types/babel__core": "^7.1.14",
- "@types/babel__traverse": "^7.0.6"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/babel-preset-current-node-syntax": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz",
- "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-bigint": "^7.8.3",
- "@babel/plugin-syntax-class-properties": "^7.12.13",
- "@babel/plugin-syntax-class-static-block": "^7.14.5",
- "@babel/plugin-syntax-import-attributes": "^7.24.7",
- "@babel/plugin-syntax-import-meta": "^7.10.4",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
- "@babel/plugin-syntax-top-level-await": "^7.14.5"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0 || ^8.0.0-0"
- }
- },
- "node_modules/babel-preset-jest": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
- "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "babel-plugin-jest-hoist": "^29.6.3",
- "babel-preset-current-node-syntax": "^1.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/baseline-browser-mapping": {
- "version": "2.9.4",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.4.tgz",
- "integrity": "sha512-ZCQ9GEWl73BVm8bu5Fts8nt7MHdbt5vY9bP6WGnUh+r3l8M7CgfyTlwsgCbMC66BNxPr6Xoce3j66Ms5YUQTNA==",
- "dev": true,
- "license": "Apache-2.0",
- "bin": {
- "baseline-browser-mapping": "dist/cli.js"
- }
- },
- "node_modules/basic-auth": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
- "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "5.1.2"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/browserslist": {
- "version": "4.28.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
- "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "baseline-browser-mapping": "^2.9.0",
- "caniuse-lite": "^1.0.30001759",
- "electron-to-chromium": "^1.5.263",
- "node-releases": "^2.0.27",
- "update-browserslist-db": "^1.2.0"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
- "node_modules/bser": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
- "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "node-int64": "^0.4.0"
- }
- },
- "node_modules/buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/call-bind-apply-helpers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
- "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
- "dev": true,
- "dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/call-bound": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
- "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
- "dev": true,
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "get-intrinsic": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=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": {
- "node": ">=6"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001759",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001759.tgz",
- "integrity": "sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "CC-BY-4.0"
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/char-regex": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
- "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/ci-info": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
- "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/sibiraj-s"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cjs-module-lexer": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz",
- "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "iojs": ">= 1.0.0",
- "node": ">= 0.12.0"
- }
- },
- "node_modules/collect-v8-coverage": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz",
- "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/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"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/convert-source-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/corser": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz",
- "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/create-jest": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
- "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.9",
- "jest-config": "^29.7.0",
- "jest-util": "^29.7.0",
- "prompts": "^2.0.1"
- },
- "bin": {
- "create-jest": "bin/create-jest.js"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/cross-spawn": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/cssom": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
- "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/cssstyle": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
- "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cssom": "~0.3.6"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cssstyle/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/data-urls": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz",
- "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "abab": "^2.0.6",
- "whatwg-mimetype": "^3.0.0",
- "whatwg-url": "^11.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/decimal.js": {
- "version": "10.6.0",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz",
- "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/dedent": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz",
- "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "babel-plugin-macros": "^3.1.0"
- },
- "peerDependenciesMeta": {
- "babel-plugin-macros": {
- "optional": true
- }
- }
- },
- "node_modules/deepmerge": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
- "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/detect-newline": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
- "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/diff-sequences": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
- "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/domexception": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
- "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==",
- "deprecated": "Use your platform's native DOMException instead",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "webidl-conversions": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/dunder-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
- "dev": true,
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.1",
- "es-errors": "^1.3.0",
- "gopd": "^1.2.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/electron-to-chromium": {
- "version": "1.5.266",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.266.tgz",
- "integrity": "sha512-kgWEglXvkEfMH7rxP5OSZZwnaDWT7J9EoZCujhnpLbfi0bbNtRkgdX2E3gt0Uer11c61qCYktB3hwkAS325sJg==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/emittery": {
- "version": "0.13.1",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
- "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/emittery?sponsor=1"
- }
- },
- "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/entities": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
- "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/error-ex": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz",
- "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-arrayish": "^0.2.1"
- }
- },
- "node_modules/es-define-property": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-object-atoms": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
- "dev": true,
- "dependencies": {
- "es-errors": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-set-tostringtag": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
- "dev": true,
- "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/escalade": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
- "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/escodegen": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
- "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "esprima": "^4.0.1",
- "estraverse": "^5.2.0",
- "esutils": "^2.0.2"
- },
- "bin": {
- "escodegen": "bin/escodegen.js",
- "esgenerate": "bin/esgenerate.js"
- },
- "engines": {
- "node": ">=6.0"
- },
- "optionalDependencies": {
- "source-map": "~0.6.1"
- }
- },
- "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": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.0"
- }
- },
- "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": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/eventemitter3": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
- "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
- "dev": true
- },
- "node_modules/execa": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.1",
- "onetime": "^5.1.2",
- "signal-exit": "^3.0.3",
- "strip-final-newline": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/exit": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
- "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/expect": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
- "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/expect-utils": "^29.7.0",
- "jest-get-type": "^29.6.3",
- "jest-matcher-utils": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-util": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "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/fb-watchman": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
- "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "bser": "2.1.1"
- }
- },
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/follow-redirects": {
- "version": "1.15.11",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
- "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/RubenVerborgh"
- }
- ],
- "engines": {
- "node": ">=4.0"
- },
- "peerDependenciesMeta": {
- "debug": {
- "optional": true
- }
- }
- },
- "node_modules/form-data": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
- "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "es-set-tostringtag": "^2.1.0",
- "hasown": "^2.0.2",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "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": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
- "dev": true,
- "dependencies": {
- "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"
- }
- },
- "node_modules/get-package-type": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
- "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/get-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
- "dev": true,
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/gopd": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
- "dev": true,
- "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-tostringtag/-/has-tostringtag-1.0.2.tgz",
- "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-symbols": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dev": true,
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true,
- "bin": {
- "he": "bin/he"
- }
- },
- "node_modules/html-encoding-sniffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
- "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
- "dev": true,
- "dependencies": {
- "whatwg-encoding": "^2.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/html-escaper": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
- "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "dev": true,
- "license": "MIT"
- },
- "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,
- "dependencies": {
- "eventemitter3": "^4.0.0",
- "follow-redirects": "^1.0.0",
- "requires-port": "^1.0.0"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/http-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@tootallnate/once": "2",
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/http-server": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz",
- "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==",
- "dev": true,
- "dependencies": {
- "basic-auth": "^2.0.1",
- "chalk": "^4.1.2",
- "corser": "^2.0.1",
- "he": "^1.2.0",
- "html-encoding-sniffer": "^3.0.0",
- "http-proxy": "^1.18.1",
- "mime": "^1.6.0",
- "minimist": "^1.2.6",
- "opener": "^1.5.1",
- "portfinder": "^1.0.28",
- "secure-compare": "3.0.1",
- "union": "~0.5.0",
- "url-join": "^4.0.1"
- },
- "bin": {
- "http-server": "bin/http-server"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/human-signals": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
- "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=10.17.0"
- }
- },
- "node_modules/iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "dev": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/import-local": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
- "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "pkg-dir": "^4.2.0",
- "resolve-cwd": "^3.0.0"
- },
- "bin": {
- "import-local-fixture": "fixtures/cli.js"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/is-core-module": {
- "version": "2.16.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
- "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "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/is-generator-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
- "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "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": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-potential-custom-element-name": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
- "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/istanbul-lib-coverage": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
- "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-instrument": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
- "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@babel/core": "^7.23.9",
- "@babel/parser": "^7.23.9",
- "@istanbuljs/schema": "^0.1.3",
- "istanbul-lib-coverage": "^3.2.0",
- "semver": "^7.5.4"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/istanbul-lib-instrument/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/istanbul-lib-report": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
- "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^4.0.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/istanbul-lib-source-maps": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
- "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/istanbul-reports": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz",
- "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "html-escaper": "^2.0.0",
- "istanbul-lib-report": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
- "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/core": "^29.7.0",
- "@jest/types": "^29.6.3",
- "import-local": "^3.0.2",
- "jest-cli": "^29.7.0"
- },
- "bin": {
- "jest": "bin/jest.js"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
- }
- },
- "node_modules/jest-changed-files": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
- "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "execa": "^5.0.0",
- "jest-util": "^29.7.0",
- "p-limit": "^3.1.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-circus": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
- "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/environment": "^29.7.0",
- "@jest/expect": "^29.7.0",
- "@jest/test-result": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "co": "^4.6.0",
- "dedent": "^1.0.0",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^29.7.0",
- "jest-matcher-utils": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-runtime": "^29.7.0",
- "jest-snapshot": "^29.7.0",
- "jest-util": "^29.7.0",
- "p-limit": "^3.1.0",
- "pretty-format": "^29.7.0",
- "pure-rand": "^6.0.0",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-cli": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
- "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/core": "^29.7.0",
- "@jest/test-result": "^29.7.0",
- "@jest/types": "^29.6.3",
- "chalk": "^4.0.0",
- "create-jest": "^29.7.0",
- "exit": "^0.1.2",
- "import-local": "^3.0.2",
- "jest-config": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-validate": "^29.7.0",
- "yargs": "^17.3.1"
- },
- "bin": {
- "jest": "bin/jest.js"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
- }
- },
- "node_modules/jest-config": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
- "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/core": "^7.11.6",
- "@jest/test-sequencer": "^29.7.0",
- "@jest/types": "^29.6.3",
- "babel-jest": "^29.7.0",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "deepmerge": "^4.2.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "jest-circus": "^29.7.0",
- "jest-environment-node": "^29.7.0",
- "jest-get-type": "^29.6.3",
- "jest-regex-util": "^29.6.3",
- "jest-resolve": "^29.7.0",
- "jest-runner": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-validate": "^29.7.0",
- "micromatch": "^4.0.4",
- "parse-json": "^5.2.0",
- "pretty-format": "^29.7.0",
- "slash": "^3.0.0",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "@types/node": "*",
- "ts-node": ">=9.0.0"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "ts-node": {
- "optional": true
- }
- }
- },
- "node_modules/jest-diff": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
- "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.0.0",
- "diff-sequences": "^29.6.3",
- "jest-get-type": "^29.6.3",
- "pretty-format": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-docblock": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
- "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "detect-newline": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-each": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
- "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.6.3",
- "jest-util": "^29.7.0",
- "pretty-format": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-environment-jsdom": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz",
- "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/environment": "^29.7.0",
- "@jest/fake-timers": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/jsdom": "^20.0.0",
- "@types/node": "*",
- "jest-mock": "^29.7.0",
- "jest-util": "^29.7.0",
- "jsdom": "^20.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "canvas": "^2.5.0"
- },
- "peerDependenciesMeta": {
- "canvas": {
- "optional": true
- }
- }
- },
- "node_modules/jest-environment-node": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
- "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/environment": "^29.7.0",
- "@jest/fake-timers": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "jest-mock": "^29.7.0",
- "jest-util": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-get-type": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
- "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-haste-map": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
- "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "@types/graceful-fs": "^4.1.3",
- "@types/node": "*",
- "anymatch": "^3.0.3",
- "fb-watchman": "^2.0.0",
- "graceful-fs": "^4.2.9",
- "jest-regex-util": "^29.6.3",
- "jest-util": "^29.7.0",
- "jest-worker": "^29.7.0",
- "micromatch": "^4.0.4",
- "walker": "^1.0.8"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "optionalDependencies": {
- "fsevents": "^2.3.2"
- }
- },
- "node_modules/jest-leak-detector": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
- "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "jest-get-type": "^29.6.3",
- "pretty-format": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-matcher-utils": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
- "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.0.0",
- "jest-diff": "^29.7.0",
- "jest-get-type": "^29.6.3",
- "pretty-format": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-message-util": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
- "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.12.13",
- "@jest/types": "^29.6.3",
- "@types/stack-utils": "^2.0.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "micromatch": "^4.0.4",
- "pretty-format": "^29.7.0",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-mock": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
- "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "jest-util": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-pnp-resolver": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
- "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- },
- "peerDependencies": {
- "jest-resolve": "*"
- },
- "peerDependenciesMeta": {
- "jest-resolve": {
- "optional": true
- }
- }
- },
- "node_modules/jest-regex-util": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
- "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-resolve": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
- "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.7.0",
- "jest-pnp-resolver": "^1.2.2",
- "jest-util": "^29.7.0",
- "jest-validate": "^29.7.0",
- "resolve": "^1.20.0",
- "resolve.exports": "^2.0.0",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-resolve-dependencies": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
- "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "jest-regex-util": "^29.6.3",
- "jest-snapshot": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-runner": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
- "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/console": "^29.7.0",
- "@jest/environment": "^29.7.0",
- "@jest/test-result": "^29.7.0",
- "@jest/transform": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "emittery": "^0.13.1",
- "graceful-fs": "^4.2.9",
- "jest-docblock": "^29.7.0",
- "jest-environment-node": "^29.7.0",
- "jest-haste-map": "^29.7.0",
- "jest-leak-detector": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-resolve": "^29.7.0",
- "jest-runtime": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-watcher": "^29.7.0",
- "jest-worker": "^29.7.0",
- "p-limit": "^3.1.0",
- "source-map-support": "0.5.13"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-runtime": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
- "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/environment": "^29.7.0",
- "@jest/fake-timers": "^29.7.0",
- "@jest/globals": "^29.7.0",
- "@jest/source-map": "^29.6.3",
- "@jest/test-result": "^29.7.0",
- "@jest/transform": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "cjs-module-lexer": "^1.0.0",
- "collect-v8-coverage": "^1.0.0",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-mock": "^29.7.0",
- "jest-regex-util": "^29.6.3",
- "jest-resolve": "^29.7.0",
- "jest-snapshot": "^29.7.0",
- "jest-util": "^29.7.0",
- "slash": "^3.0.0",
- "strip-bom": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-snapshot": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
- "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/core": "^7.11.6",
- "@babel/generator": "^7.7.2",
- "@babel/plugin-syntax-jsx": "^7.7.2",
- "@babel/plugin-syntax-typescript": "^7.7.2",
- "@babel/types": "^7.3.3",
- "@jest/expect-utils": "^29.7.0",
- "@jest/transform": "^29.7.0",
- "@jest/types": "^29.6.3",
- "babel-preset-current-node-syntax": "^1.0.0",
- "chalk": "^4.0.0",
- "expect": "^29.7.0",
- "graceful-fs": "^4.2.9",
- "jest-diff": "^29.7.0",
- "jest-get-type": "^29.6.3",
- "jest-matcher-utils": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-util": "^29.7.0",
- "natural-compare": "^1.4.0",
- "pretty-format": "^29.7.0",
- "semver": "^7.5.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-snapshot/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/jest-util": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
- "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "graceful-fs": "^4.2.9",
- "picomatch": "^2.2.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-validate": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
- "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.6.3",
- "leven": "^3.1.0",
- "pretty-format": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-validate/node_modules/camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/jest-watcher": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
- "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/test-result": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "emittery": "^0.13.1",
- "jest-util": "^29.7.0",
- "string-length": "^4.0.1"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-worker": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
- "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*",
- "jest-util": "^29.7.0",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-worker/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "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": "3.14.2",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
- "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/jsdom": {
- "version": "20.0.3",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz",
- "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "abab": "^2.0.6",
- "acorn": "^8.8.1",
- "acorn-globals": "^7.0.0",
- "cssom": "^0.5.0",
- "cssstyle": "^2.3.0",
- "data-urls": "^3.0.2",
- "decimal.js": "^10.4.2",
- "domexception": "^4.0.0",
- "escodegen": "^2.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.2",
- "parse5": "^7.1.1",
- "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": "^11.0.0",
- "ws": "^8.11.0",
- "xml-name-validator": "^4.0.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "canvas": "^2.5.0"
- },
- "peerDependenciesMeta": {
- "canvas": {
- "optional": true
- }
- }
- },
- "node_modules/jsesc": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
- "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/leven": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
- "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/lines-and-columns": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "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": {
- "yallist": "^3.0.2"
- }
- },
- "node_modules/make-dir": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
- "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "semver": "^7.5.3"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/make-dir/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/makeerror": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
- "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "tmpl": "1.0.5"
- }
- },
- "node_modules/math-intrinsics": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
- "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/micromatch": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "dev": true,
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "node_modules/natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/node-int64": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
- "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/node-releases": {
- "version": "2.0.27",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
- "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
- "dev": true,
- "license": "MIT"
- },
- "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": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/nwsapi": {
- "version": "2.2.23",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.23.tgz",
- "integrity": "sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/object-inspect": {
- "version": "1.13.4",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
- "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/opener": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
- "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
- "dev": true,
- "bin": {
- "opener": "bin/opener-bin.js"
- }
- },
- "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": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/p-locate/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": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "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": {
- "node": ">=6"
- }
- },
- "node_modules/parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parse5": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
- "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "entities": "^6.0.0"
- },
- "funding": {
- "url": "https://github.com/inikulin/parse5?sponsor=1"
- }
- },
- "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": {
- "node": ">=8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "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/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pirates": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
- "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/playwright-core": {
- "version": "1.56.1",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.1.tgz",
- "integrity": "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==",
- "dev": true,
- "bin": {
- "playwright-core": "cli.js"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/portfinder": {
- "version": "1.0.38",
- "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.38.tgz",
- "integrity": "sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg==",
- "dev": true,
- "dependencies": {
- "async": "^3.2.6",
- "debug": "^4.3.6"
- },
- "engines": {
- "node": ">= 10.12"
- }
- },
- "node_modules/pretty-format": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
- "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/schemas": "^29.6.3",
- "ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/pretty-format/node_modules/ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/prompts": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
- "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/psl": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz",
- "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "punycode": "^2.3.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/lupomontero"
- }
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pure-rand": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz",
- "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/dubzzz"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/fast-check"
- }
- ],
- "license": "MIT"
- },
- "node_modules/qs": {
- "version": "6.14.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
- "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
- "dev": true,
- "dependencies": {
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/querystringify": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
- "dev": true
- },
- "node_modules/resolve": {
- "version": "1.22.11",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
- "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-core-module": "^2.16.1",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve-cwd": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
- "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "resolve-from": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/resolve.exports": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz",
- "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "node_modules/saxes": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
- "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "xmlchars": "^2.2.0"
- },
- "engines": {
- "node": ">=v12.22.7"
- }
- },
- "node_modules/secure-compare": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz",
- "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==",
- "dev": true
- },
- "node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "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": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/side-channel": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
- "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
- "dev": true,
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3",
- "side-channel-list": "^1.0.0",
- "side-channel-map": "^1.0.1",
- "side-channel-weakmap": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-list": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
- "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
- "dev": true,
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-map": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
- "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-weakmap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
- "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3",
- "side-channel-map": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "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": {
- "node": ">=8"
- }
- },
- "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": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-support": {
- "version": "0.5.13",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
- "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/stack-utils": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
- "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "escape-string-regexp": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/string-length": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
- "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "char-regex": "^1.0.2",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-bom": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "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/test-exclude": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
- "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@istanbuljs/schema": "^0.1.2",
- "glob": "^7.1.4",
- "minimatch": "^3.0.4"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/tmpl": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
- "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "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": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/tough-cookie": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
- "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
- "dev": true,
- "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/tr46": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
- "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/type-fest": {
- "version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/undici-types": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
- "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/union": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz",
- "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==",
- "dev": true,
- "dependencies": {
- "qs": "^6.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/universalify": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
- "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/update-browserslist-db": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz",
- "integrity": "sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "escalade": "^3.2.0",
- "picocolors": "^1.1.1"
- },
- "bin": {
- "update-browserslist-db": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
- "node_modules/url-join": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz",
- "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==",
- "dev": true
- },
- "node_modules/url-parse": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
- "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
- }
- },
- "node_modules/v8-to-istanbul": {
- "version": "9.3.0",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
- "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@jridgewell/trace-mapping": "^0.3.12",
- "@types/istanbul-lib-coverage": "^2.0.1",
- "convert-source-map": "^2.0.0"
- },
- "engines": {
- "node": ">=10.12.0"
- }
- },
- "node_modules/w3c-xmlserializer": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz",
- "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "xml-name-validator": "^4.0.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/walker": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
- "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "makeerror": "1.0.12"
- }
- },
- "node_modules/webidl-conversions": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
- "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/whatwg-encoding": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
- "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
- "dev": true,
- "dependencies": {
- "iconv-lite": "0.6.3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/whatwg-mimetype": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz",
- "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/whatwg-url": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
- "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "tr46": "^3.0.0",
- "webidl-conversions": "^7.0.0"
- },
- "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": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/write-file-atomic": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
- "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.7"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/ws": {
- "version": "8.18.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
- "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": ">=5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/xml-name-validator": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
- "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=12"
- }
- },
- "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/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": {
- "node": ">=10"
- }
- },
- "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/yargs": {
- "version": "17.7.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
- "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "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": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- }
-}
diff --git a/node_modules/@babel/code-frame/LICENSE b/node_modules/@babel/code-frame/LICENSE
deleted file mode 100644
index f31575ec..00000000
--- a/node_modules/@babel/code-frame/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-MIT License
-
-Copyright (c) 2014-present Sebastian McKenzie and other contributors
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/@babel/code-frame/README.md b/node_modules/@babel/code-frame/README.md
deleted file mode 100644
index 71607551..00000000
--- a/node_modules/@babel/code-frame/README.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# @babel/code-frame
-
-> Generate errors that contain a code frame that point to source locations.
-
-See our website [@babel/code-frame](https://babeljs.io/docs/babel-code-frame) for more information.
-
-## Install
-
-Using npm:
-
-```sh
-npm install --save-dev @babel/code-frame
-```
-
-or using yarn:
-
-```sh
-yarn add @babel/code-frame --dev
-```
diff --git a/node_modules/@babel/code-frame/lib/index.js b/node_modules/@babel/code-frame/lib/index.js
deleted file mode 100644
index b409f301..00000000
--- a/node_modules/@babel/code-frame/lib/index.js
+++ /dev/null
@@ -1,216 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, '__esModule', { value: true });
-
-var picocolors = require('picocolors');
-var jsTokens = require('js-tokens');
-var helperValidatorIdentifier = require('@babel/helper-validator-identifier');
-
-function isColorSupported() {
- return (typeof process === "object" && (process.env.FORCE_COLOR === "0" || process.env.FORCE_COLOR === "false") ? false : picocolors.isColorSupported
- );
-}
-const compose = (f, g) => v => f(g(v));
-function buildDefs(colors) {
- return {
- keyword: colors.cyan,
- capitalized: colors.yellow,
- jsxIdentifier: colors.yellow,
- punctuator: colors.yellow,
- number: colors.magenta,
- string: colors.green,
- regex: colors.magenta,
- comment: colors.gray,
- invalid: compose(compose(colors.white, colors.bgRed), colors.bold),
- gutter: colors.gray,
- marker: compose(colors.red, colors.bold),
- message: compose(colors.red, colors.bold),
- reset: colors.reset
- };
-}
-const defsOn = buildDefs(picocolors.createColors(true));
-const defsOff = buildDefs(picocolors.createColors(false));
-function getDefs(enabled) {
- return enabled ? defsOn : defsOff;
-}
-
-const sometimesKeywords = new Set(["as", "async", "from", "get", "of", "set"]);
-const NEWLINE$1 = /\r\n|[\n\r\u2028\u2029]/;
-const BRACKET = /^[()[\]{}]$/;
-let tokenize;
-{
- const JSX_TAG = /^[a-z][\w-]*$/i;
- const getTokenType = function (token, offset, text) {
- if (token.type === "name") {
- if (helperValidatorIdentifier.isKeyword(token.value) || helperValidatorIdentifier.isStrictReservedWord(token.value, true) || sometimesKeywords.has(token.value)) {
- return "keyword";
- }
- if (JSX_TAG.test(token.value) && (text[offset - 1] === "<" || text.slice(offset - 2, offset) === "")) {
- return "jsxIdentifier";
- }
- if (token.value[0] !== token.value[0].toLowerCase()) {
- return "capitalized";
- }
- }
- if (token.type === "punctuator" && BRACKET.test(token.value)) {
- return "bracket";
- }
- if (token.type === "invalid" && (token.value === "@" || token.value === "#")) {
- return "punctuator";
- }
- return token.type;
- };
- tokenize = function* (text) {
- let match;
- while (match = jsTokens.default.exec(text)) {
- const token = jsTokens.matchToToken(match);
- yield {
- type: getTokenType(token, match.index, text),
- value: token.value
- };
- }
- };
-}
-function highlight(text) {
- if (text === "") return "";
- const defs = getDefs(true);
- let highlighted = "";
- for (const {
- type,
- value
- } of tokenize(text)) {
- if (type in defs) {
- highlighted += value.split(NEWLINE$1).map(str => defs[type](str)).join("\n");
- } else {
- highlighted += value;
- }
- }
- return highlighted;
-}
-
-let deprecationWarningShown = false;
-const NEWLINE = /\r\n|[\n\r\u2028\u2029]/;
-function getMarkerLines(loc, source, opts) {
- const startLoc = Object.assign({
- column: 0,
- line: -1
- }, loc.start);
- const endLoc = Object.assign({}, startLoc, loc.end);
- const {
- linesAbove = 2,
- linesBelow = 3
- } = opts || {};
- const startLine = startLoc.line;
- const startColumn = startLoc.column;
- const endLine = endLoc.line;
- const endColumn = endLoc.column;
- let start = Math.max(startLine - (linesAbove + 1), 0);
- let end = Math.min(source.length, endLine + linesBelow);
- if (startLine === -1) {
- start = 0;
- }
- if (endLine === -1) {
- end = source.length;
- }
- const lineDiff = endLine - startLine;
- const markerLines = {};
- if (lineDiff) {
- for (let i = 0; i <= lineDiff; i++) {
- const lineNumber = i + startLine;
- if (!startColumn) {
- markerLines[lineNumber] = true;
- } else if (i === 0) {
- const sourceLength = source[lineNumber - 1].length;
- markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1];
- } else if (i === lineDiff) {
- markerLines[lineNumber] = [0, endColumn];
- } else {
- const sourceLength = source[lineNumber - i].length;
- markerLines[lineNumber] = [0, sourceLength];
- }
- }
- } else {
- if (startColumn === endColumn) {
- if (startColumn) {
- markerLines[startLine] = [startColumn, 0];
- } else {
- markerLines[startLine] = true;
- }
- } else {
- markerLines[startLine] = [startColumn, endColumn - startColumn];
- }
- }
- return {
- start,
- end,
- markerLines
- };
-}
-function codeFrameColumns(rawLines, loc, opts = {}) {
- const shouldHighlight = opts.forceColor || isColorSupported() && opts.highlightCode;
- const defs = getDefs(shouldHighlight);
- const lines = rawLines.split(NEWLINE);
- const {
- start,
- end,
- markerLines
- } = getMarkerLines(loc, lines, opts);
- const hasColumns = loc.start && typeof loc.start.column === "number";
- const numberMaxWidth = String(end).length;
- const highlightedLines = shouldHighlight ? highlight(rawLines) : rawLines;
- let frame = highlightedLines.split(NEWLINE, end).slice(start, end).map((line, index) => {
- const number = start + 1 + index;
- const paddedNumber = ` ${number}`.slice(-numberMaxWidth);
- const gutter = ` ${paddedNumber} |`;
- const hasMarker = markerLines[number];
- const lastMarkerLine = !markerLines[number + 1];
- if (hasMarker) {
- let markerLine = "";
- if (Array.isArray(hasMarker)) {
- const markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\t]/g, " ");
- const numberOfMarkers = hasMarker[1] || 1;
- markerLine = ["\n ", defs.gutter(gutter.replace(/\d/g, " ")), " ", markerSpacing, defs.marker("^").repeat(numberOfMarkers)].join("");
- if (lastMarkerLine && opts.message) {
- markerLine += " " + defs.message(opts.message);
- }
- }
- return [defs.marker(">"), defs.gutter(gutter), line.length > 0 ? ` ${line}` : "", markerLine].join("");
- } else {
- return ` ${defs.gutter(gutter)}${line.length > 0 ? ` ${line}` : ""}`;
- }
- }).join("\n");
- if (opts.message && !hasColumns) {
- frame = `${" ".repeat(numberMaxWidth + 1)}${opts.message}\n${frame}`;
- }
- if (shouldHighlight) {
- return defs.reset(frame);
- } else {
- return frame;
- }
-}
-function index (rawLines, lineNumber, colNumber, opts = {}) {
- if (!deprecationWarningShown) {
- deprecationWarningShown = true;
- const message = "Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`.";
- if (process.emitWarning) {
- process.emitWarning(message, "DeprecationWarning");
- } else {
- const deprecationError = new Error(message);
- deprecationError.name = "DeprecationWarning";
- console.warn(new Error(message));
- }
- }
- colNumber = Math.max(colNumber, 0);
- const location = {
- start: {
- column: colNumber,
- line: lineNumber
- }
- };
- return codeFrameColumns(rawLines, location, opts);
-}
-
-exports.codeFrameColumns = codeFrameColumns;
-exports.default = index;
-exports.highlight = highlight;
-//# sourceMappingURL=index.js.map
diff --git a/node_modules/@babel/code-frame/lib/index.js.map b/node_modules/@babel/code-frame/lib/index.js.map
deleted file mode 100644
index 46a181dc..00000000
--- a/node_modules/@babel/code-frame/lib/index.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"index.js","sources":["../src/defs.ts","../src/highlight.ts","../src/index.ts"],"sourcesContent":["import picocolors, { createColors } from \"picocolors\";\nimport type { Colors, Formatter } from \"picocolors/types\";\n\nexport function isColorSupported() {\n return (\n // See https://github.com/alexeyraspopov/picocolors/issues/62\n typeof process === \"object\" &&\n (process.env.FORCE_COLOR === \"0\" || process.env.FORCE_COLOR === \"false\")\n ? false\n : picocolors.isColorSupported\n );\n}\n\nexport type InternalTokenType =\n | \"keyword\"\n | \"capitalized\"\n | \"jsxIdentifier\"\n | \"punctuator\"\n | \"number\"\n | \"string\"\n | \"regex\"\n | \"comment\"\n | \"invalid\";\n\ntype UITokens = \"gutter\" | \"marker\" | \"message\";\n\nexport type Defs = {\n [_ in InternalTokenType | UITokens | \"reset\"]: Formatter;\n};\n\nconst compose: (f: (gv: U) => V, g: (v: T) => U) => (v: T) => V =\n (f, g) => v =>\n f(g(v));\n\n/**\n * Styles for token types.\n */\nfunction buildDefs(colors: Colors): Defs {\n return {\n keyword: colors.cyan,\n capitalized: colors.yellow,\n jsxIdentifier: colors.yellow,\n punctuator: colors.yellow,\n number: colors.magenta,\n string: colors.green,\n regex: colors.magenta,\n comment: colors.gray,\n invalid: compose(compose(colors.white, colors.bgRed), colors.bold),\n\n gutter: colors.gray,\n marker: compose(colors.red, colors.bold),\n message: compose(colors.red, colors.bold),\n\n reset: colors.reset,\n };\n}\n\nconst defsOn = buildDefs(createColors(true));\nconst defsOff = buildDefs(createColors(false));\n\nexport function getDefs(enabled: boolean): Defs {\n return enabled ? defsOn : defsOff;\n}\n","import type { Token as JSToken, JSXToken } from \"js-tokens\";\nimport jsTokens from \"js-tokens\";\n\nimport {\n isStrictReservedWord,\n isKeyword,\n} from \"@babel/helper-validator-identifier\";\n\nimport { getDefs, type InternalTokenType } from \"./defs.ts\";\n\n/**\n * Names that are always allowed as identifiers, but also appear as keywords\n * within certain syntactic productions.\n *\n * https://tc39.es/ecma262/#sec-keywords-and-reserved-words\n *\n * `target` has been omitted since it is very likely going to be a false\n * positive.\n */\nconst sometimesKeywords = new Set([\"as\", \"async\", \"from\", \"get\", \"of\", \"set\"]);\n\ntype Token = {\n type: InternalTokenType | \"uncolored\";\n value: string;\n};\n\n/**\n * RegExp to test for newlines in terminal.\n */\nconst NEWLINE = /\\r\\n|[\\n\\r\\u2028\\u2029]/;\n\n/**\n * RegExp to test for the three types of brackets.\n */\nconst BRACKET = /^[()[\\]{}]$/;\n\nlet tokenize: (\n text: string,\n) => Generator<{ type: InternalTokenType | \"uncolored\"; value: string }>;\n\nif (process.env.BABEL_8_BREAKING) {\n /**\n * Get the type of token, specifying punctuator type.\n */\n const getTokenType = function (\n token: JSToken | JSXToken,\n ): InternalTokenType | \"uncolored\" {\n if (token.type === \"IdentifierName\") {\n if (\n isKeyword(token.value) ||\n isStrictReservedWord(token.value, true) ||\n sometimesKeywords.has(token.value)\n ) {\n return \"keyword\";\n }\n\n if (token.value[0] !== token.value[0].toLowerCase()) {\n return \"capitalized\";\n }\n }\n\n if (token.type === \"Punctuator\" && BRACKET.test(token.value)) {\n return \"uncolored\";\n }\n\n if (token.type === \"Invalid\" && token.value === \"@\") {\n return \"punctuator\";\n }\n\n switch (token.type) {\n case \"NumericLiteral\":\n return \"number\";\n\n case \"StringLiteral\":\n case \"JSXString\":\n case \"NoSubstitutionTemplate\":\n return \"string\";\n\n case \"RegularExpressionLiteral\":\n return \"regex\";\n\n case \"Punctuator\":\n case \"JSXPunctuator\":\n return \"punctuator\";\n\n case \"MultiLineComment\":\n case \"SingleLineComment\":\n return \"comment\";\n\n case \"Invalid\":\n case \"JSXInvalid\":\n return \"invalid\";\n\n case \"JSXIdentifier\":\n return \"jsxIdentifier\";\n\n default:\n return \"uncolored\";\n }\n };\n\n /**\n * Turn a string of JS into an array of objects.\n */\n tokenize = function* (text: string): Generator {\n for (const token of jsTokens(text, { jsx: true })) {\n switch (token.type) {\n case \"TemplateHead\":\n yield { type: \"string\", value: token.value.slice(0, -2) };\n yield { type: \"punctuator\", value: \"${\" };\n break;\n\n case \"TemplateMiddle\":\n yield { type: \"punctuator\", value: \"}\" };\n yield { type: \"string\", value: token.value.slice(1, -2) };\n yield { type: \"punctuator\", value: \"${\" };\n break;\n\n case \"TemplateTail\":\n yield { type: \"punctuator\", value: \"}\" };\n yield { type: \"string\", value: token.value.slice(1) };\n break;\n\n default:\n yield {\n type: getTokenType(token),\n value: token.value,\n };\n }\n }\n };\n} else {\n /**\n * RegExp to test for what seems to be a JSX tag name.\n */\n const JSX_TAG = /^[a-z][\\w-]*$/i;\n\n // The token here is defined in js-tokens@4. However we don't bother\n // typing it since the whole block will be removed in Babel 8\n const getTokenType = function (token: any, offset: number, text: string) {\n if (token.type === \"name\") {\n if (\n isKeyword(token.value) ||\n isStrictReservedWord(token.value, true) ||\n sometimesKeywords.has(token.value)\n ) {\n return \"keyword\";\n }\n\n if (\n JSX_TAG.test(token.value) &&\n (text[offset - 1] === \"<\" || text.slice(offset - 2, offset) === \"\")\n ) {\n return \"jsxIdentifier\";\n }\n\n if (token.value[0] !== token.value[0].toLowerCase()) {\n return \"capitalized\";\n }\n }\n\n if (token.type === \"punctuator\" && BRACKET.test(token.value)) {\n return \"bracket\";\n }\n\n if (\n token.type === \"invalid\" &&\n (token.value === \"@\" || token.value === \"#\")\n ) {\n return \"punctuator\";\n }\n\n return token.type;\n };\n\n tokenize = function* (text: string) {\n let match;\n while ((match = (jsTokens as any).default.exec(text))) {\n const token = (jsTokens as any).matchToToken(match);\n\n yield {\n type: getTokenType(token, match.index, text),\n value: token.value,\n };\n }\n };\n}\n\nexport function highlight(text: string) {\n if (text === \"\") return \"\";\n\n const defs = getDefs(true);\n\n let highlighted = \"\";\n\n for (const { type, value } of tokenize(text)) {\n if (type in defs) {\n highlighted += value\n .split(NEWLINE)\n .map(str => defs[type as InternalTokenType](str))\n .join(\"\\n\");\n } else {\n highlighted += value;\n }\n }\n\n return highlighted;\n}\n","import { getDefs, isColorSupported } from \"./defs.ts\";\nimport { highlight } from \"./highlight.ts\";\n\nexport { highlight };\n\nlet deprecationWarningShown = false;\n\ntype Location = {\n column: number;\n line: number;\n};\n\ntype NodeLocation = {\n end?: Location;\n start: Location;\n};\n\nexport interface Options {\n /** Syntax highlight the code as JavaScript for terminals. default: false */\n highlightCode?: boolean;\n /** The number of lines to show above the error. default: 2 */\n linesAbove?: number;\n /** The number of lines to show below the error. default: 3 */\n linesBelow?: number;\n /**\n * Forcibly syntax highlight the code as JavaScript (for non-terminals);\n * overrides highlightCode.\n * default: false\n */\n forceColor?: boolean;\n /**\n * Pass in a string to be displayed inline (if possible) next to the\n * highlighted location in the code. If it can't be positioned inline,\n * it will be placed above the code frame.\n * default: nothing\n */\n message?: string;\n}\n\n/**\n * RegExp to test for newlines in terminal.\n */\n\nconst NEWLINE = /\\r\\n|[\\n\\r\\u2028\\u2029]/;\n\n/**\n * Extract what lines should be marked and highlighted.\n */\n\ntype MarkerLines = Record;\n\nfunction getMarkerLines(\n loc: NodeLocation,\n source: Array,\n opts: Options,\n): {\n start: number;\n end: number;\n markerLines: MarkerLines;\n} {\n const startLoc: Location = {\n column: 0,\n line: -1,\n ...loc.start,\n };\n const endLoc: Location = {\n ...startLoc,\n ...loc.end,\n };\n const { linesAbove = 2, linesBelow = 3 } = opts || {};\n const startLine = startLoc.line;\n const startColumn = startLoc.column;\n const endLine = endLoc.line;\n const endColumn = endLoc.column;\n\n let start = Math.max(startLine - (linesAbove + 1), 0);\n let end = Math.min(source.length, endLine + linesBelow);\n\n if (startLine === -1) {\n start = 0;\n }\n\n if (endLine === -1) {\n end = source.length;\n }\n\n const lineDiff = endLine - startLine;\n const markerLines: MarkerLines = {};\n\n if (lineDiff) {\n for (let i = 0; i <= lineDiff; i++) {\n const lineNumber = i + startLine;\n\n if (!startColumn) {\n markerLines[lineNumber] = true;\n } else if (i === 0) {\n const sourceLength = source[lineNumber - 1].length;\n\n markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1];\n } else if (i === lineDiff) {\n markerLines[lineNumber] = [0, endColumn];\n } else {\n const sourceLength = source[lineNumber - i].length;\n\n markerLines[lineNumber] = [0, sourceLength];\n }\n }\n } else {\n if (startColumn === endColumn) {\n if (startColumn) {\n markerLines[startLine] = [startColumn, 0];\n } else {\n markerLines[startLine] = true;\n }\n } else {\n markerLines[startLine] = [startColumn, endColumn - startColumn];\n }\n }\n\n return { start, end, markerLines };\n}\n\nexport function codeFrameColumns(\n rawLines: string,\n loc: NodeLocation,\n opts: Options = {},\n): string {\n const shouldHighlight =\n opts.forceColor || (isColorSupported() && opts.highlightCode);\n const defs = getDefs(shouldHighlight);\n\n const lines = rawLines.split(NEWLINE);\n const { start, end, markerLines } = getMarkerLines(loc, lines, opts);\n const hasColumns = loc.start && typeof loc.start.column === \"number\";\n\n const numberMaxWidth = String(end).length;\n\n const highlightedLines = shouldHighlight ? highlight(rawLines) : rawLines;\n\n let frame = highlightedLines\n .split(NEWLINE, end)\n .slice(start, end)\n .map((line, index) => {\n const number = start + 1 + index;\n const paddedNumber = ` ${number}`.slice(-numberMaxWidth);\n const gutter = ` ${paddedNumber} |`;\n const hasMarker = markerLines[number];\n const lastMarkerLine = !markerLines[number + 1];\n if (hasMarker) {\n let markerLine = \"\";\n if (Array.isArray(hasMarker)) {\n const markerSpacing = line\n .slice(0, Math.max(hasMarker[0] - 1, 0))\n .replace(/[^\\t]/g, \" \");\n const numberOfMarkers = hasMarker[1] || 1;\n\n markerLine = [\n \"\\n \",\n defs.gutter(gutter.replace(/\\d/g, \" \")),\n \" \",\n markerSpacing,\n defs.marker(\"^\").repeat(numberOfMarkers),\n ].join(\"\");\n\n if (lastMarkerLine && opts.message) {\n markerLine += \" \" + defs.message(opts.message);\n }\n }\n return [\n defs.marker(\">\"),\n defs.gutter(gutter),\n line.length > 0 ? ` ${line}` : \"\",\n markerLine,\n ].join(\"\");\n } else {\n return ` ${defs.gutter(gutter)}${line.length > 0 ? ` ${line}` : \"\"}`;\n }\n })\n .join(\"\\n\");\n\n if (opts.message && !hasColumns) {\n frame = `${\" \".repeat(numberMaxWidth + 1)}${opts.message}\\n${frame}`;\n }\n\n if (shouldHighlight) {\n return defs.reset(frame);\n } else {\n return frame;\n }\n}\n\n/**\n * Create a code frame, adding line numbers, code highlighting, and pointing to a given position.\n */\n\nexport default function (\n rawLines: string,\n lineNumber: number,\n colNumber?: number | null,\n opts: Options = {},\n): string {\n if (!deprecationWarningShown) {\n deprecationWarningShown = true;\n\n const message =\n \"Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`.\";\n\n if (process.emitWarning) {\n // A string is directly supplied to emitWarning, because when supplying an\n // Error object node throws in the tests because of different contexts\n process.emitWarning(message, \"DeprecationWarning\");\n } else {\n const deprecationError = new Error(message);\n deprecationError.name = \"DeprecationWarning\";\n console.warn(new Error(message));\n }\n }\n\n colNumber = Math.max(colNumber, 0);\n\n const location: NodeLocation = {\n start: { column: colNumber, line: lineNumber },\n };\n\n return codeFrameColumns(rawLines, location, opts);\n}\n"],"names":["isColorSupported","process","env","FORCE_COLOR","picocolors","compose","f","g","v","buildDefs","colors","keyword","cyan","capitalized","yellow","jsxIdentifier","punctuator","number","magenta","string","green","regex","comment","gray","invalid","white","bgRed","bold","gutter","marker","red","message","reset","defsOn","createColors","defsOff","getDefs","enabled","sometimesKeywords","Set","NEWLINE","BRACKET","tokenize","JSX_TAG","getTokenType","token","offset","text","type","isKeyword","value","isStrictReservedWord","has","test","slice","toLowerCase","match","jsTokens","default","exec","matchToToken","index","highlight","defs","highlighted","split","map","str","join","deprecationWarningShown","getMarkerLines","loc","source","opts","startLoc","Object","assign","column","line","start","endLoc","end","linesAbove","linesBelow","startLine","startColumn","endLine","endColumn","Math","max","min","length","lineDiff","markerLines","i","lineNumber","sourceLength","codeFrameColumns","rawLines","shouldHighlight","forceColor","highlightCode","lines","hasColumns","numberMaxWidth","String","highlightedLines","frame","paddedNumber","hasMarker","lastMarkerLine","markerLine","Array","isArray","markerSpacing","replace","numberOfMarkers","repeat","colNumber","emitWarning","deprecationError","Error","name","console","warn","location"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/@babel/code-frame/package.json b/node_modules/@babel/code-frame/package.json
deleted file mode 100644
index c95c2449..00000000
--- a/node_modules/@babel/code-frame/package.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "name": "@babel/code-frame",
- "version": "7.27.1",
- "description": "Generate errors that contain a code frame that point to source locations.",
- "author": "The Babel Team (https://babel.dev/team)",
- "homepage": "https://babel.dev/docs/en/next/babel-code-frame",
- "bugs": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen",
- "license": "MIT",
- "publishConfig": {
- "access": "public"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/babel/babel.git",
- "directory": "packages/babel-code-frame"
- },
- "main": "./lib/index.js",
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.27.1",
- "js-tokens": "^4.0.0",
- "picocolors": "^1.1.1"
- },
- "devDependencies": {
- "import-meta-resolve": "^4.1.0",
- "strip-ansi": "^4.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "type": "commonjs"
-}
\ No newline at end of file
diff --git a/node_modules/@babel/compat-data/LICENSE b/node_modules/@babel/compat-data/LICENSE
deleted file mode 100644
index f31575ec..00000000
--- a/node_modules/@babel/compat-data/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-MIT License
-
-Copyright (c) 2014-present Sebastian McKenzie and other contributors
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/@babel/compat-data/README.md b/node_modules/@babel/compat-data/README.md
deleted file mode 100644
index c1918987..00000000
--- a/node_modules/@babel/compat-data/README.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# @babel/compat-data
-
-> The compat-data to determine required Babel plugins
-
-See our website [@babel/compat-data](https://babeljs.io/docs/babel-compat-data) for more information.
-
-## Install
-
-Using npm:
-
-```sh
-npm install --save @babel/compat-data
-```
-
-or using yarn:
-
-```sh
-yarn add @babel/compat-data
-```
diff --git a/node_modules/@babel/compat-data/corejs2-built-ins.js b/node_modules/@babel/compat-data/corejs2-built-ins.js
deleted file mode 100644
index ed19e0b8..00000000
--- a/node_modules/@babel/compat-data/corejs2-built-ins.js
+++ /dev/null
@@ -1,2 +0,0 @@
-// Todo (Babel 8): remove this file as Babel 8 drop support of core-js 2
-module.exports = require("./data/corejs2-built-ins.json");
diff --git a/node_modules/@babel/compat-data/corejs3-shipped-proposals.js b/node_modules/@babel/compat-data/corejs3-shipped-proposals.js
deleted file mode 100644
index 7909b8c4..00000000
--- a/node_modules/@babel/compat-data/corejs3-shipped-proposals.js
+++ /dev/null
@@ -1,2 +0,0 @@
-// Todo (Babel 8): remove this file now that it is included in babel-plugin-polyfill-corejs3
-module.exports = require("./data/corejs3-shipped-proposals.json");
diff --git a/node_modules/@babel/compat-data/data/corejs2-built-ins.json b/node_modules/@babel/compat-data/data/corejs2-built-ins.json
deleted file mode 100644
index ba76060c..00000000
--- a/node_modules/@babel/compat-data/data/corejs2-built-ins.json
+++ /dev/null
@@ -1,2106 +0,0 @@
-{
- "es6.array.copy-within": {
- "chrome": "45",
- "opera": "32",
- "edge": "12",
- "firefox": "32",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "5",
- "rhino": "1.7.13",
- "opera_mobile": "32",
- "electron": "0.31"
- },
- "es6.array.every": {
- "chrome": "5",
- "opera": "10.10",
- "edge": "12",
- "firefox": "2",
- "safari": "3.1",
- "node": "0.4",
- "deno": "1",
- "ie": "9",
- "android": "4",
- "ios": "6",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "10.1",
- "electron": "0.20"
- },
- "es6.array.fill": {
- "chrome": "45",
- "opera": "32",
- "edge": "12",
- "firefox": "31",
- "safari": "7.1",
- "node": "4",
- "deno": "1",
- "ios": "8",
- "samsung": "5",
- "rhino": "1.7.13",
- "opera_mobile": "32",
- "electron": "0.31"
- },
- "es6.array.filter": {
- "chrome": "51",
- "opera": "38",
- "edge": "13",
- "firefox": "48",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "es6.array.find": {
- "chrome": "45",
- "opera": "32",
- "edge": "12",
- "firefox": "25",
- "safari": "7.1",
- "node": "4",
- "deno": "1",
- "ios": "8",
- "samsung": "5",
- "rhino": "1.7.13",
- "opera_mobile": "32",
- "electron": "0.31"
- },
- "es6.array.find-index": {
- "chrome": "45",
- "opera": "32",
- "edge": "12",
- "firefox": "25",
- "safari": "7.1",
- "node": "4",
- "deno": "1",
- "ios": "8",
- "samsung": "5",
- "rhino": "1.7.13",
- "opera_mobile": "32",
- "electron": "0.31"
- },
- "es7.array.flat-map": {
- "chrome": "69",
- "opera": "56",
- "edge": "79",
- "firefox": "62",
- "safari": "12",
- "node": "11",
- "deno": "1",
- "ios": "12",
- "samsung": "10",
- "rhino": "1.7.15",
- "opera_mobile": "48",
- "electron": "4.0"
- },
- "es6.array.for-each": {
- "chrome": "5",
- "opera": "10.10",
- "edge": "12",
- "firefox": "2",
- "safari": "3.1",
- "node": "0.4",
- "deno": "1",
- "ie": "9",
- "android": "4",
- "ios": "6",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "10.1",
- "electron": "0.20"
- },
- "es6.array.from": {
- "chrome": "51",
- "opera": "38",
- "edge": "15",
- "firefox": "36",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.7.15",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "es7.array.includes": {
- "chrome": "47",
- "opera": "34",
- "edge": "14",
- "firefox": "102",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.8",
- "opera_mobile": "34",
- "electron": "0.36"
- },
- "es6.array.index-of": {
- "chrome": "5",
- "opera": "10.10",
- "edge": "12",
- "firefox": "2",
- "safari": "3.1",
- "node": "0.4",
- "deno": "1",
- "ie": "9",
- "android": "4",
- "ios": "6",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "10.1",
- "electron": "0.20"
- },
- "es6.array.is-array": {
- "chrome": "5",
- "opera": "10.50",
- "edge": "12",
- "firefox": "4",
- "safari": "4",
- "node": "0.4",
- "deno": "1",
- "ie": "9",
- "android": "4",
- "ios": "6",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "10.1",
- "electron": "0.20"
- },
- "es6.array.iterator": {
- "chrome": "66",
- "opera": "53",
- "edge": "12",
- "firefox": "60",
- "safari": "9",
- "node": "10",
- "deno": "1",
- "ios": "9",
- "samsung": "9",
- "rhino": "1.7.13",
- "opera_mobile": "47",
- "electron": "3.0"
- },
- "es6.array.last-index-of": {
- "chrome": "5",
- "opera": "10.10",
- "edge": "12",
- "firefox": "2",
- "safari": "3.1",
- "node": "0.4",
- "deno": "1",
- "ie": "9",
- "android": "4",
- "ios": "6",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "10.1",
- "electron": "0.20"
- },
- "es6.array.map": {
- "chrome": "51",
- "opera": "38",
- "edge": "13",
- "firefox": "48",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "es6.array.of": {
- "chrome": "45",
- "opera": "32",
- "edge": "12",
- "firefox": "25",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "5",
- "rhino": "1.7.13",
- "opera_mobile": "32",
- "electron": "0.31"
- },
- "es6.array.reduce": {
- "chrome": "5",
- "opera": "10.50",
- "edge": "12",
- "firefox": "3",
- "safari": "4",
- "node": "0.4",
- "deno": "1",
- "ie": "9",
- "android": "4",
- "ios": "6",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "10.1",
- "electron": "0.20"
- },
- "es6.array.reduce-right": {
- "chrome": "5",
- "opera": "10.50",
- "edge": "12",
- "firefox": "3",
- "safari": "4",
- "node": "0.4",
- "deno": "1",
- "ie": "9",
- "android": "4",
- "ios": "6",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "10.1",
- "electron": "0.20"
- },
- "es6.array.slice": {
- "chrome": "51",
- "opera": "38",
- "edge": "13",
- "firefox": "48",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "es6.array.some": {
- "chrome": "5",
- "opera": "10.10",
- "edge": "12",
- "firefox": "2",
- "safari": "3.1",
- "node": "0.4",
- "deno": "1",
- "ie": "9",
- "android": "4",
- "ios": "6",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "10.1",
- "electron": "0.20"
- },
- "es6.array.sort": {
- "chrome": "63",
- "opera": "50",
- "edge": "12",
- "firefox": "5",
- "safari": "12",
- "node": "10",
- "deno": "1",
- "ie": "9",
- "ios": "12",
- "samsung": "8",
- "rhino": "1.7.13",
- "opera_mobile": "46",
- "electron": "3.0"
- },
- "es6.array.species": {
- "chrome": "51",
- "opera": "38",
- "edge": "13",
- "firefox": "48",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.7.15",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "es6.date.now": {
- "chrome": "5",
- "opera": "10.50",
- "edge": "12",
- "firefox": "2",
- "safari": "4",
- "node": "0.4",
- "deno": "1",
- "ie": "9",
- "android": "4",
- "ios": "6",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "10.1",
- "electron": "0.20"
- },
- "es6.date.to-iso-string": {
- "chrome": "5",
- "opera": "10.50",
- "edge": "12",
- "firefox": "3.5",
- "safari": "4",
- "node": "0.4",
- "deno": "1",
- "ie": "9",
- "android": "4",
- "ios": "6",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "10.1",
- "electron": "0.20"
- },
- "es6.date.to-json": {
- "chrome": "5",
- "opera": "12.10",
- "edge": "12",
- "firefox": "4",
- "safari": "10",
- "node": "0.4",
- "deno": "1",
- "ie": "9",
- "android": "4",
- "ios": "10",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "12.1",
- "electron": "0.20"
- },
- "es6.date.to-primitive": {
- "chrome": "47",
- "opera": "34",
- "edge": "15",
- "firefox": "44",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.8",
- "opera_mobile": "34",
- "electron": "0.36"
- },
- "es6.date.to-string": {
- "chrome": "5",
- "opera": "10.50",
- "edge": "12",
- "firefox": "2",
- "safari": "3.1",
- "node": "0.4",
- "deno": "1",
- "ie": "10",
- "android": "4",
- "ios": "6",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "10.1",
- "electron": "0.20"
- },
- "es6.function.bind": {
- "chrome": "7",
- "opera": "12",
- "edge": "12",
- "firefox": "4",
- "safari": "5.1",
- "node": "0.4",
- "deno": "1",
- "ie": "9",
- "android": "4",
- "ios": "6",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "12",
- "electron": "0.20"
- },
- "es6.function.has-instance": {
- "chrome": "51",
- "opera": "38",
- "edge": "15",
- "firefox": "50",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "es6.function.name": {
- "chrome": "5",
- "opera": "10.50",
- "edge": "14",
- "firefox": "2",
- "safari": "4",
- "node": "0.4",
- "deno": "1",
- "android": "4",
- "ios": "6",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "10.1",
- "electron": "0.20"
- },
- "es6.map": {
- "chrome": "51",
- "opera": "38",
- "edge": "15",
- "firefox": "53",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "es6.math.acosh": {
- "chrome": "38",
- "opera": "25",
- "edge": "12",
- "firefox": "25",
- "safari": "7.1",
- "node": "0.12",
- "deno": "1",
- "ios": "8",
- "samsung": "3",
- "rhino": "1.7.13",
- "opera_mobile": "25",
- "electron": "0.20"
- },
- "es6.math.asinh": {
- "chrome": "38",
- "opera": "25",
- "edge": "12",
- "firefox": "25",
- "safari": "7.1",
- "node": "0.12",
- "deno": "1",
- "ios": "8",
- "samsung": "3",
- "rhino": "1.7.13",
- "opera_mobile": "25",
- "electron": "0.20"
- },
- "es6.math.atanh": {
- "chrome": "38",
- "opera": "25",
- "edge": "12",
- "firefox": "25",
- "safari": "7.1",
- "node": "0.12",
- "deno": "1",
- "ios": "8",
- "samsung": "3",
- "rhino": "1.7.13",
- "opera_mobile": "25",
- "electron": "0.20"
- },
- "es6.math.cbrt": {
- "chrome": "38",
- "opera": "25",
- "edge": "12",
- "firefox": "25",
- "safari": "7.1",
- "node": "0.12",
- "deno": "1",
- "ios": "8",
- "samsung": "3",
- "rhino": "1.7.13",
- "opera_mobile": "25",
- "electron": "0.20"
- },
- "es6.math.clz32": {
- "chrome": "38",
- "opera": "25",
- "edge": "12",
- "firefox": "31",
- "safari": "9",
- "node": "0.12",
- "deno": "1",
- "ios": "9",
- "samsung": "3",
- "rhino": "1.7.13",
- "opera_mobile": "25",
- "electron": "0.20"
- },
- "es6.math.cosh": {
- "chrome": "38",
- "opera": "25",
- "edge": "12",
- "firefox": "25",
- "safari": "7.1",
- "node": "0.12",
- "deno": "1",
- "ios": "8",
- "samsung": "3",
- "rhino": "1.7.13",
- "opera_mobile": "25",
- "electron": "0.20"
- },
- "es6.math.expm1": {
- "chrome": "38",
- "opera": "25",
- "edge": "12",
- "firefox": "25",
- "safari": "7.1",
- "node": "0.12",
- "deno": "1",
- "ios": "8",
- "samsung": "3",
- "rhino": "1.7.13",
- "opera_mobile": "25",
- "electron": "0.20"
- },
- "es6.math.fround": {
- "chrome": "38",
- "opera": "25",
- "edge": "12",
- "firefox": "26",
- "safari": "7.1",
- "node": "0.12",
- "deno": "1",
- "ios": "8",
- "samsung": "3",
- "rhino": "1.7.13",
- "opera_mobile": "25",
- "electron": "0.20"
- },
- "es6.math.hypot": {
- "chrome": "38",
- "opera": "25",
- "edge": "12",
- "firefox": "27",
- "safari": "7.1",
- "node": "0.12",
- "deno": "1",
- "ios": "8",
- "samsung": "3",
- "rhino": "1.7.13",
- "opera_mobile": "25",
- "electron": "0.20"
- },
- "es6.math.imul": {
- "chrome": "30",
- "opera": "17",
- "edge": "12",
- "firefox": "23",
- "safari": "7",
- "node": "0.12",
- "deno": "1",
- "android": "4.4",
- "ios": "7",
- "samsung": "2",
- "rhino": "1.7.13",
- "opera_mobile": "18",
- "electron": "0.20"
- },
- "es6.math.log1p": {
- "chrome": "38",
- "opera": "25",
- "edge": "12",
- "firefox": "25",
- "safari": "7.1",
- "node": "0.12",
- "deno": "1",
- "ios": "8",
- "samsung": "3",
- "rhino": "1.7.13",
- "opera_mobile": "25",
- "electron": "0.20"
- },
- "es6.math.log10": {
- "chrome": "38",
- "opera": "25",
- "edge": "12",
- "firefox": "25",
- "safari": "7.1",
- "node": "0.12",
- "deno": "1",
- "ios": "8",
- "samsung": "3",
- "rhino": "1.7.13",
- "opera_mobile": "25",
- "electron": "0.20"
- },
- "es6.math.log2": {
- "chrome": "38",
- "opera": "25",
- "edge": "12",
- "firefox": "25",
- "safari": "7.1",
- "node": "0.12",
- "deno": "1",
- "ios": "8",
- "samsung": "3",
- "rhino": "1.7.13",
- "opera_mobile": "25",
- "electron": "0.20"
- },
- "es6.math.sign": {
- "chrome": "38",
- "opera": "25",
- "edge": "12",
- "firefox": "25",
- "safari": "9",
- "node": "0.12",
- "deno": "1",
- "ios": "9",
- "samsung": "3",
- "rhino": "1.7.13",
- "opera_mobile": "25",
- "electron": "0.20"
- },
- "es6.math.sinh": {
- "chrome": "38",
- "opera": "25",
- "edge": "12",
- "firefox": "25",
- "safari": "7.1",
- "node": "0.12",
- "deno": "1",
- "ios": "8",
- "samsung": "3",
- "rhino": "1.7.13",
- "opera_mobile": "25",
- "electron": "0.20"
- },
- "es6.math.tanh": {
- "chrome": "38",
- "opera": "25",
- "edge": "12",
- "firefox": "25",
- "safari": "7.1",
- "node": "0.12",
- "deno": "1",
- "ios": "8",
- "samsung": "3",
- "rhino": "1.7.13",
- "opera_mobile": "25",
- "electron": "0.20"
- },
- "es6.math.trunc": {
- "chrome": "38",
- "opera": "25",
- "edge": "12",
- "firefox": "25",
- "safari": "7.1",
- "node": "0.12",
- "deno": "1",
- "ios": "8",
- "samsung": "3",
- "rhino": "1.7.13",
- "opera_mobile": "25",
- "electron": "0.20"
- },
- "es6.number.constructor": {
- "chrome": "41",
- "opera": "28",
- "edge": "12",
- "firefox": "36",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "3.4",
- "rhino": "1.7.13",
- "opera_mobile": "28",
- "electron": "0.21"
- },
- "es6.number.epsilon": {
- "chrome": "34",
- "opera": "21",
- "edge": "12",
- "firefox": "25",
- "safari": "9",
- "node": "0.12",
- "deno": "1",
- "ios": "9",
- "samsung": "2",
- "rhino": "1.7.14",
- "opera_mobile": "21",
- "electron": "0.20"
- },
- "es6.number.is-finite": {
- "chrome": "19",
- "opera": "15",
- "edge": "12",
- "firefox": "16",
- "safari": "9",
- "node": "0.8",
- "deno": "1",
- "android": "4.1",
- "ios": "9",
- "samsung": "1.5",
- "rhino": "1.7.13",
- "opera_mobile": "14",
- "electron": "0.20"
- },
- "es6.number.is-integer": {
- "chrome": "34",
- "opera": "21",
- "edge": "12",
- "firefox": "16",
- "safari": "9",
- "node": "0.12",
- "deno": "1",
- "ios": "9",
- "samsung": "2",
- "rhino": "1.7.13",
- "opera_mobile": "21",
- "electron": "0.20"
- },
- "es6.number.is-nan": {
- "chrome": "19",
- "opera": "15",
- "edge": "12",
- "firefox": "15",
- "safari": "9",
- "node": "0.8",
- "deno": "1",
- "android": "4.1",
- "ios": "9",
- "samsung": "1.5",
- "rhino": "1.7.13",
- "opera_mobile": "14",
- "electron": "0.20"
- },
- "es6.number.is-safe-integer": {
- "chrome": "34",
- "opera": "21",
- "edge": "12",
- "firefox": "32",
- "safari": "9",
- "node": "0.12",
- "deno": "1",
- "ios": "9",
- "samsung": "2",
- "rhino": "1.7.13",
- "opera_mobile": "21",
- "electron": "0.20"
- },
- "es6.number.max-safe-integer": {
- "chrome": "34",
- "opera": "21",
- "edge": "12",
- "firefox": "31",
- "safari": "9",
- "node": "0.12",
- "deno": "1",
- "ios": "9",
- "samsung": "2",
- "rhino": "1.7.13",
- "opera_mobile": "21",
- "electron": "0.20"
- },
- "es6.number.min-safe-integer": {
- "chrome": "34",
- "opera": "21",
- "edge": "12",
- "firefox": "31",
- "safari": "9",
- "node": "0.12",
- "deno": "1",
- "ios": "9",
- "samsung": "2",
- "rhino": "1.7.13",
- "opera_mobile": "21",
- "electron": "0.20"
- },
- "es6.number.parse-float": {
- "chrome": "34",
- "opera": "21",
- "edge": "12",
- "firefox": "25",
- "safari": "9",
- "node": "0.12",
- "deno": "1",
- "ios": "9",
- "samsung": "2",
- "rhino": "1.7.14",
- "opera_mobile": "21",
- "electron": "0.20"
- },
- "es6.number.parse-int": {
- "chrome": "34",
- "opera": "21",
- "edge": "12",
- "firefox": "25",
- "safari": "9",
- "node": "0.12",
- "deno": "1",
- "ios": "9",
- "samsung": "2",
- "rhino": "1.7.14",
- "opera_mobile": "21",
- "electron": "0.20"
- },
- "es6.object.assign": {
- "chrome": "49",
- "opera": "36",
- "edge": "13",
- "firefox": "36",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.8",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "es6.object.create": {
- "chrome": "5",
- "opera": "12",
- "edge": "12",
- "firefox": "4",
- "safari": "4",
- "node": "0.4",
- "deno": "1",
- "ie": "9",
- "android": "4",
- "ios": "6",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "12",
- "electron": "0.20"
- },
- "es7.object.define-getter": {
- "chrome": "62",
- "opera": "49",
- "edge": "16",
- "firefox": "48",
- "safari": "9",
- "node": "8.10",
- "deno": "1",
- "ios": "9",
- "samsung": "8",
- "opera_mobile": "46",
- "electron": "3.0"
- },
- "es7.object.define-setter": {
- "chrome": "62",
- "opera": "49",
- "edge": "16",
- "firefox": "48",
- "safari": "9",
- "node": "8.10",
- "deno": "1",
- "ios": "9",
- "samsung": "8",
- "opera_mobile": "46",
- "electron": "3.0"
- },
- "es6.object.define-property": {
- "chrome": "5",
- "opera": "12",
- "edge": "12",
- "firefox": "4",
- "safari": "5.1",
- "node": "0.4",
- "deno": "1",
- "ie": "9",
- "android": "4",
- "ios": "6",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "12",
- "electron": "0.20"
- },
- "es6.object.define-properties": {
- "chrome": "5",
- "opera": "12",
- "edge": "12",
- "firefox": "4",
- "safari": "4",
- "node": "0.4",
- "deno": "1",
- "ie": "9",
- "android": "4",
- "ios": "6",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "12",
- "electron": "0.20"
- },
- "es7.object.entries": {
- "chrome": "54",
- "opera": "41",
- "edge": "14",
- "firefox": "47",
- "safari": "10.1",
- "node": "7",
- "deno": "1",
- "ios": "10.3",
- "samsung": "6",
- "rhino": "1.7.14",
- "opera_mobile": "41",
- "electron": "1.4"
- },
- "es6.object.freeze": {
- "chrome": "44",
- "opera": "31",
- "edge": "12",
- "firefox": "35",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "4",
- "rhino": "1.7.13",
- "opera_mobile": "32",
- "electron": "0.30"
- },
- "es6.object.get-own-property-descriptor": {
- "chrome": "44",
- "opera": "31",
- "edge": "12",
- "firefox": "35",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "4",
- "rhino": "1.7.13",
- "opera_mobile": "32",
- "electron": "0.30"
- },
- "es7.object.get-own-property-descriptors": {
- "chrome": "54",
- "opera": "41",
- "edge": "15",
- "firefox": "50",
- "safari": "10.1",
- "node": "7",
- "deno": "1",
- "ios": "10.3",
- "samsung": "6",
- "rhino": "1.8",
- "opera_mobile": "41",
- "electron": "1.4"
- },
- "es6.object.get-own-property-names": {
- "chrome": "40",
- "opera": "27",
- "edge": "12",
- "firefox": "33",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "3.4",
- "rhino": "1.7.13",
- "opera_mobile": "27",
- "electron": "0.21"
- },
- "es6.object.get-prototype-of": {
- "chrome": "44",
- "opera": "31",
- "edge": "12",
- "firefox": "35",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "4",
- "rhino": "1.7.13",
- "opera_mobile": "32",
- "electron": "0.30"
- },
- "es7.object.lookup-getter": {
- "chrome": "62",
- "opera": "49",
- "edge": "79",
- "firefox": "36",
- "safari": "9",
- "node": "8.10",
- "deno": "1",
- "ios": "9",
- "samsung": "8",
- "opera_mobile": "46",
- "electron": "3.0"
- },
- "es7.object.lookup-setter": {
- "chrome": "62",
- "opera": "49",
- "edge": "79",
- "firefox": "36",
- "safari": "9",
- "node": "8.10",
- "deno": "1",
- "ios": "9",
- "samsung": "8",
- "opera_mobile": "46",
- "electron": "3.0"
- },
- "es6.object.prevent-extensions": {
- "chrome": "44",
- "opera": "31",
- "edge": "12",
- "firefox": "35",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "4",
- "rhino": "1.7.13",
- "opera_mobile": "32",
- "electron": "0.30"
- },
- "es6.object.to-string": {
- "chrome": "57",
- "opera": "44",
- "edge": "15",
- "firefox": "51",
- "safari": "10",
- "node": "8",
- "deno": "1",
- "ios": "10",
- "samsung": "7",
- "opera_mobile": "43",
- "electron": "1.7"
- },
- "es6.object.is": {
- "chrome": "19",
- "opera": "15",
- "edge": "12",
- "firefox": "22",
- "safari": "9",
- "node": "0.8",
- "deno": "1",
- "android": "4.1",
- "ios": "9",
- "samsung": "1.5",
- "rhino": "1.7.13",
- "opera_mobile": "14",
- "electron": "0.20"
- },
- "es6.object.is-frozen": {
- "chrome": "44",
- "opera": "31",
- "edge": "12",
- "firefox": "35",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "4",
- "rhino": "1.7.13",
- "opera_mobile": "32",
- "electron": "0.30"
- },
- "es6.object.is-sealed": {
- "chrome": "44",
- "opera": "31",
- "edge": "12",
- "firefox": "35",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "4",
- "rhino": "1.7.13",
- "opera_mobile": "32",
- "electron": "0.30"
- },
- "es6.object.is-extensible": {
- "chrome": "44",
- "opera": "31",
- "edge": "12",
- "firefox": "35",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "4",
- "rhino": "1.7.13",
- "opera_mobile": "32",
- "electron": "0.30"
- },
- "es6.object.keys": {
- "chrome": "40",
- "opera": "27",
- "edge": "12",
- "firefox": "35",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "3.4",
- "rhino": "1.7.13",
- "opera_mobile": "27",
- "electron": "0.21"
- },
- "es6.object.seal": {
- "chrome": "44",
- "opera": "31",
- "edge": "12",
- "firefox": "35",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "4",
- "rhino": "1.7.13",
- "opera_mobile": "32",
- "electron": "0.30"
- },
- "es6.object.set-prototype-of": {
- "chrome": "34",
- "opera": "21",
- "edge": "12",
- "firefox": "31",
- "safari": "9",
- "node": "0.12",
- "deno": "1",
- "ie": "11",
- "ios": "9",
- "samsung": "2",
- "rhino": "1.7.13",
- "opera_mobile": "21",
- "electron": "0.20"
- },
- "es7.object.values": {
- "chrome": "54",
- "opera": "41",
- "edge": "14",
- "firefox": "47",
- "safari": "10.1",
- "node": "7",
- "deno": "1",
- "ios": "10.3",
- "samsung": "6",
- "rhino": "1.7.14",
- "opera_mobile": "41",
- "electron": "1.4"
- },
- "es6.promise": {
- "chrome": "51",
- "opera": "38",
- "edge": "14",
- "firefox": "45",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.7.15",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "es7.promise.finally": {
- "chrome": "63",
- "opera": "50",
- "edge": "18",
- "firefox": "58",
- "safari": "11.1",
- "node": "10",
- "deno": "1",
- "ios": "11.3",
- "samsung": "8",
- "rhino": "1.7.15",
- "opera_mobile": "46",
- "electron": "3.0"
- },
- "es6.reflect.apply": {
- "chrome": "49",
- "opera": "36",
- "edge": "12",
- "firefox": "42",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.8",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "es6.reflect.construct": {
- "chrome": "49",
- "opera": "36",
- "edge": "13",
- "firefox": "49",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "es6.reflect.define-property": {
- "chrome": "49",
- "opera": "36",
- "edge": "13",
- "firefox": "42",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.8",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "es6.reflect.delete-property": {
- "chrome": "49",
- "opera": "36",
- "edge": "12",
- "firefox": "42",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.8",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "es6.reflect.get": {
- "chrome": "49",
- "opera": "36",
- "edge": "12",
- "firefox": "42",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.8",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "es6.reflect.get-own-property-descriptor": {
- "chrome": "49",
- "opera": "36",
- "edge": "12",
- "firefox": "42",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.8",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "es6.reflect.get-prototype-of": {
- "chrome": "49",
- "opera": "36",
- "edge": "12",
- "firefox": "42",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.8",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "es6.reflect.has": {
- "chrome": "49",
- "opera": "36",
- "edge": "12",
- "firefox": "42",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.8",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "es6.reflect.is-extensible": {
- "chrome": "49",
- "opera": "36",
- "edge": "12",
- "firefox": "42",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.8",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "es6.reflect.own-keys": {
- "chrome": "49",
- "opera": "36",
- "edge": "12",
- "firefox": "42",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.8",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "es6.reflect.prevent-extensions": {
- "chrome": "49",
- "opera": "36",
- "edge": "12",
- "firefox": "42",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.8",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "es6.reflect.set": {
- "chrome": "49",
- "opera": "36",
- "edge": "12",
- "firefox": "42",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.8",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "es6.reflect.set-prototype-of": {
- "chrome": "49",
- "opera": "36",
- "edge": "12",
- "firefox": "42",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.8",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "es6.regexp.constructor": {
- "chrome": "50",
- "opera": "37",
- "edge": "79",
- "firefox": "40",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "37",
- "electron": "1.1"
- },
- "es6.regexp.flags": {
- "chrome": "49",
- "opera": "36",
- "edge": "79",
- "firefox": "37",
- "safari": "9",
- "node": "6",
- "deno": "1",
- "ios": "9",
- "samsung": "5",
- "rhino": "1.7.15",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "es6.regexp.match": {
- "chrome": "50",
- "opera": "37",
- "edge": "79",
- "firefox": "49",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.7.13",
- "opera_mobile": "37",
- "electron": "1.1"
- },
- "es6.regexp.replace": {
- "chrome": "50",
- "opera": "37",
- "edge": "79",
- "firefox": "49",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "37",
- "electron": "1.1"
- },
- "es6.regexp.split": {
- "chrome": "50",
- "opera": "37",
- "edge": "79",
- "firefox": "49",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "37",
- "electron": "1.1"
- },
- "es6.regexp.search": {
- "chrome": "50",
- "opera": "37",
- "edge": "79",
- "firefox": "49",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.7.13",
- "opera_mobile": "37",
- "electron": "1.1"
- },
- "es6.regexp.to-string": {
- "chrome": "50",
- "opera": "37",
- "edge": "79",
- "firefox": "39",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.7.15",
- "opera_mobile": "37",
- "electron": "1.1"
- },
- "es6.set": {
- "chrome": "51",
- "opera": "38",
- "edge": "15",
- "firefox": "53",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "es6.symbol": {
- "chrome": "51",
- "opera": "38",
- "edge": "79",
- "firefox": "51",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "es7.symbol.async-iterator": {
- "chrome": "63",
- "opera": "50",
- "edge": "79",
- "firefox": "57",
- "safari": "12",
- "node": "10",
- "deno": "1",
- "ios": "12",
- "samsung": "8",
- "opera_mobile": "46",
- "electron": "3.0"
- },
- "es6.string.anchor": {
- "chrome": "5",
- "opera": "15",
- "edge": "12",
- "firefox": "17",
- "safari": "6",
- "node": "0.4",
- "deno": "1",
- "android": "4",
- "ios": "7",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.14",
- "opera_mobile": "14",
- "electron": "0.20"
- },
- "es6.string.big": {
- "chrome": "5",
- "opera": "15",
- "edge": "12",
- "firefox": "17",
- "safari": "6",
- "node": "0.4",
- "deno": "1",
- "android": "4",
- "ios": "7",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.14",
- "opera_mobile": "14",
- "electron": "0.20"
- },
- "es6.string.blink": {
- "chrome": "5",
- "opera": "15",
- "edge": "12",
- "firefox": "17",
- "safari": "6",
- "node": "0.4",
- "deno": "1",
- "android": "4",
- "ios": "7",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.14",
- "opera_mobile": "14",
- "electron": "0.20"
- },
- "es6.string.bold": {
- "chrome": "5",
- "opera": "15",
- "edge": "12",
- "firefox": "17",
- "safari": "6",
- "node": "0.4",
- "deno": "1",
- "android": "4",
- "ios": "7",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.14",
- "opera_mobile": "14",
- "electron": "0.20"
- },
- "es6.string.code-point-at": {
- "chrome": "41",
- "opera": "28",
- "edge": "12",
- "firefox": "29",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "3.4",
- "rhino": "1.7.13",
- "opera_mobile": "28",
- "electron": "0.21"
- },
- "es6.string.ends-with": {
- "chrome": "41",
- "opera": "28",
- "edge": "12",
- "firefox": "29",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "3.4",
- "rhino": "1.7.13",
- "opera_mobile": "28",
- "electron": "0.21"
- },
- "es6.string.fixed": {
- "chrome": "5",
- "opera": "15",
- "edge": "12",
- "firefox": "17",
- "safari": "6",
- "node": "0.4",
- "deno": "1",
- "android": "4",
- "ios": "7",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.14",
- "opera_mobile": "14",
- "electron": "0.20"
- },
- "es6.string.fontcolor": {
- "chrome": "5",
- "opera": "15",
- "edge": "12",
- "firefox": "17",
- "safari": "6",
- "node": "0.4",
- "deno": "1",
- "android": "4",
- "ios": "7",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.14",
- "opera_mobile": "14",
- "electron": "0.20"
- },
- "es6.string.fontsize": {
- "chrome": "5",
- "opera": "15",
- "edge": "12",
- "firefox": "17",
- "safari": "6",
- "node": "0.4",
- "deno": "1",
- "android": "4",
- "ios": "7",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.14",
- "opera_mobile": "14",
- "electron": "0.20"
- },
- "es6.string.from-code-point": {
- "chrome": "41",
- "opera": "28",
- "edge": "12",
- "firefox": "29",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "3.4",
- "rhino": "1.7.13",
- "opera_mobile": "28",
- "electron": "0.21"
- },
- "es6.string.includes": {
- "chrome": "41",
- "opera": "28",
- "edge": "12",
- "firefox": "40",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "3.4",
- "rhino": "1.7.13",
- "opera_mobile": "28",
- "electron": "0.21"
- },
- "es6.string.italics": {
- "chrome": "5",
- "opera": "15",
- "edge": "12",
- "firefox": "17",
- "safari": "6",
- "node": "0.4",
- "deno": "1",
- "android": "4",
- "ios": "7",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.14",
- "opera_mobile": "14",
- "electron": "0.20"
- },
- "es6.string.iterator": {
- "chrome": "38",
- "opera": "25",
- "edge": "12",
- "firefox": "36",
- "safari": "9",
- "node": "0.12",
- "deno": "1",
- "ios": "9",
- "samsung": "3",
- "rhino": "1.7.13",
- "opera_mobile": "25",
- "electron": "0.20"
- },
- "es6.string.link": {
- "chrome": "5",
- "opera": "15",
- "edge": "12",
- "firefox": "17",
- "safari": "6",
- "node": "0.4",
- "deno": "1",
- "android": "4",
- "ios": "7",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.14",
- "opera_mobile": "14",
- "electron": "0.20"
- },
- "es7.string.pad-start": {
- "chrome": "57",
- "opera": "44",
- "edge": "15",
- "firefox": "48",
- "safari": "10",
- "node": "8",
- "deno": "1",
- "ios": "10",
- "samsung": "7",
- "rhino": "1.7.13",
- "opera_mobile": "43",
- "electron": "1.7"
- },
- "es7.string.pad-end": {
- "chrome": "57",
- "opera": "44",
- "edge": "15",
- "firefox": "48",
- "safari": "10",
- "node": "8",
- "deno": "1",
- "ios": "10",
- "samsung": "7",
- "rhino": "1.7.13",
- "opera_mobile": "43",
- "electron": "1.7"
- },
- "es6.string.raw": {
- "chrome": "41",
- "opera": "28",
- "edge": "12",
- "firefox": "34",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "3.4",
- "rhino": "1.7.14",
- "opera_mobile": "28",
- "electron": "0.21"
- },
- "es6.string.repeat": {
- "chrome": "41",
- "opera": "28",
- "edge": "12",
- "firefox": "24",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "3.4",
- "rhino": "1.7.13",
- "opera_mobile": "28",
- "electron": "0.21"
- },
- "es6.string.small": {
- "chrome": "5",
- "opera": "15",
- "edge": "12",
- "firefox": "17",
- "safari": "6",
- "node": "0.4",
- "deno": "1",
- "android": "4",
- "ios": "7",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.14",
- "opera_mobile": "14",
- "electron": "0.20"
- },
- "es6.string.starts-with": {
- "chrome": "41",
- "opera": "28",
- "edge": "12",
- "firefox": "29",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "3.4",
- "rhino": "1.7.13",
- "opera_mobile": "28",
- "electron": "0.21"
- },
- "es6.string.strike": {
- "chrome": "5",
- "opera": "15",
- "edge": "12",
- "firefox": "17",
- "safari": "6",
- "node": "0.4",
- "deno": "1",
- "android": "4",
- "ios": "7",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.14",
- "opera_mobile": "14",
- "electron": "0.20"
- },
- "es6.string.sub": {
- "chrome": "5",
- "opera": "15",
- "edge": "12",
- "firefox": "17",
- "safari": "6",
- "node": "0.4",
- "deno": "1",
- "android": "4",
- "ios": "7",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.14",
- "opera_mobile": "14",
- "electron": "0.20"
- },
- "es6.string.sup": {
- "chrome": "5",
- "opera": "15",
- "edge": "12",
- "firefox": "17",
- "safari": "6",
- "node": "0.4",
- "deno": "1",
- "android": "4",
- "ios": "7",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.14",
- "opera_mobile": "14",
- "electron": "0.20"
- },
- "es6.string.trim": {
- "chrome": "5",
- "opera": "10.50",
- "edge": "12",
- "firefox": "3.5",
- "safari": "4",
- "node": "0.4",
- "deno": "1",
- "ie": "9",
- "android": "4",
- "ios": "6",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "10.1",
- "electron": "0.20"
- },
- "es7.string.trim-left": {
- "chrome": "66",
- "opera": "53",
- "edge": "79",
- "firefox": "61",
- "safari": "12",
- "node": "10",
- "deno": "1",
- "ios": "12",
- "samsung": "9",
- "rhino": "1.7.13",
- "opera_mobile": "47",
- "electron": "3.0"
- },
- "es7.string.trim-right": {
- "chrome": "66",
- "opera": "53",
- "edge": "79",
- "firefox": "61",
- "safari": "12",
- "node": "10",
- "deno": "1",
- "ios": "12",
- "samsung": "9",
- "rhino": "1.7.13",
- "opera_mobile": "47",
- "electron": "3.0"
- },
- "es6.typed.array-buffer": {
- "chrome": "51",
- "opera": "38",
- "edge": "13",
- "firefox": "48",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "es6.typed.data-view": {
- "chrome": "5",
- "opera": "12",
- "edge": "12",
- "firefox": "15",
- "safari": "5.1",
- "node": "0.4",
- "deno": "1",
- "ie": "10",
- "android": "4",
- "ios": "6",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "12",
- "electron": "0.20"
- },
- "es6.typed.int8-array": {
- "chrome": "51",
- "opera": "38",
- "edge": "13",
- "firefox": "48",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "es6.typed.uint8-array": {
- "chrome": "51",
- "opera": "38",
- "edge": "13",
- "firefox": "48",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "es6.typed.uint8-clamped-array": {
- "chrome": "51",
- "opera": "38",
- "edge": "13",
- "firefox": "48",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "es6.typed.int16-array": {
- "chrome": "51",
- "opera": "38",
- "edge": "13",
- "firefox": "48",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "es6.typed.uint16-array": {
- "chrome": "51",
- "opera": "38",
- "edge": "13",
- "firefox": "48",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "es6.typed.int32-array": {
- "chrome": "51",
- "opera": "38",
- "edge": "13",
- "firefox": "48",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "es6.typed.uint32-array": {
- "chrome": "51",
- "opera": "38",
- "edge": "13",
- "firefox": "48",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "es6.typed.float32-array": {
- "chrome": "51",
- "opera": "38",
- "edge": "13",
- "firefox": "48",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "es6.typed.float64-array": {
- "chrome": "51",
- "opera": "38",
- "edge": "13",
- "firefox": "48",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "es6.weak-map": {
- "chrome": "51",
- "opera": "38",
- "edge": "15",
- "firefox": "53",
- "safari": "9",
- "node": "6.5",
- "deno": "1",
- "ios": "9",
- "samsung": "5",
- "rhino": "1.7.15",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "es6.weak-set": {
- "chrome": "51",
- "opera": "38",
- "edge": "15",
- "firefox": "53",
- "safari": "9",
- "node": "6.5",
- "deno": "1",
- "ios": "9",
- "samsung": "5",
- "rhino": "1.7.15",
- "opera_mobile": "41",
- "electron": "1.2"
- }
-}
diff --git a/node_modules/@babel/compat-data/data/corejs3-shipped-proposals.json b/node_modules/@babel/compat-data/data/corejs3-shipped-proposals.json
deleted file mode 100644
index d03b698f..00000000
--- a/node_modules/@babel/compat-data/data/corejs3-shipped-proposals.json
+++ /dev/null
@@ -1,5 +0,0 @@
-[
- "esnext.promise.all-settled",
- "esnext.string.match-all",
- "esnext.global-this"
-]
diff --git a/node_modules/@babel/compat-data/data/native-modules.json b/node_modules/@babel/compat-data/data/native-modules.json
deleted file mode 100644
index 2328d213..00000000
--- a/node_modules/@babel/compat-data/data/native-modules.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "es6.module": {
- "chrome": "61",
- "and_chr": "61",
- "edge": "16",
- "firefox": "60",
- "and_ff": "60",
- "node": "13.2.0",
- "opera": "48",
- "op_mob": "45",
- "safari": "10.1",
- "ios": "10.3",
- "samsung": "8.2",
- "android": "61",
- "electron": "2.0",
- "ios_saf": "10.3"
- }
-}
diff --git a/node_modules/@babel/compat-data/data/overlapping-plugins.json b/node_modules/@babel/compat-data/data/overlapping-plugins.json
deleted file mode 100644
index 9b884bd4..00000000
--- a/node_modules/@babel/compat-data/data/overlapping-plugins.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "transform-async-to-generator": [
- "bugfix/transform-async-arrows-in-class"
- ],
- "transform-parameters": [
- "bugfix/transform-edge-default-parameters",
- "bugfix/transform-safari-id-destructuring-collision-in-function-expression"
- ],
- "transform-function-name": [
- "bugfix/transform-edge-function-name"
- ],
- "transform-block-scoping": [
- "bugfix/transform-safari-block-shadowing",
- "bugfix/transform-safari-for-shadowing"
- ],
- "transform-template-literals": [
- "bugfix/transform-tagged-template-caching"
- ],
- "transform-optional-chaining": [
- "bugfix/transform-v8-spread-parameters-in-optional-chaining"
- ],
- "proposal-optional-chaining": [
- "bugfix/transform-v8-spread-parameters-in-optional-chaining"
- ],
- "transform-class-properties": [
- "bugfix/transform-v8-static-class-fields-redefine-readonly",
- "bugfix/transform-firefox-class-in-computed-class-key",
- "bugfix/transform-safari-class-field-initializer-scope"
- ],
- "proposal-class-properties": [
- "bugfix/transform-v8-static-class-fields-redefine-readonly",
- "bugfix/transform-firefox-class-in-computed-class-key",
- "bugfix/transform-safari-class-field-initializer-scope"
- ]
-}
diff --git a/node_modules/@babel/compat-data/data/plugin-bugfixes.json b/node_modules/@babel/compat-data/data/plugin-bugfixes.json
deleted file mode 100644
index 3d1aed6e..00000000
--- a/node_modules/@babel/compat-data/data/plugin-bugfixes.json
+++ /dev/null
@@ -1,203 +0,0 @@
-{
- "bugfix/transform-async-arrows-in-class": {
- "chrome": "55",
- "opera": "42",
- "edge": "15",
- "firefox": "52",
- "safari": "11",
- "node": "7.6",
- "deno": "1",
- "ios": "11",
- "samsung": "6",
- "opera_mobile": "42",
- "electron": "1.6"
- },
- "bugfix/transform-edge-default-parameters": {
- "chrome": "49",
- "opera": "36",
- "edge": "18",
- "firefox": "52",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "bugfix/transform-edge-function-name": {
- "chrome": "51",
- "opera": "38",
- "edge": "79",
- "firefox": "53",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "bugfix/transform-safari-block-shadowing": {
- "chrome": "49",
- "opera": "36",
- "edge": "12",
- "firefox": "44",
- "safari": "11",
- "node": "6",
- "deno": "1",
- "ie": "11",
- "ios": "11",
- "samsung": "5",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "bugfix/transform-safari-for-shadowing": {
- "chrome": "49",
- "opera": "36",
- "edge": "12",
- "firefox": "4",
- "safari": "11",
- "node": "6",
- "deno": "1",
- "ie": "11",
- "ios": "11",
- "samsung": "5",
- "rhino": "1.7.13",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "bugfix/transform-safari-id-destructuring-collision-in-function-expression": {
- "chrome": "49",
- "opera": "36",
- "edge": "14",
- "firefox": "2",
- "safari": "16.3",
- "node": "6",
- "deno": "1",
- "ios": "16.3",
- "samsung": "5",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "bugfix/transform-tagged-template-caching": {
- "chrome": "41",
- "opera": "28",
- "edge": "12",
- "firefox": "34",
- "safari": "13",
- "node": "4",
- "deno": "1",
- "ios": "13",
- "samsung": "3.4",
- "rhino": "1.7.14",
- "opera_mobile": "28",
- "electron": "0.21"
- },
- "bugfix/transform-v8-spread-parameters-in-optional-chaining": {
- "chrome": "91",
- "opera": "77",
- "edge": "91",
- "firefox": "74",
- "safari": "13.1",
- "node": "16.9",
- "deno": "1.9",
- "ios": "13.4",
- "samsung": "16",
- "opera_mobile": "64",
- "electron": "13.0"
- },
- "transform-optional-chaining": {
- "chrome": "80",
- "opera": "67",
- "edge": "80",
- "firefox": "74",
- "safari": "13.1",
- "node": "14",
- "deno": "1",
- "ios": "13.4",
- "samsung": "13",
- "rhino": "1.8",
- "opera_mobile": "57",
- "electron": "8.0"
- },
- "proposal-optional-chaining": {
- "chrome": "80",
- "opera": "67",
- "edge": "80",
- "firefox": "74",
- "safari": "13.1",
- "node": "14",
- "deno": "1",
- "ios": "13.4",
- "samsung": "13",
- "rhino": "1.8",
- "opera_mobile": "57",
- "electron": "8.0"
- },
- "transform-parameters": {
- "chrome": "49",
- "opera": "36",
- "edge": "15",
- "firefox": "52",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "transform-async-to-generator": {
- "chrome": "55",
- "opera": "42",
- "edge": "15",
- "firefox": "52",
- "safari": "10.1",
- "node": "7.6",
- "deno": "1",
- "ios": "10.3",
- "samsung": "6",
- "opera_mobile": "42",
- "electron": "1.6"
- },
- "transform-template-literals": {
- "chrome": "41",
- "opera": "28",
- "edge": "13",
- "firefox": "34",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "3.4",
- "opera_mobile": "28",
- "electron": "0.21"
- },
- "transform-function-name": {
- "chrome": "51",
- "opera": "38",
- "edge": "14",
- "firefox": "53",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "transform-block-scoping": {
- "chrome": "50",
- "opera": "37",
- "edge": "14",
- "firefox": "53",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "37",
- "electron": "1.1"
- }
-}
diff --git a/node_modules/@babel/compat-data/data/plugins.json b/node_modules/@babel/compat-data/data/plugins.json
deleted file mode 100644
index c2ff4592..00000000
--- a/node_modules/@babel/compat-data/data/plugins.json
+++ /dev/null
@@ -1,838 +0,0 @@
-{
- "transform-explicit-resource-management": {
- "chrome": "134",
- "edge": "134",
- "firefox": "141",
- "node": "24",
- "electron": "35.0"
- },
- "transform-duplicate-named-capturing-groups-regex": {
- "chrome": "126",
- "opera": "112",
- "edge": "126",
- "firefox": "129",
- "safari": "17.4",
- "node": "23",
- "ios": "17.4",
- "electron": "31.0"
- },
- "transform-regexp-modifiers": {
- "chrome": "125",
- "opera": "111",
- "edge": "125",
- "firefox": "132",
- "node": "23",
- "samsung": "27",
- "electron": "31.0"
- },
- "transform-unicode-sets-regex": {
- "chrome": "112",
- "opera": "98",
- "edge": "112",
- "firefox": "116",
- "safari": "17",
- "node": "20",
- "deno": "1.32",
- "ios": "17",
- "samsung": "23",
- "opera_mobile": "75",
- "electron": "24.0"
- },
- "bugfix/transform-v8-static-class-fields-redefine-readonly": {
- "chrome": "98",
- "opera": "84",
- "edge": "98",
- "firefox": "75",
- "safari": "15",
- "node": "12",
- "deno": "1.18",
- "ios": "15",
- "samsung": "11",
- "opera_mobile": "52",
- "electron": "17.0"
- },
- "bugfix/transform-firefox-class-in-computed-class-key": {
- "chrome": "74",
- "opera": "62",
- "edge": "79",
- "firefox": "126",
- "safari": "16",
- "node": "12",
- "deno": "1",
- "ios": "16",
- "samsung": "11",
- "opera_mobile": "53",
- "electron": "6.0"
- },
- "bugfix/transform-safari-class-field-initializer-scope": {
- "chrome": "74",
- "opera": "62",
- "edge": "79",
- "firefox": "69",
- "safari": "16",
- "node": "12",
- "deno": "1",
- "ios": "16",
- "samsung": "11",
- "opera_mobile": "53",
- "electron": "6.0"
- },
- "transform-class-static-block": {
- "chrome": "94",
- "opera": "80",
- "edge": "94",
- "firefox": "93",
- "safari": "16.4",
- "node": "16.11",
- "deno": "1.14",
- "ios": "16.4",
- "samsung": "17",
- "opera_mobile": "66",
- "electron": "15.0"
- },
- "proposal-class-static-block": {
- "chrome": "94",
- "opera": "80",
- "edge": "94",
- "firefox": "93",
- "safari": "16.4",
- "node": "16.11",
- "deno": "1.14",
- "ios": "16.4",
- "samsung": "17",
- "opera_mobile": "66",
- "electron": "15.0"
- },
- "transform-private-property-in-object": {
- "chrome": "91",
- "opera": "77",
- "edge": "91",
- "firefox": "90",
- "safari": "15",
- "node": "16.9",
- "deno": "1.9",
- "ios": "15",
- "samsung": "16",
- "opera_mobile": "64",
- "electron": "13.0"
- },
- "proposal-private-property-in-object": {
- "chrome": "91",
- "opera": "77",
- "edge": "91",
- "firefox": "90",
- "safari": "15",
- "node": "16.9",
- "deno": "1.9",
- "ios": "15",
- "samsung": "16",
- "opera_mobile": "64",
- "electron": "13.0"
- },
- "transform-class-properties": {
- "chrome": "74",
- "opera": "62",
- "edge": "79",
- "firefox": "90",
- "safari": "14.1",
- "node": "12",
- "deno": "1",
- "ios": "14.5",
- "samsung": "11",
- "opera_mobile": "53",
- "electron": "6.0"
- },
- "proposal-class-properties": {
- "chrome": "74",
- "opera": "62",
- "edge": "79",
- "firefox": "90",
- "safari": "14.1",
- "node": "12",
- "deno": "1",
- "ios": "14.5",
- "samsung": "11",
- "opera_mobile": "53",
- "electron": "6.0"
- },
- "transform-private-methods": {
- "chrome": "84",
- "opera": "70",
- "edge": "84",
- "firefox": "90",
- "safari": "15",
- "node": "14.6",
- "deno": "1",
- "ios": "15",
- "samsung": "14",
- "opera_mobile": "60",
- "electron": "10.0"
- },
- "proposal-private-methods": {
- "chrome": "84",
- "opera": "70",
- "edge": "84",
- "firefox": "90",
- "safari": "15",
- "node": "14.6",
- "deno": "1",
- "ios": "15",
- "samsung": "14",
- "opera_mobile": "60",
- "electron": "10.0"
- },
- "transform-numeric-separator": {
- "chrome": "75",
- "opera": "62",
- "edge": "79",
- "firefox": "70",
- "safari": "13",
- "node": "12.5",
- "deno": "1",
- "ios": "13",
- "samsung": "11",
- "rhino": "1.7.14",
- "opera_mobile": "54",
- "electron": "6.0"
- },
- "proposal-numeric-separator": {
- "chrome": "75",
- "opera": "62",
- "edge": "79",
- "firefox": "70",
- "safari": "13",
- "node": "12.5",
- "deno": "1",
- "ios": "13",
- "samsung": "11",
- "rhino": "1.7.14",
- "opera_mobile": "54",
- "electron": "6.0"
- },
- "transform-logical-assignment-operators": {
- "chrome": "85",
- "opera": "71",
- "edge": "85",
- "firefox": "79",
- "safari": "14",
- "node": "15",
- "deno": "1.2",
- "ios": "14",
- "samsung": "14",
- "opera_mobile": "60",
- "electron": "10.0"
- },
- "proposal-logical-assignment-operators": {
- "chrome": "85",
- "opera": "71",
- "edge": "85",
- "firefox": "79",
- "safari": "14",
- "node": "15",
- "deno": "1.2",
- "ios": "14",
- "samsung": "14",
- "opera_mobile": "60",
- "electron": "10.0"
- },
- "transform-nullish-coalescing-operator": {
- "chrome": "80",
- "opera": "67",
- "edge": "80",
- "firefox": "72",
- "safari": "13.1",
- "node": "14",
- "deno": "1",
- "ios": "13.4",
- "samsung": "13",
- "rhino": "1.8",
- "opera_mobile": "57",
- "electron": "8.0"
- },
- "proposal-nullish-coalescing-operator": {
- "chrome": "80",
- "opera": "67",
- "edge": "80",
- "firefox": "72",
- "safari": "13.1",
- "node": "14",
- "deno": "1",
- "ios": "13.4",
- "samsung": "13",
- "rhino": "1.8",
- "opera_mobile": "57",
- "electron": "8.0"
- },
- "transform-optional-chaining": {
- "chrome": "91",
- "opera": "77",
- "edge": "91",
- "firefox": "74",
- "safari": "13.1",
- "node": "16.9",
- "deno": "1.9",
- "ios": "13.4",
- "samsung": "16",
- "opera_mobile": "64",
- "electron": "13.0"
- },
- "proposal-optional-chaining": {
- "chrome": "91",
- "opera": "77",
- "edge": "91",
- "firefox": "74",
- "safari": "13.1",
- "node": "16.9",
- "deno": "1.9",
- "ios": "13.4",
- "samsung": "16",
- "opera_mobile": "64",
- "electron": "13.0"
- },
- "transform-json-strings": {
- "chrome": "66",
- "opera": "53",
- "edge": "79",
- "firefox": "62",
- "safari": "12",
- "node": "10",
- "deno": "1",
- "ios": "12",
- "samsung": "9",
- "rhino": "1.7.14",
- "opera_mobile": "47",
- "electron": "3.0"
- },
- "proposal-json-strings": {
- "chrome": "66",
- "opera": "53",
- "edge": "79",
- "firefox": "62",
- "safari": "12",
- "node": "10",
- "deno": "1",
- "ios": "12",
- "samsung": "9",
- "rhino": "1.7.14",
- "opera_mobile": "47",
- "electron": "3.0"
- },
- "transform-optional-catch-binding": {
- "chrome": "66",
- "opera": "53",
- "edge": "79",
- "firefox": "58",
- "safari": "11.1",
- "node": "10",
- "deno": "1",
- "ios": "11.3",
- "samsung": "9",
- "opera_mobile": "47",
- "electron": "3.0"
- },
- "proposal-optional-catch-binding": {
- "chrome": "66",
- "opera": "53",
- "edge": "79",
- "firefox": "58",
- "safari": "11.1",
- "node": "10",
- "deno": "1",
- "ios": "11.3",
- "samsung": "9",
- "opera_mobile": "47",
- "electron": "3.0"
- },
- "transform-parameters": {
- "chrome": "49",
- "opera": "36",
- "edge": "18",
- "firefox": "52",
- "safari": "16.3",
- "node": "6",
- "deno": "1",
- "ios": "16.3",
- "samsung": "5",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "transform-async-generator-functions": {
- "chrome": "63",
- "opera": "50",
- "edge": "79",
- "firefox": "57",
- "safari": "12",
- "node": "10",
- "deno": "1",
- "ios": "12",
- "samsung": "8",
- "opera_mobile": "46",
- "electron": "3.0"
- },
- "proposal-async-generator-functions": {
- "chrome": "63",
- "opera": "50",
- "edge": "79",
- "firefox": "57",
- "safari": "12",
- "node": "10",
- "deno": "1",
- "ios": "12",
- "samsung": "8",
- "opera_mobile": "46",
- "electron": "3.0"
- },
- "transform-object-rest-spread": {
- "chrome": "60",
- "opera": "47",
- "edge": "79",
- "firefox": "55",
- "safari": "11.1",
- "node": "8.3",
- "deno": "1",
- "ios": "11.3",
- "samsung": "8",
- "opera_mobile": "44",
- "electron": "2.0"
- },
- "proposal-object-rest-spread": {
- "chrome": "60",
- "opera": "47",
- "edge": "79",
- "firefox": "55",
- "safari": "11.1",
- "node": "8.3",
- "deno": "1",
- "ios": "11.3",
- "samsung": "8",
- "opera_mobile": "44",
- "electron": "2.0"
- },
- "transform-dotall-regex": {
- "chrome": "62",
- "opera": "49",
- "edge": "79",
- "firefox": "78",
- "safari": "11.1",
- "node": "8.10",
- "deno": "1",
- "ios": "11.3",
- "samsung": "8",
- "rhino": "1.7.15",
- "opera_mobile": "46",
- "electron": "3.0"
- },
- "transform-unicode-property-regex": {
- "chrome": "64",
- "opera": "51",
- "edge": "79",
- "firefox": "78",
- "safari": "11.1",
- "node": "10",
- "deno": "1",
- "ios": "11.3",
- "samsung": "9",
- "opera_mobile": "47",
- "electron": "3.0"
- },
- "proposal-unicode-property-regex": {
- "chrome": "64",
- "opera": "51",
- "edge": "79",
- "firefox": "78",
- "safari": "11.1",
- "node": "10",
- "deno": "1",
- "ios": "11.3",
- "samsung": "9",
- "opera_mobile": "47",
- "electron": "3.0"
- },
- "transform-named-capturing-groups-regex": {
- "chrome": "64",
- "opera": "51",
- "edge": "79",
- "firefox": "78",
- "safari": "11.1",
- "node": "10",
- "deno": "1",
- "ios": "11.3",
- "samsung": "9",
- "opera_mobile": "47",
- "electron": "3.0"
- },
- "transform-async-to-generator": {
- "chrome": "55",
- "opera": "42",
- "edge": "15",
- "firefox": "52",
- "safari": "11",
- "node": "7.6",
- "deno": "1",
- "ios": "11",
- "samsung": "6",
- "opera_mobile": "42",
- "electron": "1.6"
- },
- "transform-exponentiation-operator": {
- "chrome": "52",
- "opera": "39",
- "edge": "14",
- "firefox": "52",
- "safari": "10.1",
- "node": "7",
- "deno": "1",
- "ios": "10.3",
- "samsung": "6",
- "rhino": "1.7.14",
- "opera_mobile": "41",
- "electron": "1.3"
- },
- "transform-template-literals": {
- "chrome": "41",
- "opera": "28",
- "edge": "13",
- "firefox": "34",
- "safari": "13",
- "node": "4",
- "deno": "1",
- "ios": "13",
- "samsung": "3.4",
- "opera_mobile": "28",
- "electron": "0.21"
- },
- "transform-literals": {
- "chrome": "44",
- "opera": "31",
- "edge": "12",
- "firefox": "53",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "4",
- "rhino": "1.7.15",
- "opera_mobile": "32",
- "electron": "0.30"
- },
- "transform-function-name": {
- "chrome": "51",
- "opera": "38",
- "edge": "79",
- "firefox": "53",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "transform-arrow-functions": {
- "chrome": "47",
- "opera": "34",
- "edge": "13",
- "firefox": "43",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.7.13",
- "opera_mobile": "34",
- "electron": "0.36"
- },
- "transform-block-scoped-functions": {
- "chrome": "41",
- "opera": "28",
- "edge": "12",
- "firefox": "46",
- "safari": "10",
- "node": "4",
- "deno": "1",
- "ie": "11",
- "ios": "10",
- "samsung": "3.4",
- "opera_mobile": "28",
- "electron": "0.21"
- },
- "transform-classes": {
- "chrome": "46",
- "opera": "33",
- "edge": "13",
- "firefox": "45",
- "safari": "10",
- "node": "5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "33",
- "electron": "0.36"
- },
- "transform-object-super": {
- "chrome": "46",
- "opera": "33",
- "edge": "13",
- "firefox": "45",
- "safari": "10",
- "node": "5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "33",
- "electron": "0.36"
- },
- "transform-shorthand-properties": {
- "chrome": "43",
- "opera": "30",
- "edge": "12",
- "firefox": "33",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "4",
- "rhino": "1.7.14",
- "opera_mobile": "30",
- "electron": "0.27"
- },
- "transform-duplicate-keys": {
- "chrome": "42",
- "opera": "29",
- "edge": "12",
- "firefox": "34",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "3.4",
- "opera_mobile": "29",
- "electron": "0.25"
- },
- "transform-computed-properties": {
- "chrome": "44",
- "opera": "31",
- "edge": "12",
- "firefox": "34",
- "safari": "7.1",
- "node": "4",
- "deno": "1",
- "ios": "8",
- "samsung": "4",
- "rhino": "1.8",
- "opera_mobile": "32",
- "electron": "0.30"
- },
- "transform-for-of": {
- "chrome": "51",
- "opera": "38",
- "edge": "15",
- "firefox": "53",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "transform-sticky-regex": {
- "chrome": "49",
- "opera": "36",
- "edge": "13",
- "firefox": "3",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "rhino": "1.7.15",
- "opera_mobile": "36",
- "electron": "0.37"
- },
- "transform-unicode-escapes": {
- "chrome": "44",
- "opera": "31",
- "edge": "12",
- "firefox": "53",
- "safari": "9",
- "node": "4",
- "deno": "1",
- "ios": "9",
- "samsung": "4",
- "rhino": "1.7.15",
- "opera_mobile": "32",
- "electron": "0.30"
- },
- "transform-unicode-regex": {
- "chrome": "50",
- "opera": "37",
- "edge": "13",
- "firefox": "46",
- "safari": "12",
- "node": "6",
- "deno": "1",
- "ios": "12",
- "samsung": "5",
- "opera_mobile": "37",
- "electron": "1.1"
- },
- "transform-spread": {
- "chrome": "46",
- "opera": "33",
- "edge": "13",
- "firefox": "45",
- "safari": "10",
- "node": "5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "33",
- "electron": "0.36"
- },
- "transform-destructuring": {
- "chrome": "51",
- "opera": "38",
- "edge": "15",
- "firefox": "53",
- "safari": "10",
- "node": "6.5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "41",
- "electron": "1.2"
- },
- "transform-block-scoping": {
- "chrome": "50",
- "opera": "37",
- "edge": "14",
- "firefox": "53",
- "safari": "11",
- "node": "6",
- "deno": "1",
- "ios": "11",
- "samsung": "5",
- "opera_mobile": "37",
- "electron": "1.1"
- },
- "transform-typeof-symbol": {
- "chrome": "48",
- "opera": "35",
- "edge": "12",
- "firefox": "36",
- "safari": "9",
- "node": "6",
- "deno": "1",
- "ios": "9",
- "samsung": "5",
- "rhino": "1.8",
- "opera_mobile": "35",
- "electron": "0.37"
- },
- "transform-new-target": {
- "chrome": "46",
- "opera": "33",
- "edge": "14",
- "firefox": "41",
- "safari": "10",
- "node": "5",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "33",
- "electron": "0.36"
- },
- "transform-regenerator": {
- "chrome": "50",
- "opera": "37",
- "edge": "13",
- "firefox": "53",
- "safari": "10",
- "node": "6",
- "deno": "1",
- "ios": "10",
- "samsung": "5",
- "opera_mobile": "37",
- "electron": "1.1"
- },
- "transform-member-expression-literals": {
- "chrome": "7",
- "opera": "12",
- "edge": "12",
- "firefox": "2",
- "safari": "5.1",
- "node": "0.4",
- "deno": "1",
- "ie": "9",
- "android": "4",
- "ios": "6",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "12",
- "electron": "0.20"
- },
- "transform-property-literals": {
- "chrome": "7",
- "opera": "12",
- "edge": "12",
- "firefox": "2",
- "safari": "5.1",
- "node": "0.4",
- "deno": "1",
- "ie": "9",
- "android": "4",
- "ios": "6",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "12",
- "electron": "0.20"
- },
- "transform-reserved-words": {
- "chrome": "13",
- "opera": "10.50",
- "edge": "12",
- "firefox": "2",
- "safari": "3.1",
- "node": "0.6",
- "deno": "1",
- "ie": "9",
- "android": "4.4",
- "ios": "6",
- "phantom": "1.9",
- "samsung": "1",
- "rhino": "1.7.13",
- "opera_mobile": "10.1",
- "electron": "0.20"
- },
- "transform-export-namespace-from": {
- "chrome": "72",
- "deno": "1.0",
- "edge": "79",
- "firefox": "80",
- "node": "13.2.0",
- "opera": "60",
- "opera_mobile": "51",
- "safari": "14.1",
- "ios": "14.5",
- "samsung": "11.0",
- "android": "72",
- "electron": "5.0"
- },
- "proposal-export-namespace-from": {
- "chrome": "72",
- "deno": "1.0",
- "edge": "79",
- "firefox": "80",
- "node": "13.2.0",
- "opera": "60",
- "opera_mobile": "51",
- "safari": "14.1",
- "ios": "14.5",
- "samsung": "11.0",
- "android": "72",
- "electron": "5.0"
- }
-}
diff --git a/node_modules/@babel/compat-data/native-modules.js b/node_modules/@babel/compat-data/native-modules.js
deleted file mode 100644
index f8c25fa3..00000000
--- a/node_modules/@babel/compat-data/native-modules.js
+++ /dev/null
@@ -1,2 +0,0 @@
-// Todo (Babel 8): remove this file, in Babel 8 users import the .json directly
-module.exports = require("./data/native-modules.json");
diff --git a/node_modules/@babel/compat-data/overlapping-plugins.js b/node_modules/@babel/compat-data/overlapping-plugins.js
deleted file mode 100644
index 0dd35f15..00000000
--- a/node_modules/@babel/compat-data/overlapping-plugins.js
+++ /dev/null
@@ -1,2 +0,0 @@
-// Todo (Babel 8): remove this file, in Babel 8 users import the .json directly
-module.exports = require("./data/overlapping-plugins.json");
diff --git a/node_modules/@babel/compat-data/package.json b/node_modules/@babel/compat-data/package.json
deleted file mode 100644
index d3a7bc0d..00000000
--- a/node_modules/@babel/compat-data/package.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
- "name": "@babel/compat-data",
- "version": "7.28.5",
- "author": "The Babel Team (https://babel.dev/team)",
- "license": "MIT",
- "description": "The compat-data to determine required Babel plugins",
- "repository": {
- "type": "git",
- "url": "https://github.com/babel/babel.git",
- "directory": "packages/babel-compat-data"
- },
- "publishConfig": {
- "access": "public"
- },
- "exports": {
- "./plugins": "./plugins.js",
- "./native-modules": "./native-modules.js",
- "./corejs2-built-ins": "./corejs2-built-ins.js",
- "./corejs3-shipped-proposals": "./corejs3-shipped-proposals.js",
- "./overlapping-plugins": "./overlapping-plugins.js",
- "./plugin-bugfixes": "./plugin-bugfixes.js"
- },
- "scripts": {
- "build-data": "./scripts/download-compat-table.sh && node ./scripts/build-data.mjs && node ./scripts/build-modules-support.mjs && node ./scripts/build-bugfixes-targets.mjs"
- },
- "keywords": [
- "babel",
- "compat-table",
- "compat-data"
- ],
- "devDependencies": {
- "@mdn/browser-compat-data": "^6.0.8",
- "core-js-compat": "^3.43.0",
- "electron-to-chromium": "^1.5.140"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "type": "commonjs"
-}
\ No newline at end of file
diff --git a/node_modules/@babel/compat-data/plugin-bugfixes.js b/node_modules/@babel/compat-data/plugin-bugfixes.js
deleted file mode 100644
index 9aaf3641..00000000
--- a/node_modules/@babel/compat-data/plugin-bugfixes.js
+++ /dev/null
@@ -1,2 +0,0 @@
-// Todo (Babel 8): remove this file, in Babel 8 users import the .json directly
-module.exports = require("./data/plugin-bugfixes.json");
diff --git a/node_modules/@babel/compat-data/plugins.js b/node_modules/@babel/compat-data/plugins.js
deleted file mode 100644
index b191017b..00000000
--- a/node_modules/@babel/compat-data/plugins.js
+++ /dev/null
@@ -1,2 +0,0 @@
-// Todo (Babel 8): remove this file, in Babel 8 users import the .json directly
-module.exports = require("./data/plugins.json");
diff --git a/node_modules/@babel/core/LICENSE b/node_modules/@babel/core/LICENSE
deleted file mode 100644
index f31575ec..00000000
--- a/node_modules/@babel/core/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-MIT License
-
-Copyright (c) 2014-present Sebastian McKenzie and other contributors
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/@babel/core/README.md b/node_modules/@babel/core/README.md
deleted file mode 100644
index 29035434..00000000
--- a/node_modules/@babel/core/README.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# @babel/core
-
-> Babel compiler core.
-
-See our website [@babel/core](https://babeljs.io/docs/babel-core) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20core%22+is%3Aopen) associated with this package.
-
-## Install
-
-Using npm:
-
-```sh
-npm install --save-dev @babel/core
-```
-
-or using yarn:
-
-```sh
-yarn add @babel/core --dev
-```
diff --git a/node_modules/@babel/core/lib/config/cache-contexts.js b/node_modules/@babel/core/lib/config/cache-contexts.js
deleted file mode 100644
index f2ececda..00000000
--- a/node_modules/@babel/core/lib/config/cache-contexts.js
+++ /dev/null
@@ -1,5 +0,0 @@
-"use strict";
-
-0 && 0;
-
-//# sourceMappingURL=cache-contexts.js.map
diff --git a/node_modules/@babel/core/lib/config/cache-contexts.js.map b/node_modules/@babel/core/lib/config/cache-contexts.js.map
deleted file mode 100644
index b1516536..00000000
--- a/node_modules/@babel/core/lib/config/cache-contexts.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"names":[],"sources":["../../src/config/cache-contexts.ts"],"sourcesContent":["import type { ConfigContext } from \"./config-chain.ts\";\nimport type {\n CallerMetadata,\n TargetsListOrObject,\n} from \"./validation/options.ts\";\n\nexport type { ConfigContext as FullConfig };\n\nexport type FullPreset = {\n targets: TargetsListOrObject;\n} & ConfigContext;\nexport type FullPlugin = {\n assumptions: { [name: string]: boolean };\n} & FullPreset;\n\n// Context not including filename since it is used in places that cannot\n// process 'ignore'/'only' and other filename-based logic.\nexport type SimpleConfig = {\n envName: string;\n caller: CallerMetadata | undefined;\n};\nexport type SimplePreset = {\n targets: TargetsListOrObject;\n} & SimpleConfig;\nexport type SimplePlugin = {\n assumptions: {\n [name: string]: boolean;\n };\n} & SimplePreset;\n"],"mappings":"","ignoreList":[]}
\ No newline at end of file
diff --git a/node_modules/@babel/core/lib/config/caching.js b/node_modules/@babel/core/lib/config/caching.js
deleted file mode 100644
index 344c8390..00000000
--- a/node_modules/@babel/core/lib/config/caching.js
+++ /dev/null
@@ -1,261 +0,0 @@
-"use strict";
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.assertSimpleType = assertSimpleType;
-exports.makeStrongCache = makeStrongCache;
-exports.makeStrongCacheSync = makeStrongCacheSync;
-exports.makeWeakCache = makeWeakCache;
-exports.makeWeakCacheSync = makeWeakCacheSync;
-function _gensync() {
- const data = require("gensync");
- _gensync = function () {
- return data;
- };
- return data;
-}
-var _async = require("../gensync-utils/async.js");
-var _util = require("./util.js");
-const synchronize = gen => {
- return _gensync()(gen).sync;
-};
-function* genTrue() {
- return true;
-}
-function makeWeakCache(handler) {
- return makeCachedFunction(WeakMap, handler);
-}
-function makeWeakCacheSync(handler) {
- return synchronize(makeWeakCache(handler));
-}
-function makeStrongCache(handler) {
- return makeCachedFunction(Map, handler);
-}
-function makeStrongCacheSync(handler) {
- return synchronize(makeStrongCache(handler));
-}
-function makeCachedFunction(CallCache, handler) {
- const callCacheSync = new CallCache();
- const callCacheAsync = new CallCache();
- const futureCache = new CallCache();
- return function* cachedFunction(arg, data) {
- const asyncContext = yield* (0, _async.isAsync)();
- const callCache = asyncContext ? callCacheAsync : callCacheSync;
- const cached = yield* getCachedValueOrWait(asyncContext, callCache, futureCache, arg, data);
- if (cached.valid) return cached.value;
- const cache = new CacheConfigurator(data);
- const handlerResult = handler(arg, cache);
- let finishLock;
- let value;
- if ((0, _util.isIterableIterator)(handlerResult)) {
- value = yield* (0, _async.onFirstPause)(handlerResult, () => {
- finishLock = setupAsyncLocks(cache, futureCache, arg);
- });
- } else {
- value = handlerResult;
- }
- updateFunctionCache(callCache, cache, arg, value);
- if (finishLock) {
- futureCache.delete(arg);
- finishLock.release(value);
- }
- return value;
- };
-}
-function* getCachedValue(cache, arg, data) {
- const cachedValue = cache.get(arg);
- if (cachedValue) {
- for (const {
- value,
- valid
- } of cachedValue) {
- if (yield* valid(data)) return {
- valid: true,
- value
- };
- }
- }
- return {
- valid: false,
- value: null
- };
-}
-function* getCachedValueOrWait(asyncContext, callCache, futureCache, arg, data) {
- const cached = yield* getCachedValue(callCache, arg, data);
- if (cached.valid) {
- return cached;
- }
- if (asyncContext) {
- const cached = yield* getCachedValue(futureCache, arg, data);
- if (cached.valid) {
- const value = yield* (0, _async.waitFor)(cached.value.promise);
- return {
- valid: true,
- value
- };
- }
- }
- return {
- valid: false,
- value: null
- };
-}
-function setupAsyncLocks(config, futureCache, arg) {
- const finishLock = new Lock();
- updateFunctionCache(futureCache, config, arg, finishLock);
- return finishLock;
-}
-function updateFunctionCache(cache, config, arg, value) {
- if (!config.configured()) config.forever();
- let cachedValue = cache.get(arg);
- config.deactivate();
- switch (config.mode()) {
- case "forever":
- cachedValue = [{
- value,
- valid: genTrue
- }];
- cache.set(arg, cachedValue);
- break;
- case "invalidate":
- cachedValue = [{
- value,
- valid: config.validator()
- }];
- cache.set(arg, cachedValue);
- break;
- case "valid":
- if (cachedValue) {
- cachedValue.push({
- value,
- valid: config.validator()
- });
- } else {
- cachedValue = [{
- value,
- valid: config.validator()
- }];
- cache.set(arg, cachedValue);
- }
- }
-}
-class CacheConfigurator {
- constructor(data) {
- this._active = true;
- this._never = false;
- this._forever = false;
- this._invalidate = false;
- this._configured = false;
- this._pairs = [];
- this._data = void 0;
- this._data = data;
- }
- simple() {
- return makeSimpleConfigurator(this);
- }
- mode() {
- if (this._never) return "never";
- if (this._forever) return "forever";
- if (this._invalidate) return "invalidate";
- return "valid";
- }
- forever() {
- if (!this._active) {
- throw new Error("Cannot change caching after evaluation has completed.");
- }
- if (this._never) {
- throw new Error("Caching has already been configured with .never()");
- }
- this._forever = true;
- this._configured = true;
- }
- never() {
- if (!this._active) {
- throw new Error("Cannot change caching after evaluation has completed.");
- }
- if (this._forever) {
- throw new Error("Caching has already been configured with .forever()");
- }
- this._never = true;
- this._configured = true;
- }
- using(handler) {
- if (!this._active) {
- throw new Error("Cannot change caching after evaluation has completed.");
- }
- if (this._never || this._forever) {
- throw new Error("Caching has already been configured with .never or .forever()");
- }
- this._configured = true;
- const key = handler(this._data);
- const fn = (0, _async.maybeAsync)(handler, `You appear to be using an async cache handler, but Babel has been called synchronously`);
- if ((0, _async.isThenable)(key)) {
- return key.then(key => {
- this._pairs.push([key, fn]);
- return key;
- });
- }
- this._pairs.push([key, fn]);
- return key;
- }
- invalidate(handler) {
- this._invalidate = true;
- return this.using(handler);
- }
- validator() {
- const pairs = this._pairs;
- return function* (data) {
- for (const [key, fn] of pairs) {
- if (key !== (yield* fn(data))) return false;
- }
- return true;
- };
- }
- deactivate() {
- this._active = false;
- }
- configured() {
- return this._configured;
- }
-}
-function makeSimpleConfigurator(cache) {
- function cacheFn(val) {
- if (typeof val === "boolean") {
- if (val) cache.forever();else cache.never();
- return;
- }
- return cache.using(() => assertSimpleType(val()));
- }
- cacheFn.forever = () => cache.forever();
- cacheFn.never = () => cache.never();
- cacheFn.using = cb => cache.using(() => assertSimpleType(cb()));
- cacheFn.invalidate = cb => cache.invalidate(() => assertSimpleType(cb()));
- return cacheFn;
-}
-function assertSimpleType(value) {
- if ((0, _async.isThenable)(value)) {
- throw new Error(`You appear to be using an async cache handler, ` + `which your current version of Babel does not support. ` + `We may add support for this in the future, ` + `but if you're on the most recent version of @babel/core and still ` + `seeing this error, then you'll need to synchronously handle your caching logic.`);
- }
- if (value != null && typeof value !== "string" && typeof value !== "boolean" && typeof value !== "number") {
- throw new Error("Cache keys must be either string, boolean, number, null, or undefined.");
- }
- return value;
-}
-class Lock {
- constructor() {
- this.released = false;
- this.promise = void 0;
- this._resolve = void 0;
- this.promise = new Promise(resolve => {
- this._resolve = resolve;
- });
- }
- release(value) {
- this.released = true;
- this._resolve(value);
- }
-}
-0 && 0;
-
-//# sourceMappingURL=caching.js.map
diff --git a/node_modules/@babel/core/lib/config/caching.js.map b/node_modules/@babel/core/lib/config/caching.js.map
deleted file mode 100644
index 333f0bb2..00000000
--- a/node_modules/@babel/core/lib/config/caching.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"names":["_gensync","data","require","_async","_util","synchronize","gen","gensync","sync","genTrue","makeWeakCache","handler","makeCachedFunction","WeakMap","makeWeakCacheSync","makeStrongCache","Map","makeStrongCacheSync","CallCache","callCacheSync","callCacheAsync","futureCache","cachedFunction","arg","asyncContext","isAsync","callCache","cached","getCachedValueOrWait","valid","value","cache","CacheConfigurator","handlerResult","finishLock","isIterableIterator","onFirstPause","setupAsyncLocks","updateFunctionCache","delete","release","getCachedValue","cachedValue","get","waitFor","promise","config","Lock","configured","forever","deactivate","mode","set","validator","push","constructor","_active","_never","_forever","_invalidate","_configured","_pairs","_data","simple","makeSimpleConfigurator","Error","never","using","key","fn","maybeAsync","isThenable","then","invalidate","pairs","cacheFn","val","assertSimpleType","cb","released","_resolve","Promise","resolve"],"sources":["../../src/config/caching.ts"],"sourcesContent":["import gensync from \"gensync\";\nimport type { Handler } from \"gensync\";\nimport {\n maybeAsync,\n isAsync,\n onFirstPause,\n waitFor,\n isThenable,\n} from \"../gensync-utils/async.ts\";\nimport { isIterableIterator } from \"./util.ts\";\n\nexport type { CacheConfigurator };\n\nexport type SimpleCacheConfigurator = {\n (forever: boolean): void;\n (handler: () => T): T;\n\n forever: () => void;\n never: () => void;\n using: (handler: () => T) => T;\n invalidate: (handler: () => T) => T;\n};\n\nexport type CacheEntry = Array<{\n value: ResultT;\n valid: (channel: SideChannel) => Handler;\n}>;\n\nconst synchronize = (\n gen: (...args: ArgsT) => Handler,\n): ((...args: ArgsT) => ResultT) => {\n return gensync(gen).sync;\n};\n\n// eslint-disable-next-line require-yield\nfunction* genTrue() {\n return true;\n}\n\nexport function makeWeakCache(\n handler: (\n arg: ArgT,\n cache: CacheConfigurator,\n ) => Handler | ResultT,\n): (arg: ArgT, data: SideChannel) => Handler {\n return makeCachedFunction(WeakMap, handler);\n}\n\nexport function makeWeakCacheSync(\n handler: (arg: ArgT, cache?: CacheConfigurator) => ResultT,\n): (arg: ArgT, data?: SideChannel) => ResultT {\n return synchronize<[ArgT, SideChannel], ResultT>(\n makeWeakCache(handler),\n );\n}\n\nexport function makeStrongCache(\n handler: (\n arg: ArgT,\n cache: CacheConfigurator,\n ) => Handler | ResultT,\n): (arg: ArgT, data: SideChannel) => Handler {\n return makeCachedFunction(Map, handler);\n}\n\nexport function makeStrongCacheSync(\n handler: (arg: ArgT, cache?: CacheConfigurator) => ResultT,\n): (arg: ArgT, data?: SideChannel) => ResultT {\n return synchronize<[ArgT, SideChannel], ResultT>(\n makeStrongCache(handler),\n );\n}\n\n/* NOTE: Part of the logic explained in this comment is explained in the\n * getCachedValueOrWait and setupAsyncLocks functions.\n *\n * > There are only two hard things in Computer Science: cache invalidation and naming things.\n * > -- Phil Karlton\n *\n * I don't know if Phil was also thinking about handling a cache whose invalidation function is\n * defined asynchronously is considered, but it is REALLY hard to do correctly.\n *\n * The implemented logic (only when gensync is run asynchronously) is the following:\n * 1. If there is a valid cache associated to the current \"arg\" parameter,\n * a. RETURN the cached value\n * 3. If there is a FinishLock associated to the current \"arg\" parameter representing a valid cache,\n * a. Wait for that lock to be released\n * b. RETURN the value associated with that lock\n * 5. Start executing the function to be cached\n * a. If it pauses on a promise, then\n * i. Let FinishLock be a new lock\n * ii. Store FinishLock as associated to the current \"arg\" parameter\n * iii. Wait for the function to finish executing\n * iv. Release FinishLock\n * v. Send the function result to anyone waiting on FinishLock\n * 6. Store the result in the cache\n * 7. RETURN the result\n */\nfunction makeCachedFunction(\n CallCache: new () => CacheMap,\n handler: (\n arg: ArgT,\n cache: CacheConfigurator,\n ) => Handler | ResultT,\n): (arg: ArgT, data: SideChannel) => Handler {\n const callCacheSync = new CallCache();\n const callCacheAsync = new CallCache();\n const futureCache = new CallCache>();\n\n return function* cachedFunction(arg: ArgT, data: SideChannel) {\n const asyncContext = yield* isAsync();\n const callCache = asyncContext ? callCacheAsync : callCacheSync;\n\n const cached = yield* getCachedValueOrWait(\n asyncContext,\n callCache,\n futureCache,\n arg,\n data,\n );\n if (cached.valid) return cached.value;\n\n const cache = new CacheConfigurator(data);\n\n const handlerResult: Handler | ResultT = handler(arg, cache);\n\n let finishLock: Lock;\n let value: ResultT;\n\n if (isIterableIterator(handlerResult)) {\n value = yield* onFirstPause(handlerResult, () => {\n finishLock = setupAsyncLocks(cache, futureCache, arg);\n });\n } else {\n value = handlerResult;\n }\n\n updateFunctionCache(callCache, cache, arg, value);\n\n if (finishLock) {\n futureCache.delete(arg);\n finishLock.release(value);\n }\n\n return value;\n };\n}\n\ntype CacheMap =\n | Map>\n // @ts-expect-error todo(flow->ts): add `extends object` constraint to ArgT\n | WeakMap>;\n\nfunction* getCachedValue(\n cache: CacheMap,\n arg: ArgT,\n data: SideChannel,\n): Handler<{ valid: true; value: ResultT } | { valid: false; value: null }> {\n const cachedValue: CacheEntry | void = cache.get(arg);\n\n if (cachedValue) {\n for (const { value, valid } of cachedValue) {\n if (yield* valid(data)) return { valid: true, value };\n }\n }\n\n return { valid: false, value: null };\n}\n\nfunction* getCachedValueOrWait(\n asyncContext: boolean,\n callCache: CacheMap,\n futureCache: CacheMap, SideChannel>,\n arg: ArgT,\n data: SideChannel,\n): Handler<{ valid: true; value: ResultT } | { valid: false; value: null }> {\n const cached = yield* getCachedValue(callCache, arg, data);\n if (cached.valid) {\n return cached;\n }\n\n if (asyncContext) {\n const cached = yield* getCachedValue(futureCache, arg, data);\n if (cached.valid) {\n const value = yield* waitFor(cached.value.promise);\n return { valid: true, value };\n }\n }\n\n return { valid: false, value: null };\n}\n\nfunction setupAsyncLocks(\n config: CacheConfigurator,\n futureCache: CacheMap, SideChannel>,\n arg: ArgT,\n): Lock {\n const finishLock = new Lock();\n\n updateFunctionCache(futureCache, config, arg, finishLock);\n\n return finishLock;\n}\n\nfunction updateFunctionCache<\n ArgT,\n ResultT,\n SideChannel,\n Cache extends CacheMap,\n>(\n cache: Cache,\n config: CacheConfigurator,\n arg: ArgT,\n value: ResultT,\n) {\n if (!config.configured()) config.forever();\n\n let cachedValue: CacheEntry | void = cache.get(arg);\n\n config.deactivate();\n\n switch (config.mode()) {\n case \"forever\":\n cachedValue = [{ value, valid: genTrue }];\n cache.set(arg, cachedValue);\n break;\n case \"invalidate\":\n cachedValue = [{ value, valid: config.validator() }];\n cache.set(arg, cachedValue);\n break;\n case \"valid\":\n if (cachedValue) {\n cachedValue.push({ value, valid: config.validator() });\n } else {\n cachedValue = [{ value, valid: config.validator() }];\n cache.set(arg, cachedValue);\n }\n }\n}\n\nclass CacheConfigurator {\n _active: boolean = true;\n _never: boolean = false;\n _forever: boolean = false;\n _invalidate: boolean = false;\n\n _configured: boolean = false;\n\n _pairs: Array<\n [cachedValue: unknown, handler: (data: SideChannel) => Handler]\n > = [];\n\n _data: SideChannel;\n\n constructor(data: SideChannel) {\n this._data = data;\n }\n\n simple() {\n return makeSimpleConfigurator(this);\n }\n\n mode() {\n if (this._never) return \"never\";\n if (this._forever) return \"forever\";\n if (this._invalidate) return \"invalidate\";\n return \"valid\";\n }\n\n forever() {\n if (!this._active) {\n throw new Error(\"Cannot change caching after evaluation has completed.\");\n }\n if (this._never) {\n throw new Error(\"Caching has already been configured with .never()\");\n }\n this._forever = true;\n this._configured = true;\n }\n\n never() {\n if (!this._active) {\n throw new Error(\"Cannot change caching after evaluation has completed.\");\n }\n if (this._forever) {\n throw new Error(\"Caching has already been configured with .forever()\");\n }\n this._never = true;\n this._configured = true;\n }\n\n using(handler: (data: SideChannel) => T): T {\n if (!this._active) {\n throw new Error(\"Cannot change caching after evaluation has completed.\");\n }\n if (this._never || this._forever) {\n throw new Error(\n \"Caching has already been configured with .never or .forever()\",\n );\n }\n this._configured = true;\n\n const key = handler(this._data);\n\n const fn = maybeAsync(\n handler,\n `You appear to be using an async cache handler, but Babel has been called synchronously`,\n );\n\n if (isThenable(key)) {\n // @ts-expect-error todo(flow->ts): improve function return type annotation\n return key.then((key: unknown) => {\n this._pairs.push([key, fn]);\n return key;\n });\n }\n\n this._pairs.push([key, fn]);\n return key;\n }\n\n invalidate(handler: (data: SideChannel) => T): T {\n this._invalidate = true;\n return this.using(handler);\n }\n\n validator(): (data: SideChannel) => Handler {\n const pairs = this._pairs;\n return function* (data: SideChannel) {\n for (const [key, fn] of pairs) {\n if (key !== (yield* fn(data))) return false;\n }\n return true;\n };\n }\n\n deactivate() {\n this._active = false;\n }\n\n configured() {\n return this._configured;\n }\n}\n\nfunction makeSimpleConfigurator(\n cache: CacheConfigurator,\n): SimpleCacheConfigurator {\n function cacheFn(val: any) {\n if (typeof val === \"boolean\") {\n if (val) cache.forever();\n else cache.never();\n return;\n }\n\n return cache.using(() => assertSimpleType(val()));\n }\n cacheFn.forever = () => cache.forever();\n cacheFn.never = () => cache.never();\n cacheFn.using = (cb: () => SimpleType) =>\n cache.using(() => assertSimpleType(cb()));\n cacheFn.invalidate = (cb: () => SimpleType) =>\n cache.invalidate(() => assertSimpleType(cb()));\n\n return cacheFn as any;\n}\n\n// Types are limited here so that in the future these values can be used\n// as part of Babel's caching logic.\nexport type SimpleType =\n | string\n | boolean\n | number\n | null\n | void\n | Promise;\nexport function assertSimpleType(value: unknown): SimpleType {\n if (isThenable(value)) {\n throw new Error(\n `You appear to be using an async cache handler, ` +\n `which your current version of Babel does not support. ` +\n `We may add support for this in the future, ` +\n `but if you're on the most recent version of @babel/core and still ` +\n `seeing this error, then you'll need to synchronously handle your caching logic.`,\n );\n }\n\n if (\n value != null &&\n typeof value !== \"string\" &&\n typeof value !== \"boolean\" &&\n typeof value !== \"number\"\n ) {\n throw new Error(\n \"Cache keys must be either string, boolean, number, null, or undefined.\",\n );\n }\n // @ts-expect-error Type 'unknown' is not assignable to type 'SimpleType'. This can be removed\n // when strictNullCheck is enabled\n return value;\n}\n\nclass Lock {\n released: boolean = false;\n promise: Promise;\n _resolve: (value: T) => void;\n\n constructor() {\n this.promise = new Promise(resolve => {\n this._resolve = resolve;\n });\n }\n\n release(value: T) {\n this.released = true;\n this._resolve(value);\n }\n}\n"],"mappings":"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","ignoreList":[]}
\ No newline at end of file
diff --git a/node_modules/@babel/core/lib/config/config-chain.js b/node_modules/@babel/core/lib/config/config-chain.js
deleted file mode 100644
index 5fded8e6..00000000
--- a/node_modules/@babel/core/lib/config/config-chain.js
+++ /dev/null
@@ -1,469 +0,0 @@
-"use strict";
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.buildPresetChain = buildPresetChain;
-exports.buildPresetChainWalker = void 0;
-exports.buildRootChain = buildRootChain;
-function _path() {
- const data = require("path");
- _path = function () {
- return data;
- };
- return data;
-}
-function _debug() {
- const data = require("debug");
- _debug = function () {
- return data;
- };
- return data;
-}
-var _options = require("./validation/options.js");
-var _patternToRegex = require("./pattern-to-regex.js");
-var _printer = require("./printer.js");
-var _rewriteStackTrace = require("../errors/rewrite-stack-trace.js");
-var _configError = require("../errors/config-error.js");
-var _index = require("./files/index.js");
-var _caching = require("./caching.js");
-var _configDescriptors = require("./config-descriptors.js");
-const debug = _debug()("babel:config:config-chain");
-function* buildPresetChain(arg, context) {
- const chain = yield* buildPresetChainWalker(arg, context);
- if (!chain) return null;
- return {
- plugins: dedupDescriptors(chain.plugins),
- presets: dedupDescriptors(chain.presets),
- options: chain.options.map(o => createConfigChainOptions(o)),
- files: new Set()
- };
-}
-const buildPresetChainWalker = exports.buildPresetChainWalker = makeChainWalker({
- root: preset => loadPresetDescriptors(preset),
- env: (preset, envName) => loadPresetEnvDescriptors(preset)(envName),
- overrides: (preset, index) => loadPresetOverridesDescriptors(preset)(index),
- overridesEnv: (preset, index, envName) => loadPresetOverridesEnvDescriptors(preset)(index)(envName),
- createLogger: () => () => {}
-});
-const loadPresetDescriptors = (0, _caching.makeWeakCacheSync)(preset => buildRootDescriptors(preset, preset.alias, _configDescriptors.createUncachedDescriptors));
-const loadPresetEnvDescriptors = (0, _caching.makeWeakCacheSync)(preset => (0, _caching.makeStrongCacheSync)(envName => buildEnvDescriptors(preset, preset.alias, _configDescriptors.createUncachedDescriptors, envName)));
-const loadPresetOverridesDescriptors = (0, _caching.makeWeakCacheSync)(preset => (0, _caching.makeStrongCacheSync)(index => buildOverrideDescriptors(preset, preset.alias, _configDescriptors.createUncachedDescriptors, index)));
-const loadPresetOverridesEnvDescriptors = (0, _caching.makeWeakCacheSync)(preset => (0, _caching.makeStrongCacheSync)(index => (0, _caching.makeStrongCacheSync)(envName => buildOverrideEnvDescriptors(preset, preset.alias, _configDescriptors.createUncachedDescriptors, index, envName))));
-function* buildRootChain(opts, context) {
- let configReport, babelRcReport;
- const programmaticLogger = new _printer.ConfigPrinter();
- const programmaticChain = yield* loadProgrammaticChain({
- options: opts,
- dirname: context.cwd
- }, context, undefined, programmaticLogger);
- if (!programmaticChain) return null;
- const programmaticReport = yield* programmaticLogger.output();
- let configFile;
- if (typeof opts.configFile === "string") {
- configFile = yield* (0, _index.loadConfig)(opts.configFile, context.cwd, context.envName, context.caller);
- } else if (opts.configFile !== false) {
- configFile = yield* (0, _index.findRootConfig)(context.root, context.envName, context.caller);
- }
- let {
- babelrc,
- babelrcRoots
- } = opts;
- let babelrcRootsDirectory = context.cwd;
- const configFileChain = emptyChain();
- const configFileLogger = new _printer.ConfigPrinter();
- if (configFile) {
- const validatedFile = validateConfigFile(configFile);
- const result = yield* loadFileChain(validatedFile, context, undefined, configFileLogger);
- if (!result) return null;
- configReport = yield* configFileLogger.output();
- if (babelrc === undefined) {
- babelrc = validatedFile.options.babelrc;
- }
- if (babelrcRoots === undefined) {
- babelrcRootsDirectory = validatedFile.dirname;
- babelrcRoots = validatedFile.options.babelrcRoots;
- }
- mergeChain(configFileChain, result);
- }
- let ignoreFile, babelrcFile;
- let isIgnored = false;
- const fileChain = emptyChain();
- if ((babelrc === true || babelrc === undefined) && typeof context.filename === "string") {
- const pkgData = yield* (0, _index.findPackageData)(context.filename);
- if (pkgData && babelrcLoadEnabled(context, pkgData, babelrcRoots, babelrcRootsDirectory)) {
- ({
- ignore: ignoreFile,
- config: babelrcFile
- } = yield* (0, _index.findRelativeConfig)(pkgData, context.envName, context.caller));
- if (ignoreFile) {
- fileChain.files.add(ignoreFile.filepath);
- }
- if (ignoreFile && shouldIgnore(context, ignoreFile.ignore, null, ignoreFile.dirname)) {
- isIgnored = true;
- }
- if (babelrcFile && !isIgnored) {
- const validatedFile = validateBabelrcFile(babelrcFile);
- const babelrcLogger = new _printer.ConfigPrinter();
- const result = yield* loadFileChain(validatedFile, context, undefined, babelrcLogger);
- if (!result) {
- isIgnored = true;
- } else {
- babelRcReport = yield* babelrcLogger.output();
- mergeChain(fileChain, result);
- }
- }
- if (babelrcFile && isIgnored) {
- fileChain.files.add(babelrcFile.filepath);
- }
- }
- }
- if (context.showConfig) {
- console.log(`Babel configs on "${context.filename}" (ascending priority):\n` + [configReport, babelRcReport, programmaticReport].filter(x => !!x).join("\n\n") + "\n-----End Babel configs-----");
- }
- const chain = mergeChain(mergeChain(mergeChain(emptyChain(), configFileChain), fileChain), programmaticChain);
- return {
- plugins: isIgnored ? [] : dedupDescriptors(chain.plugins),
- presets: isIgnored ? [] : dedupDescriptors(chain.presets),
- options: isIgnored ? [] : chain.options.map(o => createConfigChainOptions(o)),
- fileHandling: isIgnored ? "ignored" : "transpile",
- ignore: ignoreFile || undefined,
- babelrc: babelrcFile || undefined,
- config: configFile || undefined,
- files: chain.files
- };
-}
-function babelrcLoadEnabled(context, pkgData, babelrcRoots, babelrcRootsDirectory) {
- if (typeof babelrcRoots === "boolean") return babelrcRoots;
- const absoluteRoot = context.root;
- if (babelrcRoots === undefined) {
- return pkgData.directories.includes(absoluteRoot);
- }
- let babelrcPatterns = babelrcRoots;
- if (!Array.isArray(babelrcPatterns)) {
- babelrcPatterns = [babelrcPatterns];
- }
- babelrcPatterns = babelrcPatterns.map(pat => {
- return typeof pat === "string" ? _path().resolve(babelrcRootsDirectory, pat) : pat;
- });
- if (babelrcPatterns.length === 1 && babelrcPatterns[0] === absoluteRoot) {
- return pkgData.directories.includes(absoluteRoot);
- }
- return babelrcPatterns.some(pat => {
- if (typeof pat === "string") {
- pat = (0, _patternToRegex.default)(pat, babelrcRootsDirectory);
- }
- return pkgData.directories.some(directory => {
- return matchPattern(pat, babelrcRootsDirectory, directory, context);
- });
- });
-}
-const validateConfigFile = (0, _caching.makeWeakCacheSync)(file => ({
- filepath: file.filepath,
- dirname: file.dirname,
- options: (0, _options.validate)("configfile", file.options, file.filepath)
-}));
-const validateBabelrcFile = (0, _caching.makeWeakCacheSync)(file => ({
- filepath: file.filepath,
- dirname: file.dirname,
- options: (0, _options.validate)("babelrcfile", file.options, file.filepath)
-}));
-const validateExtendFile = (0, _caching.makeWeakCacheSync)(file => ({
- filepath: file.filepath,
- dirname: file.dirname,
- options: (0, _options.validate)("extendsfile", file.options, file.filepath)
-}));
-const loadProgrammaticChain = makeChainWalker({
- root: input => buildRootDescriptors(input, "base", _configDescriptors.createCachedDescriptors),
- env: (input, envName) => buildEnvDescriptors(input, "base", _configDescriptors.createCachedDescriptors, envName),
- overrides: (input, index) => buildOverrideDescriptors(input, "base", _configDescriptors.createCachedDescriptors, index),
- overridesEnv: (input, index, envName) => buildOverrideEnvDescriptors(input, "base", _configDescriptors.createCachedDescriptors, index, envName),
- createLogger: (input, context, baseLogger) => buildProgrammaticLogger(input, context, baseLogger)
-});
-const loadFileChainWalker = makeChainWalker({
- root: file => loadFileDescriptors(file),
- env: (file, envName) => loadFileEnvDescriptors(file)(envName),
- overrides: (file, index) => loadFileOverridesDescriptors(file)(index),
- overridesEnv: (file, index, envName) => loadFileOverridesEnvDescriptors(file)(index)(envName),
- createLogger: (file, context, baseLogger) => buildFileLogger(file.filepath, context, baseLogger)
-});
-function* loadFileChain(input, context, files, baseLogger) {
- const chain = yield* loadFileChainWalker(input, context, files, baseLogger);
- chain == null || chain.files.add(input.filepath);
- return chain;
-}
-const loadFileDescriptors = (0, _caching.makeWeakCacheSync)(file => buildRootDescriptors(file, file.filepath, _configDescriptors.createUncachedDescriptors));
-const loadFileEnvDescriptors = (0, _caching.makeWeakCacheSync)(file => (0, _caching.makeStrongCacheSync)(envName => buildEnvDescriptors(file, file.filepath, _configDescriptors.createUncachedDescriptors, envName)));
-const loadFileOverridesDescriptors = (0, _caching.makeWeakCacheSync)(file => (0, _caching.makeStrongCacheSync)(index => buildOverrideDescriptors(file, file.filepath, _configDescriptors.createUncachedDescriptors, index)));
-const loadFileOverridesEnvDescriptors = (0, _caching.makeWeakCacheSync)(file => (0, _caching.makeStrongCacheSync)(index => (0, _caching.makeStrongCacheSync)(envName => buildOverrideEnvDescriptors(file, file.filepath, _configDescriptors.createUncachedDescriptors, index, envName))));
-function buildFileLogger(filepath, context, baseLogger) {
- if (!baseLogger) {
- return () => {};
- }
- return baseLogger.configure(context.showConfig, _printer.ChainFormatter.Config, {
- filepath
- });
-}
-function buildRootDescriptors({
- dirname,
- options
-}, alias, descriptors) {
- return descriptors(dirname, options, alias);
-}
-function buildProgrammaticLogger(_, context, baseLogger) {
- var _context$caller;
- if (!baseLogger) {
- return () => {};
- }
- return baseLogger.configure(context.showConfig, _printer.ChainFormatter.Programmatic, {
- callerName: (_context$caller = context.caller) == null ? void 0 : _context$caller.name
- });
-}
-function buildEnvDescriptors({
- dirname,
- options
-}, alias, descriptors, envName) {
- var _options$env;
- const opts = (_options$env = options.env) == null ? void 0 : _options$env[envName];
- return opts ? descriptors(dirname, opts, `${alias}.env["${envName}"]`) : null;
-}
-function buildOverrideDescriptors({
- dirname,
- options
-}, alias, descriptors, index) {
- var _options$overrides;
- const opts = (_options$overrides = options.overrides) == null ? void 0 : _options$overrides[index];
- if (!opts) throw new Error("Assertion failure - missing override");
- return descriptors(dirname, opts, `${alias}.overrides[${index}]`);
-}
-function buildOverrideEnvDescriptors({
- dirname,
- options
-}, alias, descriptors, index, envName) {
- var _options$overrides2, _override$env;
- const override = (_options$overrides2 = options.overrides) == null ? void 0 : _options$overrides2[index];
- if (!override) throw new Error("Assertion failure - missing override");
- const opts = (_override$env = override.env) == null ? void 0 : _override$env[envName];
- return opts ? descriptors(dirname, opts, `${alias}.overrides[${index}].env["${envName}"]`) : null;
-}
-function makeChainWalker({
- root,
- env,
- overrides,
- overridesEnv,
- createLogger
-}) {
- return function* chainWalker(input, context, files = new Set(), baseLogger) {
- const {
- dirname
- } = input;
- const flattenedConfigs = [];
- const rootOpts = root(input);
- if (configIsApplicable(rootOpts, dirname, context, input.filepath)) {
- flattenedConfigs.push({
- config: rootOpts,
- envName: undefined,
- index: undefined
- });
- const envOpts = env(input, context.envName);
- if (envOpts && configIsApplicable(envOpts, dirname, context, input.filepath)) {
- flattenedConfigs.push({
- config: envOpts,
- envName: context.envName,
- index: undefined
- });
- }
- (rootOpts.options.overrides || []).forEach((_, index) => {
- const overrideOps = overrides(input, index);
- if (configIsApplicable(overrideOps, dirname, context, input.filepath)) {
- flattenedConfigs.push({
- config: overrideOps,
- index,
- envName: undefined
- });
- const overrideEnvOpts = overridesEnv(input, index, context.envName);
- if (overrideEnvOpts && configIsApplicable(overrideEnvOpts, dirname, context, input.filepath)) {
- flattenedConfigs.push({
- config: overrideEnvOpts,
- index,
- envName: context.envName
- });
- }
- }
- });
- }
- if (flattenedConfigs.some(({
- config: {
- options: {
- ignore,
- only
- }
- }
- }) => shouldIgnore(context, ignore, only, dirname))) {
- return null;
- }
- const chain = emptyChain();
- const logger = createLogger(input, context, baseLogger);
- for (const {
- config,
- index,
- envName
- } of flattenedConfigs) {
- if (!(yield* mergeExtendsChain(chain, config.options, dirname, context, files, baseLogger))) {
- return null;
- }
- logger(config, index, envName);
- yield* mergeChainOpts(chain, config);
- }
- return chain;
- };
-}
-function* mergeExtendsChain(chain, opts, dirname, context, files, baseLogger) {
- if (opts.extends === undefined) return true;
- const file = yield* (0, _index.loadConfig)(opts.extends, dirname, context.envName, context.caller);
- if (files.has(file)) {
- throw new Error(`Configuration cycle detected loading ${file.filepath}.\n` + `File already loaded following the config chain:\n` + Array.from(files, file => ` - ${file.filepath}`).join("\n"));
- }
- files.add(file);
- const fileChain = yield* loadFileChain(validateExtendFile(file), context, files, baseLogger);
- files.delete(file);
- if (!fileChain) return false;
- mergeChain(chain, fileChain);
- return true;
-}
-function mergeChain(target, source) {
- target.options.push(...source.options);
- target.plugins.push(...source.plugins);
- target.presets.push(...source.presets);
- for (const file of source.files) {
- target.files.add(file);
- }
- return target;
-}
-function* mergeChainOpts(target, {
- options,
- plugins,
- presets
-}) {
- target.options.push(options);
- target.plugins.push(...(yield* plugins()));
- target.presets.push(...(yield* presets()));
- return target;
-}
-function emptyChain() {
- return {
- options: [],
- presets: [],
- plugins: [],
- files: new Set()
- };
-}
-function createConfigChainOptions(opts) {
- const options = Object.assign({}, opts);
- delete options.extends;
- delete options.env;
- delete options.overrides;
- delete options.plugins;
- delete options.presets;
- delete options.passPerPreset;
- delete options.ignore;
- delete options.only;
- delete options.test;
- delete options.include;
- delete options.exclude;
- if (hasOwnProperty.call(options, "sourceMap")) {
- options.sourceMaps = options.sourceMap;
- delete options.sourceMap;
- }
- return options;
-}
-function dedupDescriptors(items) {
- const map = new Map();
- const descriptors = [];
- for (const item of items) {
- if (typeof item.value === "function") {
- const fnKey = item.value;
- let nameMap = map.get(fnKey);
- if (!nameMap) {
- nameMap = new Map();
- map.set(fnKey, nameMap);
- }
- let desc = nameMap.get(item.name);
- if (!desc) {
- desc = {
- value: item
- };
- descriptors.push(desc);
- if (!item.ownPass) nameMap.set(item.name, desc);
- } else {
- desc.value = item;
- }
- } else {
- descriptors.push({
- value: item
- });
- }
- }
- return descriptors.reduce((acc, desc) => {
- acc.push(desc.value);
- return acc;
- }, []);
-}
-function configIsApplicable({
- options
-}, dirname, context, configName) {
- return (options.test === undefined || configFieldIsApplicable(context, options.test, dirname, configName)) && (options.include === undefined || configFieldIsApplicable(context, options.include, dirname, configName)) && (options.exclude === undefined || !configFieldIsApplicable(context, options.exclude, dirname, configName));
-}
-function configFieldIsApplicable(context, test, dirname, configName) {
- const patterns = Array.isArray(test) ? test : [test];
- return matchesPatterns(context, patterns, dirname, configName);
-}
-function ignoreListReplacer(_key, value) {
- if (value instanceof RegExp) {
- return String(value);
- }
- return value;
-}
-function shouldIgnore(context, ignore, only, dirname) {
- if (ignore && matchesPatterns(context, ignore, dirname)) {
- var _context$filename;
- const message = `No config is applied to "${(_context$filename = context.filename) != null ? _context$filename : "(unknown)"}" because it matches one of \`ignore: ${JSON.stringify(ignore, ignoreListReplacer)}\` from "${dirname}"`;
- debug(message);
- if (context.showConfig) {
- console.log(message);
- }
- return true;
- }
- if (only && !matchesPatterns(context, only, dirname)) {
- var _context$filename2;
- const message = `No config is applied to "${(_context$filename2 = context.filename) != null ? _context$filename2 : "(unknown)"}" because it fails to match one of \`only: ${JSON.stringify(only, ignoreListReplacer)}\` from "${dirname}"`;
- debug(message);
- if (context.showConfig) {
- console.log(message);
- }
- return true;
- }
- return false;
-}
-function matchesPatterns(context, patterns, dirname, configName) {
- return patterns.some(pattern => matchPattern(pattern, dirname, context.filename, context, configName));
-}
-function matchPattern(pattern, dirname, pathToTest, context, configName) {
- if (typeof pattern === "function") {
- return !!(0, _rewriteStackTrace.endHiddenCallStack)(pattern)(pathToTest, {
- dirname,
- envName: context.envName,
- caller: context.caller
- });
- }
- if (typeof pathToTest !== "string") {
- throw new _configError.default(`Configuration contains string/RegExp pattern, but no filename was passed to Babel`, configName);
- }
- if (typeof pattern === "string") {
- pattern = (0, _patternToRegex.default)(pattern, dirname);
- }
- return pattern.test(pathToTest);
-}
-0 && 0;
-
-//# sourceMappingURL=config-chain.js.map
diff --git a/node_modules/@babel/core/lib/config/config-chain.js.map b/node_modules/@babel/core/lib/config/config-chain.js.map
deleted file mode 100644
index 1ba2d19c..00000000
--- a/node_modules/@babel/core/lib/config/config-chain.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"names":["_path","data","require","_debug","_options","_patternToRegex","_printer","_rewriteStackTrace","_configError","_index","_caching","_configDescriptors","debug","buildDebug","buildPresetChain","arg","context","chain","buildPresetChainWalker","plugins","dedupDescriptors","presets","options","map","o","createConfigChainOptions","files","Set","exports","makeChainWalker","root","preset","loadPresetDescriptors","env","envName","loadPresetEnvDescriptors","overrides","index","loadPresetOverridesDescriptors","overridesEnv","loadPresetOverridesEnvDescriptors","createLogger","makeWeakCacheSync","buildRootDescriptors","alias","createUncachedDescriptors","makeStrongCacheSync","buildEnvDescriptors","buildOverrideDescriptors","buildOverrideEnvDescriptors","buildRootChain","opts","configReport","babelRcReport","programmaticLogger","ConfigPrinter","programmaticChain","loadProgrammaticChain","dirname","cwd","undefined","programmaticReport","output","configFile","loadConfig","caller","findRootConfig","babelrc","babelrcRoots","babelrcRootsDirectory","configFileChain","emptyChain","configFileLogger","validatedFile","validateConfigFile","result","loadFileChain","mergeChain","ignoreFile","babelrcFile","isIgnored","fileChain","filename","pkgData","findPackageData","babelrcLoadEnabled","ignore","config","findRelativeConfig","add","filepath","shouldIgnore","validateBabelrcFile","babelrcLogger","showConfig","console","log","filter","x","join","fileHandling","absoluteRoot","directories","includes","babelrcPatterns","Array","isArray","pat","path","resolve","length","some","pathPatternToRegex","directory","matchPattern","file","validate","validateExtendFile","input","createCachedDescriptors","baseLogger","buildProgrammaticLogger","loadFileChainWalker","loadFileDescriptors","loadFileEnvDescriptors","loadFileOverridesDescriptors","loadFileOverridesEnvDescriptors","buildFileLogger","configure","ChainFormatter","Config","descriptors","_","_context$caller","Programmatic","callerName","name","_options$env","_options$overrides","Error","_options$overrides2","_override$env","override","chainWalker","flattenedConfigs","rootOpts","configIsApplicable","push","envOpts","forEach","overrideOps","overrideEnvOpts","only","logger","mergeExtendsChain","mergeChainOpts","extends","has","from","delete","target","source","Object","assign","passPerPreset","test","include","exclude","hasOwnProperty","call","sourceMaps","sourceMap","items","Map","item","value","fnKey","nameMap","get","set","desc","ownPass","reduce","acc","configName","configFieldIsApplicable","patterns","matchesPatterns","ignoreListReplacer","_key","RegExp","String","_context$filename","message","JSON","stringify","_context$filename2","pattern","pathToTest","endHiddenCallStack","ConfigError"],"sources":["../../src/config/config-chain.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\n\nimport path from \"node:path\";\nimport buildDebug from \"debug\";\nimport type { Handler } from \"gensync\";\nimport { validate } from \"./validation/options.ts\";\nimport type {\n ConfigApplicableTest,\n BabelrcSearch,\n CallerMetadata,\n MatchItem,\n InputOptions,\n ConfigChainOptions,\n} from \"./validation/options.ts\";\nimport pathPatternToRegex from \"./pattern-to-regex.ts\";\nimport { ConfigPrinter, ChainFormatter } from \"./printer.ts\";\nimport type { ReadonlyDeepArray } from \"./helpers/deep-array.ts\";\n\nimport { endHiddenCallStack } from \"../errors/rewrite-stack-trace.ts\";\nimport ConfigError from \"../errors/config-error.ts\";\nimport type { PluginAPI, PresetAPI } from \"./helpers/config-api.ts\";\n\nconst debug = buildDebug(\"babel:config:config-chain\");\n\nimport {\n findPackageData,\n findRelativeConfig,\n findRootConfig,\n loadConfig,\n} from \"./files/index.ts\";\nimport type { ConfigFile, IgnoreFile, FilePackageData } from \"./files/index.ts\";\n\nimport { makeWeakCacheSync, makeStrongCacheSync } from \"./caching.ts\";\n\nimport {\n createCachedDescriptors,\n createUncachedDescriptors,\n} from \"./config-descriptors.ts\";\nimport type {\n UnloadedDescriptor,\n OptionsAndDescriptors,\n ValidatedFile,\n} from \"./config-descriptors.ts\";\n\nexport type ConfigChain = {\n plugins: Array>;\n presets: Array>;\n options: Array;\n files: Set;\n};\n\nexport type PresetInstance = {\n options: InputOptions;\n alias: string;\n dirname: string;\n externalDependencies: ReadonlyDeepArray;\n};\n\nexport type ConfigContext = {\n filename: string | undefined;\n cwd: string;\n root: string;\n envName: string;\n caller: CallerMetadata | undefined;\n showConfig: boolean;\n};\n\n/**\n * Build a config chain for a given preset.\n */\nexport function* buildPresetChain(\n arg: PresetInstance,\n context: any,\n): Handler {\n const chain = yield* buildPresetChainWalker(arg, context);\n if (!chain) return null;\n\n return {\n plugins: dedupDescriptors(chain.plugins),\n presets: dedupDescriptors(chain.presets),\n options: chain.options.map(o => createConfigChainOptions(o)),\n files: new Set(),\n };\n}\n\nexport const buildPresetChainWalker = makeChainWalker({\n root: preset => loadPresetDescriptors(preset),\n env: (preset, envName) => loadPresetEnvDescriptors(preset)(envName),\n overrides: (preset, index) => loadPresetOverridesDescriptors(preset)(index),\n overridesEnv: (preset, index, envName) =>\n loadPresetOverridesEnvDescriptors(preset)(index)(envName),\n createLogger: () => () => {}, // Currently we don't support logging how preset is expanded\n});\nconst loadPresetDescriptors = makeWeakCacheSync((preset: PresetInstance) =>\n buildRootDescriptors(preset, preset.alias, createUncachedDescriptors),\n);\nconst loadPresetEnvDescriptors = makeWeakCacheSync((preset: PresetInstance) =>\n makeStrongCacheSync((envName: string) =>\n buildEnvDescriptors(\n preset,\n preset.alias,\n createUncachedDescriptors,\n envName,\n ),\n ),\n);\nconst loadPresetOverridesDescriptors = makeWeakCacheSync(\n (preset: PresetInstance) =>\n makeStrongCacheSync((index: number) =>\n buildOverrideDescriptors(\n preset,\n preset.alias,\n createUncachedDescriptors,\n index,\n ),\n ),\n);\nconst loadPresetOverridesEnvDescriptors = makeWeakCacheSync(\n (preset: PresetInstance) =>\n makeStrongCacheSync((index: number) =>\n makeStrongCacheSync((envName: string) =>\n buildOverrideEnvDescriptors(\n preset,\n preset.alias,\n createUncachedDescriptors,\n index,\n envName,\n ),\n ),\n ),\n);\n\nexport type FileHandling = \"transpile\" | \"ignored\" | \"unsupported\";\nexport type RootConfigChain = ConfigChain & {\n babelrc: ConfigFile | undefined;\n config: ConfigFile | undefined;\n ignore: IgnoreFile | undefined;\n fileHandling: FileHandling;\n files: Set;\n};\n\n/**\n * Build a config chain for Babel's full root configuration.\n */\nexport function* buildRootChain(\n opts: InputOptions,\n context: ConfigContext,\n): Handler {\n let configReport, babelRcReport;\n const programmaticLogger = new ConfigPrinter();\n const programmaticChain = yield* loadProgrammaticChain(\n {\n options: opts,\n dirname: context.cwd,\n },\n context,\n undefined,\n programmaticLogger,\n );\n if (!programmaticChain) return null;\n const programmaticReport = yield* programmaticLogger.output();\n\n let configFile;\n if (typeof opts.configFile === \"string\") {\n configFile = yield* loadConfig(\n opts.configFile,\n context.cwd,\n context.envName,\n context.caller,\n );\n } else if (opts.configFile !== false) {\n configFile = yield* findRootConfig(\n context.root,\n context.envName,\n context.caller,\n );\n }\n\n let { babelrc, babelrcRoots } = opts;\n let babelrcRootsDirectory = context.cwd;\n\n const configFileChain = emptyChain();\n const configFileLogger = new ConfigPrinter();\n if (configFile) {\n const validatedFile = validateConfigFile(configFile);\n const result = yield* loadFileChain(\n validatedFile,\n context,\n undefined,\n configFileLogger,\n );\n if (!result) return null;\n configReport = yield* configFileLogger.output();\n\n // Allow config files to toggle `.babelrc` resolution on and off and\n // specify where the roots are.\n if (babelrc === undefined) {\n babelrc = validatedFile.options.babelrc;\n }\n if (babelrcRoots === undefined) {\n babelrcRootsDirectory = validatedFile.dirname;\n babelrcRoots = validatedFile.options.babelrcRoots;\n }\n\n mergeChain(configFileChain, result);\n }\n\n let ignoreFile, babelrcFile;\n let isIgnored = false;\n const fileChain = emptyChain();\n // resolve all .babelrc files\n if (\n (babelrc === true || babelrc === undefined) &&\n typeof context.filename === \"string\"\n ) {\n const pkgData = yield* findPackageData(context.filename);\n\n if (\n pkgData &&\n babelrcLoadEnabled(context, pkgData, babelrcRoots, babelrcRootsDirectory)\n ) {\n ({ ignore: ignoreFile, config: babelrcFile } = yield* findRelativeConfig(\n pkgData,\n context.envName,\n context.caller,\n ));\n\n if (ignoreFile) {\n fileChain.files.add(ignoreFile.filepath);\n }\n\n if (\n ignoreFile &&\n shouldIgnore(context, ignoreFile.ignore, null, ignoreFile.dirname)\n ) {\n isIgnored = true;\n }\n\n if (babelrcFile && !isIgnored) {\n const validatedFile = validateBabelrcFile(babelrcFile);\n const babelrcLogger = new ConfigPrinter();\n const result = yield* loadFileChain(\n validatedFile,\n context,\n undefined,\n babelrcLogger,\n );\n if (!result) {\n isIgnored = true;\n } else {\n babelRcReport = yield* babelrcLogger.output();\n mergeChain(fileChain, result);\n }\n }\n\n if (babelrcFile && isIgnored) {\n fileChain.files.add(babelrcFile.filepath);\n }\n }\n }\n\n if (context.showConfig) {\n console.log(\n `Babel configs on \"${context.filename}\" (ascending priority):\\n` +\n // print config by the order of ascending priority\n [configReport, babelRcReport, programmaticReport]\n .filter(x => !!x)\n .join(\"\\n\\n\") +\n \"\\n-----End Babel configs-----\",\n );\n }\n // Insert file chain in front so programmatic options have priority\n // over configuration file chain items.\n const chain = mergeChain(\n mergeChain(mergeChain(emptyChain(), configFileChain), fileChain),\n programmaticChain,\n );\n\n return {\n plugins: isIgnored ? [] : dedupDescriptors(chain.plugins),\n presets: isIgnored ? [] : dedupDescriptors(chain.presets),\n options: isIgnored\n ? []\n : chain.options.map(o => createConfigChainOptions(o)),\n fileHandling: isIgnored ? \"ignored\" : \"transpile\",\n ignore: ignoreFile || undefined,\n babelrc: babelrcFile || undefined,\n config: configFile || undefined,\n files: chain.files,\n };\n}\n\nfunction babelrcLoadEnabled(\n context: ConfigContext,\n pkgData: FilePackageData,\n babelrcRoots: BabelrcSearch | undefined,\n babelrcRootsDirectory: string,\n): boolean {\n if (typeof babelrcRoots === \"boolean\") return babelrcRoots;\n\n const absoluteRoot = context.root;\n\n // Fast path to avoid having to match patterns if the babelrc is just\n // loading in the standard root directory.\n if (babelrcRoots === undefined) {\n return pkgData.directories.includes(absoluteRoot);\n }\n\n let babelrcPatterns = babelrcRoots;\n if (!Array.isArray(babelrcPatterns)) {\n babelrcPatterns = [babelrcPatterns];\n }\n babelrcPatterns = babelrcPatterns.map(pat => {\n return typeof pat === \"string\"\n ? path.resolve(babelrcRootsDirectory, pat)\n : pat;\n });\n\n // Fast path to avoid having to match patterns if the babelrc is just\n // loading in the standard root directory.\n if (babelrcPatterns.length === 1 && babelrcPatterns[0] === absoluteRoot) {\n return pkgData.directories.includes(absoluteRoot);\n }\n\n return babelrcPatterns.some(pat => {\n if (typeof pat === \"string\") {\n pat = pathPatternToRegex(pat, babelrcRootsDirectory);\n }\n\n return pkgData.directories.some(directory => {\n return matchPattern(pat, babelrcRootsDirectory, directory, context);\n });\n });\n}\n\nconst validateConfigFile = makeWeakCacheSync(\n (file: ConfigFile): ValidatedFile => ({\n filepath: file.filepath,\n dirname: file.dirname,\n options: validate(\"configfile\", file.options, file.filepath),\n }),\n);\n\nconst validateBabelrcFile = makeWeakCacheSync(\n (file: ConfigFile): ValidatedFile => ({\n filepath: file.filepath,\n dirname: file.dirname,\n options: validate(\"babelrcfile\", file.options, file.filepath),\n }),\n);\n\nconst validateExtendFile = makeWeakCacheSync(\n (file: ConfigFile): ValidatedFile => ({\n filepath: file.filepath,\n dirname: file.dirname,\n options: validate(\"extendsfile\", file.options, file.filepath),\n }),\n);\n\n/**\n * Build a config chain for just the programmatic options passed into Babel.\n */\nconst loadProgrammaticChain = makeChainWalker({\n root: input => buildRootDescriptors(input, \"base\", createCachedDescriptors),\n env: (input, envName) =>\n buildEnvDescriptors(input, \"base\", createCachedDescriptors, envName),\n overrides: (input, index) =>\n buildOverrideDescriptors(input, \"base\", createCachedDescriptors, index),\n overridesEnv: (input, index, envName) =>\n buildOverrideEnvDescriptors(\n input,\n \"base\",\n createCachedDescriptors,\n index,\n envName,\n ),\n createLogger: (input, context, baseLogger) =>\n buildProgrammaticLogger(input, context, baseLogger),\n});\n\n/**\n * Build a config chain for a given file.\n */\nconst loadFileChainWalker = makeChainWalker({\n root: file => loadFileDescriptors(file),\n env: (file, envName) => loadFileEnvDescriptors(file)(envName),\n overrides: (file, index) => loadFileOverridesDescriptors(file)(index),\n overridesEnv: (file, index, envName) =>\n loadFileOverridesEnvDescriptors(file)(index)(envName),\n createLogger: (file, context, baseLogger) =>\n buildFileLogger(file.filepath, context, baseLogger),\n});\n\nfunction* loadFileChain(\n input: ValidatedFile,\n context: ConfigContext,\n files: Set,\n baseLogger: ConfigPrinter,\n) {\n const chain = yield* loadFileChainWalker(input, context, files, baseLogger);\n chain?.files.add(input.filepath);\n\n return chain;\n}\n\nconst loadFileDescriptors = makeWeakCacheSync((file: ValidatedFile) =>\n buildRootDescriptors(file, file.filepath, createUncachedDescriptors),\n);\nconst loadFileEnvDescriptors = makeWeakCacheSync((file: ValidatedFile) =>\n makeStrongCacheSync((envName: string) =>\n buildEnvDescriptors(\n file,\n file.filepath,\n createUncachedDescriptors,\n envName,\n ),\n ),\n);\nconst loadFileOverridesDescriptors = makeWeakCacheSync((file: ValidatedFile) =>\n makeStrongCacheSync((index: number) =>\n buildOverrideDescriptors(\n file,\n file.filepath,\n createUncachedDescriptors,\n index,\n ),\n ),\n);\nconst loadFileOverridesEnvDescriptors = makeWeakCacheSync(\n (file: ValidatedFile) =>\n makeStrongCacheSync((index: number) =>\n makeStrongCacheSync((envName: string) =>\n buildOverrideEnvDescriptors(\n file,\n file.filepath,\n createUncachedDescriptors,\n index,\n envName,\n ),\n ),\n ),\n);\n\nfunction buildFileLogger(\n filepath: string,\n context: ConfigContext,\n baseLogger: ConfigPrinter | void,\n) {\n if (!baseLogger) {\n return () => {};\n }\n return baseLogger.configure(context.showConfig, ChainFormatter.Config, {\n filepath,\n });\n}\n\nfunction buildRootDescriptors(\n { dirname, options }: Partial,\n alias: string,\n descriptors: (\n dirname: string,\n options: InputOptions,\n alias: string,\n ) => OptionsAndDescriptors,\n) {\n return descriptors(dirname, options, alias);\n}\n\nfunction buildProgrammaticLogger(\n _: unknown,\n context: ConfigContext,\n baseLogger: ConfigPrinter | void,\n) {\n if (!baseLogger) {\n return () => {};\n }\n return baseLogger.configure(context.showConfig, ChainFormatter.Programmatic, {\n callerName: context.caller?.name,\n });\n}\n\nfunction buildEnvDescriptors(\n { dirname, options }: Partial,\n alias: string,\n descriptors: (\n dirname: string,\n options: InputOptions,\n alias: string,\n ) => OptionsAndDescriptors,\n envName: string,\n) {\n const opts = options.env?.[envName];\n return opts ? descriptors(dirname, opts, `${alias}.env[\"${envName}\"]`) : null;\n}\n\nfunction buildOverrideDescriptors(\n { dirname, options }: Partial,\n alias: string,\n descriptors: (\n dirname: string,\n options: InputOptions,\n alias: string,\n ) => OptionsAndDescriptors,\n index: number,\n) {\n const opts = options.overrides?.[index];\n if (!opts) throw new Error(\"Assertion failure - missing override\");\n\n return descriptors(dirname, opts, `${alias}.overrides[${index}]`);\n}\n\nfunction buildOverrideEnvDescriptors(\n { dirname, options }: Partial,\n alias: string,\n descriptors: (\n dirname: string,\n options: InputOptions,\n alias: string,\n ) => OptionsAndDescriptors,\n index: number,\n envName: string,\n) {\n const override = options.overrides?.[index];\n if (!override) throw new Error(\"Assertion failure - missing override\");\n\n const opts = override.env?.[envName];\n return opts\n ? descriptors(\n dirname,\n opts,\n `${alias}.overrides[${index}].env[\"${envName}\"]`,\n )\n : null;\n}\n\nfunction makeChainWalker<\n ArgT extends {\n options: InputOptions;\n dirname: string;\n filepath?: string;\n },\n>({\n root,\n env,\n overrides,\n overridesEnv,\n createLogger,\n}: {\n root: (configEntry: ArgT) => OptionsAndDescriptors;\n env: (configEntry: ArgT, env: string) => OptionsAndDescriptors | null;\n overrides: (configEntry: ArgT, index: number) => OptionsAndDescriptors;\n overridesEnv: (\n configEntry: ArgT,\n index: number,\n env: string,\n ) => OptionsAndDescriptors | null;\n createLogger: (\n configEntry: ArgT,\n context: ConfigContext,\n printer: ConfigPrinter | void,\n ) => (\n opts: OptionsAndDescriptors,\n index?: number | null,\n env?: string | null,\n ) => void;\n}): (\n configEntry: ArgT,\n context: ConfigContext,\n files?: Set,\n baseLogger?: ConfigPrinter,\n) => Handler {\n return function* chainWalker(input, context, files = new Set(), baseLogger) {\n const { dirname } = input;\n\n const flattenedConfigs: Array<{\n config: OptionsAndDescriptors;\n index: number | undefined | null;\n envName: string | undefined | null;\n }> = [];\n\n const rootOpts = root(input);\n if (configIsApplicable(rootOpts, dirname, context, input.filepath)) {\n flattenedConfigs.push({\n config: rootOpts,\n envName: undefined,\n index: undefined,\n });\n\n const envOpts = env(input, context.envName);\n if (\n envOpts &&\n configIsApplicable(envOpts, dirname, context, input.filepath)\n ) {\n flattenedConfigs.push({\n config: envOpts,\n envName: context.envName,\n index: undefined,\n });\n }\n\n (rootOpts.options.overrides || []).forEach((_, index) => {\n const overrideOps = overrides(input, index);\n if (configIsApplicable(overrideOps, dirname, context, input.filepath)) {\n flattenedConfigs.push({\n config: overrideOps,\n index,\n envName: undefined,\n });\n\n const overrideEnvOpts = overridesEnv(input, index, context.envName);\n if (\n overrideEnvOpts &&\n configIsApplicable(\n overrideEnvOpts,\n dirname,\n context,\n input.filepath,\n )\n ) {\n flattenedConfigs.push({\n config: overrideEnvOpts,\n index,\n envName: context.envName,\n });\n }\n }\n });\n }\n\n // Process 'ignore' and 'only' before 'extends' items are processed so\n // that we don't do extra work loading extended configs if a file is\n // ignored.\n if (\n flattenedConfigs.some(\n ({\n config: {\n options: { ignore, only },\n },\n }) => shouldIgnore(context, ignore, only, dirname),\n )\n ) {\n return null;\n }\n\n const chain = emptyChain();\n const logger = createLogger(input, context, baseLogger);\n\n for (const { config, index, envName } of flattenedConfigs) {\n if (\n !(yield* mergeExtendsChain(\n chain,\n config.options,\n dirname,\n context,\n files,\n baseLogger,\n ))\n ) {\n return null;\n }\n\n logger(config, index, envName);\n yield* mergeChainOpts(chain, config);\n }\n return chain;\n };\n}\n\nfunction* mergeExtendsChain(\n chain: ConfigChain,\n opts: InputOptions,\n dirname: string,\n context: ConfigContext,\n files: Set,\n baseLogger?: ConfigPrinter,\n): Handler {\n if (opts.extends === undefined) return true;\n\n const file = yield* loadConfig(\n opts.extends,\n dirname,\n context.envName,\n context.caller,\n );\n\n if (files.has(file)) {\n throw new Error(\n `Configuration cycle detected loading ${file.filepath}.\\n` +\n `File already loaded following the config chain:\\n` +\n Array.from(files, file => ` - ${file.filepath}`).join(\"\\n\"),\n );\n }\n\n files.add(file);\n const fileChain = yield* loadFileChain(\n validateExtendFile(file),\n context,\n files,\n baseLogger,\n );\n files.delete(file);\n\n if (!fileChain) return false;\n\n mergeChain(chain, fileChain);\n\n return true;\n}\n\nfunction mergeChain(target: ConfigChain, source: ConfigChain): ConfigChain {\n target.options.push(...source.options);\n target.plugins.push(...source.plugins);\n target.presets.push(...source.presets);\n for (const file of source.files) {\n target.files.add(file);\n }\n\n return target;\n}\n\nfunction* mergeChainOpts(\n target: ConfigChain,\n { options, plugins, presets }: OptionsAndDescriptors,\n): Handler {\n target.options.push(options);\n target.plugins.push(...(yield* plugins()));\n target.presets.push(...(yield* presets()));\n\n return target;\n}\n\nfunction emptyChain(): ConfigChain {\n return {\n options: [],\n presets: [],\n plugins: [],\n files: new Set(),\n };\n}\n\nfunction createConfigChainOptions(opts: InputOptions): ConfigChainOptions {\n const options = {\n ...opts,\n };\n delete options.extends;\n delete options.env;\n delete options.overrides;\n delete options.plugins;\n delete options.presets;\n delete options.passPerPreset;\n delete options.ignore;\n delete options.only;\n delete options.test;\n delete options.include;\n delete options.exclude;\n\n // \"sourceMap\" is just aliased to sourceMap, so copy it over as\n // we merge the options together.\n if (Object.hasOwn(options, \"sourceMap\")) {\n options.sourceMaps = options.sourceMap;\n delete options.sourceMap;\n }\n return options;\n}\n\nfunction dedupDescriptors(\n items: Array>,\n): Array> {\n const map: Map<\n Function,\n Map }>\n > = new Map();\n\n const descriptors = [];\n\n for (const item of items) {\n if (typeof item.value === \"function\") {\n const fnKey = item.value;\n let nameMap = map.get(fnKey);\n if (!nameMap) {\n nameMap = new Map();\n map.set(fnKey, nameMap);\n }\n let desc = nameMap.get(item.name);\n if (!desc) {\n desc = { value: item };\n descriptors.push(desc);\n\n // Treat passPerPreset presets as unique, skipping them\n // in the merge processing steps.\n if (!item.ownPass) nameMap.set(item.name, desc);\n } else {\n desc.value = item;\n }\n } else {\n descriptors.push({ value: item });\n }\n }\n\n return descriptors.reduce((acc, desc) => {\n acc.push(desc.value);\n return acc;\n }, []);\n}\n\nfunction configIsApplicable(\n { options }: OptionsAndDescriptors,\n dirname: string,\n context: ConfigContext,\n configName: string,\n): boolean {\n return (\n (options.test === undefined ||\n configFieldIsApplicable(context, options.test, dirname, configName)) &&\n (options.include === undefined ||\n configFieldIsApplicable(context, options.include, dirname, configName)) &&\n (options.exclude === undefined ||\n !configFieldIsApplicable(context, options.exclude, dirname, configName))\n );\n}\n\nfunction configFieldIsApplicable(\n context: ConfigContext,\n test: ConfigApplicableTest,\n dirname: string,\n configName: string,\n): boolean {\n const patterns = Array.isArray(test) ? test : [test];\n\n return matchesPatterns(context, patterns, dirname, configName);\n}\n\n/**\n * Print the ignoreList-values in a more helpful way than the default.\n */\nfunction ignoreListReplacer(\n _key: string,\n value: MatchItem[] | MatchItem,\n): MatchItem[] | MatchItem | string {\n if (value instanceof RegExp) {\n return String(value);\n }\n\n return value;\n}\n\n/**\n * Tests if a filename should be ignored based on \"ignore\" and \"only\" options.\n */\nfunction shouldIgnore(\n context: ConfigContext,\n ignore: MatchItem[] | undefined | null,\n only: MatchItem[] | undefined | null,\n dirname: string,\n): boolean {\n if (ignore && matchesPatterns(context, ignore, dirname)) {\n const message = `No config is applied to \"${\n context.filename ?? \"(unknown)\"\n }\" because it matches one of \\`ignore: ${JSON.stringify(\n ignore,\n ignoreListReplacer,\n )}\\` from \"${dirname}\"`;\n debug(message);\n if (context.showConfig) {\n console.log(message);\n }\n return true;\n }\n\n if (only && !matchesPatterns(context, only, dirname)) {\n const message = `No config is applied to \"${\n context.filename ?? \"(unknown)\"\n }\" because it fails to match one of \\`only: ${JSON.stringify(\n only,\n ignoreListReplacer,\n )}\\` from \"${dirname}\"`;\n debug(message);\n if (context.showConfig) {\n console.log(message);\n }\n return true;\n }\n\n return false;\n}\n\n/**\n * Returns result of calling function with filename if pattern is a function.\n * Otherwise returns result of matching pattern Regex with filename.\n */\nfunction matchesPatterns(\n context: ConfigContext,\n patterns: MatchItem[],\n dirname: string,\n configName?: string,\n): boolean {\n return patterns.some(pattern =>\n matchPattern(pattern, dirname, context.filename, context, configName),\n );\n}\n\nfunction matchPattern(\n pattern: MatchItem,\n dirname: string,\n pathToTest: string | undefined,\n context: ConfigContext,\n configName?: string,\n): boolean {\n if (typeof pattern === \"function\") {\n return !!endHiddenCallStack(pattern)(pathToTest, {\n dirname,\n envName: context.envName,\n caller: context.caller,\n });\n }\n\n if (typeof pathToTest !== \"string\") {\n throw new ConfigError(\n `Configuration contains string/RegExp pattern, but no filename was passed to Babel`,\n configName,\n );\n }\n\n if (typeof pattern === \"string\") {\n pattern = pathPatternToRegex(pattern, dirname);\n }\n return pattern.test(pathToTest);\n}\n"],"mappings":"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","ignoreList":[]}
\ No newline at end of file
diff --git a/node_modules/@babel/core/lib/config/config-descriptors.js b/node_modules/@babel/core/lib/config/config-descriptors.js
deleted file mode 100644
index 21fb4146..00000000
--- a/node_modules/@babel/core/lib/config/config-descriptors.js
+++ /dev/null
@@ -1,190 +0,0 @@
-"use strict";
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.createCachedDescriptors = createCachedDescriptors;
-exports.createDescriptor = createDescriptor;
-exports.createUncachedDescriptors = createUncachedDescriptors;
-function _gensync() {
- const data = require("gensync");
- _gensync = function () {
- return data;
- };
- return data;
-}
-var _functional = require("../gensync-utils/functional.js");
-var _index = require("./files/index.js");
-var _item = require("./item.js");
-var _caching = require("./caching.js");
-var _resolveTargets = require("./resolve-targets.js");
-function isEqualDescriptor(a, b) {
- var _a$file, _b$file, _a$file2, _b$file2;
- return a.name === b.name && a.value === b.value && a.options === b.options && a.dirname === b.dirname && a.alias === b.alias && a.ownPass === b.ownPass && ((_a$file = a.file) == null ? void 0 : _a$file.request) === ((_b$file = b.file) == null ? void 0 : _b$file.request) && ((_a$file2 = a.file) == null ? void 0 : _a$file2.resolved) === ((_b$file2 = b.file) == null ? void 0 : _b$file2.resolved);
-}
-function* handlerOf(value) {
- return value;
-}
-function optionsWithResolvedBrowserslistConfigFile(options, dirname) {
- if (typeof options.browserslistConfigFile === "string") {
- options.browserslistConfigFile = (0, _resolveTargets.resolveBrowserslistConfigFile)(options.browserslistConfigFile, dirname);
- }
- return options;
-}
-function createCachedDescriptors(dirname, options, alias) {
- const {
- plugins,
- presets,
- passPerPreset
- } = options;
- return {
- options: optionsWithResolvedBrowserslistConfigFile(options, dirname),
- plugins: plugins ? () => createCachedPluginDescriptors(plugins, dirname)(alias) : () => handlerOf([]),
- presets: presets ? () => createCachedPresetDescriptors(presets, dirname)(alias)(!!passPerPreset) : () => handlerOf([])
- };
-}
-function createUncachedDescriptors(dirname, options, alias) {
- return {
- options: optionsWithResolvedBrowserslistConfigFile(options, dirname),
- plugins: (0, _functional.once)(() => createPluginDescriptors(options.plugins || [], dirname, alias)),
- presets: (0, _functional.once)(() => createPresetDescriptors(options.presets || [], dirname, alias, !!options.passPerPreset))
- };
-}
-const PRESET_DESCRIPTOR_CACHE = new WeakMap();
-const createCachedPresetDescriptors = (0, _caching.makeWeakCacheSync)((items, cache) => {
- const dirname = cache.using(dir => dir);
- return (0, _caching.makeStrongCacheSync)(alias => (0, _caching.makeStrongCache)(function* (passPerPreset) {
- const descriptors = yield* createPresetDescriptors(items, dirname, alias, passPerPreset);
- return descriptors.map(desc => loadCachedDescriptor(PRESET_DESCRIPTOR_CACHE, desc));
- }));
-});
-const PLUGIN_DESCRIPTOR_CACHE = new WeakMap();
-const createCachedPluginDescriptors = (0, _caching.makeWeakCacheSync)((items, cache) => {
- const dirname = cache.using(dir => dir);
- return (0, _caching.makeStrongCache)(function* (alias) {
- const descriptors = yield* createPluginDescriptors(items, dirname, alias);
- return descriptors.map(desc => loadCachedDescriptor(PLUGIN_DESCRIPTOR_CACHE, desc));
- });
-});
-const DEFAULT_OPTIONS = {};
-function loadCachedDescriptor(cache, desc) {
- const {
- value,
- options = DEFAULT_OPTIONS
- } = desc;
- if (options === false) return desc;
- let cacheByOptions = cache.get(value);
- if (!cacheByOptions) {
- cacheByOptions = new WeakMap();
- cache.set(value, cacheByOptions);
- }
- let possibilities = cacheByOptions.get(options);
- if (!possibilities) {
- possibilities = [];
- cacheByOptions.set(options, possibilities);
- }
- if (!possibilities.includes(desc)) {
- const matches = possibilities.filter(possibility => isEqualDescriptor(possibility, desc));
- if (matches.length > 0) {
- return matches[0];
- }
- possibilities.push(desc);
- }
- return desc;
-}
-function* createPresetDescriptors(items, dirname, alias, passPerPreset) {
- return yield* createDescriptors("preset", items, dirname, alias, passPerPreset);
-}
-function* createPluginDescriptors(items, dirname, alias) {
- return yield* createDescriptors("plugin", items, dirname, alias);
-}
-function* createDescriptors(type, items, dirname, alias, ownPass) {
- const descriptors = yield* _gensync().all(items.map((item, index) => createDescriptor(item, dirname, {
- type,
- alias: `${alias}$${index}`,
- ownPass: !!ownPass
- })));
- assertNoDuplicates(descriptors);
- return descriptors;
-}
-function* createDescriptor(pair, dirname, {
- type,
- alias,
- ownPass
-}) {
- const desc = (0, _item.getItemDescriptor)(pair);
- if (desc) {
- return desc;
- }
- let name;
- let options;
- let value = pair;
- if (Array.isArray(value)) {
- if (value.length === 3) {
- [value, options, name] = value;
- } else {
- [value, options] = value;
- }
- }
- let file = undefined;
- let filepath = null;
- if (typeof value === "string") {
- if (typeof type !== "string") {
- throw new Error("To resolve a string-based item, the type of item must be given");
- }
- const resolver = type === "plugin" ? _index.loadPlugin : _index.loadPreset;
- const request = value;
- ({
- filepath,
- value
- } = yield* resolver(value, dirname));
- file = {
- request,
- resolved: filepath
- };
- }
- if (!value) {
- throw new Error(`Unexpected falsy value: ${String(value)}`);
- }
- if (typeof value === "object" && value.__esModule) {
- if (value.default) {
- value = value.default;
- } else {
- throw new Error("Must export a default export when using ES6 modules.");
- }
- }
- if (typeof value !== "object" && typeof value !== "function") {
- throw new Error(`Unsupported format: ${typeof value}. Expected an object or a function.`);
- }
- if (filepath !== null && typeof value === "object" && value) {
- throw new Error(`Plugin/Preset files are not allowed to export objects, only functions. In ${filepath}`);
- }
- return {
- name,
- alias: filepath || alias,
- value,
- options,
- dirname,
- ownPass,
- file
- };
-}
-function assertNoDuplicates(items) {
- const map = new Map();
- for (const item of items) {
- if (typeof item.value !== "function") continue;
- let nameMap = map.get(item.value);
- if (!nameMap) {
- nameMap = new Set();
- map.set(item.value, nameMap);
- }
- if (nameMap.has(item.name)) {
- const conflicts = items.filter(i => i.value === item.value);
- throw new Error([`Duplicate plugin/preset detected.`, `If you'd like to use two separate instances of a plugin,`, `they need separate names, e.g.`, ``, ` plugins: [`, ` ['some-plugin', {}],`, ` ['some-plugin', {}, 'some unique name'],`, ` ]`, ``, `Duplicates detected are:`, `${JSON.stringify(conflicts, null, 2)}`].join("\n"));
- }
- nameMap.add(item.name);
- }
-}
-0 && 0;
-
-//# sourceMappingURL=config-descriptors.js.map
diff --git a/node_modules/@babel/core/lib/config/config-descriptors.js.map b/node_modules/@babel/core/lib/config/config-descriptors.js.map
deleted file mode 100644
index fe7e0b9a..00000000
--- a/node_modules/@babel/core/lib/config/config-descriptors.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"names":["_gensync","data","require","_functional","_index","_item","_caching","_resolveTargets","isEqualDescriptor","a","b","_a$file","_b$file","_a$file2","_b$file2","name","value","options","dirname","alias","ownPass","file","request","resolved","handlerOf","optionsWithResolvedBrowserslistConfigFile","browserslistConfigFile","resolveBrowserslistConfigFile","createCachedDescriptors","plugins","presets","passPerPreset","createCachedPluginDescriptors","createCachedPresetDescriptors","createUncachedDescriptors","once","createPluginDescriptors","createPresetDescriptors","PRESET_DESCRIPTOR_CACHE","WeakMap","makeWeakCacheSync","items","cache","using","dir","makeStrongCacheSync","makeStrongCache","descriptors","map","desc","loadCachedDescriptor","PLUGIN_DESCRIPTOR_CACHE","DEFAULT_OPTIONS","cacheByOptions","get","set","possibilities","includes","matches","filter","possibility","length","push","createDescriptors","type","gensync","all","item","index","createDescriptor","assertNoDuplicates","pair","getItemDescriptor","Array","isArray","undefined","filepath","Error","resolver","loadPlugin","loadPreset","String","__esModule","default","Map","nameMap","Set","has","conflicts","i","JSON","stringify","join","add"],"sources":["../../src/config/config-descriptors.ts"],"sourcesContent":["import gensync, { type Handler } from \"gensync\";\nimport { once } from \"../gensync-utils/functional.ts\";\n\nimport { loadPlugin, loadPreset } from \"./files/index.ts\";\n\nimport { getItemDescriptor } from \"./item.ts\";\n\nimport {\n makeWeakCacheSync,\n makeStrongCacheSync,\n makeStrongCache,\n} from \"./caching.ts\";\nimport type { CacheConfigurator } from \"./caching.ts\";\n\nimport type {\n PluginItem,\n InputOptions,\n PresetItem,\n} from \"./validation/options.ts\";\n\nimport { resolveBrowserslistConfigFile } from \"./resolve-targets.ts\";\nimport type { PluginAPI, PresetAPI } from \"./helpers/config-api.ts\";\n\n// Represents a config object and functions to lazily load the descriptors\n// for the plugins and presets so we don't load the plugins/presets unless\n// the options object actually ends up being applicable.\nexport type OptionsAndDescriptors = {\n options: InputOptions;\n plugins: () => Handler>>;\n presets: () => Handler>>;\n};\n\n// Represents a plugin or presets at a given location in a config object.\n// At this point these have been resolved to a specific object or function,\n// but have not yet been executed to call functions with options.\nexport interface UnloadedDescriptor {\n name: string | undefined;\n value: object | ((api: API, options: Options, dirname: string) => unknown);\n options: Options;\n dirname: string;\n alias: string;\n ownPass?: boolean;\n file?: {\n request: string;\n resolved: string;\n };\n}\n\nfunction isEqualDescriptor(\n a: UnloadedDescriptor,\n b: UnloadedDescriptor,\n): boolean {\n return (\n a.name === b.name &&\n a.value === b.value &&\n a.options === b.options &&\n a.dirname === b.dirname &&\n a.alias === b.alias &&\n a.ownPass === b.ownPass &&\n a.file?.request === b.file?.request &&\n a.file?.resolved === b.file?.resolved\n );\n}\n\nexport type ValidatedFile = {\n filepath: string;\n dirname: string;\n options: InputOptions;\n};\n\n// eslint-disable-next-line require-yield\nfunction* handlerOf(value: T): Handler {\n return value;\n}\n\nfunction optionsWithResolvedBrowserslistConfigFile(\n options: InputOptions,\n dirname: string,\n): InputOptions {\n if (typeof options.browserslistConfigFile === \"string\") {\n options.browserslistConfigFile = resolveBrowserslistConfigFile(\n options.browserslistConfigFile,\n dirname,\n );\n }\n return options;\n}\n\n/**\n * Create a set of descriptors from a given options object, preserving\n * descriptor identity based on the identity of the plugin/preset arrays\n * themselves, and potentially on the identity of the plugins/presets + options.\n */\nexport function createCachedDescriptors(\n dirname: string,\n options: InputOptions,\n alias: string,\n): OptionsAndDescriptors {\n const { plugins, presets, passPerPreset } = options;\n return {\n options: optionsWithResolvedBrowserslistConfigFile(options, dirname),\n plugins: plugins\n ? () =>\n // @ts-expect-error todo(flow->ts) ts complains about incorrect arguments\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n createCachedPluginDescriptors(plugins, dirname)(alias)\n : () => handlerOf([]),\n presets: presets\n ? () =>\n // @ts-expect-error todo(flow->ts) ts complains about incorrect arguments\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n createCachedPresetDescriptors(presets, dirname)(alias)(\n !!passPerPreset,\n )\n : () => handlerOf([]),\n };\n}\n\n/**\n * Create a set of descriptors from a given options object, with consistent\n * identity for the descriptors, but not caching based on any specific identity.\n */\nexport function createUncachedDescriptors(\n dirname: string,\n options: InputOptions,\n alias: string,\n): OptionsAndDescriptors {\n return {\n options: optionsWithResolvedBrowserslistConfigFile(options, dirname),\n // The returned result here is cached to represent a config object in\n // memory, so we build and memoize the descriptors to ensure the same\n // values are returned consistently.\n plugins: once(() =>\n createPluginDescriptors(options.plugins || [], dirname, alias),\n ),\n presets: once(() =>\n createPresetDescriptors(\n options.presets || [],\n dirname,\n alias,\n !!options.passPerPreset,\n ),\n ),\n };\n}\n\nconst PRESET_DESCRIPTOR_CACHE = new WeakMap();\nconst createCachedPresetDescriptors = makeWeakCacheSync(\n (items: PresetItem[], cache: CacheConfigurator) => {\n const dirname = cache.using(dir => dir);\n return makeStrongCacheSync((alias: string) =>\n makeStrongCache(function* (\n passPerPreset: boolean,\n ): Handler>> {\n const descriptors = yield* createPresetDescriptors(\n items,\n dirname,\n alias,\n passPerPreset,\n );\n return descriptors.map(\n // Items are cached using the overall preset array identity when\n // possibly, but individual descriptors are also cached if a match\n // can be found in the previously-used descriptor lists.\n desc => loadCachedDescriptor(PRESET_DESCRIPTOR_CACHE, desc),\n );\n }),\n );\n },\n);\n\nconst PLUGIN_DESCRIPTOR_CACHE = new WeakMap();\nconst createCachedPluginDescriptors = makeWeakCacheSync(\n (items: PluginItem[], cache: CacheConfigurator) => {\n const dirname = cache.using(dir => dir);\n return makeStrongCache(function* (\n alias: string,\n ): Handler>> {\n const descriptors = yield* createPluginDescriptors(items, dirname, alias);\n return descriptors.map(\n // Items are cached using the overall plugin array identity when\n // possibly, but individual descriptors are also cached if a match\n // can be found in the previously-used descriptor lists.\n desc => loadCachedDescriptor(PLUGIN_DESCRIPTOR_CACHE, desc),\n );\n });\n },\n);\n\n/**\n * When no options object is given in a descriptor, this object is used\n * as a WeakMap key in order to have consistent identity.\n */\nconst DEFAULT_OPTIONS = {};\n\n/**\n * Given the cache and a descriptor, returns a matching descriptor from the\n * cache, or else returns the input descriptor and adds it to the cache for\n * next time.\n */\nfunction loadCachedDescriptor(\n cache: WeakMap<\n object | Function,\n WeakMap