diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
new file mode 100644
index 00000000..ee9bdf0e
--- /dev/null
+++ b/.github/CODEOWNERS
@@ -0,0 +1 @@
+* @afonsojramos @setchy
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 930d24f1..fe18cea9 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -1,9 +1,16 @@
version: 2
updates:
-- package-ecosystem: npm
- directory: "/"
- schedule:
- interval: weekly
- time: "02:00"
- timezone: Europe/Berlin
- open-pull-requests-limit: 10
+ - package-ecosystem: npm
+ directory: "/"
+ schedule:
+ interval: weekly
+ time: "02:00"
+ timezone: Europe/Berlin
+ open-pull-requests-limit: 10
+ - package-ecosystem: github-actions
+ directory: "/"
+ schedule:
+ interval: weekly
+ time: "02:00"
+ timezone: Europe/Berlin
+ open-pull-requests-limit: 10
diff --git a/.github/visual-screenshots/linux-budgie.png b/.github/visual-screenshots/linux-budgie.png
new file mode 100644
index 00000000..c8dd7dc4
Binary files /dev/null and b/.github/visual-screenshots/linux-budgie.png differ
diff --git a/.github/visual-screenshots/linux-cinnamon.png b/.github/visual-screenshots/linux-cinnamon.png
new file mode 100644
index 00000000..c761843f
Binary files /dev/null and b/.github/visual-screenshots/linux-cinnamon.png differ
diff --git a/.github/visual-screenshots/linux-gnome.png b/.github/visual-screenshots/linux-gnome.png
new file mode 100644
index 00000000..403af54a
Binary files /dev/null and b/.github/visual-screenshots/linux-gnome.png differ
diff --git a/.github/visual-screenshots/linux-kde.png b/.github/visual-screenshots/linux-kde.png
new file mode 100644
index 00000000..c9d2a995
Binary files /dev/null and b/.github/visual-screenshots/linux-kde.png differ
diff --git a/.github/visual-screenshots/linux-lxqt.png b/.github/visual-screenshots/linux-lxqt.png
new file mode 100644
index 00000000..2e352403
Binary files /dev/null and b/.github/visual-screenshots/linux-lxqt.png differ
diff --git a/.github/visual-screenshots/linux-mate.png b/.github/visual-screenshots/linux-mate.png
new file mode 100644
index 00000000..3f4657d6
Binary files /dev/null and b/.github/visual-screenshots/linux-mate.png differ
diff --git a/.github/visual-screenshots/linux-sway.png b/.github/visual-screenshots/linux-sway.png
new file mode 100644
index 00000000..309f5238
Binary files /dev/null and b/.github/visual-screenshots/linux-sway.png differ
diff --git a/.github/visual-screenshots/linux-tint2.png b/.github/visual-screenshots/linux-tint2.png
new file mode 100644
index 00000000..3f4657d6
Binary files /dev/null and b/.github/visual-screenshots/linux-tint2.png differ
diff --git a/.github/visual-screenshots/linux-xfce.png b/.github/visual-screenshots/linux-xfce.png
new file mode 100644
index 00000000..3f4657d6
Binary files /dev/null and b/.github/visual-screenshots/linux-xfce.png differ
diff --git a/.github/visual-screenshots/macos-14.png b/.github/visual-screenshots/macos-14.png
new file mode 100644
index 00000000..827ca7d9
Binary files /dev/null and b/.github/visual-screenshots/macos-14.png differ
diff --git a/.github/visual-screenshots/macos-15.png b/.github/visual-screenshots/macos-15.png
new file mode 100644
index 00000000..dac3b76c
Binary files /dev/null and b/.github/visual-screenshots/macos-15.png differ
diff --git a/.github/visual-screenshots/macos-26.png b/.github/visual-screenshots/macos-26.png
new file mode 100644
index 00000000..76d98fbc
Binary files /dev/null and b/.github/visual-screenshots/macos-26.png differ
diff --git a/.github/visual-screenshots/windows-2022.png b/.github/visual-screenshots/windows-2022.png
new file mode 100644
index 00000000..f87f9746
Binary files /dev/null and b/.github/visual-screenshots/windows-2022.png differ
diff --git a/.github/visual-screenshots/windows-2025.png b/.github/visual-screenshots/windows-2025.png
new file mode 100644
index 00000000..4dfac322
Binary files /dev/null and b/.github/visual-screenshots/windows-2025.png differ
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 00000000..7ae1d4c5
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,35 @@
+name: Build
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+ branches:
+ - main
+
+permissions: {}
+
+jobs:
+ build:
+ name: Build [vp pack]
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ with:
+ persist-credentials: false
+ - name: Setup pnpm
+ uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
+ - name: Setup Node.js
+ uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
+ with:
+ node-version-file: .node-version
+ cache: pnpm
+ - name: Install dependencies
+ run: pnpm install --frozen-lockfile
+ - name: Build library
+ run: pnpm run build
diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml
new file mode 100644
index 00000000..3e5fcf5b
--- /dev/null
+++ b/.github/workflows/e2e.yml
@@ -0,0 +1,135 @@
+name: E2E
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+ branches:
+ - main
+
+permissions: {}
+
+jobs:
+ e2e:
+ name: E2E [${{ matrix.label }}]
+ runs-on: ${{ matrix.runner }}
+ permissions:
+ contents: read
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - runner: macos-26
+ label: macOS 26 (Tahoe)
+ key: macos-26
+ - runner: macos-15
+ label: macOS 15 (Sequoia)
+ key: macos-15
+ - runner: macos-14
+ label: macOS 14 (Sonoma)
+ key: macos-14
+ - runner: windows-2025
+ label: Windows Server 2025
+ key: windows-2025
+ - runner: windows-2022
+ label: Windows Server 2022
+ key: windows-2022
+ - runner: ubuntu-24.04
+ label: Ubuntu 24.04
+ key: ubuntu-24.04
+ - runner: ubuntu-22.04
+ label: Ubuntu 22.04
+ key: ubuntu-22.04
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ with:
+ persist-credentials: false
+ - name: Setup pnpm
+ uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
+ - name: Setup Node.js
+ uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
+ with:
+ node-version-file: .node-version
+ cache: pnpm
+ - name: Install dependencies
+ shell: bash
+ run: |
+ # pnpm does not reliably run electron's postinstall via
+ # allowBuilds, so invoke its installer explicitly to fetch the
+ # binary (path.txt). Verify with a require() before proceeding.
+ for attempt in 1 2 3; do
+ if pnpm install --frozen-lockfile && node node_modules/electron/install.js && node -e "require('electron')" >/dev/null 2>&1; then
+ exit 0
+ fi
+ echo "::warning::install attempt $attempt failed (often electron 502); retrying..."
+ sleep $((attempt * 5))
+ done
+ echo "::error::install failed after 3 attempts"
+ exit 1
+ - name: Build library
+ run: pnpm run build
+ - name: Run E2E (Linux)
+ if: runner.os == 'Linux'
+ env:
+ E2E_PLATFORM_KEY: ${{ matrix.key }}
+ E2E_PLATFORM_LABEL: ${{ matrix.label }}
+ GITHUB_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
+ run: xvfb-run --auto-servernum -- pnpm exec playwright test --config tests/e2e/playwright.config.ts
+ - name: Run E2E (macOS / Windows)
+ if: runner.os != 'Linux'
+ env:
+ E2E_PLATFORM_KEY: ${{ matrix.key }}
+ E2E_PLATFORM_LABEL: ${{ matrix.label }}
+ GITHUB_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
+ run: pnpm exec playwright test --config tests/e2e/playwright.config.ts
+ - name: Upload platform result
+ if: always()
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
+ with:
+ name: platform-${{ matrix.key }}
+ path: test-results/platforms/${{ matrix.key }}.json
+ if-no-files-found: warn
+ retention-days: 14
+
+ update-platforms:
+ name: Update PLATFORMS table
+ needs: e2e
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ pull-requests: write
+ steps:
+ - name: Checkout
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ with:
+ persist-credentials: false
+ - name: Setup Node.js
+ uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
+ with:
+ node-version-file: .node-version
+ - name: Download all platform results
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
+ with:
+ pattern: platform-*
+ merge-multiple: true
+ path: test-results/platforms
+ - name: Regenerate PLATFORMS block
+ run: node tests/e2e/update-platforms.mts
+ - name: Open PR if changed
+ uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
+ with:
+ commit-message: "docs: refresh tested platforms table"
+ title: "docs: refresh tested platforms table"
+ body: |
+ Auto-generated update to `PLATFORMS.md` from the latest E2E matrix run on `main`.
+
+ Source: [E2E workflow run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}).
+ branch: chore/update-platforms-table
+ base: main
+ delete-branch: true
+ add-paths: PLATFORMS.md
+ sign-commits: true
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index fe7e5997..57f1c97c 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -3,18 +3,33 @@ name: Linting
on:
push:
branches:
- - master
+ - main
pull_request:
+ branches:
+ - main
+
+permissions: {}
jobs:
lint:
name: Lint
runs-on: ubuntu-latest
+ permissions:
+ contents: read
steps:
- - uses: actions/checkout@v4
- - uses: actions/setup-node@v4
+ - name: Checkout
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ with:
+ persist-credentials: false
+ - name: Setup pnpm
+ uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
+ - name: Setup Node.js
+ uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
- node-version-file: '.nvmrc'
- - run: yarn install
- - run: yarn lint
+ node-version-file: .node-version
+ cache: pnpm
+ - name: Install dependencies
+ run: pnpm install --frozen-lockfile
+ - name: Run linter
+ run: pnpm run lint:check
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
new file mode 100644
index 00000000..bbf800fb
--- /dev/null
+++ b/.github/workflows/publish.yml
@@ -0,0 +1,41 @@
+name: Publish
+
+on:
+ workflow_call:
+ workflow_dispatch:
+
+permissions: {}
+
+jobs:
+ publish:
+ name: Publish to npm
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ id-token: write # for npm OIDC trusted publishing + provenance
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ with:
+ persist-credentials: false
+ - name: Setup pnpm
+ uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
+ - name: Setup Node.js
+ uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
+ with:
+ node-version-file: .node-version
+ registry-url: https://registry.npmjs.org
+ cache: pnpm
+ - name: Install dependencies
+ run: pnpm install --frozen-lockfile
+ - name: Type check
+ run: pnpm run typecheck
+ - name: Run tests
+ run: pnpm run test
+ - name: Build library
+ run: pnpm run build
+ - name: Publish to npm
+ # Auth + provenance via OIDC trusted publishing (no NPM_TOKEN needed).
+ # Requires the npm package to trust the entry-point workflow (release.yml).
+ run: npm publish --provenance --access public
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 00000000..9e1303d7
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,32 @@
+name: Release
+
+on:
+ push:
+ branches:
+ - main
+
+permissions: {}
+
+jobs:
+ release-please:
+ name: Release Please
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ pull-requests: write
+ outputs:
+ release_created: ${{ steps.release.outputs.release_created }}
+ tag_name: ${{ steps.release.outputs.tag_name }}
+ steps:
+ - name: Run release-please
+ id: release
+ uses: googleapis/release-please-action@45996ed1f6d02564a971a2fa1b5860e934307cf7 # v5.0.0
+
+ publish:
+ name: Publish
+ needs: release-please
+ if: ${{ needs.release-please.outputs.release_created == 'true' }}
+ permissions:
+ contents: read
+ id-token: write # for npm OIDC trusted publishing + provenance
+ uses: ./.github/workflows/publish.yml
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 6d557964..2edcaf80 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -1,20 +1,37 @@
-name: Run Tests
+name: Test
on:
push:
branches:
- - master
+ - main
pull_request:
+ branches:
+ - main
+
+permissions: {}
jobs:
- lint:
+ test:
name: Run Tests
runs-on: macos-latest
+ permissions:
+ contents: read
steps:
- - uses: actions/checkout@v4
- - uses: actions/setup-node@v4
+ - name: Checkout
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ with:
+ persist-credentials: false
+ - name: Setup pnpm
+ uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
+ - name: Setup Node.js
+ uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
- node-version-file: '.nvmrc'
- - run: yarn install
- - run: yarn test
+ node-version-file: .node-version
+ cache: pnpm
+ - name: Install dependencies
+ run: pnpm install --frozen-lockfile
+ - name: Type check
+ run: pnpm run typecheck
+ - name: Run tests
+ run: pnpm run test
diff --git a/.github/workflows/triage.yml b/.github/workflows/triage.yml
new file mode 100644
index 00000000..d31d65a4
--- /dev/null
+++ b/.github/workflows/triage.yml
@@ -0,0 +1,32 @@
+name: Triage PR
+
+on:
+ # `pull_request_target` is required so the title-validator can write
+ # statuses on PRs from forks (under `pull_request`, GitHub forces
+ # GITHUB_TOKEN to read-only for fork PRs). Safe here because this
+ # workflow:
+ # - never checks out PR code (no actions/checkout),
+ # - has no `run:` steps that interpolate PR fields,
+ # - only invokes a SHA-pinned action that reads PR metadata via the API.
+ pull_request_target:
+ branches:
+ - main
+ types:
+ - opened
+ - reopened
+ - edited
+ - synchronize
+ - ready_for_review
+
+permissions: {}
+
+jobs:
+ pr-title:
+ name: Validate PR title [conventional commits]
+ runs-on: ubuntu-latest
+ permissions:
+ pull-requests: read
+ steps:
+ - uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6.1.1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/visual-tray.yml b/.github/workflows/visual-tray.yml
new file mode 100644
index 00000000..8d41820f
--- /dev/null
+++ b/.github/workflows/visual-tray.yml
@@ -0,0 +1,625 @@
+name: Visual Tray
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+ branches:
+ - main
+
+permissions: {}
+
+jobs:
+ macos:
+ name: Visual [${{ matrix.label }}]
+ runs-on: ${{ matrix.runner }}
+ permissions:
+ contents: read
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - runner: macos-26
+ label: macOS 26 (Tahoe)
+ key: macos-26
+ - runner: macos-15
+ label: macOS 15 (Sequoia)
+ key: macos-15
+ - runner: macos-14
+ label: macOS 14 (Sonoma)
+ key: macos-14
+ steps:
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ with:
+ persist-credentials: false
+ - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
+ - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
+ with:
+ node-version-file: .node-version
+ cache: pnpm
+ - name: Install dependencies
+ shell: bash
+ run: |
+ for attempt in 1 2 3; do
+ if pnpm install --frozen-lockfile && node node_modules/electron/install.js && node -e "require('electron')" >/dev/null 2>&1; then exit 0; fi
+ echo "::warning::install/electron-binary attempt $attempt failed; retrying..."
+ rm -rf node_modules/electron 2>/dev/null || true
+ sleep $((attempt * 5))
+ done
+ exit 1
+ - name: Build library
+ run: pnpm run build
+ - name: Hide menu bar clock and dock
+ run: |
+ defaults -currentHost write com.apple.controlcenter Clock -int 16
+ defaults write com.apple.controlcenter "NSStatusItem Visible Clock" -bool false
+ defaults write com.apple.dock autohide -bool true
+ defaults write com.apple.dock autohide-delay -float 1000
+ defaults write com.apple.dock no-bouncing -bool true
+ killall ControlCenter Dock SystemUIServer 2>/dev/null || true
+ sleep 8
+ - name: Run visual test
+ env:
+ VISUAL_KEY: ${{ matrix.key }}
+ VISUAL_LABEL: ${{ matrix.label }}
+ run: pnpm run test:visual
+ - name: Upload artifacts
+ if: always()
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
+ with:
+ name: visual-${{ matrix.key }}
+ path: test-results/visual/
+ if-no-files-found: warn
+ retention-days: 14
+
+ linux:
+ name: Visual [${{ matrix.label }}]
+ runs-on: ubuntu-24.04
+ permissions:
+ contents: read
+ continue-on-error: ${{ matrix.experimental || false }}
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - de: mate
+ label: Linux (MATE)
+ key: linux-mate
+ apt: mate-panel mate-indicator-applet
+ panel_cmd: mate-panel --replace
+ - de: xfce
+ label: Linux (Xfce)
+ key: linux-xfce
+ apt: xfce4-panel
+ panel_cmd: xfce4-panel --disable-wm-check
+ - de: lxqt
+ label: Linux (LXQt)
+ key: linux-lxqt
+ apt: lxqt-panel lxqt-session
+ panel_cmd: |
+ mkdir -p ~/.config/lxqt && \
+ printf '[General]\n__userfile__=true\npanels=p1\n[p1]\nplugins=statusnotifier\nposition=Top\nalignment=0\n[statusnotifier]\ntype=statusnotifier\nalignment=Right\n' > ~/.config/lxqt/panel.conf && \
+ lxqt-panel
+ - de: kde
+ label: Linux (KDE Plasma)
+ key: linux-kde
+ apt: plasma-workspace plasma-desktop kwin-x11 systemsettings kde-cli-tools
+ cache_apt: true
+ panel_cmd: |
+ bash -c '
+ kwin_x11 --replace & sleep 4
+ plasmashell --no-respawn & PLASMA_PID=$!
+ CFG=~/.config/plasma-org.kde.plasma.desktop-appletsrc
+ for i in {1..20}; do
+ [ -f "$CFG" ] && grep -q "org.kde.plasma.systemtray" "$CFG" && break
+ sleep 1
+ done
+ # Brute-force showAllItems=true on every containment x applet pair
+ for CID in 1 2 3 4 5 6 7 8 9 10; do
+ for AID in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 20 25 30; do
+ kwriteconfig5 --file "$CFG" --group Containments --group "$CID" --group Applets --group "$AID" --group Configuration --group General --key showAllItems true 2>/dev/null || true
+ done
+ done
+ echo "=== plasma config after rewrite ==="; cat "$CFG"
+ # Tell plasmashell to reload its config
+ qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.refreshCurrentShell 2>/dev/null || true
+ # If refresh did not pick it up, restart plasmashell with new config
+ kquitapp5 plasmashell 2>/dev/null || pkill -TERM plasmashell
+ sleep 4
+ plasmashell --no-respawn &
+ wait'
+ panel_warmup: 35
+ post_ready_delay: 18000
+ # Cinnamon is experimental: Xvfb/Xvnc lack a working RRSetCrtcConfig,
+ # so muffin's startup config-reconciler hits BadValue and never finishes.
+ # Xdummy (Xorg + xserver-xorg-video-dummy) is a real Xorg with a complete
+ # RandR 1.2+ implementation, which is the only theory that has a chance.
+ - de: cinnamon
+ label: Linux (Cinnamon)
+ key: linux-cinnamon
+ apt: cinnamon cinnamon-session muffin mesa-utils xserver-xorg-core xserver-xorg-video-dummy xserver-xorg-legacy x11-xserver-utils dconf-cli
+ cache_apt: true
+ use_xdummy: true
+ panel_cmd: |
+ bash -c '
+ export LIBGL_ALWAYS_SOFTWARE=1 GALLIUM_DRIVER=llvmpipe MESA_GL_VERSION_OVERRIDE=3.3 CLUTTER_BACKEND=x11
+ export XDG_CURRENT_DESKTOP=X-Cinnamon DESKTOP_SESSION=cinnamon XDG_SESSION_TYPE=x11
+ xrandr --query 2>&1 | head -20
+ cinnamon-session-cinnamon &
+ sleep 8
+ cinnamon --replace 2>&1 | head -40 &
+ wait'
+ panel_warmup: 35
+ post_ready_delay: 18000
+ experimental: true
+ - de: tint2
+ label: Linux (Tint2)
+ key: linux-tint2
+ apt: tint2 valac libgtk-3-dev libdbusmenu-glib-dev libdbusmenu-gtk3-dev pkg-config make git
+ panel_cmd: bash -c 'tint2 & sleep 3; snixembed'
+ build_snixembed: true
+ panel_warmup: 12
+ post_ready_delay: 6000
+ # GNOME is experimental: Mutter paints the fixture window
+ # as an opaque Adwaita-blue rectangle regardless of our
+ # backgroundColor / HTML body color / frame:false / focus()
+ # combination. The test still passes via the globalWhite
+ # fallback (white pixels exist elsewhere on screen) but the
+ # saved screenshot doesn't show the white-box-with-black-
+ # square design the way the other 13 platforms do. Marking
+ # experimental so future regressions don't block merges
+ # until someone figures out the Electron+Mutter conflict.
+ - de: gnome
+ label: Linux (GNOME)
+ key: linux-gnome
+ apt: gnome-shell gnome-shell-extension-appindicator
+ panel_cmd: bash -c 'gnome-extensions enable ubuntu-appindicators@ubuntu.com 2>/dev/null || true; gnome-shell --x11'
+ experimental: true
+ # Budgie: noble ships budgie-desktop 10.9, whose default panel layout
+ # already includes the System Tray applet. The applet is a pure client
+ # of org.freedesktop.StatusNotifierWatcher — and in 10.9+ that watcher
+ # is owned by budgie-daemon, not the applet. Running budgie-wm +
+ # budgie-panel without a session manager skips the daemon autostart,
+ # leaving SNI items unobserved. Start budgie-daemon first.
+ - de: budgie
+ label: Linux (Budgie)
+ key: linux-budgie
+ apt: budgie-desktop
+ cache_apt: true
+ panel_cmd: |
+ bash -c '
+ export XDG_CURRENT_DESKTOP=Budgie:GNOME DESKTOP_SESSION=budgie-desktop
+ budgie-daemon &
+ sleep 2
+ budgie-wm --replace &
+ sleep 5
+ budgie-panel --replace'
+ panel_warmup: 18
+ post_ready_delay: 10000
+ steps:
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ with:
+ persist-credentials: false
+ - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
+ - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
+ with:
+ node-version-file: .node-version
+ cache: pnpm
+ - name: Install dependencies
+ shell: bash
+ run: |
+ for attempt in 1 2 3; do
+ if pnpm install --frozen-lockfile && node node_modules/electron/install.js && node -e "require('electron')" >/dev/null 2>&1; then exit 0; fi
+ echo "::warning::install/electron-binary attempt $attempt failed; retrying..."
+ rm -rf node_modules/electron 2>/dev/null || true
+ sleep $((attempt * 5))
+ done
+ exit 1
+ - name: Build library
+ run: pnpm run build
+ - name: Install base dependencies
+ run: |
+ sudo apt-get update -qq
+ sudo apt-get install -y --no-install-recommends \
+ xvfb imagemagick dbus-x11 faketime \
+ libgtk-3-0 libnss3 libxss1 libasound2t64 \
+ libgbm1 libatk-bridge2.0-0 libdrm2 \
+ libxtst6 libnotify4 libxrandr2 \
+ libxcomposite1 libxdamage1 libxfixes3 libcups2 \
+ libayatana-appindicator3-1
+ # Heavy DEs (KDE, Cinnamon, Budgie) pull hundreds of MB of packages;
+ # cache them by package set so subsequent runs skip the download.
+ # execute_install_scripts: true is required because the DE setup
+ # depends on postinstall hooks like glib-compile-schemas — without
+ # it the cached restore leaves gsettings schemas uncompiled and
+ # budgie-daemon/cinnamon-session crash with "Settings schema
+ # 'com.solus-project.budgie-panel' is not installed".
+ - name: Install desktop environment (cached)
+ if: matrix.cache_apt
+ uses: awalsh128/cache-apt-pkgs-action@553a35bb8ebd9fcabcb1c9451aa4c98e1b4ca8a9 # v1.6.3
+ with:
+ packages: ${{ matrix.apt }}
+ version: '1.0'
+ execute_install_scripts: 'true'
+ # The action's execute_install_scripts only runs a subset of
+ # postinst (e.g. polkitd) — glib-compile-schemas is silently
+ # skipped, so we run it explicitly. Without this, budgie-daemon
+ # and cinnamon-session crash with "Settings schema ... not
+ # installed" on cache restore.
+ - name: Compile glib schemas after cache restore
+ if: matrix.cache_apt
+ run: sudo glib-compile-schemas /usr/share/glib-2.0/schemas/
+ - name: Install desktop environment (uncached)
+ if: '!matrix.cache_apt'
+ env:
+ APT_PACKAGES: ${{ matrix.apt }}
+ run: |
+ sudo apt-get install -y --no-install-recommends $APT_PACKAGES
+ - name: Build snixembed (SNI to XEmbed bridge)
+ if: matrix.build_snixembed
+ run: |
+ git clone --depth 1 https://git.sr.ht/~steef/snixembed /tmp/snixembed
+ cd /tmp/snixembed
+ make
+ sudo make install PREFIX=/usr/local
+ snixembed --help 2>&1 | head -5 || true
+ - name: Configure Xdummy
+ if: matrix.use_xdummy
+ run: |
+ sudo tee /etc/X11/xorg-dummy.conf >/dev/null <<'EOF'
+ Section "Device"
+ Identifier "Dummy"
+ Driver "dummy"
+ VideoRam 256000
+ EndSection
+ Section "Monitor"
+ Identifier "DummyMonitor"
+ HorizSync 28.0-80.0
+ VertRefresh 48.0-75.0
+ Modeline "1920x1080" 148.50 1920 2008 2052 2200 1080 1084 1089 1125 +HSync +VSync
+ EndSection
+ Section "Screen"
+ Identifier "DummyScreen"
+ Device "Dummy"
+ Monitor "DummyMonitor"
+ DefaultDepth 24
+ SubSection "Display"
+ Depth 24
+ Modes "1920x1080"
+ EndSubSection
+ EndSection
+ EOF
+ sudo tee /etc/X11/Xwrapper.config >/dev/null <<'EOF'
+ allowed_users=anybody
+ needs_root_rights=yes
+ EOF
+ - name: Run visual test under ${{ matrix.de }}
+ env:
+ VISUAL_KEY: ${{ matrix.key }}
+ VISUAL_LABEL: ${{ matrix.label }}
+ VISUAL_POST_READY_DELAY_MS: ${{ matrix.post_ready_delay || 3000 }}
+ PANEL_CMD: ${{ matrix.panel_cmd }}
+ PANEL_WARMUP: ${{ matrix.panel_warmup || 8 }}
+ TEST_DISPLAY: ${{ matrix.test_display || ':99' }}
+ run: |
+ set -x
+ if [ "${{ matrix.use_xdummy || 'false' }}" = "true" ]; then
+ sudo Xorg :99 -config /etc/X11/xorg-dummy.conf -noreset -nolisten tcp -logfile /tmp/xorg.log &
+ else
+ Xvfb :99 -screen 0 ${{ matrix.xvfb_screen || '1920x1080x24' }} &
+ fi
+ XSERVER_PID=$!
+ export DISPLAY=:99
+ sleep 3
+ dbus-run-session -- bash -c '
+ export DISPLAY=:99
+ LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketimeMT.so.1 FAKETIME="@2026-01-01 00:00:00" bash -c "$PANEL_CMD" &
+ PANEL_PID=$!
+ sleep "$PANEL_WARMUP"
+ DISPLAY="$TEST_DISPLAY" pnpm run test:visual
+ EXIT=$?
+ kill $PANEL_PID 2>/dev/null || true
+ exit $EXIT
+ '
+ EXIT=$?
+ kill $XSERVER_PID 2>/dev/null || true
+ exit $EXIT
+ - name: Upload artifacts
+ if: always()
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
+ with:
+ name: visual-${{ matrix.key }}
+ path: test-results/visual/
+ if-no-files-found: warn
+ retention-days: 14
+
+ linux-wayland:
+ name: Visual [${{ matrix.label }}]
+ runs-on: ubuntu-24.04
+ permissions:
+ contents: read
+ continue-on-error: ${{ matrix.experimental || false }}
+ strategy:
+ fail-fast: false
+ # Hyprland is not in this matrix. Investigation summary (see PR #10):
+ # - v0.42+ uses Aquamarine, whose allocator hardcodes GBM and has no
+ # software fallback (Backend.cpp:160-176, TODO open since 2024).
+ # - v0.41.2 (last wlroots release) asserts wlr_renderer_is_gles2(),
+ # rejecting wlroots' Pixman fallback when no DRM render node exists.
+ # - GHA ubuntu-24.04 ships /dev/dri/card1 (hyperv_drm) but that driver
+ # is modeset-only — no GBM, so wlroots can't create GLES2 against it.
+ # - vkms (Virtual KMS) is not in the linux-azure kernel modules.
+ # Sway already covers wlroots+Waybar+SNI on this matrix; Hyprland would
+ # need either self-hosted runners with real GPU or KVM nested virt.
+ matrix:
+ include:
+ - de: sway
+ label: Linux (Sway/Waybar)
+ key: linux-sway
+ apt: sway waybar grim
+ steps:
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ with:
+ persist-credentials: false
+ - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
+ - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
+ with:
+ node-version-file: .node-version
+ cache: pnpm
+ - name: Install dependencies
+ shell: bash
+ run: |
+ for attempt in 1 2 3; do
+ if pnpm install --frozen-lockfile && node node_modules/electron/install.js && node -e "require('electron')" >/dev/null 2>&1; then exit 0; fi
+ echo "::warning::install/electron-binary attempt $attempt failed; retrying..."
+ rm -rf node_modules/electron 2>/dev/null || true
+ sleep $((attempt * 5))
+ done
+ exit 1
+ - name: Build library
+ run: pnpm run build
+ - name: Install Wayland compositor
+ env:
+ APT_PACKAGES: ${{ matrix.apt }}
+ run: |
+ sudo apt-get update -qq
+ sudo apt-get install -y --no-install-recommends \
+ dbus-x11 \
+ libgtk-3-0 libnss3 libxss1 libasound2t64 \
+ libgbm1 libatk-bridge2.0-0 libdrm2 \
+ libxtst6 libnotify4 libxrandr2 \
+ libxcomposite1 libxdamage1 libxfixes3 libcups2 \
+ libayatana-appindicator3-1 libdbusmenu-glib4 \
+ $APT_PACKAGES
+ - name: Configure Waybar
+ run: |
+ mkdir -p ~/.config/waybar
+ cat > ~/.config/waybar/config.jsonc <<'EOF'
+ {
+ "layer": "top",
+ "position": "top",
+ "height": 32,
+ "modules-right": ["tray"],
+ "tray": { "icon-size": 22, "spacing": 10 }
+ }
+ EOF
+ cat > ~/.config/waybar/style.css <<'EOF'
+ * { font-family: sans-serif; font-size: 14px; }
+ window#waybar { background: #222; color: #fff; }
+ EOF
+ - name: Configure Sway
+ if: matrix.de == 'sway'
+ run: |
+ mkdir -p ~/.config/sway
+ cat > ~/.config/sway/config <<'EOF'
+ output HEADLESS-1 resolution 1920x1080 position 0,0
+ # Sway tiles every window by default, so our 200x100 fixture
+ # gets expanded to fill the whole workspace. Match by HTML
+ #
and force floating + explicit size so it renders at
+ # its real dimensions. We deliberately do NOT pin a position:
+ # native Wayland gives the app no control over placement, so
+ # the compositor decides where the popover lands. Forcing a
+ # position here would paper over the very limitation this job
+ # exists to exercise.
+ for_window [title="menubar visual fixture"] floating enable, resize set 200 100
+ exec waybar
+ EOF
+ - name: Run visual test under ${{ matrix.de }}
+ env:
+ VISUAL_KEY: ${{ matrix.key }}
+ VISUAL_LABEL: ${{ matrix.label }}
+ VISUAL_POST_READY_DELAY_MS: ${{ matrix.post_ready_delay || 8000 }}
+ DE: ${{ matrix.de }}
+ run: |
+ set -x
+ export XDG_RUNTIME_DIR=/tmp/xdg-runtime
+ mkdir -p "$XDG_RUNTIME_DIR"
+ chmod 700 "$XDG_RUNTIME_DIR"
+ COMP_ENV="WLR_BACKENDS=headless WLR_HEADLESS_OUTPUTS=1 WLR_LIBINPUT_NO_DEVICES=1"
+ COMP_CMD="sway"
+ dbus-run-session -- bash -c "
+ export XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR
+ env $COMP_ENV $COMP_CMD &
+ COMP_PID=\$!
+ sleep 8
+ export WAYLAND_DISPLAY=wayland-1
+ pnpm run test:visual
+ EXIT=\$?
+ kill \$COMP_PID 2>/dev/null || true
+ exit \$EXIT
+ "
+ - name: Upload artifacts
+ if: always()
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
+ with:
+ name: visual-${{ matrix.key }}
+ path: test-results/visual/
+ if-no-files-found: warn
+ retention-days: 14
+
+ windows:
+ name: Visual [${{ matrix.label }}]
+ runs-on: ${{ matrix.runner }}
+ permissions:
+ contents: read
+ continue-on-error: ${{ matrix.experimental || false }}
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - runner: windows-2022
+ label: Windows Server 2022
+ key: windows-2022
+ - runner: windows-2025
+ label: Windows Server 2025
+ key: windows-2025
+ steps:
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ with:
+ persist-credentials: false
+ - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
+ - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
+ with:
+ node-version-file: .node-version
+ cache: pnpm
+ - name: Install dependencies
+ shell: bash
+ run: |
+ for attempt in 1 2 3; do
+ if pnpm install --frozen-lockfile && node node_modules/electron/install.js && node -e "require('electron')" >/dev/null 2>&1; then exit 0; fi
+ echo "::warning::install/electron-binary attempt $attempt failed; retrying..."
+ rm -rf node_modules/electron 2>/dev/null || true
+ sleep $((attempt * 5))
+ done
+ exit 1
+ - name: Build library
+ run: pnpm run build
+ - name: Set EnableAutoTray=0 (legacy Win10/2022 path, best-effort)
+ shell: pwsh
+ continue-on-error: true
+ run: |
+ Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer' -Name 'EnableAutoTray' -Value 0 -Type DWord -ErrorAction SilentlyContinue
+ taskkill /F /IM explorer.exe 2>$null; Start-Process explorer; Start-Sleep -Seconds 5
+ - name: Run visual test
+ env:
+ VISUAL_KEY: ${{ matrix.key }}
+ VISUAL_LABEL: ${{ matrix.label }}
+ # Longer settle than the 3000ms default: the frameless fixture
+ # window is shown at screen-center then moved to (400,200), and
+ # on the slower Windows runners the capture could land before the
+ # move fully settled, shifting the painted window a few px between
+ # runs (a real but cosmetic diff that churned windows-2025).
+ VISUAL_POST_READY_DELAY_MS: '6000'
+ VISUAL_PREPARE_CMD: |
+ Get-ChildItem 'HKCU:\Control Panel\NotifyIconSettings' -ErrorAction SilentlyContinue | ForEach-Object { Set-ItemProperty -Path $_.PSPath -Name IsPromoted -Value 1 -Type DWord -Force };
+ Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced' -Name HideClock -Value 1 -Type DWord -Force -ErrorAction SilentlyContinue;
+ Set-Service -Name w32time -StartupType Disabled -ErrorAction SilentlyContinue;
+ Stop-Service -Name w32time -Force -ErrorAction SilentlyContinue;
+ Set-Date -Date '2026-01-01 00:00:00' -ErrorAction SilentlyContinue;
+ Stop-Process -Name notepad -Force -ErrorAction SilentlyContinue;
+ Stop-Process -Name explorer -Force -ErrorAction SilentlyContinue;
+ Start-Process explorer;
+ Start-Sleep -Seconds 10
+ run: pnpm run test:visual
+ - name: Upload artifacts
+ if: always()
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
+ with:
+ name: visual-${{ matrix.key }}
+ path: test-results/visual/
+ if-no-files-found: warn
+ retention-days: 14
+
+ update-platforms:
+ name: Update PLATFORMS visual table
+ needs: [macos, linux, linux-wayland, windows]
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ pull-requests: write
+ steps:
+ - name: Checkout
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ with:
+ persist-credentials: false
+ - name: Setup Node.js
+ uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
+ with:
+ node-version-file: .node-version
+ - name: Download all visual artifacts
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
+ with:
+ pattern: visual-*
+ merge-multiple: true
+ path: test-results/visual
+ - name: Install ImageMagick
+ run: sudo apt-get update -qq && sudo apt-get install -y --no-install-recommends imagemagick
+ - name: Sync screenshots into repo
+ # Refresh a committed screenshot only when the new capture differs
+ # by more pixels than run-to-run cosmetic noise can explain.
+ # The saved PNG is masked to the tray + window rects but keeps
+ # pixels at their absolute screen coordinates, so when the OS places
+ # the tray icon a few pixels off between runs (the macOS menu bar
+ # relayout shifts the status item ~9px; Windows promotes the notify
+ # icon inconsistently) the identical icon diffs against the committed
+ # copy. Measured across recent refreshes this cosmetic churn reaches
+ # ~1700px, and the window's rounded-corner anti-aliasing adds more. A
+ # budget of 100 tripped on every push and opened an empty PR. 5000
+ # clears the cosmetic ceiling while staying far below any real
+ # rendering change. Regression detection does not rely on this gate:
+ # run.mts fails CI when the tray or window is not painted, and the
+ # status column is regenerated from the run JSON every push, so a
+ # real failure still surfaces even when the reference image is kept.
+ env:
+ DIFF_BUDGET: '5000'
+ FUZZ: 2%
+ run: |
+ mkdir -p .github/visual-screenshots
+ for new in test-results/visual/*.png; do
+ [ -e "$new" ] || continue
+ name=$(basename "$new")
+ cur=".github/visual-screenshots/$name"
+ if [ ! -f "$cur" ]; then
+ echo "$name: new platform -> add"
+ cp "$new" "$cur"
+ continue
+ fi
+ # AE prints the differing-pixel count, optionally followed by
+ # a normalized value in parentheses ("256 (0.00032)"). Keep the
+ # leading integer; anything else (error text, empty) -> update.
+ raw=$(compare -metric AE -fuzz "$FUZZ" "$cur" "$new" null: 2>&1 || true)
+ diff_px=${raw%%[!0-9]*}
+ case "$diff_px" in
+ '' | *[!0-9]*)
+ echo "$name: compare error or dimension change ($raw) -> update"
+ cp "$new" "$cur" ;;
+ *)
+ if [ "$diff_px" -gt "$DIFF_BUDGET" ]; then
+ echo "$name: $diff_px px changed (> $DIFF_BUDGET) -> update"
+ cp "$new" "$cur"
+ else
+ echo "$name: $diff_px px changed (<= $DIFF_BUDGET) -> keep committed"
+ fi ;;
+ esac
+ done
+ ls -la .github/visual-screenshots/
+ - name: Regenerate visual block
+ run: node tests/visual/update-platforms.mts
+ - name: Open PR if changed
+ uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
+ with:
+ commit-message: "docs: refresh visual tray rendering table"
+ title: "docs: refresh visual tray rendering table"
+ body: |
+ Auto-generated update to `PLATFORMS.md` from the latest visual tray rendering run on `main`.
+
+ Source: [Visual Tray workflow run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}).
+ branch: chore/update-visual-platforms-table
+ base: main
+ delete-branch: true
+ add-paths: |
+ PLATFORMS.md
+ .github/visual-screenshots/*.png
+ sign-commits: true
diff --git a/.gitignore b/.gitignore
index b34e7c6c..42be6f2b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,5 @@ lib
dist
*.app
*.log
+test-results
+playwright-report
diff --git a/.node-version b/.node-version
new file mode 100644
index 00000000..ca5c3500
--- /dev/null
+++ b/.node-version
@@ -0,0 +1 @@
+24.18.0
diff --git a/.nvmrc b/.nvmrc
deleted file mode 100644
index 209e3ef4..00000000
--- a/.nvmrc
+++ /dev/null
@@ -1 +0,0 @@
-20
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
new file mode 100644
index 00000000..ef408f5b
--- /dev/null
+++ b/.release-please-manifest.json
@@ -0,0 +1,3 @@
+{
+ ".": "10.1.1"
+}
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index 699ed733..99e2f7dd 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -1,3 +1,3 @@
{
- "recommendations": ["biomejs.biome"]
+ "recommendations": ["oxc.oxc-vscode"]
}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 66b252e9..1c00d9d4 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,8 +1,6 @@
{
"editor.codeActionsOnSave": {
- "source.fixAll.eslint": "explicit",
- "source.organizeImports.biome": "explicit",
- "quickfix.biome": "explicit"
+ "source.fixAll.oxc": "explicit"
},
- "editor.defaultFormatter": "biomejs.biome"
+ "editor.defaultFormatter": "oxc.oxc-vscode"
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 27727a68..8bea6ae8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,129 @@
# Changelog
-All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+All notable changes to this project will be documented in this file. Releases are managed by [release-please](https://github.com/googleapis/release-please) from [Conventional Commits](https://www.conventionalcommits.org/).
+
+## [10.1.1](https://github.com/gitify-app/electron-menubar/compare/v10.1.0...v10.1.1) (2026-07-02)
+
+
+### Bug Fixes
+
+* correct repository url to electron-menubar for npm provenance ([#93](https://github.com/gitify-app/electron-menubar/issues/93)) ([eaa131c](https://github.com/gitify-app/electron-menubar/commit/eaa131c6ee78c737d35eaa24c25149faa0e2204f))
+
+## [10.1.0](https://github.com/gitify-app/electron-menubar/compare/v10.0.2...v10.1.0) (2026-07-02)
+
+
+### Features
+
+* Add CODEOWNERS file ([2fcd1a6](https://github.com/gitify-app/electron-menubar/commit/2fcd1a63751c6e9a601723dbd23398a502957efb))
+* Add CODEOWNERS file ([#55](https://github.com/gitify-app/electron-menubar/issues/55)) ([ad00cfd](https://github.com/gitify-app/electron-menubar/commit/ad00cfd40afa3a08f682c91556c71e3c5965d69f))
+* handle and document Wayland window positioning limitation ([#72](https://github.com/gitify-app/electron-menubar/issues/72)) ([25adf80](https://github.com/gitify-app/electron-menubar/commit/25adf8090c520f85dc755b7351f04250dc306cbb))
+* onboard fork to renovate ([#54](https://github.com/gitify-app/electron-menubar/issues/54)) ([209c31f](https://github.com/gitify-app/electron-menubar/commit/209c31f19787953eb092fd234b02fbdf7d2d4c87))
+
+
+### Build
+
+* upgrade @playwright/test to 1.60 and typescript to 6.0 ([#51](https://github.com/gitify-app/electron-menubar/issues/51)) ([da64d7e](https://github.com/gitify-app/electron-menubar/commit/da64d7e319596400402021076ffbd55eb3936321))
+
+
+### Documentation
+
+* reformat API documentation as tables ([#70](https://github.com/gitify-app/electron-menubar/issues/70)) ([d1ad936](https://github.com/gitify-app/electron-menubar/commit/d1ad9367ef77240f1436b8ef069478e3b5ae01bc))
+* refresh readme ([#66](https://github.com/gitify-app/electron-menubar/issues/66)) ([45723b5](https://github.com/gitify-app/electron-menubar/commit/45723b527b1ec58d0fb56b3f73babb367514da99))
+* refresh visual tray rendering table ([#91](https://github.com/gitify-app/electron-menubar/issues/91)) ([311145b](https://github.com/gitify-app/electron-menubar/commit/311145ba28627fdd476e087cbf5eb167fa5bec7c))
+* Update installation command from bun to pnpm ([#56](https://github.com/gitify-app/electron-menubar/issues/56)) ([2afa208](https://github.com/gitify-app/electron-menubar/commit/2afa2082e70accc6a47cbff25d977f96f7354369))
+* update repo urls ([#71](https://github.com/gitify-app/electron-menubar/issues/71)) ([45b6bdf](https://github.com/gitify-app/electron-menubar/commit/45b6bdf9f967932785b2ff7a174e9f4496fc9033))
+
+## [10.0.2](https://github.com/gitify-app/menubar/compare/v10.0.1...v10.0.2) (2026-06-04)
+
+
+### CI
+
+* publish to npm via OIDC trusted publishing ([#49](https://github.com/gitify-app/menubar/issues/49)) ([8b31270](https://github.com/gitify-app/menubar/commit/8b31270f57c122375cb99d44c6bc12bb92fe3d8e))
+
+## [10.0.1](https://github.com/gitify-app/menubar/compare/v10.0.0...v10.0.1) (2026-06-04)
+
+
+### Bug Fixes
+
+* position window beside tray on left taskbars ([#15](https://github.com/gitify-app/menubar/issues/15)) ([05fdfba](https://github.com/gitify-app/menubar/commit/05fdfba196bdb6157a74455e565b964c56e56c99))
+* reposition window on resize so setSize doesn't clip under taskbar ([#7](https://github.com/gitify-app/menubar/issues/7)) ([ad07479](https://github.com/gitify-app/menubar/commit/ad07479e6035d951b9f903028e92ab426b2bceb1))
+* **visual:** make sway respect window size and stop GNOME painting it blue ([#34](https://github.com/gitify-app/menubar/issues/34)) ([03f4b78](https://github.com/gitify-app/menubar/commit/03f4b785f9d6a534f11b3c1a3bb7f8397e0fc886))
+* **visual:** stop fixture window from covering Linux bottom panels ([#32](https://github.com/gitify-app/menubar/issues/32)) ([a0c0890](https://github.com/gitify-app/menubar/commit/a0c0890bb02c4e77c23e6d8fd67f403e240b3041))
+* **visual:** stop MinimizeAll from hiding our menubar window on Windows ([#26](https://github.com/gitify-app/menubar/issues/26)) ([1aab5fd](https://github.com/gitify-app/menubar/commit/1aab5fd899cebf4123a8fb6eacc0b536c3e95b2d))
+
+
+### Refactor
+
+* rename package to electron-menubar and slim published bundle ([#41](https://github.com/gitify-app/menubar/issues/41)) ([ce3b40c](https://github.com/gitify-app/menubar/commit/ce3b40c7c3fd15bbcbdbd7e73984cee242d67f3e))
+
+
+### Build
+
+* migrate package manager from bun to pnpm ([#40](https://github.com/gitify-app/menubar/issues/40)) ([f5791f3](https://github.com/gitify-app/menubar/commit/f5791f3f61db1d78c1bc194ed5d7f42e1bf330bb))
+* pin vite-plus toolchain and bump electron dev dependency ([#47](https://github.com/gitify-app/menubar/issues/47)) ([c8ab465](https://github.com/gitify-app/menubar/commit/c8ab46546cba524ea50cb725cc4632b150b8ac47))
+
+
+### CI
+
+* migrate from standard-version to release-please ([#43](https://github.com/gitify-app/menubar/issues/43)) ([ebda924](https://github.com/gitify-app/menubar/commit/ebda924bef7f02fd30a216ca2cf2a3a31c4f8cc3))
+* **visual:** cache apt packages for heavy Linux DEs ([#29](https://github.com/gitify-app/menubar/issues/29)) ([f2ddd8e](https://github.com/gitify-app/menubar/commit/f2ddd8ec1ae0c8d2d80b66b0d640727d03706957))
+* **visual:** commit screenshots and link them as collapsibles in PLATFORMS.md ([#18](https://github.com/gitify-app/menubar/issues/18)) ([b58b028](https://github.com/gitify-app/menubar/commit/b58b028572a50e29eefe179060625da9f53c0bf9))
+* **visual:** mark linux-gnome experimental until Mutter blue-paint is fixed ([#36](https://github.com/gitify-app/menubar/issues/36)) ([47a855d](https://github.com/gitify-app/menubar/commit/47a855d0c098bc79f03f4e1af59e653c110b5c67))
+* **visual:** pin time on screenshots to remove clock-driven diff noise ([#22](https://github.com/gitify-app/menubar/issues/22)) ([d06293d](https://github.com/gitify-app/menubar/commit/d06293d06c60fb2d2768ba4bd8efccbe68291a20))
+* **visual:** raise screenshot diff budget to stop empty churn PRs ([#48](https://github.com/gitify-app/menubar/issues/48)) ([3aff2ab](https://github.com/gitify-app/menubar/commit/3aff2ab1a3163612103abac6498ecdb3d4e57d5c))
+* **visual:** real per-platform clock suppression (v2) ([#25](https://github.com/gitify-app/menubar/issues/25)) ([cf87380](https://github.com/gitify-app/menubar/commit/cf873807db1ca702e4bd23884278803c4a755e29))
+* **visual:** stop churn PRs from non-deterministic tray screenshots ([#39](https://github.com/gitify-app/menubar/issues/39)) ([04cd05f](https://github.com/gitify-app/menubar/commit/04cd05f87cba119ec465407df8fae36b124b182d))
+
+
+### Documentation
+
+* drop manually maintained legacy platform tables from PLATFORMS.md ([#21](https://github.com/gitify-app/menubar/issues/21)) ([335fea4](https://github.com/gitify-app/menubar/commit/335fea41e8051da98c296c28bdc4744bb8ae59ec))
+* refresh visual tray rendering table ([#17](https://github.com/gitify-app/menubar/issues/17)) ([5029d7b](https://github.com/gitify-app/menubar/commit/5029d7bdfc58a405c583539e563f6b6d330c2e74))
+* refresh visual tray rendering table ([#19](https://github.com/gitify-app/menubar/issues/19)) ([0859faf](https://github.com/gitify-app/menubar/commit/0859faff4069a84308f96a2a8ea57c0df3520e9d))
+* refresh visual tray rendering table ([#20](https://github.com/gitify-app/menubar/issues/20)) ([267d037](https://github.com/gitify-app/menubar/commit/267d0374b9f0bc36f6abd44a6fd1147ee0ef2bdc))
+* refresh visual tray rendering table ([#23](https://github.com/gitify-app/menubar/issues/23)) ([3b69182](https://github.com/gitify-app/menubar/commit/3b69182054867bb1e3826bdb3a91122df8690093))
+* refresh visual tray rendering table ([#27](https://github.com/gitify-app/menubar/issues/27)) ([c8f74e4](https://github.com/gitify-app/menubar/commit/c8f74e4c0118d4504fe74fa4397c4afc7829b013))
+* refresh visual tray rendering table ([#30](https://github.com/gitify-app/menubar/issues/30)) ([dd0dd27](https://github.com/gitify-app/menubar/commit/dd0dd27c920eda188bf04f5d3a8016895a74c363))
+* refresh visual tray rendering table ([#33](https://github.com/gitify-app/menubar/issues/33)) ([3fed6a3](https://github.com/gitify-app/menubar/commit/3fed6a3a03c175312c959b7ff1133fa363595e56))
+* refresh visual tray rendering table ([#35](https://github.com/gitify-app/menubar/issues/35)) ([5aef134](https://github.com/gitify-app/menubar/commit/5aef13404be514416cb967349817562ebf24972c))
+* refresh visual tray rendering table ([#37](https://github.com/gitify-app/menubar/issues/37)) ([3aad2cd](https://github.com/gitify-app/menubar/commit/3aad2cddd78101ab521dcbadf3b024dfe6ac69f7))
+* refresh visual tray rendering table ([#38](https://github.com/gitify-app/menubar/issues/38)) ([6ce09d6](https://github.com/gitify-app/menubar/commit/6ce09d69823bf1e76a278da27fc4e96ab0bd44ba))
+* refresh visual tray rendering table ([#42](https://github.com/gitify-app/menubar/issues/42)) ([c757166](https://github.com/gitify-app/menubar/commit/c7571661a62de918e3385193c84cbe89f91aa510))
+
+## [10.0.0](https://github.com/gitify-app/menubar/compare/v9.5.2...v10.0.0) (2026-05-11)
+
+First release under the `@gitify/menubar` scope. This is a hard fork of [`menubar`](https://github.com/maxogden/menubar), now independently maintained by the Gitify team with its own roadmap, release cadence, and toolchain. New package name, new repository, new owners.
+
+### Rebrand
+
+* Renamed package from `menubar` to `@gitify/menubar` ([#2](https://github.com/gitify-app/menubar/issues/2))
+* Repository moved to [`gitify-app/menubar`](https://github.com/gitify-app/menubar)
+* Default branch renamed from `master` to `main` ([#3](https://github.com/gitify-app/menubar/issues/3))
+
+### Features
+
+* Import menubar patterns from Gitify: `hideOnClose`, `contextMenu`, `globalShortcut`, plus helpers ([#13](https://github.com/gitify-app/menubar/pull/13))
+* Add `trigger` option for tray event binding ([#6](https://github.com/gitify-app/menubar/pull/6))
+* Add `destroy()` method for tearing down a menubar instance ([#5](https://github.com/gitify-app/menubar/pull/5))
+
+### Refactor
+
+* Inline `Positioner` and drop the `electron-positioner` dependency ([#12](https://github.com/gitify-app/menubar/pull/12))
+
+### Build
+
+* Migrate toolchain to bun + Vite+ ([#4](https://github.com/gitify-app/menubar/pull/4))
+* Ship dual ESM/CJS output with separate type declarations
+* Modernize `tsconfig.json` to ES2022 with bundler resolution
+* Switch lint/format from biome to oxlint + oxfmt via `vp check`
+* Replace jest with vitest
+
+### CI
+
+* E2E matrix smoke tests with auto-updating `PLATFORMS.md` ([#8](https://github.com/gitify-app/menubar/pull/8))
+* Visual tray rendering matrix across macOS, Linux DEs, and Windows ([#10](https://github.com/gitify-app/menubar/pull/10))
+* Publish workflow for npm releases on tag push
+* PR title validation against Conventional Commits
### [9.5.2](https://github.com/maxogden/menubar/compare/v9.5.1...v9.5.2) (2025-10-10)
diff --git a/COLLABORATORS.md b/COLLABORATORS.md
deleted file mode 100644
index 924d0099..00000000
--- a/COLLABORATORS.md
+++ /dev/null
@@ -1,14 +0,0 @@
-## Collaborators
-
-menubar is only possible due to the excellent work of the following collaborators:
-
-
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 7bdd9e43..3b9e1c54 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -18,7 +18,11 @@ Thanks!
## Releases
-- commit your changes
-- `npm version `
-- `git push && git push --tags` (or `git push` with `git config --global push.followTags true` on latest git)
-- `npm publish`
+Releases are automated with [release-please](https://github.com/googleapis/release-please) and driven entirely from [Conventional Commits](https://www.conventionalcommits.org/) on `main`:
+
+1. Merge PRs into `main` with Conventional Commit titles (`feat:`, `fix:`, `refactor:`, etc.). PR titles are validated in CI.
+2. release-please opens and maintains a "release" PR that bumps the version in `package.json`, updates `CHANGELOG.md`, and proposes the next [semver](https://semver.org/) version.
+3. Merge that release PR when ready. release-please then tags the release (`vX.Y.Z`) and creates the GitHub release.
+4. The tagged release triggers the publish workflow, which builds the library and publishes it to npm with provenance.
+
+No manual version bumping or `npm publish` is required.
diff --git a/LICENSE b/LICENSE
index b9d8aae5..e2047547 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,7 @@
BSD 2-Clause License
Copyright (c) 2015-2019, Max Ogden
+Copyright (c) 2026-present, Gitify
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/PLATFORMS.md b/PLATFORMS.md
new file mode 100644
index 00000000..c1855bba
--- /dev/null
+++ b/PLATFORMS.md
@@ -0,0 +1,50 @@
+# Platforms where `menubar` is known to work
+
+
+
+_Continuously verified by [E2E smoke tests](.github/workflows/e2e.yml)._
+
+| Platform | Status |
+| -------- | ------ |
+| macOS 14 (Sonoma) | ✅ Pass |
+| macOS 15 (Sequoia) | ✅ Pass |
+| macOS 26 (Tahoe) | ✅ Pass |
+| Ubuntu 22.04 | ✅ Pass |
+| Ubuntu 24.04 | ✅ Pass |
+| Windows Server 2022 | ✅ Pass |
+| Windows Server 2025 | ✅ Pass |
+
+
+
+
+
+_Continuously verified by [visual tray rendering tests](.github/workflows/visual-tray.yml). Each run boots the menubar fixture, screenshots the OS panel, and asserts both the tray icon and the popover window are painted. These checks confirm rendering, not tray-anchored placement. See [Window positioning on Linux](#window-positioning-on-linux)._
+
+| Platform | Tray + Window | Screenshot |
+| -------- | ------------- | ---------- |
+| Linux (Budgie) | ✅ Pass | view

|
+| Linux (Cinnamon) | ✅ Pass | view

|
+| Linux (GNOME) | ✅ Pass | view

|
+| Linux (KDE Plasma) | ✅ Pass | view

|
+| Linux (LXQt) | ✅ Pass | view

|
+| Linux (MATE) | ✅ Pass | view

|
+| Linux (Sway/Waybar) | ✅ Pass | view

|
+| Linux (Tint2) | ✅ Pass | view

|
+| Linux (Xfce) | ✅ Pass | view

|
+| macOS 14 (Sonoma) | ✅ Pass | view

|
+| macOS 15 (Sequoia) | ✅ Pass | view

|
+| macOS 26 (Tahoe) | ✅ Pass | view

|
+| Windows Server 2022 | ✅ Pass | view

|
+| Windows Server 2025 | ✅ Pass | view

|
+
+
+
+## Window positioning on Linux
+
+The checks above confirm that the tray icon and popover window render. They do **not** assert that the popover is positioned next to the tray icon.
+
+On **native Wayland**, tray-anchored positioning is not possible, and there is nothing the library can do about it. Two protocol limitations stack up: an application cannot set the position of its own window (`setPosition` is a no-op, `getPosition` reads back `[0, 0]`), and the tray icon, hosted by the panel via StatusNotifierItem, reports no coordinates. The compositor decides where the popover appears, which is usually the center of the screen. `menubar` logs a one-time warning when it detects the window could not be positioned.
+
+Under **X11 / XWayland**, an application can position its own window, so the popover is placed where `menubar` computes it. (Some Linux panels still report no tray-icon coordinates over StatusNotifierItem, in which case the window falls back to a screen corner rather than sitting exactly under the icon.)
+
+If a Wayland session places the popover in the wrong spot, running under XWayland with `--ozone-platform=x11` restores positioning.
diff --git a/README.md b/README.md
index 3aef2596..f4d9df52 100644
--- a/README.md
+++ b/README.md
@@ -1,32 +1,30 @@
-
-[](https://www.npmjs.com/package/menubar)
-
-
-
+[![CI Workflow][ci-workflow-badge]][github-actions] [![Release Workflow][release-workflow-badge]][github-actions] [![Renovate enabled][renovate-badge]][renovate] [![Contributors][contributors-badge]][github] [![Downloads - Year][downloads-badge]][npmjs] [![OSS License][license-badge]][license] [![NPM Latest Version][npmjs-version-badge]][npmjs] [![Latest Release][github-release-badge]][github-releases] ![Libraries.io dependency status for GitHub repo][librariesio-badge] ![npm minzipped bundle size][size-minzip-badge] ![npm minified bundle size][size-minified-badge]
-
+
-➖ Menubar
+➖ electron-menubar
+formerly known as menubar
High level way to create menubar desktop applications with Electron.
-
+
-This module provides boilerplate for setting up a menubar application using Electron. All you have to do is point it at your `index.html` and `menubar` will handle the rest.
+## Features
-✅ Only one dependency, and one peer-dependency.
-
-✅ Works on macOS, Windows and most Linuxes. See [details](./WORKING_PLATFORMS.md).
-
-✅ 💥 [**3.6kB minified + gzipped**](https://bundlephobia.com/result?p=menubar) 💥
+- ⚡️ Quick start for creating menubar applications using Electron.
+- 🚀 Zero runtime dependencies.
+- 💻 Works on macOS, Windows and *most* Linux distributions. See [tested platforms][platforms].
|
|
|
|
| :-----------------------------------------------------------: | :--------------------------------------------------------: | :------------------------------------------------------: |
-| macOS Mojave 10.14 | Windows 10 | Ubuntu 18.04 |
+| macOS | Windows 10 | Ubuntu |
+
+> [!NOTE]
+> On native Wayland, the desktop compositor controls window placement, so the popover cannot be anchored to the tray icon and is positioned by the desktop (usually centered). This is a Wayland limitation, not something the library can override. Tray-relative positioning works under X11/XWayland. See [window positioning on Linux][platforms] for the detail and a workaround.
## Installation
```bash
-yarn add menubar
+pnpm add electron-menubar
```
## Usage
@@ -34,7 +32,7 @@ yarn add menubar
Starting with your own new project, run these commands:
```bash
-$ yarn add menubar
+$ pnpm add electron-menubar
$ touch myApp.js
$ touch index.html
```
@@ -42,7 +40,7 @@ $ touch index.html
Fill `index.html` with some HTML, and `myApp.js` like this:
```javascript
-const { menubar } = require('menubar');
+const { menubar } = require('electron-menubar');
const mb = menubar();
@@ -58,80 +56,128 @@ Then use `electron` to run the app:
$ electron myApp.js
```
-Alternatively, see [`examples/hello-world`](/examples/hello-world) folder for a simple working example.
+## Examples
-## `Menubar` Class
+See [`examples`][examples] folder for a selection of working examples.
-The return value of `menubar()` is a `Menubar` class instance, which has these properties:
-- `app`: the [Electron App](https://electronjs.org/docs/api/app) instance,
-- `window`: the [Electron Browser Window](https://electronjs.org/docs/api/browser-window) instance,
-- `tray`: the [Electron Tray](https://electronjs.org/docs/api/tray) instance,
-- `positioner`: the [Electron Positioner](https://github.com/jenslind/electron-positioner) instance,
-- `setOption(option, value)`: change an option after menubar is created,
-- `getOption(option)`: get an menubar option,
-- `showWindow()`: show the menubar window,
-- `hideWindow()`: hide the menubar window
+## API Documentation
-See the reference [API docs](./docs/classes/_menubar_.menubar.md).
+### `Menubar` Class
-## `menubar()` Options
+The return value of `menubar()` is a `Menubar` class instance, which exposes the following properties and methods.
-You can pass an optional options object into the `menubar({ ... })` function:
+#### Properties
-- `dir` (default `process.cwd()`) - the app source directory
-- `index` (default `file:// + opts.dir + index.html`) - The URL to load the menubar's browserWindow with. The url can be a remote address (e.g. `http://`) or a path to a local HTML file using the `file://` protocol.
-- `browserWindow` - BrowserWindow options to be passed to the BrowserWindow constructor, see [Electron docs](https://electronjs.org/docs/api/browser-window#new-browserwindowoptions). Some interesting fields to passed down are:
- - `x` (default `undefined`) - the x position of the window
- - `y` (default `undefined`) - the y position of the window
- - `width` (default 400) - window width
- - `height` (default 400) - window height
- - `alwaysOnTop` (default false) - if true, the window will not hide on blur
-- `icon` (default `opts.dir + IconTemplate.png`) - the png icon to use for the menubar. A good size to start with is 20x20. To support retina, supply a 2x sized image (e.g. 40x40) with `@2x` added to the end of the name, so `icon.png` and `icon@2x.png` and Electron will automatically use your `@2x` version on retina screens.
-- `tooltip` (default empty) - menubar tray icon tooltip text
-- `tray` (default created on-the-fly) - an electron `Tray` instance. if provided `opts.icon` will be ignored
-- `preloadWindow` (default false) - Create [BrowserWindow](https://electronjs.org/docs/api/browser-window#new-browserwindowoptions) instance before it is used -- increasing resource usage, but making the click on the menubar load faster.
-- `loadUrlOptions` - (default undefined) The options passed when loading the index URL in the menubar's browserWindow. Everything browserWindow.loadURL supports is supported; this object is simply passed onto [browserWindow.loadURL](https://electronjs.org/docs/api/browser-window#winloadurlurl-options)
-- `showOnAllWorkspaces` (default true) - Makes the window available on all OS X workspaces.
-- `windowPosition` (default trayCenter and trayBottomCenter on Windows) - Sets the window position (x and y will still override this), check [positioner docs](https://github.com/jenslind/electron-positioner#docs) for valid values.
-- `showDockIcon` (default false) - Configure the visibility of the application dock icon.
-- `showOnRightClick` (default false) - Show the window on 'right-click' event instead of regular 'click'
-
-See the reference [API docs](./docs/interfaces/_types_.options.md).
-
-## Events
+| Property | Description |
+| --- | --- |
+| `app` | The [Electron App][electron-docs-app] instance. |
+| `window` | The [Electron Browser Window][electron-docs-browserwindow] instance. |
+| `tray` | The [Electron Tray][electron-docs-tray] instance. |
+| `positioner` | The `Positioner` instance used to compute the window's on-screen coordinates. |
-The `Menubar` class is an event emitter:
+#### Methods
-- `ready` - when `menubar`'s tray icon has been created and initialized, i.e. when `menubar` is ready to be used. Note: this is different than Electron app's `ready` event, which happens much earlier in the process
-- `create-window` - the line before `new BrowserWindow()` is called
-- `before-load` - after create window, before loadUrl (can be used for `require("@electron/remote/main").enable(webContents)`)
-- `after-create-window` - the line after all window init code is done and url was loaded
-- `show` - the line before `window.show()` is called
-- `after-show` - the line after `window.show()` is called
-- `hide` - the line before `window.hide()` is called (on window blur)
-- `after-hide` - the line after `window.hide()` is called
-- `after-close` - after the `.window` (BrowserWindow) property has been deleted
-- `focus-lost` - emitted if always-on-top option is set and the user clicks away
+| Method | Description |
+| --- | --- |
+| `setOption(option, value)` | Change an option after menubar is created. |
+| `getOption(option)` | Get a menubar option. |
+| `showWindow()` | Show the menubar window. |
+| `hideWindow()` | Hide the menubar window. |
+| `toggleWindow()` | Show the window if hidden, hide it if visible. |
+| `recenterOnTray()` | Re-center the window over the tray icon. |
+| `setContextMenu(menu)` | Replace the tray context menu (auto-re-publishes on Linux). |
+| `setGlobalShortcut(accelerator)` | Register a global accelerator that toggles the window. Returns `false` on registration failure. |
+| `destroy()` | Tear down the menubar instance. |
+| `isDestroyed()` | Whether the menubar is currently destroyed. |
-## Compatibility with Electron
+### `menubar()` Options
-| menubar | Electron | Notes |
-| -------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
-| 9.x.x | >= 9.x.x <= 34.x.x | |
-| 8.x.x | 8.x.xx | |
-| 7.x.x | 7.x.xx | |
-| 6.x.x | >= 4.x.x < 7.x.x | Not recommended for [security reasons](https://electronjs.org/docs/tutorial/security#17-use-a-current-version-of-electron) |
-| <= 5.x.x | <= 3.x.x | Please, _please_ don't use these old versions |
+You can pass an optional options object into the `menubar({ ... })` function:
+
+| Option | Default | Description |
+| --- | --- | --- |
+| `dir` | `process.cwd()` | The app source directory. |
+| `index` | `file:// + opts.dir + index.html` | The URL to load the menubar's `browserWindow` with. The url can be a remote address (e.g. `http://`) or a path to a local HTML file using the `file://` protocol. |
+| `browserWindow` | | BrowserWindow options passed to the BrowserWindow constructor, see [Electron docs][electron-docs-browserwindow-options]. Useful fields
• `x` (default `undefined`) - the x position of the window
• `y` (default `undefined`) - the y position of the window
• `width` (default `400`) - window width
• `height` (default `400`) - window height
• `alwaysOnTop` (default `false`) - if `true`, the window will not hide on blur |
+| `icon` | `opts.dir + IconTemplate.png` | The png icon to use for the menubar. A good size to start with is 20x20. To support retina, supply a 2x sized image (e.g. 40x40) with `@2x` added to the end of the name, so `icon.png` and `icon@2x.png`, and Electron will automatically use your `@2x` version on retina screens. |
+| `tooltip` | empty | Menubar tray icon tooltip text. |
+| `tray` | created on-the-fly | An Electron `Tray` instance. If provided, `opts.icon` will be ignored. |
+| `preloadWindow` | `false` | Create [BrowserWindow][electron-docs-browserwindow-options] instance before it is used, increasing resource usage but making the click on the menubar load faster. |
+| `loadUrlOptions` | `undefined` | The options passed when loading the index URL in the menubar's `browserWindow`. Everything `browserWindow.loadURL` supports is supported; this object is simply passed onto [browserWindow.loadURL][electron-docs-browserwindow-loadurl]. |
+| `showOnAllWorkspaces` | `true` | Makes the window available on all macOS workspaces. |
+| `windowPosition` | `trayCenter` (macOS/Linux), `trayBottomCenter` (Windows) | Sets the window position (`browserWindow.x` / `browserWindow.y` will still override this). Valid values: `trayLeft`, `trayBottomLeft`, `trayRight`, `trayBottomRight`, `trayCenter`, `trayBottomCenter`, `topLeft`, `topRight`, `bottomLeft`, `bottomRight`, `topCenter`, `bottomCenter`, `leftCenter`, `rightCenter`, `center`. |
+| `showDockIcon` | `false` | Configure the visibility of the application dock icon. |
+| `trigger` | `'click'` | Tray event that toggles the menubar window. One of `'click'`, `'right-click'`, or `'none'`. Use `'none'` to disable automatic toggling, useful when a single tray icon serves multiple windows. The window can still be shown by calling `mb.showWindow()` directly. |
+| `showOnRightClick` | `false` | **Deprecated**, use `trigger: 'right-click'` instead. Show the window on `right-click` event instead of regular `click`. |
+| `contextMenu` | | An Electron `Menu` to attach to the tray icon. Platform behavior
On Linux it is bound via `tray.setContextMenu` (required by libappindicator / StatusNotifierItem) and re-published on every show/hide to defeat the indicator's menu cache. On macOS and Windows it pops up on right-click via `tray.popUpContextMenu`, so left-click continues to toggle the window. Combine with `trigger: 'none'` if you want right-click to be the only interaction. |
+| `hideOnClose` | `false` | Hide the window on `close` instead of destroying it, so the next tray click re-uses the same `BrowserWindow`. Platform notes
On Linux/Wayland the hide is deferred via `setImmediate` to work around a compositor bug that leaves frameless surfaces in a half-closed state when hidden synchronously from the `close` handler. The library tracks the app's `before-quit` event internally, so real quits go through unimpeded. |
+| `escapeToHide` | `false` | Hide the menubar window when the user presses `Escape` while it has focus. |
+| `ignoreDoubleClickEvents` | `true` (macOS only) | Calls `tray.setIgnoreDoubleClickEvents(true)` so an accidental double-click doesn't race the close-on-blur handler and flicker the tray icon. Pass `false` to opt out. No-op on Linux/Windows. |
+| `globalShortcut` | | An [Accelerator][electron-docs-accelerator] string registered as a global keyboard shortcut that toggles the menubar window. Unregistered automatically on `destroy()`. Use `mb.setGlobalShortcut(accelerator)` to change or clear it at runtime. |
+
+### Events
-## API Docs
+The `Menubar` class is an event emitter:
-See the reference [API docs](./docs/globals.md).
+| Event | Description |
+| --- | --- |
+| `ready` | When `menubar`'s tray icon has been created and initialized, i.e. when `menubar` is ready to be used. Note: this is different from the Electron app's `ready` event, which happens much earlier in the process. |
+| `create-window` | The line before `new BrowserWindow()` is called. |
+| `before-load` | After create window, before `loadUrl` (can be used for `require("@electron/remote/main").enable(webContents)`). |
+| `after-create-window` | The line after all window init code is done and the url was loaded. |
+| `show` | The line before `window.show()` is called. |
+| `after-show` | The line after `window.show()` is called. |
+| `hide` | The line before `window.hide()` is called (on window blur). |
+| `after-hide` | The line after `window.hide()` is called. |
+| `after-close` | After the `.window` (BrowserWindow) property has been deleted. |
+| `focus-lost` | Emitted if the always-on-top option is set and the user clicks away. |
## Tips
- Use `mb.on('after-create-window', callback)` to run things after your app has loaded. For example you could run `mb.window.openDevTools()` to open the developer tools for debugging, or load a different URL with `mb.window.loadURL()`
- Use `mb.on('focus-lost')` if you would like to perform some operation when using the option `browserWindow.alwaysOnTop: true`
- To restore focus of previous window after menubar hide, use `mb.on('after-hide', () => { mb.app.hide() } )` or similar
-- To create a native menu, you can use `tray.setContextMenu(contextMenu)`, and pass this custom tray to menubar: `const mb = menubar({ tray });`. See [this example](https://github.com/maxogden/menubar/tree/master/examples/native-menu) for more information.
+- To attach a native context menu, pass it as `contextMenu`: `menubar({ contextMenu })`. The library wires it via `setContextMenu` on Linux and `popUpContextMenu` on right-click on macOS/Windows so left-click still toggles the window. See [this example][examples-native] for more information.
- To avoid a flash when opening your menubar app, you can disable backgrounding the app using the following: `mb.app.commandLine.appendSwitch('disable-backgrounding-occluded-windows', 'true');`
+
+## Acknowledgements
+
+Originally created by [Max][github-upstream-creator] — hard-forked from [max-mapper/menubar][github-upstream-repo].
+
+
+
+
+[github]: https://github.com/gitify-app/electron-menubar
+[github-actions]: https://github.com/gitify-app/electron-menubar/actions
+[github-issues]: https://github.com/gitify-app/electron-menubar/issues
+[github-releases]: https://github.com/gitify-app/gitify/electron-menubar/latest
+[github-upstream-creator]: https://github.com/max-mapper
+[github-upstream-repo]: https://github.com/max-mapper/menubar
+
+[examples]: examples
+[examples-native]: examples/native-menu
+
+[platforms]: PLATFORMS
+
+[electron-docs-accelerator]: https://electronjs.org/docs/api/accelerator
+[electron-docs-app]:https://electronjs.org/docs/api/app
+[electron-docs-browserwindow]: https://electronjs.org/docs/api/browser-window
+[electron-docs-browserwindow-options]: https://electronjs.org/docs/api/browser-window#new-browserwindowoptions
+[electron-docs-browserwindow-loadurl]: https://electronjs.org/docs/api/browser-window#winloadurlurl-options
+[electron-docs-tray]: https://electronjs.org/docs/api/tray
+
+[ci-workflow-badge]: https://img.shields.io/github/actions/workflow/status/gitify-app/electron-menubar/test.yml?logo=github&label=CI
+[release-workflow-badge]: https://img.shields.io/github/actions/workflow/status/gitify-app/electron-menubar/release.yml?logo=github&label=Release
+[downloads-badge]: https://img.shields.io/npm/dy/electron-menubar?logo=npm
+[contributors-badge]: https://img.shields.io/github/contributors/gitify-app/electron-menubar?logo=github
+[librariesio-badge]: https://img.shields.io/librariesio/github/gitify-app/electron-menubar?logo=libraries.io&logoColor=white
+[license]: LICENSE
+[license-badge]: https://img.shields.io/github/license/gitify-app/electron-menubar?logo=github
+[github-release-badge]: https://img.shields.io/github/v/release/gitify-app/electron-menubar?logo=github
+[npmjs]: https://www.npmjs.com/package/electron-menubar
+[npmjs-version-badge]: https://img.shields.io/npm/v/electron-menubar?logo=npm
+[renovate]: https://github.com/gitify-app/gitify/issues/576
+[renovate-badge]: https://img.shields.io/badge/renovate-enabled-brightgreen.svg?logo=renovate&logoColor=white
+[size-minzip-badge]: https://img.shields.io/bundlephobia/minzip/electron-menubar.svg?logo=npm
+[size-minified-badge]: https://img.shields.io/bundlephobia/min/electron-menubar.svg?logo=npm
\ No newline at end of file
diff --git a/WORKING_PLATFORMS.md b/WORKING_PLATFORMS.md
deleted file mode 100644
index d188a855..00000000
--- a/WORKING_PLATFORMS.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# Platforms where `menubar` is known to work
-
-This document is still a work-in-progress. If you have tested `menubar` with a platform that is not listed under here, I would greatly appreciate a PR!
-
-## macOS
-
-| Version | Working Status | Known Issues |
-| ----------------- | -------------- | -------------------------------------------------------------------------------------------------------------- |
-| 14.15 Sonoma | ✅ Good | |
-| 10.14 Mojave | ✅ Good | [#147](https://github.com/maxogden/menubar/issues/147), [#215](https://github.com/maxogden/menubar/issues/215) |
-| 10.13 High Sierra | ✅ Good | |
-
-## Windows
-
-| Version | Working Status | Known Issues |
-| ---------- | -------------- | ------------ |
-| Windows 11 | ✅ Good | |
-| Windows 10 | ✅ Good | |
-| Windows 8 | ✅ Good | |
-
-## Linux
-
-| Distribution | Desktop Environment | Working Status | Known Issues |
-| ------------- | ------------------- | -------------- | ------------------------------------------------------ |
-| openSUSE 13.1 | Xfce 4.10.1 | ❌ Bad | [#123](https://github.com/maxogden/menubar/issues/123) |
-| Ubuntu 18.04 | Unity | ✅ Good | |
-| Ubuntu 14.04 | Unity | ❌ Bad | [#68](https://github.com/maxogden/menubar/issues/68) |
diff --git a/biome.json b/biome.json
deleted file mode 100644
index 43a65b3f..00000000
--- a/biome.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "$schema": "https://biomejs.dev/schemas/1.9.3/schema.json",
- "organizeImports": {
- "enabled": true
- },
- "linter": {
- "enabled": true,
- "rules": {
- "recommended": true,
- "style": {
- "noParameterAssign": "warn",
- "noNonNullAssertion": "warn",
- "useNodejsImportProtocol": "warn"
- },
- "suspicious": {
- "noAssignInExpressions": "warn"
- }
- }
- },
- "vcs": {
- "enabled": true,
- "clientKind": "git",
- "useIgnoreFile": true
- },
- "formatter": {
- "enabled": true,
- "indentStyle": "space",
- "indentWidth": 2
- },
- "javascript": {
- "formatter": {
- "quoteStyle": "single",
- "jsxQuoteStyle": "double"
- }
- },
- "json": {
- "parser": {
- "allowComments": true
- }
- }
-}
diff --git a/docs/README.md b/docs/README.md
deleted file mode 100644
index 07dcc0ab..00000000
--- a/docs/README.md
+++ /dev/null
@@ -1,137 +0,0 @@
-> **[menubar](README.md)**
-
-[Globals](globals.md) /
-
-[](https://travis-ci.org/maxogden/menubar)
-[](https://www.npmjs.com/package/@maxogden/menubar)
-[](https://david-dm.org/maxogden/menubar)
-
-
-
-
-
-➖ Menubar
-High level way to create menubar desktop applications with Electron.
-
-
-
-This module provides boilerplate for setting up a menubar application using Electron. All you have to do is point it at your `index.html` and `menubar` will handle the rest.
-
-✅ Only one dependency, and one peer-dependency.
-
-✅ Works on macOS, Windows and most Linuxes. See [details](./WORKING_PLATFORMS.md).
-
-✅ 💥 [**3.6kB minified + gzipped**](https://bundlephobia.com/result?p=menubar) 💥
-
-|
|
|
|
-| :-----------------------------------------------------------: | :--------------------------------------------------------: | :------------------------------------------------------: |
-| macOS Mojave 10.14 | Windows 10 | Ubuntu 18.04 |
-
-## Installation
-
-```bash
-yarn add menubar
-```
-
-## Usage
-
-Starting with your own new project, run these commands:
-
-```bash
-$ yarn add menubar
-$ touch myApp.js
-$ touch index.html
-```
-
-Fill `index.html` with some HTML, and `myApp.js` like this:
-
-```javascript
-const { menubar } = require('menubar');
-
-const mb = menubar();
-
-mb.on('ready', () => {
- console.log('app is ready');
- // your app code here
-});
-```
-
-Then use `electron` to run the app:
-
-```bash
-$ electron myApp.js
-```
-
-Alternatively, see [`examples/hello-world`](/examples/hello-world) folder for a simple working example.
-
-## `Menubar` Class
-
-The return value of `menubar()` is a `Menubar` class instance, which has these properties:
-
-- `app`: the [Electron App](https://electronjs.org/docs/api/app) instance,
-- `window`: the [Electron Browser Window](https://electronjs.org/docs/api/browser-window) instance,
-- `tray`: the [Electron Tray](https://electronjs.org/docs/api/tray) instance,
-- `positioner`: the [Electron Positioner](https://github.com/jenslind/electron-positioner) instance,
-- `setOption(option, value)`: change an option after menubar is created,
-- `getOption(option)`: get an menubar option,
-- `showWindow()`: show the menubar window,
-- `hideWindow()`: hide the menubar window
-
-See the reference [API docs](./docs/classes/_menubar_.menubar.md).
-
-## `menubar()` Options
-
-You can pass an optional options object into the `menubar({ ... })` function:
-
-- `dir` (default `process.cwd()`) - the app source directory
-- `index` (default `file:// + opts.dir + index.html`) - The URL to load the menubar's browserWindow with. The url can be a remote address (e.g. `http://`) or a path to a local HTML file using the `file://` protocol.
-- `browserWindow` - BrowserWindow options to be passed to the BrowserWindow constructor, see [Electron docs](https://electronjs.org/docs/api/browser-window#new-browserwindowoptions). Some interesting fields to passed down are:
- - `x` (default `undefined`) - the x position of the window
- - `y` (default `undefined`) - the y position of the window
- - `width` (default 400) - window width
- - `height` (default 400) - window height
- - `alwaysOnTop` (default false) - if true, the window will not hide on blur
-- `icon` (default `opts.dir + IconTemplate.png`) - the png icon to use for the menubar. A good size to start with is 20x20. To support retina, supply a 2x sized image (e.g. 40x40) with `@2x` added to the end of the name, so `icon.png` and `icon@2x.png` and Electron will automatically use your `@2x` version on retina screens.
-- `tooltip` (default empty) - menubar tray icon tooltip text
-- `tray` (default created on-the-fly) - an electron `Tray` instance. if provided `opts.icon` will be ignored
-- `preloadWindow` (default false) - Create [BrowserWindow](https://electronjs.org/docs/api/browser-window#new-browserwindowoptions) instance before it is used -- increasing resource usage, but making the click on the menubar load faster.
-- `showOnAllWorkspaces` (default true) - Makes the window available on all OS X workspaces.
-- `windowPosition` (default trayCenter and trayBottomCenter on Windows) - Sets the window position (x and y will still override this), check [positioner docs](https://github.com/jenslind/electron-positioner#docs) for valid values.
-- `showDockIcon` (default false) - Configure the visibility of the application dock icon.
-- `showOnRightClick` (default false) - Show the window on 'right-click' event instead of regular 'click'
-
-See the reference [API docs](./docs/interfaces/_types_.options.md).
-
-## Events
-
-The `Menubar` class is an event emitter:
-
-- `ready` - when `menubar`'s tray icon has been created and initialized, i.e. when `menubar` is ready to be used. Note: this is different than Electron app's `ready` event, which happens much earlier in the process
-- `create-window` - the line before `new BrowserWindow()` is called
-- `after-create-window` - the line after all window init code is done
-- `show` - the line before `window.show()` is called
-- `after-show` - the line after `window.show()` is called
-- `hide` - the line before `window.hide()` is called (on window blur)
-- `after-hide` - the line after `window.hide()` is called
-- `after-close` - after the `.window` (BrowserWindow) property has been deleted
-- `focus-lost` - emitted if always-on-top option is set and the user clicks away
-
-## Compatibility with Electron
-
-| menubar | Electron | Notes |
-| -------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------- |
-| 7.x.x | 7.x.x |
-| 6.x.x | 4.x.x \| 5.x.x \| 6.x.x | Not recommended for [security reasons](https://electronjs.org/docs/tutorial/security#17-use-a-current-version-of-electron) |
-| <= 5.x.x | <= 3.x.x | Please, _please_ don't use these old versions |
-
-## API Docs
-
-See the reference [API docs](./docs/globals.md).
-
-## Tips
-
-- Use `mb.on('after-create-window', callback)` to run things after your app has loaded. For example you could run `mb.window.openDevTools()` to open the developer tools for debugging, or load a different URL with `mb.window.loadUrl()`
-- Use `mb.on('focus-lost')` if you would like to perform some operation when using the option `browserWindow.alwaysOnTop: true`
-- To restore focus of previous window after menubar hide, use `mb.on('after-hide', () => { mb.app.hide() } )` or similar
-- To create a native menu, you can use `tray.setContextMenu(contextMenu)`, and pass this custom tray to menubar: `const mb = menubar({ tray });`. See [this example](https://github.com/maxogden/menubar/tree/master/examples/native-menu) for more information.
-- To avoid a flash when opening your menubar app, you can disable backgrounding the app using the following: `mb.app.commandLine.appendSwitch('disable-backgrounding-occluded-windows', 'true');`
\ No newline at end of file
diff --git a/docs/classes/_menubar_.menubar.md b/docs/classes/_menubar_.menubar.md
deleted file mode 100644
index 09ea2ae5..00000000
--- a/docs/classes/_menubar_.menubar.md
+++ /dev/null
@@ -1,147 +0,0 @@
-> **[menubar](../README.md)**
-
-[Globals](../globals.md) / ["Menubar"](../modules/_menubar_.md) / [Menubar](_menubar_.menubar.md) /
-
-# Class: Menubar
-
-## Hierarchy
-
-* `EventEmitter`
-
- * **Menubar**
-
-## Index
-
-### Constructors
-
-* [constructor](_menubar_.menubar.md#constructor)
-
-### Accessors
-
-* [app](_menubar_.menubar.md#app)
-* [positioner](_menubar_.menubar.md#positioner)
-* [tray](_menubar_.menubar.md#tray)
-* [window](_menubar_.menubar.md#window)
-
-### Methods
-
-* [getOption](_menubar_.menubar.md#getoption)
-* [hideWindow](_menubar_.menubar.md#hidewindow)
-* [setOption](_menubar_.menubar.md#setoption)
-* [showWindow](_menubar_.menubar.md#showwindow)
-
-## Constructors
-
-### constructor
-
-\+ **new Menubar**(`app`: `App`, `options?`: `Partial`): *[Menubar](_menubar_.menubar.md)*
-
-*Defined in [Menubar.ts:24](https://github.com/adam-lynch/menubar/blob/6b93752/src/Menubar.ts#L24)*
-
-**Parameters:**
-
-Name | Type |
------- | ------ |
-`app` | `App` |
-`options?` | `Partial` |
-
-**Returns:** *[Menubar](_menubar_.menubar.md)*
-
-## Accessors
-
-### app
-
-• **app**:
-
-*Defined in [Menubar.ts:47](https://github.com/adam-lynch/menubar/blob/6b93752/src/Menubar.ts#L47)*
-
-___
-
-### positioner
-
-• **positioner**:
-
-*Defined in [Menubar.ts:56](https://github.com/adam-lynch/menubar/blob/6b93752/src/Menubar.ts#L56)*
-
-___
-
-### tray
-
-• **tray**:
-
-*Defined in [Menubar.ts:69](https://github.com/adam-lynch/menubar/blob/6b93752/src/Menubar.ts#L69)*
-
-___
-
-### window
-
-• **window**:
-
-*Defined in [Menubar.ts:83](https://github.com/adam-lynch/menubar/blob/6b93752/src/Menubar.ts#L83)*
-
-## Methods
-
-### getOption
-
-▸ **getOption**<**K**>(`key`: `K`): *`Options[K]`*
-
-*Defined in [Menubar.ts:92](https://github.com/adam-lynch/menubar/blob/6b93752/src/Menubar.ts#L92)*
-
-**Type parameters:**
-
-▪ **K**: *keyof Options*
-
-**Parameters:**
-
-Name | Type | Description |
------- | ------ | ------ |
-`key` | `K` | The option key to retrieve, see [Options](../interfaces/_types_.options.md). |
-
-**Returns:** *`Options[K]`*
-
-___
-
-### hideWindow
-
-▸ **hideWindow**(): *void*
-
-*Defined in [Menubar.ts:99](https://github.com/adam-lynch/menubar/blob/6b93752/src/Menubar.ts#L99)*
-
-**Returns:** *void*
-
-___
-
-### setOption
-
-▸ **setOption**<**K**>(`key`: `K`, `value`: `Options[K]`): *void*
-
-*Defined in [Menubar.ts:115](https://github.com/adam-lynch/menubar/blob/6b93752/src/Menubar.ts#L115)*
-
-**Type parameters:**
-
-▪ **K**: *keyof Options*
-
-**Parameters:**
-
-Name | Type | Description |
------- | ------ | ------ |
-`key` | `K` | The option key to modify, see [Options](../interfaces/_types_.options.md). |
-`value` | `Options[K]` | The value to set. |
-
-**Returns:** *void*
-
-___
-
-### showWindow
-
-▸ **showWindow**(`trayPos?`: `Electron.Rectangle`): *`Promise`*
-
-*Defined in [Menubar.ts:124](https://github.com/adam-lynch/menubar/blob/6b93752/src/Menubar.ts#L124)*
-
-**Parameters:**
-
-Name | Type | Description |
------- | ------ | ------ |
-`trayPos?` | `Electron.Rectangle` | The bounds to show the window in. |
-
-**Returns:** *`Promise`*
\ No newline at end of file
diff --git a/docs/globals.md b/docs/globals.md
deleted file mode 100644
index 3c94dbe4..00000000
--- a/docs/globals.md
+++ /dev/null
@@ -1,14 +0,0 @@
-> **[menubar](README.md)**
-
-[Globals](globals.md) /
-
-# menubar
-
-## Index
-
-### External modules
-
-* ["Menubar"](modules/_menubar_.md)
-* ["index"](modules/_index_.md)
-* ["types"](modules/_types_.md)
-* ["util/getWindowPosition"](modules/_util_getwindowposition_.md)
\ No newline at end of file
diff --git a/docs/interfaces/_types_.options.md b/docs/interfaces/_types_.options.md
deleted file mode 100644
index fb5384e8..00000000
--- a/docs/interfaces/_types_.options.md
+++ /dev/null
@@ -1,122 +0,0 @@
-> **[menubar](../README.md)**
-
-[Globals](../globals.md) / ["types"](../modules/_types_.md) / [Options](_types_.options.md) /
-
-# Interface: Options
-
-## Hierarchy
-
-* **Options**
-
-## Table of Contents
-
-### Properties
-
-* [browserWindow](_types_.options.md#browserwindow)
-* [dir](_types_.options.md#dir)
-* [icon](_types_.options.md#optional-icon)
-* [index](_types_.options.md#index)
-* [loadUrlOptions](_types_.options.md#optional-loadurloptions)
-* [preloadWindow](_types_.options.md#optional-preloadwindow)
-* [showDockIcon](_types_.options.md#optional-showdockicon)
-* [showOnAllWorkspaces](_types_.options.md#optional-showonallworkspaces)
-* [showOnRightClick](_types_.options.md#optional-showonrightclick)
-* [tooltip](_types_.options.md#tooltip)
-* [tray](_types_.options.md#optional-tray)
-* [windowPosition](_types_.options.md#optional-windowposition)
-
-## Properties
-
-### browserWindow
-
-• **browserWindow**: *`BrowserWindowConstructorOptions`*
-
-*Defined in [types.ts:23](https://github.com/maxogden/menubar/blob/c7d6640/src/types.ts#L23)*
-
-___
-
-### dir
-
-• **dir**: *string*
-
-*Defined in [types.ts:27](https://github.com/maxogden/menubar/blob/c7d6640/src/types.ts#L27)*
-
-___
-
-### `Optional` icon
-
-• **icon**? : *string | `NativeImage`*
-
-*Defined in [types.ts:34](https://github.com/maxogden/menubar/blob/c7d6640/src/types.ts#L34)*
-
-___
-
-### index
-
-• **index**: *string | false*
-
-*Defined in [types.ts:43](https://github.com/maxogden/menubar/blob/c7d6640/src/types.ts#L43)*
-
-___
-
-### `Optional` loadUrlOptions
-
-• **loadUrlOptions**? : *`LoadURLOptions`*
-
-*Defined in [types.ts:51](https://github.com/maxogden/menubar/blob/c7d6640/src/types.ts#L51)*
-
-___
-
-### `Optional` preloadWindow
-
-• **preloadWindow**? : *undefined | false | true*
-
-*Defined in [types.ts:56](https://github.com/maxogden/menubar/blob/c7d6640/src/types.ts#L56)*
-
-___
-
-### `Optional` showDockIcon
-
-• **showDockIcon**? : *undefined | false | true*
-
-*Defined in [types.ts:61](https://github.com/maxogden/menubar/blob/c7d6640/src/types.ts#L61)*
-
-___
-
-### `Optional` showOnAllWorkspaces
-
-• **showOnAllWorkspaces**? : *undefined | false | true*
-
-*Defined in [types.ts:66](https://github.com/maxogden/menubar/blob/c7d6640/src/types.ts#L66)*
-
-___
-
-### `Optional` showOnRightClick
-
-• **showOnRightClick**? : *undefined | false | true*
-
-*Defined in [types.ts:70](https://github.com/maxogden/menubar/blob/c7d6640/src/types.ts#L70)*
-
-___
-
-### tooltip
-
-• **tooltip**: *string*
-
-*Defined in [types.ts:74](https://github.com/maxogden/menubar/blob/c7d6640/src/types.ts#L74)*
-
-___
-
-### `Optional` tray
-
-• **tray**? : *`Tray`*
-
-*Defined in [types.ts:78](https://github.com/maxogden/menubar/blob/c7d6640/src/types.ts#L78)*
-
-___
-
-### `Optional` windowPosition
-
-• **windowPosition**? : *"trayLeft" | "trayBottomLeft" | "trayRight" | "trayBottomRight" | "trayCenter" | "trayBottomCenter" | "topLeft" | "topRight" | "bottomLeft" | "bottomRight" | "topCenter" | "bottomCenter" | "leftCenter" | "rightCenter" | "center"*
-
-*Defined in [types.ts:83](https://github.com/maxogden/menubar/blob/c7d6640/src/types.ts#L83)*
diff --git a/docs/modules/_index_.md b/docs/modules/_index_.md
deleted file mode 100644
index 60ab7335..00000000
--- a/docs/modules/_index_.md
+++ /dev/null
@@ -1,27 +0,0 @@
-> **[menubar](../README.md)**
-
-[Globals](../globals.md) / ["index"](_index_.md) /
-
-# External module: "index"
-
-## Index
-
-### Functions
-
-* [menubar](_index_.md#menubar)
-
-## Functions
-
-### menubar
-
-▸ **menubar**(`options?`: `Partial`): *[Menubar](../classes/_menubar_.menubar.md)*
-
-*Defined in [index.ts:25](https://github.com/adam-lynch/menubar/blob/6b93752/src/index.ts#L25)*
-
-**Parameters:**
-
-Name | Type | Description |
------- | ------ | ------ |
-`options?` | `Partial` | Options for creating a menubar application, see [Options](../interfaces/_types_.options.md) |
-
-**Returns:** *[Menubar](../classes/_menubar_.menubar.md)*
\ No newline at end of file
diff --git a/docs/modules/_menubar_.md b/docs/modules/_menubar_.md
deleted file mode 100644
index 73e684f4..00000000
--- a/docs/modules/_menubar_.md
+++ /dev/null
@@ -1,11 +0,0 @@
-> **[menubar](../README.md)**
-
-[Globals](../globals.md) / ["Menubar"](_menubar_.md) /
-
-# External module: "Menubar"
-
-## Index
-
-### Classes
-
-* [Menubar](../classes/_menubar_.menubar.md)
\ No newline at end of file
diff --git a/docs/modules/_types_.md b/docs/modules/_types_.md
deleted file mode 100644
index 51eefe22..00000000
--- a/docs/modules/_types_.md
+++ /dev/null
@@ -1,11 +0,0 @@
-> **[menubar](../README.md)**
-
-[Globals](../globals.md) / ["types"](_types_.md) /
-
-# External module: "types"
-
-## Index
-
-### Interfaces
-
-* [Options](../interfaces/_types_.options.md)
\ No newline at end of file
diff --git a/docs/modules/_util_getwindowposition_.md b/docs/modules/_util_getwindowposition_.md
deleted file mode 100644
index 675752c3..00000000
--- a/docs/modules/_util_getwindowposition_.md
+++ /dev/null
@@ -1,44 +0,0 @@
-> **[menubar](../README.md)**
-
-[Globals](../globals.md) / ["util/getWindowPosition"](_util_getwindowposition_.md) /
-
-# External module: "util/getWindowPosition"
-
-## Index
-
-### Functions
-
-* [getWindowPosition](_util_getwindowposition_.md#getwindowposition)
-* [taskbarLocation](_util_getwindowposition_.md#taskbarlocation)
-
-## Functions
-
-### getWindowPosition
-
-▸ **getWindowPosition**(`tray`: `Tray`): *`WindowPosition`*
-
-*Defined in [util/getWindowPosition.ts:52](https://github.com/adam-lynch/menubar/blob/6b93752/src/util/getWindowPosition.ts#L52)*
-
-**Parameters:**
-
-Name | Type | Description |
------- | ------ | ------ |
-`tray` | `Tray` | The Electron Tray instance. |
-
-**Returns:** *`WindowPosition`*
-
-___
-
-### taskbarLocation
-
-▸ **taskbarLocation**(`tray`: `Tray`): *`TaskbarLocation`*
-
-*Defined in [util/getWindowPosition.ts:18](https://github.com/adam-lynch/menubar/blob/6b93752/src/util/getWindowPosition.ts#L18)*
-
-**Parameters:**
-
-Name | Type | Description |
------- | ------ | ------ |
-`tray` | `Tray` | The Electron Tray instance. |
-
-**Returns:** *`TaskbarLocation`*
\ No newline at end of file
diff --git a/examples/arrow/README.md b/examples/arrow/README.md
index 5ba1b77b..52691d86 100644
--- a/examples/arrow/README.md
+++ b/examples/arrow/README.md
@@ -13,8 +13,8 @@ Thanks @leilarrossi for this example, see https://github.com/maxogden/menubar/is
## Instructions
- Clone the repository.
-- Run `yarn install` from the root folder.
-- Run `yarn build` from the root folder.
+- Run `pnpm install` from the root folder.
+- Run `pnpm build` from the root folder.
- `cd` into this directory.
-- Run `yarn install` to install this example's dependencies.
-- Run `yarn start` from this directory to run app.
+- Run `pnpm install` to install this example's dependencies.
+- Run `pnpm start` from this directory to run app.
diff --git a/examples/hello-world/README.md b/examples/hello-world/README.md
index d6eae297..f7fdb8af 100644
--- a/examples/hello-world/README.md
+++ b/examples/hello-world/README.md
@@ -11,8 +11,8 @@ This is a simple Hello World menubar app that will just open a window that says
## Instructions
- Clone the repository.
-- Run `yarn install` from the root folder.
-- Run `yarn build` from the root folder.
+- Run `pnpm install` from the root folder.
+- Run `pnpm build` from the root folder.
- `cd` into this directory.
-- Run `yarn install` to install this example's dependencies.
-- Run `yarn start` from this directory to run app.
+- Run `pnpm install` to install this example's dependencies.
+- Run `pnpm start` from this directory to run app.
diff --git a/examples/icon-animation/README.md b/examples/icon-animation/README.md
new file mode 100644
index 00000000..b48117c5
--- /dev/null
+++ b/examples/icon-animation/README.md
@@ -0,0 +1,14 @@
+# example-menubar-icon-animation
+
+## Description
+
+A menubar app that animates the tray icon by swapping images on an interval, useful for showing a "syncing" state while data is being fetched.
+
+## Instructions
+
+- Clone the repository.
+- Run `pnpm install` from the root folder.
+- Run `pnpm build` from the root folder.
+- `cd` into this directory.
+- Run `pnpm install` to install this example's dependencies.
+- Run `pnpm start` from this directory to run app.
diff --git a/examples/native-menu/README.md b/examples/native-menu/README.md
index adda0e98..39b29272 100644
--- a/examples/native-menu/README.md
+++ b/examples/native-menu/README.md
@@ -13,8 +13,8 @@ Courtesy of @tslater in https://github.com/maxogden/menubar/issues/178.
## Instructions
- Clone the repository.
-- Run `yarn install` from the root folder.
-- Run `yarn build` from the root folder.
+- Run `pnpm install` from the root folder.
+- Run `pnpm build` from the root folder.
- `cd` into this directory.
-- Run `yarn install` to install this example's dependencies.
-- Run `yarn start` from this directory to run app.
+- Run `pnpm install` to install this example's dependencies.
+- Run `pnpm start` from this directory to run app.
diff --git a/examples/native-menu/main.js b/examples/native-menu/main.js
index bdbfb7a8..a856b732 100755
--- a/examples/native-menu/main.js
+++ b/examples/native-menu/main.js
@@ -1,29 +1,23 @@
-const { app, Menu, Tray } = require('electron');
-const path = require('path');
+const { app, Menu } = require('electron');
const { menubar } = require('../../');
-const iconPath = path.join(__dirname, '..', '..', 'assets', 'IconTemplate.png');
-
app.on('ready', () => {
- const tray = new Tray(iconPath);
const contextMenu = Menu.buildFromTemplate([
{ label: 'Item1', type: 'radio' },
{ label: 'Item2', type: 'radio' },
{ label: 'Item3', type: 'radio', checked: true },
{ label: 'Item4', type: 'radio' },
+ { type: 'separator' },
+ { role: 'quit' },
]);
- tray.setContextMenu(contextMenu);
- const mb = menubar({
- tray,
- });
+ // Pass `contextMenu` to menubar — it wires `setContextMenu` on Linux and
+ // `popUpContextMenu` on right-click on macOS/Windows so left-click still
+ // toggles the menubar window.
+ const mb = menubar({ contextMenu });
mb.on('ready', () => {
- // needed for macos to remove white screen
- // ref: https://github.com/max-mapper/menubar/issues/345
- tray.removeAllListeners();
-
console.log('Menubar app is ready.');
// your app code here
});
diff --git a/examples/package.json b/examples/package.json
index d4d8e2e0..c2b17a3a 100644
--- a/examples/package.json
+++ b/examples/package.json
@@ -3,8 +3,8 @@
"version": "0.1.0",
"description": "Examples of menubar electron apps",
"private": true,
- "workspaces": ["arrow", "hello-world", "icon-animation", "native-menu"],
"devDependencies": {
- "electron": "^34.3.0"
- }
+ "electron": "^42.0.0"
+ },
+ "packageManager": "pnpm@11.5.1"
}
diff --git a/examples/pnpm-lock.yaml b/examples/pnpm-lock.yaml
new file mode 100644
index 00000000..0ba5155c
--- /dev/null
+++ b/examples/pnpm-lock.yaml
@@ -0,0 +1,206 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+overrides:
+ yauzl: 3.3.1
+
+importers:
+
+ .:
+ devDependencies:
+ electron:
+ specifier: ^42.0.0
+ version: 42.3.0
+
+ arrow: {}
+
+ hello-world: {}
+
+ icon-animation: {}
+
+ native-menu: {}
+
+packages:
+
+ '@electron/get@5.0.0':
+ resolution: {integrity: sha512-pjoBpru1KdEtcExBnuHAP1cAc/5faoedw0hzJkL3o4/IJp7HNF1+fbrdxT3gMYRX2oJfvnA/WXeCTVQpYYxyJA==}
+ engines: {node: '>=22.12.0'}
+
+ '@types/node@24.12.4':
+ resolution: {integrity: sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==}
+
+ '@types/yauzl@2.10.3':
+ resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
+
+ buffer-crc32@0.2.13:
+ resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
+
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ electron@42.3.0:
+ resolution: {integrity: sha512-9ZiLdRXk+WDxW1OgIUz8J2rIQ5TYU9o629gCOjU48Q3dQiOmym7osWsH5Ubs/Jh4uuFLn6m6SBD2rmRXLAPz9g==}
+ engines: {node: '>= 22.12.0'}
+ hasBin: true
+
+ end-of-stream@1.4.5:
+ resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
+
+ env-paths@3.0.0:
+ resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ extract-zip@2.0.1:
+ resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==}
+ engines: {node: '>= 10.17.0'}
+ hasBin: true
+
+ get-stream@5.2.0:
+ resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
+ engines: {node: '>=8'}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ pend@1.2.0:
+ resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
+
+ progress@2.0.3:
+ resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
+ engines: {node: '>=0.4.0'}
+
+ pump@3.0.4:
+ resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==}
+
+ semver@7.8.1:
+ resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ sumchecker@3.0.1:
+ resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==}
+ engines: {node: '>= 8.0'}
+
+ undici-types@7.16.0:
+ resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
+
+ undici@7.27.0:
+ resolution: {integrity: sha512-+t2Z/GwkZQDtu00813aP66ygViGtPHKhhoFZpQKpKrE+9jIgES+Zw+mFNaDWOVRKiuJjuqKHzD3B1sfGg8+ZOQ==}
+ engines: {node: '>=20.18.1'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ yauzl@3.3.1:
+ resolution: {integrity: sha512-RNPCUkiE/ZgO4w8i9U5yDQVHaFDdnzaFANElRvpJteCspvmv2VqrRb9lvS6odVD+jqI/zDsxAHJVsafpcheVQQ==}
+ engines: {node: '>=12'}
+
+snapshots:
+
+ '@electron/get@5.0.0':
+ dependencies:
+ debug: 4.4.3
+ env-paths: 3.0.0
+ graceful-fs: 4.2.11
+ progress: 2.0.3
+ semver: 7.8.1
+ sumchecker: 3.0.1
+ optionalDependencies:
+ undici: 7.27.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@types/node@24.12.4':
+ dependencies:
+ undici-types: 7.16.0
+
+ '@types/yauzl@2.10.3':
+ dependencies:
+ '@types/node': 24.12.4
+ optional: true
+
+ buffer-crc32@0.2.13: {}
+
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
+ electron@42.3.0:
+ dependencies:
+ '@electron/get': 5.0.0
+ '@types/node': 24.12.4
+ extract-zip: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ end-of-stream@1.4.5:
+ dependencies:
+ once: 1.4.0
+
+ env-paths@3.0.0: {}
+
+ extract-zip@2.0.1:
+ dependencies:
+ debug: 4.4.3
+ get-stream: 5.2.0
+ yauzl: 3.3.1
+ optionalDependencies:
+ '@types/yauzl': 2.10.3
+ transitivePeerDependencies:
+ - supports-color
+
+ get-stream@5.2.0:
+ dependencies:
+ pump: 3.0.4
+
+ graceful-fs@4.2.11: {}
+
+ ms@2.1.3: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ pend@1.2.0: {}
+
+ progress@2.0.3: {}
+
+ pump@3.0.4:
+ dependencies:
+ end-of-stream: 1.4.5
+ once: 1.4.0
+
+ semver@7.8.1: {}
+
+ sumchecker@3.0.1:
+ dependencies:
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ undici-types@7.16.0: {}
+
+ undici@7.27.0:
+ optional: true
+
+ wrappy@1.0.2: {}
+
+ yauzl@3.3.1:
+ dependencies:
+ buffer-crc32: 0.2.13
+ pend: 1.2.0
diff --git a/examples/pnpm-workspace.yaml b/examples/pnpm-workspace.yaml
new file mode 100644
index 00000000..5a353b15
--- /dev/null
+++ b/examples/pnpm-workspace.yaml
@@ -0,0 +1,16 @@
+packages:
+ - arrow
+ - hello-world
+ - icon-animation
+ - native-menu
+
+overrides:
+ # Electron's installer hangs while extracting its binary (never writes
+ # path.txt) on Node 24.16+ because of a yauzl bug. Pin yauzl until the
+ # upstream fix ships. https://github.com/electron/electron/issues/51619
+ yauzl: 3.3.1
+
+# electron downloads its prebuilt binary in a postinstall script; without this
+# pnpm skips it and `electron .` fails to launch.
+allowBuilds:
+ electron: true
diff --git a/examples/yarn.lock b/examples/yarn.lock
deleted file mode 100644
index 84be4e2d..00000000
--- a/examples/yarn.lock
+++ /dev/null
@@ -1,511 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@electron/get@^2.0.0":
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.3.tgz#fba552683d387aebd9f3fcadbcafc8e12ee4f960"
- integrity sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==
- dependencies:
- debug "^4.1.1"
- env-paths "^2.2.0"
- fs-extra "^8.1.0"
- got "^11.8.5"
- progress "^2.0.3"
- semver "^6.2.0"
- sumchecker "^3.0.1"
- optionalDependencies:
- global-agent "^3.0.0"
-
-"@sindresorhus/is@^4.0.0":
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f"
- integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==
-
-"@szmarczak/http-timer@^4.0.5":
- version "4.0.6"
- resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807"
- integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==
- dependencies:
- defer-to-connect "^2.0.0"
-
-"@types/cacheable-request@^6.0.1":
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183"
- integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==
- dependencies:
- "@types/http-cache-semantics" "*"
- "@types/keyv" "^3.1.4"
- "@types/node" "*"
- "@types/responselike" "^1.0.0"
-
-"@types/http-cache-semantics@*":
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4"
- integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==
-
-"@types/keyv@^3.1.4":
- version "3.1.4"
- resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6"
- integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==
- dependencies:
- "@types/node" "*"
-
-"@types/node@*", "@types/node@^20.9.0":
- version "20.14.2"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.2.tgz#a5f4d2bcb4b6a87bffcaa717718c5a0f208f4a18"
- integrity sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==
- dependencies:
- undici-types "~5.26.4"
-
-"@types/responselike@^1.0.0":
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50"
- integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==
- dependencies:
- "@types/node" "*"
-
-"@types/yauzl@^2.9.1":
- version "2.10.3"
- resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999"
- integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==
- dependencies:
- "@types/node" "*"
-
-boolean@^3.0.1:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b"
- integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==
-
-buffer-crc32@~0.2.3:
- version "0.2.13"
- resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
- integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
-
-cacheable-lookup@^5.0.3:
- version "5.0.4"
- resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005"
- integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==
-
-cacheable-request@^7.0.2:
- version "7.0.4"
- resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817"
- integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==
- dependencies:
- clone-response "^1.0.2"
- get-stream "^5.1.0"
- http-cache-semantics "^4.0.0"
- keyv "^4.0.0"
- lowercase-keys "^2.0.0"
- normalize-url "^6.0.1"
- responselike "^2.0.0"
-
-clone-response@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3"
- integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==
- dependencies:
- mimic-response "^1.0.0"
-
-debug@^4.1.0, debug@^4.1.1:
- version "4.3.5"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e"
- integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==
- dependencies:
- ms "2.1.2"
-
-decompress-response@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
- integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
- dependencies:
- mimic-response "^3.1.0"
-
-defer-to-connect@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
- integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
-
-define-data-property@^1.0.1:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
- integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
- dependencies:
- es-define-property "^1.0.0"
- es-errors "^1.3.0"
- gopd "^1.0.1"
-
-define-properties@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"
- integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
- dependencies:
- define-data-property "^1.0.1"
- has-property-descriptors "^1.0.0"
- object-keys "^1.1.1"
-
-detect-node@^2.0.4:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
- integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
-
-electron@^34.3.0:
- version "34.3.0"
- resolved "https://registry.yarnpkg.com/electron/-/electron-34.3.0.tgz#d52a5bd14c72a5811a0c0e233db5c20ad70ba078"
- integrity sha512-I238qRnYTAsuwJ/rS7HGaFNY4NNKAcjX8nlj7mnNmj1TK3z4HvNoD1r7Zud81DYDFx8AITuLd76EPrEnnfF9Bg==
- dependencies:
- "@electron/get" "^2.0.0"
- "@types/node" "^20.9.0"
- extract-zip "^2.0.1"
-
-end-of-stream@^1.1.0:
- version "1.4.4"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
- integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
- dependencies:
- once "^1.4.0"
-
-env-paths@^2.2.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
- integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
-
-es-define-property@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845"
- integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==
- dependencies:
- get-intrinsic "^1.2.4"
-
-es-errors@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
- integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
-
-es6-error@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d"
- integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==
-
-escape-string-regexp@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
- integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
-
-extract-zip@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
- integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==
- dependencies:
- debug "^4.1.1"
- get-stream "^5.1.0"
- yauzl "^2.10.0"
- optionalDependencies:
- "@types/yauzl" "^2.9.1"
-
-fd-slicer@~1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
- integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==
- dependencies:
- pend "~1.2.0"
-
-fs-extra@^8.1.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
- integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
- dependencies:
- graceful-fs "^4.2.0"
- jsonfile "^4.0.0"
- universalify "^0.1.0"
-
-function-bind@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
- integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
-
-get-intrinsic@^1.1.3, get-intrinsic@^1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd"
- integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==
- dependencies:
- es-errors "^1.3.0"
- function-bind "^1.1.2"
- has-proto "^1.0.1"
- has-symbols "^1.0.3"
- hasown "^2.0.0"
-
-get-stream@^5.1.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
- integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
- dependencies:
- pump "^3.0.0"
-
-global-agent@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6"
- integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==
- dependencies:
- boolean "^3.0.1"
- es6-error "^4.1.1"
- matcher "^3.0.0"
- roarr "^2.15.3"
- semver "^7.3.2"
- serialize-error "^7.0.1"
-
-globalthis@^1.0.1:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236"
- integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==
- dependencies:
- define-properties "^1.2.1"
- gopd "^1.0.1"
-
-gopd@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
- integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
- dependencies:
- get-intrinsic "^1.1.3"
-
-got@^11.8.5:
- version "11.8.6"
- resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a"
- integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==
- dependencies:
- "@sindresorhus/is" "^4.0.0"
- "@szmarczak/http-timer" "^4.0.5"
- "@types/cacheable-request" "^6.0.1"
- "@types/responselike" "^1.0.0"
- cacheable-lookup "^5.0.3"
- cacheable-request "^7.0.2"
- decompress-response "^6.0.0"
- http2-wrapper "^1.0.0-beta.5.2"
- lowercase-keys "^2.0.0"
- p-cancelable "^2.0.0"
- responselike "^2.0.0"
-
-graceful-fs@^4.1.6, graceful-fs@^4.2.0:
- version "4.2.11"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
- integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
-
-has-property-descriptors@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854"
- integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
- dependencies:
- es-define-property "^1.0.0"
-
-has-proto@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd"
- integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==
-
-has-symbols@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
- integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
-
-hasown@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
- integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
- dependencies:
- function-bind "^1.1.2"
-
-http-cache-semantics@^4.0.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
- integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
-
-http2-wrapper@^1.0.0-beta.5.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
- integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==
- dependencies:
- quick-lru "^5.1.1"
- resolve-alpn "^1.0.0"
-
-json-buffer@3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
- integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
-
-json-stringify-safe@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
- integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
-
-jsonfile@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
- integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==
- optionalDependencies:
- graceful-fs "^4.1.6"
-
-keyv@^4.0.0:
- version "4.5.4"
- resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
- integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
- dependencies:
- json-buffer "3.0.1"
-
-lowercase-keys@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
- integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
-
-matcher@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca"
- integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==
- dependencies:
- escape-string-regexp "^4.0.0"
-
-mimic-response@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
- integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
-
-mimic-response@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
- integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
-
-ms@2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
- integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-
-normalize-url@^6.0.1:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
- integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
-
-object-keys@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
- integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
-
-once@^1.3.1, once@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
- dependencies:
- wrappy "1"
-
-p-cancelable@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf"
- integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==
-
-pend@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
- integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
-
-progress@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
- integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
-
-pump@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
- integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
- dependencies:
- end-of-stream "^1.1.0"
- once "^1.3.1"
-
-quick-lru@^5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
- integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
-
-resolve-alpn@^1.0.0:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9"
- integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==
-
-responselike@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc"
- integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==
- dependencies:
- lowercase-keys "^2.0.0"
-
-roarr@^2.15.3:
- version "2.15.4"
- resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd"
- integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==
- dependencies:
- boolean "^3.0.1"
- detect-node "^2.0.4"
- globalthis "^1.0.1"
- json-stringify-safe "^5.0.1"
- semver-compare "^1.0.0"
- sprintf-js "^1.1.2"
-
-semver-compare@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
- integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==
-
-semver@^6.2.0:
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
- integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-
-semver@^7.3.2:
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13"
- integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==
-
-serialize-error@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18"
- integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==
- dependencies:
- type-fest "^0.13.1"
-
-sprintf-js@^1.1.2:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a"
- integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==
-
-sumchecker@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42"
- integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==
- dependencies:
- debug "^4.1.0"
-
-type-fest@^0.13.1:
- version "0.13.1"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
- integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
-
-undici-types@~5.26.4:
- version "5.26.5"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
- integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
-
-universalify@^0.1.0:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
- integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
-
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
- integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
-
-yauzl@^2.10.0:
- version "2.10.0"
- resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
- integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==
- dependencies:
- buffer-crc32 "~0.2.3"
- fd-slicer "~1.1.0"
diff --git a/jest.config.js b/jest.config.js
deleted file mode 100644
index ae595744..00000000
--- a/jest.config.js
+++ /dev/null
@@ -1,9 +0,0 @@
-module.exports = {
- collectCoverageFrom: ['**/*.{ts,tsx}', '!**/node_modules/**', '!**/*.d.ts'],
- moduleFileExtensions: ['js', 'ts', 'tsx'],
- rootDir: '.',
- transform: {
- '^.+\\.(ts|tsx)$': 'ts-jest',
- },
- testRegex: 'spec\\.(ts|tsx)$',
-};
diff --git a/package.json b/package.json
index 216c9768..f240cdbc 100644
--- a/package.json
+++ b/package.json
@@ -1,65 +1,77 @@
{
- "name": "menubar",
- "version": "9.5.2",
- "author": "Max Ogden",
- "bugs": {
- "url": "https://github.com/maxogden/menubar/issues"
- },
+ "name": "electron-menubar",
+ "version": "10.1.1",
"description": "high level way to create menubar desktop applications with electron",
- "files": [
- "/assets",
- "/lib"
- ],
- "homepage": "https://github.com/maxogden/menubar",
"keywords": [
+ "app",
"electron",
- "shell",
- "menubar",
+ "linux",
+ "mac",
"menu",
+ "menubar",
+ "shell",
"taskbar",
"tray",
"traybar",
- "mac",
- "linux",
- "windows",
- "app"
+ "windows"
],
- "license": "BSD-2-Clause",
- "main": "lib/index.js",
- "publishConfig": {
- "access": "public"
+ "homepage": "https://github.com/gitify-app/electron-menubar",
+ "bugs": {
+ "url": "https://github.com/gitify-app/electron-menubar/issues"
},
+ "license": "BSD-2-Clause",
+ "author": "Gitify",
+ "contributors": [
+ "Afonso Jorge Ramos (https://github.com/afonsojramos)",
+ "Adam Setch (https://github.com/setchy)"
+ ],
"repository": {
"type": "git",
- "url": "https://github.com/maxogden/menubar.git"
+ "url": "git+https://github.com/gitify-app/electron-menubar.git"
},
- "scripts": {
- "build": "rimraf lib/ && tsc",
- "deploy": "yarn build && standard-version",
- "docs": "typedoc",
- "lint:check": "biome check",
- "lint": "biome check --fix",
- "test": "jest"
+ "files": [
+ "assets/IconTemplate.png",
+ "assets/IconTemplate@2x.png",
+ "lib"
+ ],
+ "main": "lib/index.cjs",
+ "module": "lib/index.mjs",
+ "types": "lib/index.d.cts",
+ "exports": {
+ ".": {
+ "import": {
+ "types": "./lib/index.d.mts",
+ "default": "./lib/index.mjs"
+ },
+ "require": {
+ "types": "./lib/index.d.cts",
+ "default": "./lib/index.cjs"
+ }
+ }
+ },
+ "publishConfig": {
+ "access": "public"
},
- "types": "lib/index.d.ts",
- "dependencies": {
- "electron-positioner": "^4.1.0"
+ "scripts": {
+ "build": "vp pack",
+ "lint:check": "vp check",
+ "lint": "vp check --fix",
+ "test": "vp test",
+ "test:e2e": "playwright test --config tests/e2e/playwright.config.ts",
+ "test:visual": "node tests/visual/run.mts",
+ "typecheck": "tsc --noEmit"
},
"devDependencies": {
- "@biomejs/biome": "^1.9.3",
- "@types/jest": "^25.2.3",
- "electron": "^34.3.0",
- "jest": "^26.0.1",
- "rimraf": "^3.0.2",
- "standard-version": "^8.0.0",
- "ts-jest": "^26.0.0",
- "typedoc": "^0.17.7",
- "typedoc-plugin-markdown": "^2.2.17",
- "typedoc-plugin-no-inherit": "^1.1.10",
- "typescript": "^4.6.2"
+ "@playwright/test": "1.61.1",
+ "@types/pngjs": "6.0.5",
+ "electron": "43.0.0",
+ "pngjs": "7.0.0",
+ "typescript": "6.0.3",
+ "vite-plus": "0.2.1",
+ "vitest": "npm:@voidzero-dev/vite-plus-test@0.1.24"
},
"peerDependencies": {
- "electron": ">=9.0.0 <35.0.0"
+ "electron": "43.0.0"
},
- "packageManager": "yarn@1.22.22"
+ "packageManager": "pnpm@11.9.0"
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 00000000..1f00b885
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,2073 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+overrides:
+ vite: npm:@voidzero-dev/vite-plus-core@latest
+ yauzl: 3.4.0
+
+importers:
+
+ .:
+ devDependencies:
+ '@playwright/test':
+ specifier: 1.61.1
+ version: 1.61.1
+ '@types/pngjs':
+ specifier: 6.0.5
+ version: 6.0.5
+ electron:
+ specifier: 43.0.0
+ version: 43.0.0
+ pngjs:
+ specifier: 7.0.0
+ version: 7.0.0
+ typescript:
+ specifier: 6.0.3
+ version: 6.0.3
+ vite-plus:
+ specifier: 0.2.1
+ version: 0.2.1(@types/node@26.0.1)(typescript@6.0.3)(vite@8.1.0(@types/node@26.0.1))
+ vitest:
+ specifier: npm:@voidzero-dev/vite-plus-test@0.1.24
+ version: '@voidzero-dev/vite-plus-test@0.1.24(@types/node@26.0.1)(typescript@6.0.3)(vite@8.1.0(@types/node@26.0.1))'
+
+packages:
+
+ '@babel/code-frame@7.29.7':
+ resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.29.7':
+ resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/runtime@7.29.7':
+ resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==}
+ engines: {node: '>=6.9.0'}
+
+ '@blazediff/core@1.9.1':
+ resolution: {integrity: sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==}
+
+ '@electron-internal/extract-zip@1.0.4':
+ resolution: {integrity: sha512-Zr1Vs7E9tpCNhZHDAbFVXc2gEVCG9RqPDjrno5+bdgB6LRAuvgyMHJut4NCVyYwtAieapMzc3fiQ3CSTi75ARg==}
+ engines: {node: '>=22.12.0'}
+
+ '@electron/get@5.0.0':
+ resolution: {integrity: sha512-pjoBpru1KdEtcExBnuHAP1cAc/5faoedw0hzJkL3o4/IJp7HNF1+fbrdxT3gMYRX2oJfvnA/WXeCTVQpYYxyJA==}
+ engines: {node: '>=22.12.0'}
+
+ '@emnapi/core@1.11.1':
+ resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==}
+
+ '@emnapi/runtime@1.11.1':
+ resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==}
+
+ '@emnapi/wasi-threads@1.2.2':
+ resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@napi-rs/wasm-runtime@1.1.6':
+ resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==}
+ peerDependencies:
+ '@emnapi/core': ^1.7.1
+ '@emnapi/runtime': ^1.7.1
+
+ '@oxc-project/runtime@0.133.0':
+ resolution: {integrity: sha512-PkvjA1Lq5++V5S1E6Patr92ZVcieE6EalDr1VJTqv4BnjZdOUC4W3p8k1wMXSd5/2aFP4b/A6N5sg2Bkzcr9vQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ '@oxc-project/runtime@0.136.0':
+ resolution: {integrity: sha512-u0EutjK5y6NHJkl5jNJCs8zbup1z6A/UEWgajrYzqcEU3UX05HjqybhMQOLhSM0eKGISyM6WfSMMuklYSmH2wA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ '@oxc-project/types@0.133.0':
+ resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==}
+
+ '@oxc-project/types@0.136.0':
+ resolution: {integrity: sha512-39Al/B3v9esnHCX7S8l9Se2+s2tb9b2jcMd+bZ2L659VG73kNyGPpPrL5Zi/p0ty7p4pTTU2/Dd+g27hv94XCg==}
+
+ '@oxc-project/types@0.137.0':
+ resolution: {integrity: sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==}
+
+ '@oxfmt/binding-android-arm-eabi@0.55.0':
+ resolution: {integrity: sha512-+rFDOqQe5LOWgxrAJaZgLRudr6GQm0wGI6gtu7vVkrdLGjNMUSGbAlaCr8j7F2H2Er97vYQCU8WDb30onqMM1g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
+
+ '@oxfmt/binding-android-arm64@0.55.0':
+ resolution: {integrity: sha512-ctulLq8s3x8Zmvw6+iccB09TIKERAklRSmbJ10gk8mlAn05qZxoyo52dj3Hi9IJcmDSwF54fQaTVh2CbL6PInw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@oxfmt/binding-darwin-arm64@0.55.0':
+ resolution: {integrity: sha512-xDQczLH9pw/RBk1h/GH0qcGMm8hQtmtVHBNLSH3lk1gEIR09hZ4L+mJQl4VqiVAvPK9VG9PYrWWuSQLt7xTbiA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxfmt/binding-darwin-x64@0.55.0':
+ resolution: {integrity: sha512-JaNoFCkF2CJdGgpPSMbuO9HVyXyoNGIhMHPvp6NYAjeVKw9XEYc0HcUWJLPQa3Q69WV5wMa9m5jPMJPtbLtcRg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxfmt/binding-freebsd-x64@0.55.0':
+ resolution: {integrity: sha512-DNbszhpg6S2MIzax5azdHFTTBIVkR5xr8yyRZuA4yoDAwOkzIp3tmldgKZM2+VlT+hJIG0xUksA+elISzMEAfA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oxfmt/binding-linux-arm-gnueabihf@0.55.0':
+ resolution: {integrity: sha512-2snoaoRfFFyGnbOcKUK36rREBYxe/Xgz3uHbiA5zbCB/s6R4DQj4mHqYAaWWhgizCUSDxV8cE9zAZ0XleNpKGw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxfmt/binding-linux-arm-musleabihf@0.55.0':
+ resolution: {integrity: sha512-q1aktHF/WRpSK81BX1dE/9vWrS2jGw1Nax2kb4DBLGAewubCLcoNyp4Zl/NSMgbv3vUS46Z33wIQkBVYOP3PYg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxfmt/binding-linux-arm64-gnu@0.55.0':
+ resolution: {integrity: sha512-VD0y36aENezl/3tsclA/4G53Cc7iV+7Uoh7gz4yvcOTaEYBtJpQsE6PKDGTtUtOvGS4kv51ybfXY/nWZejO5IA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxfmt/binding-linux-arm64-musl@0.55.0':
+ resolution: {integrity: sha512-r8xlKJFcsRmn0H5jZrdORae6RX9jDBrZVvOoxF+bCQtampQJClv80aZEHsv+NsLsp2KCE5ql79O7DpPVzYWpXA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxfmt/binding-linux-ppc64-gnu@0.55.0':
+ resolution: {integrity: sha512-GRKv/HXHcwIVld/WU61rF0g0R16hl5EJ+ScKdpjevT57lnLnagj/U2YUbXf2mT+2Pg1uCzWC+mvGicPV3CDdLQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxfmt/binding-linux-riscv64-gnu@0.55.0':
+ resolution: {integrity: sha512-rdv57enTiPtpSYRMKfAiEbQb0Puw5t9N7isVinDoo5qeLDScro2gznmZqSgSWbVZRzLisTeCTW8Qwgw0bOHv3A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxfmt/binding-linux-riscv64-musl@0.55.0':
+ resolution: {integrity: sha512-7v1nNrlD43VY6+sYQ6efYyb3lE6QY182304PD/768ZxTjOmFd/3dQa3u/nGBUAXYdGSWOQc5N3PnS0QzUXyEIA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxfmt/binding-linux-s390x-gnu@0.55.0':
+ resolution: {integrity: sha512-f4lJLUSPOgScjFl9LiflKCTocyNRwE25JmTMbN4XQdDjoZzEHjqf3wA3VESF1/csg7i8m7+EQLbrZyYDqe10UQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxfmt/binding-linux-x64-gnu@0.55.0':
+ resolution: {integrity: sha512-MihqiPziJNoWy4MqNSV+jVA1g+07iQDjZiR0vaCaDoPgFEiJpCMsxamktzLV07cEeQsSJ04vQaU4CzCQwIvtDA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxfmt/binding-linux-x64-musl@0.55.0':
+ resolution: {integrity: sha512-Yqghym7KYAVjP9MmSrNZiDeerMuoejNjo0r3ox5H3GDKk8eAfl8VyJm9i+pWCLDCTnAbcTUMMN2ZKjUYXH1v3g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxfmt/binding-openharmony-arm64@0.55.0':
+ resolution: {integrity: sha512-s5SDvVVSbyQl1V5UU3Yl12M+XLUQ3rl5SglNqgAA2K4PXUtQhyNSS00wivONPEnNo5W01rCou8WkDNyvI/RGHg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@oxfmt/binding-win32-arm64-msvc@0.55.0':
+ resolution: {integrity: sha512-7p9FB5R32tw2KyyNX3wpQrR2WHwEHvMEiBlGXxeTCaRMCVNx3UtFMAUbaQ/pRNWIrEUZmYhJ6tcUH52uPTRYjQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxfmt/binding-win32-ia32-msvc@0.55.0':
+ resolution: {integrity: sha512-ZYqj3fDnOT1IaVGMP5kpmkQl4F3tQIm2ZyAxvqkJYmI0xgWWak4ss4XYwv3VDfM+TWXeC9K4uQ/wW5jm/5XABA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@oxfmt/binding-win32-x64-msvc@0.55.0':
+ resolution: {integrity: sha512-eEYT5tivGnGbPHuOHuQpi6CGLObhh0re/5jcNQHihD2GRYkTM85dyi5a19zjP8Q00t1uqAx+/QGLUGdHeqzWyg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@oxlint-tsgolint/darwin-arm64@0.23.0':
+ resolution: {integrity: sha512-gOs9PVr2wEg4ox9z0aJo+RKhhImW86YL5N6yav8BK/rgPsIrwN/igSZ+pbRr723NFvUNKde9fgMhRA6JrXAOZw==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxlint-tsgolint/darwin-x64@0.23.0':
+ resolution: {integrity: sha512-kjJ8B+7n4tB9VJdxS5A9GdJt6/bYpzbu4lXp2uO1S3sRmCB5gDEABlGoiePNApRWaW+xqL4b4xgiE727jSLhuA==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxlint-tsgolint/linux-arm64@0.23.0':
+ resolution: {integrity: sha512-6dCZuKNu135seMXilkRk9SpCx6i1XgmiipYGalLij5WVRX6ZYS8c4xI7preN/zv9fCXhsQclTIMDu2Y/cytTjw==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@oxlint-tsgolint/linux-x64@0.23.0':
+ resolution: {integrity: sha512-3bdilnyA7kmSTjK27rvjIjSxL5SIg3wt7vwNiRkouWB83ytssyKnuGvxSYJxgMEmFpSutzaBzcCUM2jDtPGcgA==}
+ cpu: [x64]
+ os: [linux]
+
+ '@oxlint-tsgolint/win32-arm64@0.23.0':
+ resolution: {integrity: sha512-j+OEp44SVYiQ+ZD+uttsX7u6L9SvmbbQ77SO1pSFCcJlsVMeCk8qZsjhKfGKuT/jIA+ipOJMVs/+pqUfObBWNw==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxlint-tsgolint/win32-x64@0.23.0':
+ resolution: {integrity: sha512-5MyjFuqf+g8OUPJBSGWHJtmoWnzFJYyOg4To9WMQshZYEWig/vtu7JtJ03VWnzHv9LJkAUeApY0gVCOywFR/iQ==}
+ cpu: [x64]
+ os: [win32]
+
+ '@oxlint/binding-android-arm-eabi@1.70.0':
+ resolution: {integrity: sha512-zFh0P4cswmRvw6nkyb89dr18rRanuaCPAsEXsFDoQY8WdaquI8Pt4NWFjaMJg6L23cy5NeN8J9cBnREbWzZhaw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
+
+ '@oxlint/binding-android-arm64@1.70.0':
+ resolution: {integrity: sha512-qI8o4HZjeGiBrWv+pJv4lH0Yi2Gl/JSp/EumBUApezJprIKa5PS4nU0lQsQngtky8k+SplQIOjv6hwu0SSxeyg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@oxlint/binding-darwin-arm64@1.70.0':
+ resolution: {integrity: sha512-8KjgVVHI5F9nVwHCRwwA78Ty7zNKP4Wd9OeN5PSv3iu/F/u1RVXoOCgLhWqust6HmwQG6xc8c+RCyaWENy24+w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxlint/binding-darwin-x64@1.70.0':
+ resolution: {integrity: sha512-WVydssv5PSUBXFJTdNBWlmGkbNmvPGaFt/2SUT/EZRB6bq6bEOHmMlbnupZD5jmlEvi9+mZJHi8TCw15lyfSfQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxlint/binding-freebsd-x64@1.70.0':
+ resolution: {integrity: sha512-hJucmUf8OlinHNb1R7fI4Fw6WsAstOz7i8nmkWQfiHoZXtbufNm+MxiDTIMk1ggh2Ro4vLzgQ+bKvRY54MZoRA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oxlint/binding-linux-arm-gnueabihf@1.70.0':
+ resolution: {integrity: sha512-1BnS7wbCYDSXwWzJJ+mc3NURoha6m6m6RT5c6vgAY3oz7C3OVXP+S0awo2mRq97arrJkVvO3qRQfyAHL+76xtQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxlint/binding-linux-arm-musleabihf@1.70.0':
+ resolution: {integrity: sha512-yKy/UdbR55+M2yEcuiV5DCNC/gdQAjr/GioUy50QwBzSrKm8ueWADqyRLS9Xk+qjNeCYGg6A8FvUBds56ttfqg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxlint/binding-linux-arm64-gnu@1.70.0':
+ resolution: {integrity: sha512-0A5XJ4alvmqFUFP/4oYSyaO+qLto/HrKEWTSaegiVl+HOufFngK2BjYw9x4RbwBt/du5QG6l5q1zeWiJYYG5yg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxlint/binding-linux-arm64-musl@1.70.0':
+ resolution: {integrity: sha512-JiylyurlB0CLSedNtx1gzv3FvfWPF1h/2Y3BJszPLNt5XQFlBsH5ke0Jle3iJb3uqu5m2e7A/DwzpuCAHdiU+A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxlint/binding-linux-ppc64-gnu@1.70.0':
+ resolution: {integrity: sha512-J8VPG7I3/HmgaU4u8pNU2kFx2+0U+vPLS1dXFxXOaR/2TQ0f8AC7DRz0SRGRI1bfphnX2hVYTTtLuhL4nYKL+Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxlint/binding-linux-riscv64-gnu@1.70.0':
+ resolution: {integrity: sha512-N2+4lV2KLN+oXTIIIwmWDhwkrnvqf5oX7Hw0zPjk+RuIVgiBQSOlJWF7uQoFx2siEYX0ZQ5cfSbEAHm+J3t7Wg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxlint/binding-linux-riscv64-musl@1.70.0':
+ resolution: {integrity: sha512-1e2L7cFCvx9QDzq6NPP+0tABKb5z6nWHyddWTNKprEsjO9xNrAtPowuCGpjNXxkTdsMiZ4jc8YQ5SstZd4XK6g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxlint/binding-linux-s390x-gnu@1.70.0':
+ resolution: {integrity: sha512-Kwu/l/8GcYibCWA9m9N5pRXMIKVSsL/YbgpLzYkqDhWTiqdRfnNJ/+nqIKRKQiFbHWsdlHEhzMwruJK+qcEruA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxlint/binding-linux-x64-gnu@1.70.0':
+ resolution: {integrity: sha512-tap04CsHYOl0nSAQJfPNIuBxqEPB2HnhQqwaOXLg1jnp2XfRo8Fa814dA4QC4zpvTWXCjAAaCY1W5LOORkEQuQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxlint/binding-linux-x64-musl@1.70.0':
+ resolution: {integrity: sha512-hzJa/WgvtJpbBD9rgfy0qe+MjbxOXNUT0bfR1S6EQQzfTtBFA9xg5q8KSwRrQ2QfSS+TaP4j+4mVPQrfNc6UNg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxlint/binding-openharmony-arm64@1.70.0':
+ resolution: {integrity: sha512-xbsaNSNzVSnaJACCUYr1HQMyY/Q/Q1LkePmHG3UvZPvGCYGNxrsZp9OmtA6ick8xH47ltRRbRrPCM1YXYcyC+A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@oxlint/binding-win32-arm64-msvc@1.70.0':
+ resolution: {integrity: sha512-icAEsUI7JbW1TMRdEXV83mVAInhRVQYuuAlPpxdGwJ95chNdnCzjloRW8GglT0WvzOEZSio6fnYSk2DJ2Hv7LQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxlint/binding-win32-ia32-msvc@1.70.0':
+ resolution: {integrity: sha512-FHMSWbVsPVs/f+Jcl04ws4JJ2wUnauyTzlpxWRG/lSO/8GpX08Fo2gQZqdA6CrRFI+zvkxl+N/KwJGWfUwYVZA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@oxlint/binding-win32-x64-msvc@1.70.0':
+ resolution: {integrity: sha512-ptOlKwCz7n4AKs5VweMqG6DAg677FmKOK+vBkkL9DMNgFATIQ+upqUYBTOEwRQyRAx1ncGlPlXleV2hIcm3z4g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@oxlint/plugins@1.68.0':
+ resolution: {integrity: sha512-titLmukUt/h8ho7Svlf0xSBjoy2ccZKrXjpXpZCj+v6V4CJccC2KyP45BLSCMx8YIpifMyiDyUptM4+5sruKbQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ '@playwright/test@1.61.1':
+ resolution: {integrity: sha512-8nKv6+0RJSL9FE4jYOEGXnPeM/Hg12qZpmqzZjRh3qM0Y7c3z1mrOTfFLids72RDQYVh9WpLEfR5WdpNX4fkig==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ '@polka/url@1.0.0-next.29':
+ resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
+
+ '@rolldown/binding-android-arm64@1.1.3':
+ resolution: {integrity: sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@rolldown/binding-darwin-arm64@1.1.3':
+ resolution: {integrity: sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rolldown/binding-darwin-x64@1.1.3':
+ resolution: {integrity: sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rolldown/binding-freebsd-x64@1.1.3':
+ resolution: {integrity: sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.1.3':
+ resolution: {integrity: sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm64-gnu@1.1.3':
+ resolution: {integrity: sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-arm64-musl@1.1.3':
+ resolution: {integrity: sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-linux-ppc64-gnu@1.1.3':
+ resolution: {integrity: sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-s390x-gnu@1.1.3':
+ resolution: {integrity: sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-x64-gnu@1.1.3':
+ resolution: {integrity: sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-x64-musl@1.1.3':
+ resolution: {integrity: sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-openharmony-arm64@1.1.3':
+ resolution: {integrity: sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rolldown/binding-wasm32-wasi@1.1.3':
+ resolution: {integrity: sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [wasm32]
+
+ '@rolldown/binding-win32-arm64-msvc@1.1.3':
+ resolution: {integrity: sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rolldown/binding-win32-x64-msvc@1.1.3':
+ resolution: {integrity: sha512-OL4OMk7UPXOeVGGd3qo5zJyPIljf4AFgk5QAkPPS+OoLuOOozhuaQGC18MxVTnw/06q93gShAJzlwnSCY9YtqA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@rolldown/pluginutils@1.0.1':
+ resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==}
+
+ '@standard-schema/spec@1.1.0':
+ resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
+
+ '@testing-library/dom@10.4.1':
+ resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==}
+ engines: {node: '>=18'}
+
+ '@testing-library/user-event@14.6.1':
+ resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==}
+ engines: {node: '>=12', npm: '>=6'}
+ peerDependencies:
+ '@testing-library/dom': '>=7.21.4'
+
+ '@tybys/wasm-util@0.10.3':
+ resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==}
+
+ '@types/aria-query@5.0.4':
+ resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
+
+ '@types/chai@5.2.3':
+ resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
+
+ '@types/deep-eql@4.0.2':
+ resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
+
+ '@types/estree@1.0.9':
+ resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==}
+
+ '@types/node@24.13.2':
+ resolution: {integrity: sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==}
+
+ '@types/node@26.0.1':
+ resolution: {integrity: sha512-fc3KiUoBt6kie0N9bIW3E47vZsuaMf0PM2AaUpLCLT0s/LvX1nxAim6Fc049cNxODPpGm6qRAuUOB86SkRuPQw==}
+
+ '@types/pngjs@6.0.5':
+ resolution: {integrity: sha512-0k5eKfrA83JOZPppLtS2C7OUtyNAl2wKNxfyYl9Q5g9lPkgBl/9hNyAu6HuEH2J4XmIv2znEpkDd0SaZVxW6iQ==}
+
+ '@vitest/browser-preview@4.1.9':
+ resolution: {integrity: sha512-a4/OrkMDb/WUnE4OOB/4FJbK3rYVO7YykqtUgcTKG4p2a0R3XcjPVu7SLRHFBs2+NIYhv5yxp1Lz3dbdGBjIow==}
+ peerDependencies:
+ vitest: 4.1.9
+
+ '@vitest/browser@4.1.9':
+ resolution: {integrity: sha512-j1BKtWmPcqpMhmx/L9EPLgAJpCb0zKfwoWLmqBbxaogCXHjOwHFSEoHCBfnGtx93xKQwilZ26m+UOsHqHMkRNg==}
+ peerDependencies:
+ vitest: 4.1.9
+
+ '@vitest/expect@4.1.9':
+ resolution: {integrity: sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==}
+
+ '@vitest/mocker@4.1.9':
+ resolution: {integrity: sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^6.0.0 || ^7.0.0 || ^8.0.0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
+ '@vitest/pretty-format@4.1.9':
+ resolution: {integrity: sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==}
+
+ '@vitest/runner@4.1.9':
+ resolution: {integrity: sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==}
+
+ '@vitest/snapshot@4.1.9':
+ resolution: {integrity: sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==}
+
+ '@vitest/spy@4.1.9':
+ resolution: {integrity: sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==}
+
+ '@vitest/utils@4.1.9':
+ resolution: {integrity: sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==}
+
+ '@voidzero-dev/vite-plus-core@0.1.24':
+ resolution: {integrity: sha512-iXPGBABnQnrDMx89H6MOCGcTZp+QW+3rY4YMVKdE6ydchSvPk2O3MI2vgaRVfOtWJ2IjnxSnf1n2yjP67ZBRFQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ peerDependencies:
+ '@arethetypeswrong/core': ^0.18.1
+ '@tsdown/css': 0.22.1
+ '@tsdown/exe': 0.22.1
+ '@types/node': ^20.19.0 || >=22.12.0
+ '@vitejs/devtools': ^0.1.18
+ esbuild: ^0.27.0 || ^0.28.0
+ jiti: '>=1.21.0'
+ less: ^4.0.0
+ publint: ^0.3.8
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ typescript: ^5.0.0 || ^6.0.0
+ unplugin-unused: ^0.5.0
+ unrun: '*'
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@arethetypeswrong/core':
+ optional: true
+ '@tsdown/css':
+ optional: true
+ '@tsdown/exe':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitejs/devtools':
+ optional: true
+ esbuild:
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ publint:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ typescript:
+ optional: true
+ unplugin-unused:
+ optional: true
+ unrun:
+ optional: true
+ yaml:
+ optional: true
+
+ '@voidzero-dev/vite-plus-core@0.2.1':
+ resolution: {integrity: sha512-iWdtOlLezgYcDqIzxZx1yOUhY93vUB+ob+mRYBNr7/3Hf80uRyTQbqVD1WtsYaANbzeUi81SQ1ZoUraXHO+u8A==}
+ engines: {node: ^20.19.0 || ^22.18.0 || >=24.11.0}
+ peerDependencies:
+ '@arethetypeswrong/core': ^0.18.1
+ '@tsdown/css': 0.22.3
+ '@tsdown/exe': 0.22.3
+ '@types/node': ^20.19.0 || >=22.12.0
+ '@vitejs/devtools': ^0.1.18
+ esbuild: ^0.27.0 || ^0.28.0
+ jiti: '>=1.21.0'
+ less: ^4.0.0
+ publint: ^0.3.8
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ typescript: ^5.0.0 || ^6.0.0
+ unplugin-unused: ^0.5.0
+ unrun: '*'
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@arethetypeswrong/core':
+ optional: true
+ '@tsdown/css':
+ optional: true
+ '@tsdown/exe':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitejs/devtools':
+ optional: true
+ esbuild:
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ publint:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ typescript:
+ optional: true
+ unplugin-unused:
+ optional: true
+ unrun:
+ optional: true
+ yaml:
+ optional: true
+
+ '@voidzero-dev/vite-plus-darwin-arm64@0.2.1':
+ resolution: {integrity: sha512-9AfN/5LKRks8gbTaHPiQHT0L4yboy2xB6x6vvCRWxQMWxPS6/ZJLf5kUIZeE7I1z33AEyLKKkDscsZZVMgMLgg==}
+ engines: {node: ^20.19.0 || ^22.18.0 || >=24.11.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@voidzero-dev/vite-plus-darwin-x64@0.2.1':
+ resolution: {integrity: sha512-Q1vyimRbf4M82qIQSWRyr7NJaH9ag5G7vVEfGVVJlQHNprI+Q8zj2Phcs/PGf6QcyjcL8UclLznQTHU9NgnKZw==}
+ engines: {node: ^20.19.0 || ^22.18.0 || >=24.11.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@voidzero-dev/vite-plus-linux-arm64-gnu@0.2.1':
+ resolution: {integrity: sha512-WHW3DziqedRfhJ2upq6kC4y/pmdQWYt322DVB7+4Xb4oOa/CT9GtnSrWIiXVJ4PSO42v54+YsSTKPH2HC5RbtA==}
+ engines: {node: ^20.19.0 || ^22.18.0 || >=24.11.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@voidzero-dev/vite-plus-linux-arm64-musl@0.2.1':
+ resolution: {integrity: sha512-vUY7hYycZW0qEevpl7ImzZJFnOEKRYCaCOX4TBW0vk6MJZ+zj/xW7e0LOggzJcz2wbYAgLDqp5h+b8wV9dguDA==}
+ engines: {node: ^20.19.0 || ^22.18.0 || >=24.11.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@voidzero-dev/vite-plus-linux-x64-gnu@0.2.1':
+ resolution: {integrity: sha512-tFxpToEaykBGxMQHp8M/qmr1yruRRED+c9gA1h9kmplqot04OxuqzRCWu/IiIvMJ0v3JFdOP3gqkyjXLLJhxIA==}
+ engines: {node: ^20.19.0 || ^22.18.0 || >=24.11.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@voidzero-dev/vite-plus-linux-x64-musl@0.2.1':
+ resolution: {integrity: sha512-2scSS7wEbLO2758fqr1/bAULg7nLCFa5V8LO2b5w3g1CrTYdMTDt2WX1ghPesIi+70pYGydRbXo6iaaN43zfMg==}
+ engines: {node: ^20.19.0 || ^22.18.0 || >=24.11.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@voidzero-dev/vite-plus-test@0.1.24':
+ resolution: {integrity: sha512-9NiG6UadG0iOaPL1AMsO5sDKkx6MADHw4/mMOmHWZUhhUwqzfVtnnptMK37vD71e6KyR7yAscx19FrtOWWtjvA==}
+ engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
+ peerDependencies:
+ '@edge-runtime/vm': '*'
+ '@opentelemetry/api': ^1.9.0
+ '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
+ '@vitest/coverage-istanbul': 4.1.8
+ '@vitest/coverage-v8': 4.1.8
+ '@vitest/ui': 4.1.8
+ happy-dom: '*'
+ jsdom: '*'
+ vite: ^6.0.0 || ^7.0.0 || ^8.0.0
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@opentelemetry/api':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/coverage-istanbul':
+ optional: true
+ '@vitest/coverage-v8':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
+ '@voidzero-dev/vite-plus-win32-arm64-msvc@0.2.1':
+ resolution: {integrity: sha512-3+5FJYhi9SqBszjngI2LBmvoiqEwxJWyQ5UsOUtNz6/d+yDrDw+tOgHLl4OKIh5aVNZeIGXzxvP6h24kcEqIyg==}
+ engines: {node: ^20.19.0 || ^22.18.0 || >=24.11.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@voidzero-dev/vite-plus-win32-x64-msvc@0.2.1':
+ resolution: {integrity: sha512-5sOEwEoU5PW7ObmJ5VCakU09Oh14rYCoLQJkFqvOph6PK30lN5iqWGk0KigEyfcd7Zv+fZg9EmcERDol/3Xl9w==}
+ engines: {node: ^20.19.0 || ^22.18.0 || >=24.11.0}
+ cpu: [x64]
+ os: [win32]
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@5.2.0:
+ resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
+ engines: {node: '>=10'}
+
+ aria-query@5.3.0:
+ resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
+
+ assertion-error@2.0.1:
+ resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
+ engines: {node: '>=12'}
+
+ chai@6.2.2:
+ resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==}
+ engines: {node: '>=18'}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ dequal@2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+ engines: {node: '>=6'}
+
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
+ dom-accessibility-api@0.5.16:
+ resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
+
+ electron@43.0.0:
+ resolution: {integrity: sha512-PV60GsWU6qufhuOhw3n+Yix3WPDcqDtBqE8orbEQGQGHEkgp9o/JCPgb7L4vIL0r1HnfPdqSRtboOTqbDkcFDQ==}
+ engines: {node: '>= 22.12.0'}
+ hasBin: true
+
+ env-paths@3.0.0:
+ resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ es-module-lexer@1.7.0:
+ resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+
+ es-module-lexer@2.1.0:
+ resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==}
+
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
+ expect-type@1.4.0:
+ resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==}
+ engines: {node: '>=12.0.0'}
+
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ fsevents@2.3.2:
+ resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ lightningcss-android-arm64@1.32.0:
+ resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ lightningcss-darwin-arm64@1.32.0:
+ resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.32.0:
+ resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.32.0:
+ resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ lightningcss-linux-x64-musl@1.32.0:
+ resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.32.0:
+ resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
+ engines: {node: '>= 12.0.0'}
+
+ lz-string@1.5.0:
+ resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
+ hasBin: true
+
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
+ mrmime@2.0.1:
+ resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
+ engines: {node: '>=10'}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.15:
+ resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ obug@2.1.3:
+ resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==}
+ engines: {node: '>=12.20.0'}
+
+ oxfmt@0.55.0:
+ resolution: {integrity: sha512-jSj2wCTakwgPMxkfiVZX0jf+nX+Nz6xlyAZjqNE0qXTFdCBPYlP6JAN+ODjmealw7DXBjOzYbdsqwBMAZnPZ6A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ svelte: ^5.0.0
+ vite-plus: '*'
+ peerDependenciesMeta:
+ svelte:
+ optional: true
+ vite-plus:
+ optional: true
+
+ oxlint-tsgolint@0.23.0:
+ resolution: {integrity: sha512-3mBv3CoPbh8dFbzfDGIWa2ytZjn2v+3EX4aKRXjIhsoGFzG8GCjfRirz3rwZf1wYbZzsNLTSgpw8VjQuWdp/jA==}
+ hasBin: true
+
+ oxlint@1.70.0:
+ resolution: {integrity: sha512-D6JgHtzkhRwvEC+A0Nw5AEc5bk8x5i1pHzvZIEf/a0C4hOzmAACNGtkDGPyFaxxX3ZVGxCPeig3P3rMM8XU3/g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ oxlint-tsgolint: '>=0.22.1'
+ vite-plus: '*'
+ peerDependenciesMeta:
+ oxlint-tsgolint:
+ optional: true
+ vite-plus:
+ optional: true
+
+ pathe@2.0.3:
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@4.0.4:
+ resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==}
+ engines: {node: '>=12'}
+
+ pixelmatch@7.2.0:
+ resolution: {integrity: sha512-xhcb4yHu9sM/G7foGzoLtXYcC0zHEaOXXjRKhGup0fw78Nf2Tkiapv4EQyMzrbcmQPsllAI7DbFY2UT7PlI9Pg==}
+ hasBin: true
+
+ playwright-core@1.61.1:
+ resolution: {integrity: sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ playwright@1.61.1:
+ resolution: {integrity: sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ pngjs@7.0.0:
+ resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==}
+ engines: {node: '>=14.19.0'}
+
+ postcss@8.5.15:
+ resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ pretty-format@27.5.1:
+ resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
+ engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
+
+ progress@2.0.3:
+ resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
+ engines: {node: '>=0.4.0'}
+
+ react-is@17.0.2:
+ resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
+
+ rolldown@1.1.3:
+ resolution: {integrity: sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ semver@7.8.5:
+ resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ siginfo@2.0.0:
+ resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+
+ sirv@3.0.2:
+ resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==}
+ engines: {node: '>=18'}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ stackback@0.0.2:
+ resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+
+ std-env@4.1.0:
+ resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==}
+
+ sumchecker@3.0.1:
+ resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==}
+ engines: {node: '>= 8.0'}
+
+ tinybench@2.9.0:
+ resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
+
+ tinyexec@1.2.4:
+ resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==}
+ engines: {node: '>=18'}
+
+ tinyglobby@0.2.17:
+ resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
+ engines: {node: '>=12.0.0'}
+
+ tinypool@2.1.0:
+ resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==}
+ engines: {node: ^20.0.0 || >=22.0.0}
+
+ tinyrainbow@3.1.0:
+ resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==}
+ engines: {node: '>=14.0.0'}
+
+ totalist@3.0.1:
+ resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
+ engines: {node: '>=6'}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ typescript@6.0.3:
+ resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@7.18.2:
+ resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==}
+
+ undici-types@8.3.0:
+ resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==}
+
+ undici@7.28.0:
+ resolution: {integrity: sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==}
+ engines: {node: '>=20.18.1'}
+
+ vite-plus@0.2.1:
+ resolution: {integrity: sha512-q5q/Y38UkWFsNg1JO+RyRdPUqoewaSqIlMyK2p83GKNUvf4D38Ntb3PToRTDZbTRh7mWt+B+d0DQBv4nCDpMcQ==}
+ engines: {node: ^20.19.0 || ^22.18.0 || >=24.11.0}
+ hasBin: true
+ peerDependencies:
+ '@vitest/browser-playwright': 4.1.9
+ '@vitest/browser-webdriverio': 4.1.9
+ peerDependenciesMeta:
+ '@vitest/browser-playwright':
+ optional: true
+ '@vitest/browser-webdriverio':
+ optional: true
+
+ vite@8.1.0:
+ resolution: {integrity: sha512-BuJcQK/56NQTWDGn4ABea3q4SSBdNPWwNZKTkkUpcMPnLoquSYH8llRtSUIgoL1KSCpHt5eghLShn50mH36y7Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^20.19.0 || >=22.12.0
+ '@vitejs/devtools': ^0.3.0
+ esbuild: ^0.27.0 || ^0.28.0
+ jiti: '>=1.21.0'
+ less: ^4.0.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ '@vitejs/devtools':
+ optional: true
+ esbuild:
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
+ vitest@4.1.9:
+ resolution: {integrity: sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==}
+ engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
+ hasBin: true
+ peerDependencies:
+ '@edge-runtime/vm': '*'
+ '@opentelemetry/api': ^1.9.0
+ '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
+ '@vitest/browser-playwright': 4.1.9
+ '@vitest/browser-preview': 4.1.9
+ '@vitest/browser-webdriverio': 4.1.9
+ '@vitest/coverage-istanbul': 4.1.9
+ '@vitest/coverage-v8': 4.1.9
+ '@vitest/ui': 4.1.9
+ happy-dom: '*'
+ jsdom: '*'
+ vite: ^6.0.0 || ^7.0.0 || ^8.0.0
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@opentelemetry/api':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser-playwright':
+ optional: true
+ '@vitest/browser-preview':
+ optional: true
+ '@vitest/browser-webdriverio':
+ optional: true
+ '@vitest/coverage-istanbul':
+ optional: true
+ '@vitest/coverage-v8':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
+ why-is-node-running@2.3.0:
+ resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ ws@8.21.0:
+ resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==}
+ 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
+
+snapshots:
+
+ '@babel/code-frame@7.29.7':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.29.7
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/helper-validator-identifier@7.29.7': {}
+
+ '@babel/runtime@7.29.7': {}
+
+ '@blazediff/core@1.9.1': {}
+
+ '@electron-internal/extract-zip@1.0.4': {}
+
+ '@electron/get@5.0.0':
+ dependencies:
+ debug: 4.4.3
+ env-paths: 3.0.0
+ graceful-fs: 4.2.11
+ progress: 2.0.3
+ semver: 7.8.5
+ sumchecker: 3.0.1
+ optionalDependencies:
+ undici: 7.28.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@emnapi/core@1.11.1':
+ dependencies:
+ '@emnapi/wasi-threads': 1.2.2
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/runtime@1.11.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/wasi-threads@1.2.2':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)':
+ dependencies:
+ '@emnapi/core': 1.11.1
+ '@emnapi/runtime': 1.11.1
+ '@tybys/wasm-util': 0.10.3
+ optional: true
+
+ '@oxc-project/runtime@0.133.0': {}
+
+ '@oxc-project/runtime@0.136.0': {}
+
+ '@oxc-project/types@0.133.0': {}
+
+ '@oxc-project/types@0.136.0': {}
+
+ '@oxc-project/types@0.137.0': {}
+
+ '@oxfmt/binding-android-arm-eabi@0.55.0':
+ optional: true
+
+ '@oxfmt/binding-android-arm64@0.55.0':
+ optional: true
+
+ '@oxfmt/binding-darwin-arm64@0.55.0':
+ optional: true
+
+ '@oxfmt/binding-darwin-x64@0.55.0':
+ optional: true
+
+ '@oxfmt/binding-freebsd-x64@0.55.0':
+ optional: true
+
+ '@oxfmt/binding-linux-arm-gnueabihf@0.55.0':
+ optional: true
+
+ '@oxfmt/binding-linux-arm-musleabihf@0.55.0':
+ optional: true
+
+ '@oxfmt/binding-linux-arm64-gnu@0.55.0':
+ optional: true
+
+ '@oxfmt/binding-linux-arm64-musl@0.55.0':
+ optional: true
+
+ '@oxfmt/binding-linux-ppc64-gnu@0.55.0':
+ optional: true
+
+ '@oxfmt/binding-linux-riscv64-gnu@0.55.0':
+ optional: true
+
+ '@oxfmt/binding-linux-riscv64-musl@0.55.0':
+ optional: true
+
+ '@oxfmt/binding-linux-s390x-gnu@0.55.0':
+ optional: true
+
+ '@oxfmt/binding-linux-x64-gnu@0.55.0':
+ optional: true
+
+ '@oxfmt/binding-linux-x64-musl@0.55.0':
+ optional: true
+
+ '@oxfmt/binding-openharmony-arm64@0.55.0':
+ optional: true
+
+ '@oxfmt/binding-win32-arm64-msvc@0.55.0':
+ optional: true
+
+ '@oxfmt/binding-win32-ia32-msvc@0.55.0':
+ optional: true
+
+ '@oxfmt/binding-win32-x64-msvc@0.55.0':
+ optional: true
+
+ '@oxlint-tsgolint/darwin-arm64@0.23.0':
+ optional: true
+
+ '@oxlint-tsgolint/darwin-x64@0.23.0':
+ optional: true
+
+ '@oxlint-tsgolint/linux-arm64@0.23.0':
+ optional: true
+
+ '@oxlint-tsgolint/linux-x64@0.23.0':
+ optional: true
+
+ '@oxlint-tsgolint/win32-arm64@0.23.0':
+ optional: true
+
+ '@oxlint-tsgolint/win32-x64@0.23.0':
+ optional: true
+
+ '@oxlint/binding-android-arm-eabi@1.70.0':
+ optional: true
+
+ '@oxlint/binding-android-arm64@1.70.0':
+ optional: true
+
+ '@oxlint/binding-darwin-arm64@1.70.0':
+ optional: true
+
+ '@oxlint/binding-darwin-x64@1.70.0':
+ optional: true
+
+ '@oxlint/binding-freebsd-x64@1.70.0':
+ optional: true
+
+ '@oxlint/binding-linux-arm-gnueabihf@1.70.0':
+ optional: true
+
+ '@oxlint/binding-linux-arm-musleabihf@1.70.0':
+ optional: true
+
+ '@oxlint/binding-linux-arm64-gnu@1.70.0':
+ optional: true
+
+ '@oxlint/binding-linux-arm64-musl@1.70.0':
+ optional: true
+
+ '@oxlint/binding-linux-ppc64-gnu@1.70.0':
+ optional: true
+
+ '@oxlint/binding-linux-riscv64-gnu@1.70.0':
+ optional: true
+
+ '@oxlint/binding-linux-riscv64-musl@1.70.0':
+ optional: true
+
+ '@oxlint/binding-linux-s390x-gnu@1.70.0':
+ optional: true
+
+ '@oxlint/binding-linux-x64-gnu@1.70.0':
+ optional: true
+
+ '@oxlint/binding-linux-x64-musl@1.70.0':
+ optional: true
+
+ '@oxlint/binding-openharmony-arm64@1.70.0':
+ optional: true
+
+ '@oxlint/binding-win32-arm64-msvc@1.70.0':
+ optional: true
+
+ '@oxlint/binding-win32-ia32-msvc@1.70.0':
+ optional: true
+
+ '@oxlint/binding-win32-x64-msvc@1.70.0':
+ optional: true
+
+ '@oxlint/plugins@1.68.0': {}
+
+ '@playwright/test@1.61.1':
+ dependencies:
+ playwright: 1.61.1
+
+ '@polka/url@1.0.0-next.29': {}
+
+ '@rolldown/binding-android-arm64@1.1.3':
+ optional: true
+
+ '@rolldown/binding-darwin-arm64@1.1.3':
+ optional: true
+
+ '@rolldown/binding-darwin-x64@1.1.3':
+ optional: true
+
+ '@rolldown/binding-freebsd-x64@1.1.3':
+ optional: true
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.1.3':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-gnu@1.1.3':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-musl@1.1.3':
+ optional: true
+
+ '@rolldown/binding-linux-ppc64-gnu@1.1.3':
+ optional: true
+
+ '@rolldown/binding-linux-s390x-gnu@1.1.3':
+ optional: true
+
+ '@rolldown/binding-linux-x64-gnu@1.1.3':
+ optional: true
+
+ '@rolldown/binding-linux-x64-musl@1.1.3':
+ optional: true
+
+ '@rolldown/binding-openharmony-arm64@1.1.3':
+ optional: true
+
+ '@rolldown/binding-wasm32-wasi@1.1.3':
+ dependencies:
+ '@emnapi/core': 1.11.1
+ '@emnapi/runtime': 1.11.1
+ '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)
+ optional: true
+
+ '@rolldown/binding-win32-arm64-msvc@1.1.3':
+ optional: true
+
+ '@rolldown/binding-win32-x64-msvc@1.1.3':
+ optional: true
+
+ '@rolldown/pluginutils@1.0.1': {}
+
+ '@standard-schema/spec@1.1.0': {}
+
+ '@testing-library/dom@10.4.1':
+ dependencies:
+ '@babel/code-frame': 7.29.7
+ '@babel/runtime': 7.29.7
+ '@types/aria-query': 5.0.4
+ aria-query: 5.3.0
+ dom-accessibility-api: 0.5.16
+ lz-string: 1.5.0
+ picocolors: 1.1.1
+ pretty-format: 27.5.1
+
+ '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)':
+ dependencies:
+ '@testing-library/dom': 10.4.1
+
+ '@tybys/wasm-util@0.10.3':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@types/aria-query@5.0.4': {}
+
+ '@types/chai@5.2.3':
+ dependencies:
+ '@types/deep-eql': 4.0.2
+ assertion-error: 2.0.1
+
+ '@types/deep-eql@4.0.2': {}
+
+ '@types/estree@1.0.9': {}
+
+ '@types/node@24.13.2':
+ dependencies:
+ undici-types: 7.18.2
+
+ '@types/node@26.0.1':
+ dependencies:
+ undici-types: 8.3.0
+
+ '@types/pngjs@6.0.5':
+ dependencies:
+ '@types/node': 26.0.1
+
+ '@vitest/browser-preview@4.1.9(@voidzero-dev/vite-plus-test@0.1.24(@types/node@26.0.1)(typescript@6.0.3)(vite@8.1.0(@types/node@26.0.1)))(vite@8.1.0(@types/node@26.0.1))':
+ dependencies:
+ '@testing-library/dom': 10.4.1
+ '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1)
+ '@vitest/browser': 4.1.9(@voidzero-dev/vite-plus-test@0.1.24(@types/node@26.0.1)(typescript@6.0.3)(vite@8.1.0(@types/node@26.0.1)))(vite@8.1.0(@types/node@26.0.1))
+ vitest: '@voidzero-dev/vite-plus-test@0.1.24(@types/node@26.0.1)(typescript@6.0.3)(vite@8.1.0(@types/node@26.0.1))'
+ transitivePeerDependencies:
+ - bufferutil
+ - msw
+ - utf-8-validate
+ - vite
+
+ '@vitest/browser@4.1.9(@voidzero-dev/vite-plus-test@0.1.24(@types/node@26.0.1)(typescript@6.0.3)(vite@8.1.0(@types/node@26.0.1)))(vite@8.1.0(@types/node@26.0.1))':
+ dependencies:
+ '@blazediff/core': 1.9.1
+ '@vitest/mocker': 4.1.9(vite@8.1.0(@types/node@26.0.1))
+ '@vitest/utils': 4.1.9
+ magic-string: 0.30.21
+ pngjs: 7.0.0
+ sirv: 3.0.2
+ tinyrainbow: 3.1.0
+ vitest: '@voidzero-dev/vite-plus-test@0.1.24(@types/node@26.0.1)(typescript@6.0.3)(vite@8.1.0(@types/node@26.0.1))'
+ ws: 8.21.0
+ transitivePeerDependencies:
+ - bufferutil
+ - msw
+ - utf-8-validate
+ - vite
+
+ '@vitest/browser@4.1.9(vite@8.1.0(@types/node@26.0.1))(vitest@4.1.9)':
+ dependencies:
+ '@blazediff/core': 1.9.1
+ '@vitest/mocker': 4.1.9(vite@8.1.0(@types/node@26.0.1))
+ '@vitest/utils': 4.1.9
+ magic-string: 0.30.21
+ pngjs: 7.0.0
+ sirv: 3.0.2
+ tinyrainbow: 3.1.0
+ vitest: 4.1.9(@types/node@26.0.1)(@vitest/browser-preview@4.1.9)(vite@8.1.0(@types/node@26.0.1))
+ ws: 8.21.0
+ transitivePeerDependencies:
+ - bufferutil
+ - msw
+ - utf-8-validate
+ - vite
+
+ '@vitest/expect@4.1.9':
+ dependencies:
+ '@standard-schema/spec': 1.1.0
+ '@types/chai': 5.2.3
+ '@vitest/spy': 4.1.9
+ '@vitest/utils': 4.1.9
+ chai: 6.2.2
+ tinyrainbow: 3.1.0
+
+ '@vitest/mocker@4.1.9(vite@8.1.0(@types/node@26.0.1))':
+ dependencies:
+ '@vitest/spy': 4.1.9
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ vite: 8.1.0(@types/node@26.0.1)
+
+ '@vitest/pretty-format@4.1.9':
+ dependencies:
+ tinyrainbow: 3.1.0
+
+ '@vitest/runner@4.1.9':
+ dependencies:
+ '@vitest/utils': 4.1.9
+ pathe: 2.0.3
+
+ '@vitest/snapshot@4.1.9':
+ dependencies:
+ '@vitest/pretty-format': 4.1.9
+ '@vitest/utils': 4.1.9
+ magic-string: 0.30.21
+ pathe: 2.0.3
+
+ '@vitest/spy@4.1.9': {}
+
+ '@vitest/utils@4.1.9':
+ dependencies:
+ '@vitest/pretty-format': 4.1.9
+ convert-source-map: 2.0.0
+ tinyrainbow: 3.1.0
+
+ '@voidzero-dev/vite-plus-core@0.1.24(@types/node@26.0.1)(typescript@6.0.3)':
+ dependencies:
+ '@oxc-project/runtime': 0.133.0
+ '@oxc-project/types': 0.133.0
+ lightningcss: 1.32.0
+ postcss: 8.5.15
+ optionalDependencies:
+ '@types/node': 26.0.1
+ fsevents: 2.3.3
+ typescript: 6.0.3
+
+ '@voidzero-dev/vite-plus-core@0.2.1(@types/node@26.0.1)(typescript@6.0.3)':
+ dependencies:
+ '@oxc-project/runtime': 0.136.0
+ '@oxc-project/types': 0.136.0
+ lightningcss: 1.32.0
+ postcss: 8.5.15
+ optionalDependencies:
+ '@types/node': 26.0.1
+ fsevents: 2.3.3
+ typescript: 6.0.3
+
+ '@voidzero-dev/vite-plus-darwin-arm64@0.2.1':
+ optional: true
+
+ '@voidzero-dev/vite-plus-darwin-x64@0.2.1':
+ optional: true
+
+ '@voidzero-dev/vite-plus-linux-arm64-gnu@0.2.1':
+ optional: true
+
+ '@voidzero-dev/vite-plus-linux-arm64-musl@0.2.1':
+ optional: true
+
+ '@voidzero-dev/vite-plus-linux-x64-gnu@0.2.1':
+ optional: true
+
+ '@voidzero-dev/vite-plus-linux-x64-musl@0.2.1':
+ optional: true
+
+ '@voidzero-dev/vite-plus-test@0.1.24(@types/node@26.0.1)(typescript@6.0.3)(vite@8.1.0(@types/node@26.0.1))':
+ dependencies:
+ '@standard-schema/spec': 1.1.0
+ '@types/chai': 5.2.3
+ '@voidzero-dev/vite-plus-core': 0.1.24(@types/node@26.0.1)(typescript@6.0.3)
+ es-module-lexer: 1.7.0
+ obug: 2.1.3
+ pixelmatch: 7.2.0
+ pngjs: 7.0.0
+ sirv: 3.0.2
+ std-env: 4.1.0
+ tinybench: 2.9.0
+ tinyexec: 1.2.4
+ tinyglobby: 0.2.17
+ vite: 8.1.0(@types/node@26.0.1)
+ ws: 8.21.0
+ optionalDependencies:
+ '@types/node': 26.0.1
+ transitivePeerDependencies:
+ - '@arethetypeswrong/core'
+ - '@tsdown/css'
+ - '@tsdown/exe'
+ - '@vitejs/devtools'
+ - bufferutil
+ - esbuild
+ - jiti
+ - less
+ - publint
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - terser
+ - tsx
+ - typescript
+ - unplugin-unused
+ - unrun
+ - utf-8-validate
+ - yaml
+
+ '@voidzero-dev/vite-plus-win32-arm64-msvc@0.2.1':
+ optional: true
+
+ '@voidzero-dev/vite-plus-win32-x64-msvc@0.2.1':
+ optional: true
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@5.2.0: {}
+
+ aria-query@5.3.0:
+ dependencies:
+ dequal: 2.0.3
+
+ assertion-error@2.0.1: {}
+
+ chai@6.2.2: {}
+
+ convert-source-map@2.0.0: {}
+
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
+ dequal@2.0.3: {}
+
+ detect-libc@2.1.2: {}
+
+ dom-accessibility-api@0.5.16: {}
+
+ electron@43.0.0:
+ dependencies:
+ '@electron-internal/extract-zip': 1.0.4
+ '@electron/get': 5.0.0
+ '@types/node': 24.13.2
+ transitivePeerDependencies:
+ - supports-color
+
+ env-paths@3.0.0: {}
+
+ es-module-lexer@1.7.0: {}
+
+ es-module-lexer@2.1.0: {}
+
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.9
+
+ expect-type@1.4.0: {}
+
+ fdir@6.5.0(picomatch@4.0.4):
+ optionalDependencies:
+ picomatch: 4.0.4
+
+ fsevents@2.3.2:
+ optional: true
+
+ fsevents@2.3.3:
+ optional: true
+
+ graceful-fs@4.2.11: {}
+
+ js-tokens@4.0.0: {}
+
+ lightningcss-android-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-x64@1.32.0:
+ optional: true
+
+ lightningcss-freebsd-x64@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.32.0:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ optional: true
+
+ lightningcss@1.32.0:
+ dependencies:
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.32.0
+ lightningcss-darwin-arm64: 1.32.0
+ lightningcss-darwin-x64: 1.32.0
+ lightningcss-freebsd-x64: 1.32.0
+ lightningcss-linux-arm-gnueabihf: 1.32.0
+ lightningcss-linux-arm64-gnu: 1.32.0
+ lightningcss-linux-arm64-musl: 1.32.0
+ lightningcss-linux-x64-gnu: 1.32.0
+ lightningcss-linux-x64-musl: 1.32.0
+ lightningcss-win32-arm64-msvc: 1.32.0
+ lightningcss-win32-x64-msvc: 1.32.0
+
+ lz-string@1.5.0: {}
+
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ mrmime@2.0.1: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.15: {}
+
+ obug@2.1.3: {}
+
+ oxfmt@0.55.0(vite-plus@0.2.1(@types/node@26.0.1)(typescript@6.0.3)(vite@8.1.0(@types/node@26.0.1))):
+ dependencies:
+ tinypool: 2.1.0
+ optionalDependencies:
+ '@oxfmt/binding-android-arm-eabi': 0.55.0
+ '@oxfmt/binding-android-arm64': 0.55.0
+ '@oxfmt/binding-darwin-arm64': 0.55.0
+ '@oxfmt/binding-darwin-x64': 0.55.0
+ '@oxfmt/binding-freebsd-x64': 0.55.0
+ '@oxfmt/binding-linux-arm-gnueabihf': 0.55.0
+ '@oxfmt/binding-linux-arm-musleabihf': 0.55.0
+ '@oxfmt/binding-linux-arm64-gnu': 0.55.0
+ '@oxfmt/binding-linux-arm64-musl': 0.55.0
+ '@oxfmt/binding-linux-ppc64-gnu': 0.55.0
+ '@oxfmt/binding-linux-riscv64-gnu': 0.55.0
+ '@oxfmt/binding-linux-riscv64-musl': 0.55.0
+ '@oxfmt/binding-linux-s390x-gnu': 0.55.0
+ '@oxfmt/binding-linux-x64-gnu': 0.55.0
+ '@oxfmt/binding-linux-x64-musl': 0.55.0
+ '@oxfmt/binding-openharmony-arm64': 0.55.0
+ '@oxfmt/binding-win32-arm64-msvc': 0.55.0
+ '@oxfmt/binding-win32-ia32-msvc': 0.55.0
+ '@oxfmt/binding-win32-x64-msvc': 0.55.0
+ vite-plus: 0.2.1(@types/node@26.0.1)(typescript@6.0.3)(vite@8.1.0(@types/node@26.0.1))
+
+ oxlint-tsgolint@0.23.0:
+ optionalDependencies:
+ '@oxlint-tsgolint/darwin-arm64': 0.23.0
+ '@oxlint-tsgolint/darwin-x64': 0.23.0
+ '@oxlint-tsgolint/linux-arm64': 0.23.0
+ '@oxlint-tsgolint/linux-x64': 0.23.0
+ '@oxlint-tsgolint/win32-arm64': 0.23.0
+ '@oxlint-tsgolint/win32-x64': 0.23.0
+
+ oxlint@1.70.0(oxlint-tsgolint@0.23.0)(vite-plus@0.2.1(@types/node@26.0.1)(typescript@6.0.3)(vite@8.1.0(@types/node@26.0.1))):
+ optionalDependencies:
+ '@oxlint/binding-android-arm-eabi': 1.70.0
+ '@oxlint/binding-android-arm64': 1.70.0
+ '@oxlint/binding-darwin-arm64': 1.70.0
+ '@oxlint/binding-darwin-x64': 1.70.0
+ '@oxlint/binding-freebsd-x64': 1.70.0
+ '@oxlint/binding-linux-arm-gnueabihf': 1.70.0
+ '@oxlint/binding-linux-arm-musleabihf': 1.70.0
+ '@oxlint/binding-linux-arm64-gnu': 1.70.0
+ '@oxlint/binding-linux-arm64-musl': 1.70.0
+ '@oxlint/binding-linux-ppc64-gnu': 1.70.0
+ '@oxlint/binding-linux-riscv64-gnu': 1.70.0
+ '@oxlint/binding-linux-riscv64-musl': 1.70.0
+ '@oxlint/binding-linux-s390x-gnu': 1.70.0
+ '@oxlint/binding-linux-x64-gnu': 1.70.0
+ '@oxlint/binding-linux-x64-musl': 1.70.0
+ '@oxlint/binding-openharmony-arm64': 1.70.0
+ '@oxlint/binding-win32-arm64-msvc': 1.70.0
+ '@oxlint/binding-win32-ia32-msvc': 1.70.0
+ '@oxlint/binding-win32-x64-msvc': 1.70.0
+ oxlint-tsgolint: 0.23.0
+ vite-plus: 0.2.1(@types/node@26.0.1)(typescript@6.0.3)(vite@8.1.0(@types/node@26.0.1))
+
+ pathe@2.0.3: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@4.0.4: {}
+
+ pixelmatch@7.2.0:
+ dependencies:
+ pngjs: 7.0.0
+
+ playwright-core@1.61.1: {}
+
+ playwright@1.61.1:
+ dependencies:
+ playwright-core: 1.61.1
+ optionalDependencies:
+ fsevents: 2.3.2
+
+ pngjs@7.0.0: {}
+
+ postcss@8.5.15:
+ dependencies:
+ nanoid: 3.3.15
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ pretty-format@27.5.1:
+ dependencies:
+ ansi-regex: 5.0.1
+ ansi-styles: 5.2.0
+ react-is: 17.0.2
+
+ progress@2.0.3: {}
+
+ react-is@17.0.2: {}
+
+ rolldown@1.1.3:
+ dependencies:
+ '@oxc-project/types': 0.137.0
+ '@rolldown/pluginutils': 1.0.1
+ optionalDependencies:
+ '@rolldown/binding-android-arm64': 1.1.3
+ '@rolldown/binding-darwin-arm64': 1.1.3
+ '@rolldown/binding-darwin-x64': 1.1.3
+ '@rolldown/binding-freebsd-x64': 1.1.3
+ '@rolldown/binding-linux-arm-gnueabihf': 1.1.3
+ '@rolldown/binding-linux-arm64-gnu': 1.1.3
+ '@rolldown/binding-linux-arm64-musl': 1.1.3
+ '@rolldown/binding-linux-ppc64-gnu': 1.1.3
+ '@rolldown/binding-linux-s390x-gnu': 1.1.3
+ '@rolldown/binding-linux-x64-gnu': 1.1.3
+ '@rolldown/binding-linux-x64-musl': 1.1.3
+ '@rolldown/binding-openharmony-arm64': 1.1.3
+ '@rolldown/binding-wasm32-wasi': 1.1.3
+ '@rolldown/binding-win32-arm64-msvc': 1.1.3
+ '@rolldown/binding-win32-x64-msvc': 1.1.3
+
+ semver@7.8.5: {}
+
+ siginfo@2.0.0: {}
+
+ sirv@3.0.2:
+ dependencies:
+ '@polka/url': 1.0.0-next.29
+ mrmime: 2.0.1
+ totalist: 3.0.1
+
+ source-map-js@1.2.1: {}
+
+ stackback@0.0.2: {}
+
+ std-env@4.1.0: {}
+
+ sumchecker@3.0.1:
+ dependencies:
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ tinybench@2.9.0: {}
+
+ tinyexec@1.2.4: {}
+
+ tinyglobby@0.2.17:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.4)
+ picomatch: 4.0.4
+
+ tinypool@2.1.0: {}
+
+ tinyrainbow@3.1.0: {}
+
+ totalist@3.0.1: {}
+
+ tslib@2.8.1:
+ optional: true
+
+ typescript@6.0.3: {}
+
+ undici-types@7.18.2: {}
+
+ undici-types@8.3.0: {}
+
+ undici@7.28.0:
+ optional: true
+
+ vite-plus@0.2.1(@types/node@26.0.1)(typescript@6.0.3)(vite@8.1.0(@types/node@26.0.1)):
+ dependencies:
+ '@oxc-project/types': 0.136.0
+ '@oxlint/plugins': 1.68.0
+ '@vitest/browser': 4.1.9(vite@8.1.0(@types/node@26.0.1))(vitest@4.1.9)
+ '@vitest/browser-preview': 4.1.9(@voidzero-dev/vite-plus-test@0.1.24(@types/node@26.0.1)(typescript@6.0.3)(vite@8.1.0(@types/node@26.0.1)))(vite@8.1.0(@types/node@26.0.1))
+ '@vitest/expect': 4.1.9
+ '@vitest/mocker': 4.1.9(vite@8.1.0(@types/node@26.0.1))
+ '@vitest/pretty-format': 4.1.9
+ '@vitest/runner': 4.1.9
+ '@vitest/snapshot': 4.1.9
+ '@vitest/spy': 4.1.9
+ '@vitest/utils': 4.1.9
+ '@voidzero-dev/vite-plus-core': 0.2.1(@types/node@26.0.1)(typescript@6.0.3)
+ oxfmt: 0.55.0(vite-plus@0.2.1(@types/node@26.0.1)(typescript@6.0.3)(vite@8.1.0(@types/node@26.0.1)))
+ oxlint: 1.70.0(oxlint-tsgolint@0.23.0)(vite-plus@0.2.1(@types/node@26.0.1)(typescript@6.0.3)(vite@8.1.0(@types/node@26.0.1)))
+ oxlint-tsgolint: 0.23.0
+ vitest: 4.1.9(@types/node@26.0.1)(@vitest/browser-preview@4.1.9)(vite@8.1.0(@types/node@26.0.1))
+ optionalDependencies:
+ '@voidzero-dev/vite-plus-darwin-arm64': 0.2.1
+ '@voidzero-dev/vite-plus-darwin-x64': 0.2.1
+ '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.2.1
+ '@voidzero-dev/vite-plus-linux-arm64-musl': 0.2.1
+ '@voidzero-dev/vite-plus-linux-x64-gnu': 0.2.1
+ '@voidzero-dev/vite-plus-linux-x64-musl': 0.2.1
+ '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.2.1
+ '@voidzero-dev/vite-plus-win32-x64-msvc': 0.2.1
+ transitivePeerDependencies:
+ - '@arethetypeswrong/core'
+ - '@edge-runtime/vm'
+ - '@opentelemetry/api'
+ - '@tsdown/css'
+ - '@tsdown/exe'
+ - '@types/node'
+ - '@vitejs/devtools'
+ - '@vitest/coverage-istanbul'
+ - '@vitest/coverage-v8'
+ - '@vitest/ui'
+ - bufferutil
+ - esbuild
+ - happy-dom
+ - jiti
+ - jsdom
+ - less
+ - msw
+ - publint
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - svelte
+ - terser
+ - tsx
+ - typescript
+ - unplugin-unused
+ - unrun
+ - utf-8-validate
+ - vite
+ - yaml
+
+ vite@8.1.0(@types/node@26.0.1):
+ dependencies:
+ lightningcss: 1.32.0
+ picomatch: 4.0.4
+ postcss: 8.5.15
+ rolldown: 1.1.3
+ tinyglobby: 0.2.17
+ optionalDependencies:
+ '@types/node': 26.0.1
+ fsevents: 2.3.3
+
+ vitest@4.1.9(@types/node@26.0.1)(@vitest/browser-preview@4.1.9)(vite@8.1.0(@types/node@26.0.1)):
+ dependencies:
+ '@vitest/expect': 4.1.9
+ '@vitest/mocker': 4.1.9(vite@8.1.0(@types/node@26.0.1))
+ '@vitest/pretty-format': 4.1.9
+ '@vitest/runner': 4.1.9
+ '@vitest/snapshot': 4.1.9
+ '@vitest/spy': 4.1.9
+ '@vitest/utils': 4.1.9
+ es-module-lexer: 2.1.0
+ expect-type: 1.4.0
+ magic-string: 0.30.21
+ obug: 2.1.3
+ pathe: 2.0.3
+ picomatch: 4.0.4
+ std-env: 4.1.0
+ tinybench: 2.9.0
+ tinyexec: 1.2.4
+ tinyglobby: 0.2.17
+ tinyrainbow: 3.1.0
+ vite: 8.1.0(@types/node@26.0.1)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/node': 26.0.1
+ '@vitest/browser-preview': 4.1.9(@voidzero-dev/vite-plus-test@0.1.24(@types/node@26.0.1)(typescript@6.0.3)(vite@8.1.0(@types/node@26.0.1)))(vite@8.1.0(@types/node@26.0.1))
+ transitivePeerDependencies:
+ - msw
+
+ why-is-node-running@2.3.0:
+ dependencies:
+ siginfo: 2.0.0
+ stackback: 0.0.2
+
+ ws@8.21.0: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
new file mode 100644
index 00000000..8a501029
--- /dev/null
+++ b/pnpm-workspace.yaml
@@ -0,0 +1,13 @@
+overrides:
+ vite: npm:@voidzero-dev/vite-plus-core@latest
+ # Electron's installer hangs while extracting its binary (never writes
+ # path.txt) on Node 24.16+ because of a yauzl bug. Pin yauzl until the
+ # upstream fix ships. https://github.com/electron/electron/issues/51619
+ yauzl: 3.4.0
+
+# Dependencies allowed to run install scripts. electron downloads its prebuilt
+# binary here; esbuild (pulled in by vite-plus) fetches its platform binary.
+# Without these, pnpm skips the scripts and `require('electron')` throws.
+allowBuilds:
+ electron: true
+ esbuild: true
diff --git a/release-please-config.json b/release-please-config.json
new file mode 100644
index 00000000..b7a8a5cb
--- /dev/null
+++ b/release-please-config.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json",
+ "packages": {
+ ".": {
+ "release-type": "node",
+ "changelog-path": "CHANGELOG.md",
+ "include-component-in-tag": false,
+ "changelog-sections": [
+ { "type": "feat", "section": "Features" },
+ { "type": "fix", "section": "Bug Fixes" },
+ { "type": "perf", "section": "Performance" },
+ { "type": "refactor", "section": "Refactor" },
+ { "type": "build", "section": "Build" },
+ { "type": "ci", "section": "CI" },
+ { "type": "docs", "section": "Documentation" },
+ { "type": "test", "section": "Tests", "hidden": true },
+ { "type": "style", "section": "Styles", "hidden": true },
+ { "type": "chore", "section": "Chores", "hidden": true }
+ ]
+ }
+ }
+}
diff --git a/renovate.json b/renovate.json
new file mode 100644
index 00000000..e376d528
--- /dev/null
+++ b/renovate.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
+ "extends": [
+ "config:best-practices",
+ ":enableVulnerabilityAlerts",
+ ":semanticCommitTypeAll(deps)",
+ ":separateMultipleMajorReleases",
+ "schedule:weekly"
+ ],
+ "labels": ["dependency"],
+ "forkProcessing": "enabled",
+ "rangeStrategy": "pin",
+ "packageRules": [
+ {
+ "matchDepTypes": ["engines"],
+ "rangeStrategy": "auto"
+ },
+ {
+ "description": "Remove word `dependency` from commit messages and PR titles",
+ "matchDatasources": ["npm"],
+ "commitMessageTopic": "{{depName}}"
+ }
+ ]
+}
diff --git a/src/Menubar.spec.ts b/src/Menubar.spec.ts
index fb641fd5..2f8734e2 100644
--- a/src/Menubar.spec.ts
+++ b/src/Menubar.spec.ts
@@ -1,11 +1,23 @@
-import { BrowserWindow, Tray, app } from 'electron';
+import { app, BrowserWindow, globalShortcut, Tray } from 'electron';
+import {
+ afterEach,
+ beforeEach,
+ describe,
+ expect,
+ it,
+ type Mock,
+ vi,
+} from 'vitest';
import { Menubar } from './Menubar';
+vi.mock('electron', () => import('./__mocks__/electron'));
+
describe('Menubar', () => {
let mb: Menubar | undefined;
beforeEach(() => {
+ vi.clearAllMocks();
mb = new Menubar(app, { preloadWindow: true });
});
@@ -42,4 +54,677 @@ describe('Menubar', () => {
});
});
});
+
+ it('is not destroyed by default', () => {
+ expect(mb!.isDestroyed()).toBe(false);
+ });
+
+ it('reports as destroyed after `destroy()` is called', () => {
+ return new Promise((resolve) => {
+ mb!.on('ready', () => {
+ mb!.destroy();
+ expect(mb!.isDestroyed()).toBe(true);
+ expect(mb!.window).toBeUndefined();
+ resolve();
+ });
+ });
+ });
+
+ it('removes tray and app listeners on `destroy()`', () => {
+ return new Promise((resolve) => {
+ mb!.on('ready', () => {
+ const tray = mb!.tray;
+ mb!.destroy();
+
+ const trayEvents = (tray.removeListener as Mock).mock.calls.map(
+ ([event]) => event,
+ );
+ expect(trayEvents).toEqual(
+ expect.arrayContaining(['click', 'right-click', 'double-click']),
+ );
+
+ const appEvents = (app.removeListener as Mock).mock.calls.map(
+ ([event]) => event,
+ );
+ expect(appEvents).toEqual(
+ expect.arrayContaining(['ready', 'activate']),
+ );
+ resolve();
+ });
+ });
+ });
+
+ it('keeps `window` accessible inside a user `close` listener', () => {
+ return new Promise((resolve) => {
+ mb!.on('after-create-window', () => {
+ const win = mb!.window!;
+ const onCalls = (win.on as Mock).mock.calls;
+ const closedHandler = onCalls.find(
+ ([event]) => event === 'closed',
+ )?.[1];
+ const closeHandler = onCalls.find(([event]) => event === 'close')?.[1];
+
+ expect(closedHandler).toBeTypeOf('function');
+ // Library MUST listen on `closed`, not `close`, so user handlers win.
+ expect(closeHandler).toBeUndefined();
+ expect(mb!.window).toBe(win);
+
+ // Once `closed` fires, the window is gone.
+ closedHandler?.();
+ expect(mb!.window).toBeUndefined();
+ resolve();
+ });
+ });
+ });
+
+ it('is idempotent: calling `destroy()` twice is a no-op', () => {
+ return new Promise((resolve) => {
+ mb!.on('ready', () => {
+ mb!.destroy();
+ const callsAfterFirst = (app.removeListener as Mock).mock.calls.length;
+ mb!.destroy();
+ expect(mb!.isDestroyed()).toBe(true);
+ expect((app.removeListener as Mock).mock.calls.length).toBe(
+ callsAfterFirst,
+ );
+ resolve();
+ });
+ });
+ });
+});
+
+describe('Menubar hideOnClose option', () => {
+ beforeEach(() => {
+ vi.clearAllMocks();
+ });
+
+ const closeHandler = (
+ mb: Menubar,
+ ): ((event: Electron.Event) => void) | undefined => {
+ const win = mb.window!;
+ return (win.on as Mock).mock.calls.find(
+ ([event]) => event === 'close',
+ )?.[1];
+ };
+
+ it('does not register a `close` handler by default', () => {
+ const mb = new Menubar(app, { preloadWindow: true });
+ return new Promise((resolve) => {
+ mb.on('after-create-window', () => {
+ expect(closeHandler(mb)).toBeUndefined();
+ resolve();
+ });
+ });
+ });
+
+ it('intercepts close when `hideOnClose: true`', () => {
+ const mb = new Menubar(app, { preloadWindow: true, hideOnClose: true });
+ return new Promise((resolve) => {
+ mb.on('after-create-window', () => {
+ const handler = closeHandler(mb);
+ expect(handler).toBeTypeOf('function');
+ const event = { preventDefault: vi.fn(), defaultPrevented: false };
+ handler?.(event);
+ expect(event.preventDefault).toHaveBeenCalled();
+ resolve();
+ });
+ });
+ });
+
+ it('lets close through during `before-quit`', () => {
+ const mb = new Menubar(app, { preloadWindow: true, hideOnClose: true });
+ return new Promise((resolve) => {
+ mb.on('after-create-window', () => {
+ // Simulate before-quit firing
+ const beforeQuitHandler = (app.on as Mock).mock.calls.find(
+ ([event]) => event === 'before-quit',
+ )?.[1];
+ beforeQuitHandler?.();
+
+ const handler = closeHandler(mb);
+ const event = { preventDefault: vi.fn(), defaultPrevented: false };
+ handler?.(event);
+ expect(event.preventDefault).not.toHaveBeenCalled();
+ resolve();
+ });
+ });
+ });
+});
+
+describe('Menubar global shortcut', () => {
+ beforeEach(() => {
+ vi.clearAllMocks();
+ });
+
+ it('registers the configured accelerator on ready', () => {
+ const mb = new Menubar(app, {
+ preloadWindow: true,
+ globalShortcut: 'CmdOrCtrl+Shift+G',
+ });
+ return new Promise((resolve) => {
+ mb.on('ready', () => {
+ expect(globalShortcut.register).toHaveBeenCalledWith(
+ 'CmdOrCtrl+Shift+G',
+ expect.any(Function),
+ );
+ resolve();
+ });
+ });
+ });
+
+ it('unregisters the previous accelerator when replacing it', () => {
+ const mb = new Menubar(app, {
+ preloadWindow: true,
+ globalShortcut: 'CmdOrCtrl+Shift+G',
+ });
+ return new Promise((resolve) => {
+ mb.on('ready', () => {
+ mb.setGlobalShortcut('Alt+Space');
+ expect(globalShortcut.unregister).toHaveBeenCalledWith(
+ 'CmdOrCtrl+Shift+G',
+ );
+ expect(globalShortcut.register).toHaveBeenLastCalledWith(
+ 'Alt+Space',
+ expect.any(Function),
+ );
+ resolve();
+ });
+ });
+ });
+
+ it('clears the accelerator when called with undefined', () => {
+ const mb = new Menubar(app, {
+ preloadWindow: true,
+ globalShortcut: 'CmdOrCtrl+Shift+G',
+ });
+ return new Promise((resolve) => {
+ mb.on('ready', () => {
+ (globalShortcut.register as Mock).mockClear();
+ mb.setGlobalShortcut(undefined);
+ expect(globalShortcut.unregister).toHaveBeenCalledWith(
+ 'CmdOrCtrl+Shift+G',
+ );
+ expect(globalShortcut.register).not.toHaveBeenCalled();
+ resolve();
+ });
+ });
+ });
+
+ it('does not retain a failed registration', () => {
+ (globalShortcut.register as Mock).mockReturnValueOnce(false);
+ const mb = new Menubar(app, { preloadWindow: true });
+ return new Promise((resolve) => {
+ mb.on('ready', () => {
+ const ok = mb.setGlobalShortcut('CmdOrCtrl+Shift+G');
+ expect(ok).toBe(false);
+ (globalShortcut.unregister as Mock).mockClear();
+ mb.destroy();
+ expect(globalShortcut.unregister).not.toHaveBeenCalled();
+ resolve();
+ });
+ });
+ });
+
+ it('unregisters on destroy()', () => {
+ const mb = new Menubar(app, {
+ preloadWindow: true,
+ globalShortcut: 'CmdOrCtrl+Shift+G',
+ });
+ return new Promise((resolve) => {
+ mb.on('ready', () => {
+ mb.destroy();
+ expect(globalShortcut.unregister).toHaveBeenCalledWith(
+ 'CmdOrCtrl+Shift+G',
+ );
+ resolve();
+ });
+ });
+ });
+});
+
+describe('Menubar toggleWindow and recenterOnTray', () => {
+ beforeEach(() => {
+ vi.clearAllMocks();
+ });
+
+ it('toggleWindow shows when hidden and hides when visible', () => {
+ const mb = new Menubar(app, { preloadWindow: true });
+ return new Promise((resolve) => {
+ mb.on('after-create-window', async () => {
+ await mb.toggleWindow();
+ expect(mb.window!.show).toHaveBeenCalledTimes(1);
+ await mb.toggleWindow();
+ expect(mb.window!.hide).toHaveBeenCalledTimes(1);
+ resolve();
+ });
+ });
+ });
+
+ it('recenterOnTray sets a new position from tray bounds', () => {
+ const mb = new Menubar(app, { preloadWindow: true });
+ return new Promise((resolve) => {
+ mb.on('after-create-window', () => {
+ (mb.window!.setPosition as Mock).mockClear();
+ mb.recenterOnTray();
+ expect(mb.window!.setPosition).toHaveBeenCalled();
+ resolve();
+ });
+ });
+ });
+
+ it('recenterOnTray is a no-op without a window', () => {
+ const mb = new Menubar(app, {});
+ return new Promise((resolve) => {
+ mb.on('ready', () => {
+ expect(() => mb.recenterOnTray()).not.toThrow();
+ resolve();
+ });
+ });
+ });
+});
+
+describe('Menubar contextMenu option', () => {
+ const originalPlatform = process.platform;
+ const fakeMenu = { __menu: true } as unknown as Electron.Menu;
+
+ beforeEach(() => {
+ vi.clearAllMocks();
+ });
+
+ afterEach(() => {
+ Object.defineProperty(process, 'platform', { value: originalPlatform });
+ });
+
+ it('binds via setContextMenu on Linux', () => {
+ Object.defineProperty(process, 'platform', { value: 'linux' });
+ const mb = new Menubar(app, { preloadWindow: true, contextMenu: fakeMenu });
+ return new Promise((resolve) => {
+ mb.on('ready', () => {
+ expect(mb.tray.setContextMenu).toHaveBeenCalledWith(fakeMenu);
+ const trayOnCalls = (mb.tray.on as Mock).mock.calls;
+ expect(trayOnCalls.map(([event]) => event)).not.toContain(
+ 'right-click',
+ );
+ resolve();
+ });
+ });
+ });
+
+ it('binds via right-click popup on macOS', () => {
+ Object.defineProperty(process, 'platform', { value: 'darwin' });
+ const mb = new Menubar(app, { preloadWindow: true, contextMenu: fakeMenu });
+ return new Promise((resolve) => {
+ mb.on('ready', () => {
+ const trayOn = (mb.tray.on as Mock).mock.calls;
+ const handler = trayOn.find(([event]) => event === 'right-click')?.[1];
+ expect(handler).toBeTypeOf('function');
+ handler?.({}, { x: 5, y: 9, width: 32, height: 32 });
+ expect(mb.tray.popUpContextMenu).toHaveBeenCalledWith(fakeMenu, {
+ x: 5,
+ y: 9,
+ });
+ resolve();
+ });
+ });
+ });
+
+ it('re-publishes the menu on show/hide on Linux', () => {
+ Object.defineProperty(process, 'platform', { value: 'linux' });
+ const mb = new Menubar(app, { preloadWindow: true, contextMenu: fakeMenu });
+ return new Promise((resolve) => {
+ mb.on('after-create-window', async () => {
+ (mb.tray.setContextMenu as Mock).mockClear();
+ await mb.showWindow();
+ expect(mb.tray.setContextMenu).toHaveBeenCalledWith(fakeMenu);
+ (mb.tray.setContextMenu as Mock).mockClear();
+ mb.hideWindow();
+ expect(mb.tray.setContextMenu).toHaveBeenCalledWith(fakeMenu);
+ resolve();
+ });
+ });
+ });
+
+ it('replaces the menu via setContextMenu()', () => {
+ Object.defineProperty(process, 'platform', { value: 'linux' });
+ const mb = new Menubar(app, { preloadWindow: true, contextMenu: fakeMenu });
+ const replacement = { __menu: 'replacement' } as unknown as Electron.Menu;
+ return new Promise((resolve) => {
+ mb.on('ready', () => {
+ mb.setContextMenu(replacement);
+ expect(mb.tray.setContextMenu).toHaveBeenLastCalledWith(replacement);
+ expect(mb.getOption('contextMenu')).toBe(replacement);
+ resolve();
+ });
+ });
+ });
+
+ it('right-click popup reads the current menu reference on macOS', () => {
+ Object.defineProperty(process, 'platform', { value: 'darwin' });
+ const mb = new Menubar(app, { preloadWindow: true, contextMenu: fakeMenu });
+ const replacement = { __menu: 'replacement' } as unknown as Electron.Menu;
+ return new Promise((resolve) => {
+ mb.on('ready', () => {
+ mb.setContextMenu(replacement);
+ const handler = (mb.tray.on as Mock).mock.calls.find(
+ ([event]) => event === 'right-click',
+ )?.[1];
+ handler?.({}, { x: 1, y: 2, width: 32, height: 32 });
+ expect(mb.tray.popUpContextMenu).toHaveBeenLastCalledWith(replacement, {
+ x: 1,
+ y: 2,
+ });
+ resolve();
+ });
+ });
+ });
+
+ it('setContextMenu(null) makes the right-click popup a no-op on macOS', () => {
+ Object.defineProperty(process, 'platform', { value: 'darwin' });
+ const mb = new Menubar(app, { preloadWindow: true, contextMenu: fakeMenu });
+ return new Promise((resolve) => {
+ mb.on('ready', () => {
+ mb.setContextMenu(null);
+ (mb.tray.popUpContextMenu as Mock).mockClear();
+ const handler = (mb.tray.on as Mock).mock.calls.find(
+ ([event]) => event === 'right-click',
+ )?.[1];
+ handler?.({}, { x: 1, y: 2, width: 32, height: 32 });
+ expect(mb.tray.popUpContextMenu).not.toHaveBeenCalled();
+ resolve();
+ });
+ });
+ });
+
+ it('setContextMenu() wires popup on macOS even without an initial menu', () => {
+ Object.defineProperty(process, 'platform', { value: 'darwin' });
+ const mb = new Menubar(app, { preloadWindow: true });
+ return new Promise((resolve) => {
+ mb.on('ready', () => {
+ mb.setContextMenu(fakeMenu);
+ const handler = (mb.tray.on as Mock).mock.calls.find(
+ ([event]) => event === 'right-click',
+ )?.[1];
+ expect(handler).toBeTypeOf('function');
+ handler?.({}, { x: 3, y: 4, width: 32, height: 32 });
+ expect(mb.tray.popUpContextMenu).toHaveBeenLastCalledWith(fakeMenu, {
+ x: 3,
+ y: 4,
+ });
+ resolve();
+ });
+ });
+ });
+});
+
+describe('Menubar ignoreDoubleClickEvents option', () => {
+ const originalPlatform = process.platform;
+
+ beforeEach(() => {
+ vi.clearAllMocks();
+ });
+
+ afterEach(() => {
+ Object.defineProperty(process, 'platform', { value: originalPlatform });
+ });
+
+ it('calls setIgnoreDoubleClickEvents(true) on macOS by default', () => {
+ Object.defineProperty(process, 'platform', { value: 'darwin' });
+ const mb = new Menubar(app, { preloadWindow: true });
+ return new Promise((resolve) => {
+ mb.on('ready', () => {
+ expect(mb.tray.setIgnoreDoubleClickEvents).toHaveBeenCalledWith(true);
+ resolve();
+ });
+ });
+ });
+
+ it('respects ignoreDoubleClickEvents: false on macOS', () => {
+ Object.defineProperty(process, 'platform', { value: 'darwin' });
+ const mb = new Menubar(app, {
+ preloadWindow: true,
+ ignoreDoubleClickEvents: false,
+ });
+ return new Promise((resolve) => {
+ mb.on('ready', () => {
+ expect(mb.tray.setIgnoreDoubleClickEvents).not.toHaveBeenCalled();
+ resolve();
+ });
+ });
+ });
+
+ it('is a no-op on non-macOS platforms', () => {
+ Object.defineProperty(process, 'platform', { value: 'linux' });
+ const mb = new Menubar(app, { preloadWindow: true });
+ return new Promise((resolve) => {
+ mb.on('ready', () => {
+ expect(mb.tray.setIgnoreDoubleClickEvents).not.toHaveBeenCalled();
+ resolve();
+ });
+ });
+ });
+});
+
+describe('Menubar escapeToHide option', () => {
+ beforeEach(() => {
+ vi.clearAllMocks();
+ });
+
+ it('wires up a before-input-event listener when enabled', () => {
+ const mb = new Menubar(app, { preloadWindow: true, escapeToHide: true });
+ return new Promise((resolve) => {
+ mb.on('after-create-window', () => {
+ const calls = (mb.window!.webContents.on as Mock).mock.calls;
+ expect(calls.map(([event]) => event)).toContain('before-input-event');
+ resolve();
+ });
+ });
+ });
+
+ it('does not wire a listener when disabled', () => {
+ const mb = new Menubar(app, { preloadWindow: true });
+ return new Promise((resolve) => {
+ mb.on('after-create-window', () => {
+ const calls = (mb.window!.webContents.on as Mock).mock.calls;
+ expect(calls.map(([event]) => event)).not.toContain(
+ 'before-input-event',
+ );
+ resolve();
+ });
+ });
+ });
+});
+
+describe('Menubar trigger option', () => {
+ beforeEach(() => {
+ vi.clearAllMocks();
+ });
+
+ const trayEvents = (mb: Menubar): string[] =>
+ (mb.tray.on as Mock).mock.calls.map(([event]) => event as string);
+
+ const onReady = (mb: Menubar, assertions: () => void): Promise =>
+ new Promise((resolve) => {
+ mb.on('ready', () => {
+ assertions();
+ resolve();
+ });
+ });
+
+ it('defaults to binding `click` and `double-click`', () => {
+ const mb = new Menubar(app, { preloadWindow: true });
+ return onReady(mb, () => {
+ expect(trayEvents(mb)).toEqual(
+ expect.arrayContaining(['click', 'double-click']),
+ );
+ expect(trayEvents(mb)).not.toContain('right-click');
+ });
+ });
+
+ it('binds `right-click` when `trigger: "right-click"`', () => {
+ const mb = new Menubar(app, {
+ preloadWindow: true,
+ trigger: 'right-click',
+ });
+ return onReady(mb, () => {
+ expect(trayEvents(mb)).toEqual(
+ expect.arrayContaining(['right-click', 'double-click']),
+ );
+ expect(trayEvents(mb)).not.toContain('click');
+ });
+ });
+
+ it('binds nothing when `trigger: "none"`', () => {
+ const mb = new Menubar(app, { preloadWindow: true, trigger: 'none' });
+ return onReady(mb, () => {
+ expect(trayEvents(mb)).not.toContain('click');
+ expect(trayEvents(mb)).not.toContain('right-click');
+ expect(trayEvents(mb)).not.toContain('double-click');
+ });
+ });
+
+ it('falls back to `showOnRightClick` when `trigger` is unset', () => {
+ const mb = new Menubar(app, {
+ preloadWindow: true,
+ showOnRightClick: true,
+ });
+ return onReady(mb, () => {
+ expect(trayEvents(mb)).toContain('right-click');
+ expect(trayEvents(mb)).not.toContain('click');
+ });
+ });
+
+ it('lets `trigger` win over the deprecated `showOnRightClick`', () => {
+ const mb = new Menubar(app, {
+ preloadWindow: true,
+ showOnRightClick: true,
+ trigger: 'click',
+ });
+ return onReady(mb, () => {
+ expect(trayEvents(mb)).toContain('click');
+ expect(trayEvents(mb)).not.toContain('right-click');
+ });
+ });
+});
+
+describe('Menubar repositioning on resize', () => {
+ beforeEach(() => {
+ vi.clearAllMocks();
+ });
+
+ const findHandler = (
+ win: BrowserWindow,
+ event: string,
+ ): ((...args: unknown[]) => void) | undefined => {
+ const call = (win.on as Mock).mock.calls.find(([name]) => name === event);
+ return call?.[1] as ((...args: unknown[]) => void) | undefined;
+ };
+
+ it('positions the window on `showWindow`', async () => {
+ const mb = new Menubar(app, { preloadWindow: true });
+ await new Promise((resolve) => mb.on('ready', () => resolve()));
+
+ await mb.showWindow();
+
+ expect(mb.window!.setPosition).toHaveBeenCalledTimes(1);
+ const [x, y] = (mb.window!.setPosition as Mock).mock.calls[0] as [
+ number,
+ number,
+ ];
+ expect(Number.isInteger(x)).toBe(true);
+ expect(Number.isInteger(y)).toBe(true);
+ });
+
+ it('repositions the window when it resizes (e.g. via `setSize`)', async () => {
+ const mb = new Menubar(app, { preloadWindow: true });
+ await new Promise((resolve) => mb.on('ready', () => resolve()));
+ await mb.showWindow();
+
+ const onResize = findHandler(mb.window!, 'resize');
+ expect(onResize, 'a resize handler should be registered').toBeDefined();
+
+ onResize!();
+
+ expect(mb.window!.setPosition).toHaveBeenCalledTimes(2);
+ });
+});
+
+describe('Menubar Wayland positioning warning', () => {
+ const originalPlatform = process.platform;
+ const originalWaylandDisplay = process.env.WAYLAND_DISPLAY;
+
+ beforeEach(() => {
+ vi.clearAllMocks();
+ });
+
+ afterEach(() => {
+ Object.defineProperty(process, 'platform', { value: originalPlatform });
+ if (originalWaylandDisplay === undefined) {
+ delete process.env.WAYLAND_DISPLAY;
+ } else {
+ process.env.WAYLAND_DISPLAY = originalWaylandDisplay;
+ }
+ vi.restoreAllMocks();
+ });
+
+ const ready = (mb: Menubar): Promise =>
+ new Promise((resolve) => mb.on('ready', () => resolve()));
+
+ it('warns once in a Wayland session when the window position is ignored', async () => {
+ Object.defineProperty(process, 'platform', { value: 'linux' });
+ process.env.WAYLAND_DISPLAY = 'wayland-0';
+ const warn = vi.spyOn(console, 'warn').mockImplementation(() => undefined);
+ const mb = new Menubar(app, { preloadWindow: true });
+ await ready(mb);
+
+ // Simulate native Wayland: the compositor ignores `setPosition`, so the
+ // window reports a position that diverges from what we requested.
+ (mb.window!.getPosition as Mock).mockReturnValue([0, 0]);
+
+ await mb.showWindow();
+ await mb.showWindow();
+
+ expect(warn).toHaveBeenCalledTimes(1);
+ expect(String(warn.mock.calls[0][0])).toContain('--ozone-platform=x11');
+ });
+
+ it('does not warn in a Wayland session when positioning takes effect (XWayland)', async () => {
+ Object.defineProperty(process, 'platform', { value: 'linux' });
+ process.env.WAYLAND_DISPLAY = 'wayland-0';
+ const warn = vi.spyOn(console, 'warn').mockImplementation(() => undefined);
+ const mb = new Menubar(app, { preloadWindow: true });
+ await ready(mb);
+
+ // Default mock: `getPosition` echoes the value passed to `setPosition`.
+ await mb.showWindow();
+
+ expect(warn).not.toHaveBeenCalled();
+ });
+
+ it('does not warn on a pure X11 session (no WAYLAND_DISPLAY)', async () => {
+ Object.defineProperty(process, 'platform', { value: 'linux' });
+ delete process.env.WAYLAND_DISPLAY;
+ const warn = vi.spyOn(console, 'warn').mockImplementation(() => undefined);
+ const mb = new Menubar(app, { preloadWindow: true });
+ await ready(mb);
+
+ (mb.window!.getPosition as Mock).mockReturnValue([0, 0]);
+
+ await mb.showWindow();
+
+ expect(warn).not.toHaveBeenCalled();
+ });
+
+ it('does not warn on macOS even when positions diverge', async () => {
+ Object.defineProperty(process, 'platform', { value: 'darwin' });
+ process.env.WAYLAND_DISPLAY = 'wayland-0';
+ const warn = vi.spyOn(console, 'warn').mockImplementation(() => undefined);
+ const mb = new Menubar(app, { preloadWindow: true });
+ await ready(mb);
+
+ (mb.window!.getPosition as Mock).mockReturnValue([0, 0]);
+
+ await mb.showWindow();
+
+ expect(warn).not.toHaveBeenCalled();
+ });
});
diff --git a/src/Menubar.ts b/src/Menubar.ts
index a2e3d38b..a7d9fccd 100644
--- a/src/Menubar.ts
+++ b/src/Menubar.ts
@@ -1,43 +1,48 @@
-import { EventEmitter } from 'events';
-import fs from 'fs';
-import path from 'path';
-import { BrowserWindow, Tray } from 'electron';
-import Positioner from 'electron-positioner';
+import { EventEmitter } from 'node:events';
+import fs from 'node:fs';
+import path from 'node:path';
+import { BrowserWindow, globalShortcut, type Menu, Tray } from 'electron';
+
+import { Positioner } from './Positioner';
import type { Options } from './types';
import { cleanOptions } from './util/cleanOptions';
import { getWindowPosition } from './util/getWindowPosition';
/**
* The main Menubar class.
- *
- * @noInheritDoc
*/
export class Menubar extends EventEmitter {
private _app: Electron.App;
private _browserWindow?: BrowserWindow;
+ private _contextMenu?: Menu;
private _blurTimeout: NodeJS.Timeout | null = null; // track blur events with timeout
+ private _isDestroyed: boolean;
+ private _isQuitting: boolean; // set on app `before-quit`, used by hideOnClose
private _isVisible: boolean; // track visibility
private _cachedBounds?: Electron.Rectangle; // _cachedBounds are needed for double-clicked event
private _options: Options;
private _positioner: Positioner | undefined;
+ private _shortcut?: Electron.Accelerator;
+ private _rightClickContextMenuBound = false;
+ private _warnedNoPositioning = false; // guards the one-time Wayland warning
private _tray?: Tray;
constructor(app: Electron.App, options?: Partial) {
super();
this._app = app;
this._options = cleanOptions(options);
+ this._isDestroyed = false;
+ this._isQuitting = false;
this._isVisible = false;
+ app.on('before-quit', this.onBeforeQuit);
+
if (app.isReady()) {
// See https://github.com/maxogden/menubar/pull/151
- process.nextTick(() =>
- this.appReady().catch((err) => console.error('menubar: ', err)),
- );
+ process.nextTick(this.onAppReady);
} else {
- app.on('ready', () => {
- this.appReady().catch((err) => console.error('menubar: ', err));
- });
+ app.on('ready', this.onAppReady);
}
}
@@ -50,8 +55,8 @@ export class Menubar extends EventEmitter {
}
/**
- * The [electron-positioner](https://github.com/jenslind/electron-positioner)
- * instance.
+ * The {@link Positioner} instance used to compute where the menubar window
+ * should appear on screen. Available after the `after-create-window` event.
*/
get positioner(): Positioner {
if (!this._positioner) {
@@ -84,6 +89,53 @@ export class Menubar extends EventEmitter {
return this._browserWindow;
}
+ /**
+ * Tear down the menubar instance: destroy the window, remove the tray, and
+ * detach all listeners. Subsequent clicks on the tray will be no-ops until a
+ * new {@link Menubar} instance is created.
+ */
+ destroy(): void {
+ if (this.isDestroyed()) {
+ return;
+ }
+ // Set first so `hideOnClose` lets the close go through instead of
+ // intercepting it.
+ this._isDestroyed = true;
+
+ if (this._shortcut) {
+ globalShortcut.unregister(this._shortcut);
+ this._shortcut = undefined;
+ }
+
+ if (this._browserWindow) {
+ this._browserWindow.destroy();
+ this._browserWindow = undefined;
+ }
+
+ if (this._tray) {
+ // Ensure all potential listeners are removed.
+ for (const event of ['click', 'right-click', 'double-click']) {
+ this._tray.removeListener(
+ event as Parameters[0],
+ this.clicked,
+ );
+ }
+ this._tray.setToolTip('');
+ this._tray = undefined;
+ }
+
+ this._app.removeListener('ready', this.onAppReady);
+ this._app.removeListener('activate', this.onAppActivate);
+ this._app.removeListener('before-quit', this.onBeforeQuit);
+ }
+
+ /**
+ * Whether {@link destroy} has been called on this menubar instance.
+ */
+ isDestroyed(): boolean {
+ return this._isDestroyed;
+ }
+
/**
* Retrieve a menubar option.
*
@@ -108,6 +160,89 @@ export class Menubar extends EventEmitter {
clearTimeout(this._blurTimeout);
this._blurTimeout = null;
}
+ this.refreshLinuxContextMenu();
+ }
+
+ /**
+ * Register a global keyboard accelerator that toggles the menubar window.
+ * Replaces any previously registered shortcut owned by this Menubar.
+ * Pass `undefined` to clear the current shortcut without registering a new
+ * one. Returns whether the registration succeeded.
+ *
+ * @param accelerator - An Electron
+ * [Accelerator](https://electronjs.org/docs/api/accelerator) string, or
+ * `undefined` to clear.
+ */
+ setGlobalShortcut(accelerator: Electron.Accelerator | undefined): boolean {
+ if (this._shortcut) {
+ globalShortcut.unregister(this._shortcut);
+ this._shortcut = undefined;
+ }
+ this._options.globalShortcut = accelerator;
+ if (!accelerator) {
+ return true;
+ }
+ const ok = globalShortcut.register(accelerator, () => this.toggleWindow());
+ if (ok) {
+ this._shortcut = accelerator;
+ }
+ return ok;
+ }
+
+ /**
+ * Toggle the menubar window: hide it if visible, show it otherwise.
+ * Resolves once the window finishes showing or hiding.
+ */
+ async toggleWindow(): Promise {
+ if (this._browserWindow && this._isVisible) {
+ this.hideWindow();
+ return;
+ }
+ await this.showWindow();
+ }
+
+ /**
+ * Re-center the menubar window over the tray icon. Convenience wrapper for
+ * `positioner.move('trayCenter', tray.getBounds())` that's safe to call
+ * after the `after-create-window` event. No-op if the window doesn't
+ * exist yet.
+ */
+ recenterOnTray(): void {
+ if (!this._browserWindow || !this._tray) {
+ return;
+ }
+ const bounds = this._tray.getBounds();
+ const { x, y } = this.positioner.calculate('trayCenter', bounds);
+ this._browserWindow.setPosition(Math.round(x), Math.round(y));
+ }
+
+ /**
+ * Replace the tray context menu after construction. On Linux this also
+ * re-publishes the menu to the SNI host, which is required after mutating
+ * items in-place since libappindicator caches the previous serialization.
+ * On macOS/Windows the right-click popup handler reads the current menu
+ * reference, so swapping or clearing here takes effect immediately.
+ *
+ * @param menu - The new menu, or `null` to clear it.
+ */
+ setContextMenu(menu: Menu | null): void {
+ this._contextMenu = menu ?? undefined;
+ this._options.contextMenu = menu ?? undefined;
+ if (!this._tray) {
+ return;
+ }
+ if (process.platform === 'linux') {
+ // `setContextMenu(null)` clears the menu on Linux.
+ this._tray.setContextMenu(menu);
+ return;
+ }
+ // macOS / Windows: bind the right-click popup once on first non-empty
+ // assignment. The handler reads `this._contextMenu` at invoke time, so
+ // later swaps and clears take effect without rebinding (and never leak
+ // a stale closure reference).
+ if (menu && !this._rightClickContextMenuBound) {
+ this.bindRightClickContextMenu();
+ }
}
/**
@@ -139,32 +274,48 @@ export class Menubar extends EventEmitter {
throw new Error('Window has been initialized just above. qed.');
}
- // 'Windows' taskbar: sync windows position each time before showing
- // https://github.com/maxogden/menubar/issues/232
- if (['win32', 'linux'].includes(process.platform)) {
- // Fill in this._options.windowPosition when taskbar position is available
- this._options.windowPosition = getWindowPosition(this.tray);
- }
-
this.emit('show');
+ // Cache fresh tray bounds (or fall back to existing cache / tray bounds)
+ // so `positionWindow` can reposition without an event payload — for
+ // example when the window resizes via `setSize`.
if (trayPos && trayPos.x !== 0) {
- // Cache the bounds
this._cachedBounds = trayPos;
- } else if (this._cachedBounds) {
- // Cached value will be used if showWindow is called without bounds data
- trayPos = this._cachedBounds;
- } else if (this.tray.getBounds) {
- // Get the current tray bounds
- trayPos = this.tray.getBounds();
+ } else if (!this._cachedBounds && this.tray.getBounds) {
+ this._cachedBounds = this.tray.getBounds();
+ }
+
+ this.positionWindow();
+ this._browserWindow.show();
+ this._isVisible = true;
+ this.emit('after-show');
+ this.refreshLinuxContextMenu();
+ }
+
+ /**
+ * Compute and apply the tray-anchored position of the browser window. Safe
+ * to call any time after `createWindow` has run — invoked from
+ * {@link showWindow} on every show, and from the window's `resize` event so
+ * `setSize` calls reposition the window correctly.
+ */
+ private positionWindow = (): void => {
+ if (!this._browserWindow || !this._tray) {
+ return;
+ }
+
+ // 'Windows' taskbar: sync window position each time before positioning.
+ // https://github.com/maxogden/menubar/issues/232
+ if (['win32', 'linux'].includes(process.platform)) {
+ this._options.windowPosition = getWindowPosition(this._tray);
}
+ const trayPos = this._cachedBounds ?? this._tray.getBounds?.();
+
// Default the window to the right if `trayPos` bounds are undefined or null.
- let noBoundsPosition = undefined;
+ let noBoundsPosition: Options['windowPosition'];
if (
(trayPos === undefined || trayPos.x === 0) &&
- this._options.windowPosition &&
- this._options.windowPosition.startsWith('tray')
+ this._options.windowPosition?.startsWith('tray')
) {
noBoundsPosition =
process.platform === 'win32' ? 'bottomRight' : 'topRight';
@@ -187,12 +338,38 @@ export class Menubar extends EventEmitter {
// `.setPosition` crashed on non-integers
// https://github.com/maxogden/menubar/issues/233
- this._browserWindow.setPosition(Math.round(x), Math.round(y));
- this._browserWindow.show();
- this._isVisible = true;
- this.emit('after-show');
- return;
- }
+ const targetX = Math.round(x);
+ const targetY = Math.round(y);
+ this._browserWindow.setPosition(targetX, targetY);
+
+ // Native Wayland gives an application no way to position its own window:
+ // `setPosition` is a no-op and `getPosition` reads back [0, 0]
+ // (https://github.com/electron/electron/issues/40886). The compositor
+ // decides where the window lands, usually centered, so the popover can't
+ // be anchored to the tray. Detect that the move didn't take and warn once,
+ // pointing at the X11 fallback. Gated on a Wayland session (`WAYLAND_DISPLAY`)
+ // so pure X11 never trips it; the tolerance absorbs the few-pixel offsets
+ // X11 window managers add for decorations, so XWayland (where positioning
+ // works) doesn't trip it either.
+ if (
+ process.platform === 'linux' &&
+ !!process.env.WAYLAND_DISPLAY &&
+ !this._warnedNoPositioning
+ ) {
+ const [actualX, actualY] = this._browserWindow.getPosition();
+ const ignored =
+ Math.abs(actualX - targetX) > 24 || Math.abs(actualY - targetY) > 24;
+ if (ignored) {
+ this._warnedNoPositioning = true;
+ console.warn(
+ '[menubar] The window could not be positioned programmatically, ' +
+ 'which is expected on native Wayland where the compositor controls ' +
+ 'placement. The popover will not be anchored to the tray icon. Run ' +
+ 'with --ozone-platform=x11 to restore tray-relative positioning.',
+ );
+ }
+ }
+ };
private async appReady(): Promise {
if (this.app.dock && !this._options.showDockIcon) {
@@ -200,11 +377,7 @@ export class Menubar extends EventEmitter {
}
if (this._options.activateWithApp) {
- this.app.on('activate', (_event, hasVisibleWindows) => {
- if (!hasVisibleWindows) {
- this.showWindow().catch(console.error);
- }
- });
+ this.app.on('activate', this.onAppActivate);
}
let trayImage =
@@ -213,22 +386,37 @@ export class Menubar extends EventEmitter {
trayImage = path.join(__dirname, '..', 'assets', 'IconTemplate.png'); // Default cat icon
}
- const defaultClickEvent = this._options.showOnRightClick
- ? 'right-click'
- : 'click';
+ const trigger =
+ this._options.trigger ??
+ (this._options.showOnRightClick ? 'right-click' : 'click');
this._tray = this._options.tray || new Tray(trayImage);
// Type guards for TS not to complain
if (!this.tray) {
throw new Error('Tray has been initialized above');
}
- this.tray.on(
- defaultClickEvent as Parameters[0],
- this.clicked.bind(this),
- );
- this.tray.on('double-click', this.clicked.bind(this));
+ if (trigger !== 'none') {
+ this.tray.on(trigger as Parameters[0], this.clicked);
+ this.tray.on('double-click', this.clicked);
+ }
+ // macOS-only: ignore double-click so an accidental second click doesn't
+ // race the blur handler and cause a tray-icon flicker.
+ if (
+ process.platform === 'darwin' &&
+ this._options.ignoreDoubleClickEvents
+ ) {
+ this.tray.setIgnoreDoubleClickEvents(true);
+ }
this.tray.setToolTip(this._options.tooltip);
+ if (this._options.contextMenu) {
+ this.bindContextMenu(this._options.contextMenu);
+ }
+
+ if (this._options.globalShortcut) {
+ this.setGlobalShortcut(this._options.globalShortcut);
+ }
+
if (!this._options.windowPosition) {
this._options.windowPosition = getWindowPosition(this.tray);
}
@@ -246,10 +434,10 @@ export class Menubar extends EventEmitter {
* @param e
* @param bounds
*/
- private async clicked(
+ private clicked = async (
event?: Electron.KeyboardEvent,
bounds?: Electron.Rectangle,
- ): Promise {
+ ): Promise => {
if (event && (event.shiftKey || event.ctrlKey || event.metaKey)) {
return this.hideWindow();
}
@@ -265,8 +453,70 @@ export class Menubar extends EventEmitter {
this._cachedBounds = bounds || this._cachedBounds;
await this.showWindow(this._cachedBounds);
+ };
+
+ private onAppActivate = (
+ _event: Electron.Event,
+ hasVisibleWindows: boolean,
+ ): void => {
+ if (!hasVisibleWindows) {
+ this.showWindow().catch(console.error);
+ }
+ };
+
+ private onBeforeQuit = (): void => {
+ this._isQuitting = true;
+ };
+
+ private bindContextMenu(menu: Menu): void {
+ this._contextMenu = menu;
+ if (process.platform === 'linux') {
+ // libappindicator / StatusNotifierItem requires the menu to live on the
+ // tray itself; right-click is handled by the desktop environment.
+ this.tray.setContextMenu(menu);
+ return;
+ }
+ this.bindRightClickContextMenu();
+ }
+
+ private bindRightClickContextMenu(): void {
+ // macOS / Windows: pop up the current menu on right-click so left-click
+ // stays bound to toggling the menubar window. Read `this._contextMenu`
+ // at invoke time so `setContextMenu()` swaps and clears take effect
+ // without rebinding (and without leaking a stale closure reference).
+ this.tray.on('right-click', (_event, bounds) => {
+ const current = this._contextMenu;
+ if (!current) {
+ return;
+ }
+ this.tray.popUpContextMenu(current, { x: bounds.x, y: bounds.y });
+ });
+ this._rightClickContextMenuBound = true;
+ }
+
+ private refreshLinuxContextMenu(): void {
+ // libappindicator caches the menu's serialized state, so consumers that
+ // mutate items in-place need the menu re-published. Cheap to do; safe to
+ // call unconditionally on every show/hide.
+ if (
+ process.platform === 'linux' &&
+ this._contextMenu &&
+ this._tray &&
+ !this._tray.isDestroyed?.()
+ ) {
+ this._tray.setContextMenu(this._contextMenu);
+ }
}
+ private onAppReady = (): void => {
+ // Guard against `destroy()` being called between construction and the
+ // scheduled `process.nextTick`/`'ready'` firing.
+ if (this._isDestroyed) {
+ return;
+ }
+ this.appReady().catch((err) => console.error('menubar: ', err));
+ };
+
private async createWindow(): Promise {
this.emit('create-window');
@@ -304,7 +554,37 @@ export class Menubar extends EventEmitter {
});
}
- this._browserWindow.on('close', this.windowClear.bind(this));
+ if (this._options.hideOnClose) {
+ this._browserWindow.on('close', (event) => {
+ if (this._isDestroyed || this._isQuitting) {
+ return;
+ }
+ event.preventDefault();
+ // Defer the hide for Wayland: hiding synchronously from the `close`
+ // handler can leave frameless surfaces in a half-closed state.
+ setImmediate(() => this.hideWindow());
+ });
+ }
+
+ if (this._options.escapeToHide) {
+ this._browserWindow.webContents.on(
+ 'before-input-event',
+ (_event, input) => {
+ if (input.type === 'keyDown' && input.key === 'Escape') {
+ this.hideWindow();
+ }
+ },
+ );
+ }
+
+ // Use `closed` (not `close`) so consumer `close` listeners can still read
+ // `mb.window` and call `event.preventDefault()` without racing our cleanup.
+ this._browserWindow.on('closed', this.windowClear.bind(this));
+
+ // Re-anchor the window to the tray when its size changes (e.g. via
+ // `mb.window.setSize(...)`), so the window doesn't end up clipped under
+ // the taskbar. https://github.com/maxogden/menubar/issues/349
+ this._browserWindow.on('resize', this.positionWindow);
this.emit('before-load');
diff --git a/src/Positioner.spec.ts b/src/Positioner.spec.ts
new file mode 100644
index 00000000..a6d39c6b
--- /dev/null
+++ b/src/Positioner.spec.ts
@@ -0,0 +1,93 @@
+import type { BrowserWindow, Display, Rectangle } from 'electron';
+import { screen } from 'electron';
+import { beforeEach, describe, expect, it, vi } from 'vitest';
+
+import { Positioner, type WindowPosition } from './Positioner';
+
+vi.mock('electron', () => import('./__mocks__/electron'));
+
+const WORK_AREA = { x: 0, y: 0, width: 1920, height: 1080 };
+// Picked so no `tray*` position triggers the Windows overflow guard; that case
+// has its own dedicated test below.
+const TRAY_BOUNDS: Rectangle = { x: 1000, y: 0, width: 32, height: 22 };
+
+function createWindow(size: [number, number] = [400, 400]): BrowserWindow {
+ return { getSize: vi.fn(() => size) } as unknown as BrowserWindow;
+}
+
+const displayWith = (workArea: Rectangle): Display =>
+ ({ workArea }) as unknown as Display;
+
+beforeEach(() => {
+ vi.clearAllMocks();
+ vi.mocked(screen.getDisplayMatching).mockReturnValue(displayWith(WORK_AREA));
+ vi.mocked(screen.getDisplayNearestPoint).mockReturnValue(
+ displayWith(WORK_AREA),
+ );
+ vi.mocked(screen.getCursorScreenPoint).mockReturnValue({ x: 0, y: 0 });
+});
+
+describe('Positioner.calculate', () => {
+ const expected: Record = {
+ trayLeft: { x: 1000, y: 0 },
+ trayBottomLeft: { x: 1000, y: 680 },
+ trayRight: { x: 632, y: 0 },
+ trayBottomRight: { x: 632, y: 680 },
+ trayCenter: { x: 816, y: 0 },
+ trayBottomCenter: { x: 816, y: 680 },
+ topLeft: { x: 0, y: 0 },
+ topRight: { x: 1520, y: 0 },
+ bottomLeft: { x: 0, y: 680 },
+ bottomRight: { x: 1520, y: 680 },
+ topCenter: { x: 760, y: 0 },
+ bottomCenter: { x: 760, y: 680 },
+ leftCenter: { x: 0, y: 340 },
+ rightCenter: { x: 1520, y: 340 },
+ center: { x: 760, y: 340 },
+ };
+
+ for (const [position, coords] of Object.entries(expected) as Array<
+ [WindowPosition, { x: number; y: number }]
+ >) {
+ it(`computes ${position}`, () => {
+ const positioner = new Positioner(createWindow());
+ expect(positioner.calculate(position, TRAY_BOUNDS)).toEqual(coords);
+ });
+ }
+
+ it('resolves screen via getDisplayMatching when tray bounds are provided', () => {
+ const positioner = new Positioner(createWindow());
+ positioner.calculate('trayCenter', TRAY_BOUNDS);
+ expect(screen.getDisplayMatching).toHaveBeenCalledWith(TRAY_BOUNDS);
+ expect(screen.getDisplayNearestPoint).not.toHaveBeenCalled();
+ });
+
+ it('falls back to the cursor display when no tray bounds are given', () => {
+ const positioner = new Positioner(createWindow());
+ positioner.calculate('center');
+ expect(screen.getCursorScreenPoint).toHaveBeenCalled();
+ expect(screen.getDisplayNearestPoint).toHaveBeenCalled();
+ expect(screen.getDisplayMatching).not.toHaveBeenCalled();
+ });
+
+ it('snaps tray positions back to topRight.x when they overflow the right edge', () => {
+ const positioner = new Positioner(createWindow());
+ const overflowing: Rectangle = { x: 1900, y: 0, width: 32, height: 22 };
+ expect(positioner.calculate('trayRight', overflowing)).toEqual({
+ x: 1520,
+ y: 0,
+ });
+ });
+
+ it('leaves non-tray positions alone even when their x would overflow', () => {
+ const positioner = new Positioner(createWindow([3000, 400]));
+ expect(positioner.calculate('topRight')).toEqual({ x: -1080, y: 0 });
+ });
+
+ it('throws a TypeError when called without a position', () => {
+ const positioner = new Positioner(createWindow());
+ expect(() =>
+ (positioner as unknown as { calculate: () => unknown }).calculate(),
+ ).toThrow(TypeError);
+ });
+});
diff --git a/src/Positioner.ts b/src/Positioner.ts
new file mode 100644
index 00000000..5675824f
--- /dev/null
+++ b/src/Positioner.ts
@@ -0,0 +1,138 @@
+import { type BrowserWindow, type Rectangle, screen } from 'electron';
+
+/**
+ * Named anchor points for placing the menubar window. The `tray*` values are
+ * relative to the tray icon's bounds; the rest are relative to the work area
+ * of the display containing the cursor (or the tray, when bounds are given).
+ */
+export type WindowPosition =
+ | 'trayLeft'
+ | 'trayBottomLeft'
+ | 'trayRight'
+ | 'trayBottomRight'
+ | 'trayCenter'
+ | 'trayBottomCenter'
+ | 'topLeft'
+ | 'topRight'
+ | 'bottomLeft'
+ | 'bottomRight'
+ | 'topCenter'
+ | 'bottomCenter'
+ | 'leftCenter'
+ | 'rightCenter'
+ | 'center';
+
+/**
+ * Computes `{x, y}` coordinates for placing a {@link BrowserWindow} at a named
+ * position, optionally relative to a tray icon's bounds. Ported from
+ * `electron-positioner@4.1.0` to drop the unmaintained runtime dependency.
+ */
+export class Positioner {
+ private readonly browserWindow: BrowserWindow;
+
+ constructor(browserWindow: BrowserWindow) {
+ this.browserWindow = browserWindow;
+ }
+
+ calculate(
+ position?: WindowPosition,
+ trayBounds?: Rectangle,
+ ): { x: number; y: number } {
+ if (!position) {
+ throw new TypeError(
+ 'Positioner.calculate: a `position` argument is required.',
+ );
+ }
+
+ const screenSize = trayBounds
+ ? screen.getDisplayMatching(trayBounds).workArea
+ : screen.getDisplayNearestPoint(screen.getCursorScreenPoint()).workArea;
+ const [windowWidth, windowHeight] = this.browserWindow.getSize();
+ const trayX = trayBounds?.x ?? Number.NaN;
+ const trayWidth = trayBounds?.width ?? Number.NaN;
+
+ const positions: Record = {
+ trayLeft: {
+ x: Math.floor(trayX),
+ y: screenSize.y,
+ },
+ trayBottomLeft: {
+ x: Math.floor(trayX),
+ y: Math.floor(screenSize.height - (windowHeight - screenSize.y)),
+ },
+ trayRight: {
+ x: Math.floor(trayX - windowWidth + trayWidth),
+ y: screenSize.y,
+ },
+ trayBottomRight: {
+ x: Math.floor(trayX - windowWidth + trayWidth),
+ y: Math.floor(screenSize.height - (windowHeight - screenSize.y)),
+ },
+ trayCenter: {
+ x: Math.floor(trayX - windowWidth / 2 + trayWidth / 2),
+ y: screenSize.y,
+ },
+ trayBottomCenter: {
+ x: Math.floor(trayX - windowWidth / 2 + trayWidth / 2),
+ y: Math.floor(screenSize.height - (windowHeight - screenSize.y)),
+ },
+ topLeft: {
+ x: screenSize.x,
+ y: screenSize.y,
+ },
+ topRight: {
+ x: Math.floor(screenSize.x + (screenSize.width - windowWidth)),
+ y: screenSize.y,
+ },
+ bottomLeft: {
+ x: screenSize.x,
+ y: Math.floor(screenSize.height - (windowHeight - screenSize.y)),
+ },
+ bottomRight: {
+ x: Math.floor(screenSize.x + (screenSize.width - windowWidth)),
+ y: Math.floor(screenSize.height - (windowHeight - screenSize.y)),
+ },
+ topCenter: {
+ x: Math.floor(screenSize.x + (screenSize.width / 2 - windowWidth / 2)),
+ y: screenSize.y,
+ },
+ bottomCenter: {
+ x: Math.floor(screenSize.x + (screenSize.width / 2 - windowWidth / 2)),
+ y: Math.floor(screenSize.height - (windowHeight - screenSize.y)),
+ },
+ leftCenter: {
+ x: screenSize.x,
+ y:
+ screenSize.y +
+ Math.floor(screenSize.height / 2) -
+ Math.floor(windowHeight / 2),
+ },
+ rightCenter: {
+ x: Math.floor(screenSize.x + (screenSize.width - windowWidth)),
+ y:
+ screenSize.y +
+ Math.floor(screenSize.height / 2) -
+ Math.floor(windowHeight / 2),
+ },
+ center: {
+ x: Math.floor(screenSize.x + (screenSize.width / 2 - windowWidth / 2)),
+ y: Math.floor(
+ (screenSize.height + screenSize.y) / 2 - windowHeight / 2,
+ ),
+ },
+ };
+
+ const coords = positions[position];
+
+ // On Windows, a tray-relative position can push the window past the right
+ // edge of the work area. Snap back to `topRight` x in that case so it stays
+ // visible. See https://github.com/jenslind/electron-positioner.
+ if (position.startsWith('tray')) {
+ if (coords.x + windowWidth > screenSize.width + screenSize.x) {
+ return { x: positions.topRight.x, y: coords.y };
+ }
+ }
+
+ return coords;
+ }
+}
diff --git a/src/__mocks__/electron.ts b/src/__mocks__/electron.ts
index 0e921202..0a8861df 100644
--- a/src/__mocks__/electron.ts
+++ b/src/__mocks__/electron.ts
@@ -1,35 +1,74 @@
// https://github.com/electron/electron/issues/3909#issuecomment-190990825
+import { type Mock, vi } from 'vitest';
+
export const MOCK_APP_GETAPPPATH = 'mock.app.getAppPath';
-export const app = {
- getAppPath: jest.fn(() => MOCK_APP_GETAPPPATH),
+export const app: {
+ getAppPath: Mock;
+ isReady: () => Promise;
+ on: Mock;
+ removeListener: Mock;
+} = {
+ getAppPath: vi.fn(() => MOCK_APP_GETAPPPATH),
isReady: (): Promise => Promise.resolve(),
- on: (): void => {
- /* Do nothing */
- },
+ on: vi.fn(),
+ removeListener: vi.fn(),
};
export class BrowserWindow {
- loadURL(): void {
- // Do nothing
- }
+ private _position: [number, number] = [0, 0];
+ destroy: Mock = vi.fn();
+ getPosition: Mock = vi.fn(() => this._position);
+ getSize: Mock = vi.fn(() => [400, 400]);
+ hide: Mock = vi.fn();
+ isAlwaysOnTop: Mock = vi.fn(() => false);
+ loadURL: Mock = vi.fn();
+ on: Mock = vi.fn();
+ setPosition: Mock = vi.fn((x: number, y: number) => {
+ this._position = [x, y];
+ });
+ setVisibleOnAllWorkspaces: Mock = vi.fn();
+ show: Mock = vi.fn();
+ webContents: { on: Mock } = { on: vi.fn() };
+}
- on(): void {
- // Do nothing
- }
+export const globalShortcut: {
+ isRegistered: Mock;
+ register: Mock;
+ unregister: Mock;
+} = {
+ isRegistered: vi.fn(() => false),
+ register: vi.fn(() => true),
+ unregister: vi.fn(),
+};
- setVisibleOnAllWorkspaces(): void {
- // Do nothing
- }
+export class Tray {
+ getBounds: Mock = vi.fn(() => ({ x: 0, y: 0, width: 32, height: 32 }));
+ isDestroyed: Mock = vi.fn(() => false);
+ on: Mock = vi.fn();
+ popUpContextMenu: Mock = vi.fn();
+ removeListener: Mock = vi.fn();
+ setContextMenu: Mock = vi.fn();
+ setIgnoreDoubleClickEvents: Mock = vi.fn();
+ setToolTip: Mock = vi.fn();
}
-export class Tray {
- on(): void {
- // Do nothing
- }
+const defaultWorkArea = { x: 0, y: 0, width: 1920, height: 1080 };
+const defaultBounds = { x: 0, y: 0, width: 1920, height: 1080 };
- setToolTip(): void {
- // Do nothing
- }
-}
+export const screen: {
+ getCursorScreenPoint: Mock;
+ getDisplayMatching: Mock;
+ getDisplayNearestPoint: Mock;
+} = {
+ getCursorScreenPoint: vi.fn(() => ({ x: 0, y: 0 })),
+ getDisplayMatching: vi.fn(() => ({
+ bounds: { ...defaultBounds },
+ workArea: { ...defaultWorkArea },
+ })),
+ getDisplayNearestPoint: vi.fn(() => ({
+ bounds: { ...defaultBounds },
+ workArea: { ...defaultWorkArea },
+ })),
+};
diff --git a/src/ambient.d.ts b/src/ambient.d.ts
deleted file mode 100644
index 2ff6872e..00000000
--- a/src/ambient.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-// TODO https://github.com/jenslind/electron-positioner/issues/15
-declare module 'electron-positioner' {
- export default class {
- constructor(window: Electron.BrowserWindow);
-
- calculate(
- position?: string,
- rectangle?: Electron.Rectangle,
- ): { x: number; y: number };
- }
-}
diff --git a/src/types.ts b/src/types.ts
index cf37f654..39ca44d3 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -1,9 +1,12 @@
import type {
BrowserWindowConstructorOptions,
LoadURLOptions,
+ Menu,
Tray,
} from 'electron';
+import type { WindowPosition } from './Positioner';
+
/**
* Options for creating a menubar application
*/
@@ -26,10 +29,52 @@ export interface Options {
* ```
*/
browserWindow: BrowserWindowConstructorOptions;
+ /**
+ * A native context menu to attach to the tray icon.
+ *
+ * On Linux this is bound via {@link Tray.setContextMenu} (required by
+ * libappindicator / StatusNotifierItem) and re-published whenever the
+ * menubar window shows or hides to defeat the indicator's menu cache.
+ *
+ * On macOS and Windows it is shown via {@link Tray.popUpContextMenu} on
+ * right-click, so left-click continues to toggle the menubar window.
+ * Setting this option therefore implies `trigger: 'click'` on those
+ * platforms — pass `trigger: 'none'` to disable left-click toggling
+ * entirely.
+ */
+ contextMenu?: Menu;
/**
* The app source directory.
*/
dir: string;
+ /**
+ * Register this accelerator as a global shortcut that toggles the menubar
+ * window. Calls
+ * [`globalShortcut.register`](https://electronjs.org/docs/api/global-shortcut#globalshortcutregisteraccelerator-callback)
+ * after `ready` and unregisters it on {@link Menubar.destroy}. The same
+ * accelerator can be set or cleared later via
+ * {@link Menubar.setGlobalShortcut}.
+ */
+ globalShortcut?: Electron.Accelerator;
+ /**
+ * Hide the window on `close` instead of letting it be destroyed, so the
+ * next tray click re-uses the same {@link BrowserWindow} instance. On
+ * Linux/Wayland the hide is deferred via `setImmediate` to work around a
+ * compositor bug that leaves frameless surfaces in a half-closed state
+ * when hidden synchronously from the `close` handler.
+ *
+ * Respects `app.isQuitting === true` (set this in your `before-quit`
+ * handler) so the close goes through during real quits. Has no effect
+ * when the close event was triggered by {@link Menubar.destroy}.
+ * @default `false`
+ */
+ hideOnClose?: boolean;
+ /**
+ * Hide the menubar window when the user presses `Escape` while it has
+ * focus. Wires up a `before-input-event` listener on the BrowserWindow.
+ * @default `false`
+ */
+ escapeToHide?: boolean;
/**
* The png icon to use for the menubar. A good size to start with is 20x20.
* To support retina, supply a 2x sized image (e.g. 40x40) with @2x added to
@@ -54,6 +99,14 @@ export interface Options {
* @see https://electronjs.org/docs/api/browser-window#winloadurlurl-options
*/
loadUrlOptions?: LoadURLOptions;
+ /**
+ * Ignore the tray's `double-click` event on macOS. Prevents a flicker
+ * caused by the close-on-blur handler racing the second click of an
+ * accidental double-click. No-op on Linux/Windows. Calls
+ * [`tray.setIgnoreDoubleClickEvents`](https://electronjs.org/docs/api/tray#traysetignoredoubleclickeventsignore-macos).
+ * @default `true`
+ */
+ ignoreDoubleClickEvents?: boolean;
/**
* Create BrowserWindow instance before it is used -- increasing resource
* usage, but making the click on the menubar load faster.
@@ -71,8 +124,19 @@ export interface Options {
showOnAllWorkspaces?: boolean;
/**
* Show the window on 'right-click' event instead of regular 'click'.
+ * @deprecated Use {@link Options.trigger} instead. Will be removed in the
+ * next major release.
*/
showOnRightClick?: boolean;
+ /**
+ * Tray event that toggles the menubar window. Set to `'none'` to disable
+ * automatic toggling — the window can still be shown by calling
+ * {@link Menubar.showWindow} directly. Useful when a single tray icon serves
+ * multiple windows.
+ * @default `'click'` (or `'right-click'` if the deprecated
+ * {@link Options.showOnRightClick} is `true`)
+ */
+ trigger?: 'click' | 'right-click' | 'none';
/**
* Menubar tray icon tooltip text. Calls [`tray.setTooltip`](https://electronjs.org/docs/api/tray#traysettooltiptooltip).
*/
@@ -82,23 +146,8 @@ export interface Options {
*/
tray?: Tray;
/**
- * Sets the window position (x and y will still override this), check
- * electron-positioner docs for valid values.
- */
- windowPosition?:
- | 'trayLeft'
- | 'trayBottomLeft'
- | 'trayRight'
- | 'trayBottomRight'
- | 'trayCenter'
- | 'trayBottomCenter'
- | 'topLeft'
- | 'topRight'
- | 'bottomLeft'
- | 'bottomRight'
- | 'topCenter'
- | 'bottomCenter'
- | 'leftCenter'
- | 'rightCenter'
- | 'center';
+ * Sets the window position (x and y will still override this). See
+ * {@link WindowPosition} for the list of valid values.
+ */
+ windowPosition?: WindowPosition;
}
diff --git a/src/util/cleanOptions.spec.ts b/src/util/cleanOptions.spec.ts
index 0beb163e..f111541a 100644
--- a/src/util/cleanOptions.spec.ts
+++ b/src/util/cleanOptions.spec.ts
@@ -1,8 +1,12 @@
-import * as path from 'path';
+import * as path from 'node:path';
+
+import { describe, expect, it, vi } from 'vitest';
import { MOCK_APP_GETAPPPATH } from '../__mocks__/electron';
import { cleanOptions } from './cleanOptions';
+vi.mock('electron', () => import('../__mocks__/electron'));
+
const DEFAULT_OPTIONS = {
activateWithApp: true,
browserWindow: {
@@ -10,6 +14,7 @@ const DEFAULT_OPTIONS = {
width: 400,
},
dir: path.resolve(MOCK_APP_GETAPPPATH),
+ ignoreDoubleClickEvents: true,
index: `file://${path.join(path.resolve(MOCK_APP_GETAPPPATH), 'index.html')}`,
loadUrlOptions: {},
tooltip: '',
diff --git a/src/util/cleanOptions.ts b/src/util/cleanOptions.ts
index 178a828d..741cbaf7 100644
--- a/src/util/cleanOptions.ts
+++ b/src/util/cleanOptions.ts
@@ -4,8 +4,9 @@
/** */
-import path from 'path';
-import url from 'url';
+import path from 'node:path';
+import url from 'node:url';
+
import { app } from 'electron';
import type { Options } from '../types';
@@ -25,6 +26,9 @@ export function cleanOptions(opts?: Partial): Options {
if (options.activateWithApp === undefined) {
options.activateWithApp = true;
}
+ if (options.ignoreDoubleClickEvents === undefined) {
+ options.ignoreDoubleClickEvents = true;
+ }
if (!options.dir) {
options.dir = app.getAppPath();
}
diff --git a/src/util/getWindowPosition.ts b/src/util/getWindowPosition.ts
index a4010a6b..2d630f09 100644
--- a/src/util/getWindowPosition.ts
+++ b/src/util/getWindowPosition.ts
@@ -4,7 +4,7 @@
/** */
-import { type Rectangle, type Tray, screen as electronScreen } from 'electron';
+import { screen as electronScreen, type Rectangle, type Tray } from 'electron';
const isLinux = process.platform === 'linux';
@@ -64,7 +64,7 @@ type WindowPosition =
| 'trayCenter'
| 'topRight'
| 'trayBottomCenter'
- | 'bottomLeft'
+ | 'leftCenter'
| 'bottomRight';
/**
@@ -94,7 +94,13 @@ export function getWindowPosition(tray: Tray): WindowPosition {
return 'bottomRight';
}
if (traySide === 'left') {
- return 'bottomLeft';
+ // Vertically centered against the left edge of the work area.
+ // `bottomLeft` would put the window in the screen's bottom-left
+ // corner — visually disconnected from the tray icon, which sits
+ // somewhere on the left strip. Tray-anchored y isn't available
+ // through `Positioner` for side taskbars, so center is the best
+ // compromise that stays close to the tray.
+ return 'leftCenter';
}
if (traySide === 'right') {
return 'bottomRight';
diff --git a/tests/e2e/fixture/index.html b/tests/e2e/fixture/index.html
new file mode 100644
index 00000000..2df00c00
--- /dev/null
+++ b/tests/e2e/fixture/index.html
@@ -0,0 +1,9 @@
+
+
+
+ menubar e2e fixture
+
+
+ menubar e2e
+
+
diff --git a/tests/e2e/fixture/main.js b/tests/e2e/fixture/main.js
new file mode 100644
index 00000000..b957ec5b
--- /dev/null
+++ b/tests/e2e/fixture/main.js
@@ -0,0 +1,34 @@
+const path = require('node:path');
+const { globalShortcut, Menu } = require('electron');
+const { menubar } = require('../../../lib/index.cjs');
+
+const scenario = process.env.E2E_SCENARIO || 'default';
+
+const options = {
+ index: `file://${path.join(__dirname, 'index.html')}`,
+ preloadWindow: true,
+ browserWindow: { width: 320, height: 240 },
+};
+
+switch (scenario) {
+ case 'hideOnClose':
+ options.hideOnClose = true;
+ break;
+ case 'globalShortcut':
+ options.globalShortcut = 'CmdOrCtrl+Alt+Shift+E';
+ break;
+ case 'contextMenu':
+ options.contextMenu = Menu.buildFromTemplate([
+ { label: 'First', type: 'normal' },
+ { label: 'Second', type: 'normal' },
+ ]);
+ break;
+}
+
+const mb = menubar(options);
+globalThis.__menubar = mb;
+globalThis.__electron = { globalShortcut };
+
+mb.on('ready', () => {
+ console.log('E2E:ready');
+});
diff --git a/tests/e2e/menubar.e2e.test.ts b/tests/e2e/menubar.e2e.test.ts
new file mode 100644
index 00000000..e6c71a27
--- /dev/null
+++ b/tests/e2e/menubar.e2e.test.ts
@@ -0,0 +1,170 @@
+import { mkdirSync, writeFileSync } from 'node:fs';
+import { join } from 'node:path';
+
+import {
+ type ElectronApplication,
+ _electron as electron,
+ expect,
+ test,
+} from '@playwright/test';
+
+type MenubarGlobal = {
+ __menubar?: import('../../src/Menubar').Menubar;
+ __electron?: {
+ globalShortcut: Electron.GlobalShortcut;
+ };
+};
+
+const launchFixture = (scenario?: string): Promise =>
+ electron.launch({
+ args: [join(__dirname, 'fixture', 'main.js')],
+ env: {
+ ...process.env,
+ NODE_ENV: 'test',
+ ...(scenario ? { E2E_SCENARIO: scenario } : {}),
+ },
+ });
+
+const waitForReady = (app: ElectronApplication): Promise =>
+ app.evaluate(
+ () =>
+ new Promise((resolve) => {
+ const mb = (globalThis as MenubarGlobal).__menubar;
+ if (!mb) throw new Error('fixture did not expose __menubar');
+ if (mb.tray) resolve();
+ else mb.on('ready', () => resolve());
+ }),
+ );
+
+test('menubar boots, emits ready, opens window, exposes tray', async () => {
+ const app = await launchFixture();
+
+ await waitForReady(app);
+
+ const trayBounds = await app.evaluate(() => {
+ const mb = (globalThis as MenubarGlobal).__menubar!;
+ return mb.tray.getBounds();
+ });
+ expect(trayBounds).toBeDefined();
+ expect(typeof trayBounds.width).toBe('number');
+
+ await app.evaluate(() => {
+ const mb = (globalThis as MenubarGlobal).__menubar!;
+ return mb.showWindow();
+ });
+
+ const window = await app.firstWindow();
+ await window.waitForSelector('#hello');
+ expect(await window.title()).toBe('menubar e2e fixture');
+
+ await app.evaluate(() => {
+ const mb = (globalThis as MenubarGlobal).__menubar!;
+ return mb.hideWindow();
+ });
+
+ await app.close();
+});
+
+test('toggleWindow alternates visibility', async () => {
+ const app = await launchFixture();
+ await waitForReady(app);
+
+ const result = await app.evaluate(async () => {
+ const mb = (globalThis as MenubarGlobal).__menubar!;
+ await mb.toggleWindow();
+ const afterFirst = mb.window!.isVisible();
+ await mb.toggleWindow();
+ const afterSecond = mb.window!.isVisible();
+ return { afterFirst, afterSecond };
+ });
+
+ expect(result.afterFirst).toBe(true);
+ expect(result.afterSecond).toBe(false);
+
+ await app.close();
+});
+
+test('hideOnClose: window survives a close() call', async () => {
+ const app = await launchFixture('hideOnClose');
+ await waitForReady(app);
+
+ const result = await app.evaluate(
+ () =>
+ new Promise<{ stillDefined: boolean; isVisible: boolean }>((resolve) => {
+ const mb = (globalThis as MenubarGlobal).__menubar!;
+ mb.showWindow().then(() => {
+ mb.window!.close();
+ // hideOnClose defers the hide via setImmediate; give it a tick.
+ setImmediate(() => {
+ resolve({
+ stillDefined: mb.window !== undefined,
+ isVisible: mb.window?.isVisible() ?? false,
+ });
+ });
+ });
+ }),
+ );
+
+ expect(result.stillDefined).toBe(true);
+ expect(result.isVisible).toBe(false);
+
+ await app.close();
+});
+
+test('globalShortcut registers the configured accelerator', async () => {
+ const app = await launchFixture('globalShortcut');
+ await waitForReady(app);
+
+ const registered = await app.evaluate(() => {
+ const gs = (globalThis as MenubarGlobal).__electron!.globalShortcut;
+ return gs.isRegistered('CmdOrCtrl+Alt+Shift+E');
+ });
+ expect(registered).toBe(true);
+
+ // setGlobalShortcut(undefined) clears and isRegistered should report false.
+ const clearedRegistered = await app.evaluate(() => {
+ const mb = (globalThis as MenubarGlobal).__menubar!;
+ mb.setGlobalShortcut(undefined);
+ const gs = (globalThis as MenubarGlobal).__electron!.globalShortcut;
+ return gs.isRegistered('CmdOrCtrl+Alt+Shift+E');
+ });
+ expect(clearedRegistered).toBe(false);
+
+ await app.close();
+});
+
+test('contextMenu option binds without throwing on this platform', async () => {
+ const app = await launchFixture('contextMenu');
+ await waitForReady(app);
+
+ const stored = await app.evaluate(() => {
+ const mb = (globalThis as MenubarGlobal).__menubar!;
+ return mb.getOption('contextMenu') !== undefined;
+ });
+ expect(stored).toBe(true);
+
+ await app.close();
+});
+
+test.afterAll(() => {
+ const platform =
+ process.env.E2E_PLATFORM_KEY ??
+ `${process.platform}-${process.env.RUNNER_OS ?? 'local'}`;
+ const dir = join(process.cwd(), 'test-results', 'platforms');
+ mkdirSync(dir, { recursive: true });
+ writeFileSync(
+ join(dir, `${platform}.json`),
+ JSON.stringify(
+ {
+ key: platform,
+ label: process.env.E2E_PLATFORM_LABEL ?? platform,
+ status: 'pass',
+ runUrl: process.env.GITHUB_RUN_URL ?? null,
+ sha: process.env.GITHUB_SHA ?? null,
+ date: new Date().toISOString(),
+ },
+ null,
+ 2,
+ ),
+ );
+});
diff --git a/tests/e2e/playwright.config.ts b/tests/e2e/playwright.config.ts
new file mode 100644
index 00000000..09966f2f
--- /dev/null
+++ b/tests/e2e/playwright.config.ts
@@ -0,0 +1,11 @@
+import { defineConfig } from '@playwright/test';
+
+export default defineConfig({
+ testDir: '.',
+ testMatch: /.*\.e2e\.test\.ts/,
+ timeout: 60_000,
+ fullyParallel: false,
+ workers: 1,
+ reporter: [['list']],
+ retries: process.env.CI ? 1 : 0,
+});
diff --git a/tests/e2e/update-platforms.mts b/tests/e2e/update-platforms.mts
new file mode 100644
index 00000000..7281d707
--- /dev/null
+++ b/tests/e2e/update-platforms.mts
@@ -0,0 +1,67 @@
+#!/usr/bin/env node
+import { readFileSync, readdirSync, writeFileSync } from 'node:fs';
+import { join } from 'node:path';
+
+interface PlatformResult {
+ key: string;
+ label: string;
+ status: 'pass' | 'fail';
+ runUrl: string | null;
+ sha: string | null;
+ date: string;
+}
+
+const START = '';
+const END = '';
+
+const resultsDir = process.argv[2] ?? 'test-results/platforms';
+const targetPath = process.argv[3] ?? 'PLATFORMS.md';
+
+const files = readdirSync(resultsDir).filter((f) => f.endsWith('.json'));
+const results: PlatformResult[] = files
+ .map(
+ (f) =>
+ JSON.parse(readFileSync(join(resultsDir, f), 'utf8')) as PlatformResult,
+ )
+ .sort((a, b) => a.label.localeCompare(b.label));
+
+if (results.length === 0) {
+ console.error('no result files found in', resultsDir);
+ process.exit(1);
+}
+
+const rows = results
+ .map((r) => `| ${r.label} | ${r.status === 'pass' ? '✅ Pass' : '❌ Fail'} |`)
+ .join('\n');
+
+const block = [
+ START,
+ '',
+ '_Continuously verified by [E2E smoke tests](.github/workflows/e2e.yml)._',
+ '',
+ '| Platform | Status |',
+ '| -------- | ------ |',
+ rows,
+ '',
+ END,
+].join('\n');
+
+const original = readFileSync(targetPath, 'utf8');
+const startIdx = original.indexOf(START);
+const endIdx = original.indexOf(END);
+
+if (startIdx === -1 || endIdx === -1) {
+ console.error(`markers ${START} / ${END} not found in ${targetPath}`);
+ process.exit(1);
+}
+
+const updated =
+ original.slice(0, startIdx) + block + original.slice(endIdx + END.length);
+
+if (updated === original) {
+ console.log(`${targetPath} unchanged`);
+ process.exit(0);
+}
+
+writeFileSync(targetPath, updated);
+console.log(`${targetPath} updated with ${results.length} platform(s)`);
diff --git a/tests/visual/fixture/index.html b/tests/visual/fixture/index.html
new file mode 100644
index 00000000..335ab9a2
--- /dev/null
+++ b/tests/visual/fixture/index.html
@@ -0,0 +1,27 @@
+
+
+
+ menubar visual fixture
+
+
+
+
+
+
diff --git a/tests/visual/fixture/main.js b/tests/visual/fixture/main.js
new file mode 100644
index 00000000..ce6714c5
--- /dev/null
+++ b/tests/visual/fixture/main.js
@@ -0,0 +1,89 @@
+const path = require('node:path');
+const { nativeImage, screen } = require('electron');
+const { menubar } = require('../../../lib/index.cjs');
+
+const SIZE = 22;
+const buf = Buffer.alloc(SIZE * SIZE * 4);
+for (let y = 0; y < SIZE; y++) {
+ for (let x = 0; x < SIZE; x++) {
+ const i = (y * SIZE + x) * 4;
+ const checker = (x >> 1) + (y >> 1);
+ if (checker & 1) {
+ buf[i] = 255;
+ buf[i + 1] = 0;
+ buf[i + 2] = 255;
+ } else {
+ buf[i] = 0;
+ buf[i + 1] = 255;
+ buf[i + 2] = 0;
+ }
+ buf[i + 3] = 255;
+ }
+}
+const icon = nativeImage.createFromBuffer(buf, { width: SIZE, height: SIZE });
+
+const mb = menubar({
+ icon,
+ index: `file://${path.join(__dirname, 'index.html')}`,
+ preloadWindow: false,
+ showDockIcon: false,
+ tooltip: 'menubar-visual-fixture',
+ browserWindow: {
+ width: 200,
+ height: 100,
+ show: false,
+ // Force opaque white background — Electron's default leaves the window
+ // transparent on Linux, which let GNOME's dark mode backdrop bleed
+ // through and made the bounds-rect detection see 0 white pixels.
+ transparent: false,
+ backgroundColor: '#FFFFFF',
+ // No window chrome: avoids GNOME Mutter's CSD header bar painting
+ // a blue/themed strip inside our 200x100 region.
+ frame: false,
+ // 200x100 is the *content* size; without this, the window's outer rect
+ // includes header bar/decorations and the inner HTML viewport ends up
+ // smaller, throwing off white-pixel counts.
+ useContentSize: true,
+ },
+});
+
+mb.on('ready', () => {
+ console.log('VISUAL:ready');
+ mb.showWindow()
+ .then(() => {
+ // Force topmost so the screenshot captures our window even when GHA
+ // runners pre-launch File Explorer / Notepad windows over the tray area.
+ mb.window?.setAlwaysOnTop(true, 'screen-saver');
+ // Move the window away from any OS panel/taskbar. Linux SNI panels
+ // return {0,0,0,0} for tray bounds, so menubar's Positioner falls back
+ // to the bottom-right corner — which on bottom-panel DEs (Budgie,
+ // Cinnamon, KDE) puts our opaque window right on top of the tray icon
+ // and the test can no longer detect it. Moving to a fixed mid-screen
+ // position guarantees no overlap on any platform.
+ mb.window?.setPosition(400, 200);
+ // Focus prevents Mutter from rendering the window as "unfocused" with
+ // a dimming/tint overlay (was producing a navy-blue rect on GNOME).
+ mb.window?.focus();
+ // Wait for the WM (especially Mutter on GNOME) to settle the window's
+ // final position before querying — getBounds() right after showWindow()
+ // returned a stale/intended coord on GNOME while the actual paint was
+ // elsewhere.
+ setTimeout(() => {
+ const trayBounds = mb.tray.getBounds();
+ const windowBounds = mb.window?.getBounds() ?? {
+ x: 0,
+ y: 0,
+ width: 0,
+ height: 0,
+ };
+ const scale = screen.getPrimaryDisplay().scaleFactor;
+ console.log(
+ `VISUAL:bounds=${JSON.stringify({ tray: trayBounds, window: windowBounds, scale })}`,
+ );
+ console.log('VISUAL:window-shown');
+ }, 1500);
+ })
+ .catch((err) => {
+ console.error('VISUAL:window-error', err);
+ });
+});
diff --git a/tests/visual/run.mts b/tests/visual/run.mts
new file mode 100644
index 00000000..ed1b156f
--- /dev/null
+++ b/tests/visual/run.mts
@@ -0,0 +1,333 @@
+#!/usr/bin/env node
+import { execFileSync, spawn } from 'node:child_process';
+import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
+import { createRequire } from 'node:module';
+import { join } from 'node:path';
+
+import { PNG } from 'pngjs';
+
+// `electron`, required outside the Electron runtime, resolves to the binary
+// path. createRequire keeps that CJS behaviour in this ESM (.mts) module.
+const require = createRequire(import.meta.url);
+const electronBin: string = require('electron');
+const fixturePath = join(import.meta.dirname, 'fixture', 'main.js');
+
+const key = process.env.VISUAL_KEY ?? `${process.platform}-local`;
+const label = process.env.VISUAL_LABEL ?? key;
+const outDir = join(process.cwd(), 'test-results', 'visual');
+const screenshotPath = join(outDir, `${key}.png`);
+const resultPath = join(outDir, `${key}.json`);
+mkdirSync(outDir, { recursive: true });
+
+const READY_TIMEOUT_MS = 30_000;
+const POST_READY_DELAY_MS = Number(
+ process.env.VISUAL_POST_READY_DELAY_MS ?? 3_000,
+);
+const TRAY_EXACT_THRESHOLD = 50;
+const TRAY_SATURATED_FALLBACK = 100;
+// Fixture window: white background (~16800 px) with centered 80x40 black
+// inner square (~3200 px), total 20000 px. Solid colors eliminate the
+// internal-AA drift the cyan/yellow split had. We bound the check to the
+// reported window rect so OS chrome white/black doesn't bleed in.
+const WINDOW_WHITE_THRESHOLD = 5000;
+const WINDOW_BLACK_THRESHOLD = 500;
+const RECT_PADDING = 4;
+const isWayland = process.platform === 'linux' && !!process.env.WAYLAND_DISPLAY;
+
+// Force --ozone-platform=wayland: hint=auto fell back to X11 in headless CI
+// even with WAYLAND_DISPLAY set. --disable-gpu + --no-sandbox keeps CI happy.
+const electronArgs = isWayland
+ ? [
+ '--ozone-platform=wayland',
+ '--enable-features=WaylandWindowDecorations',
+ '--disable-gpu',
+ '--no-sandbox',
+ fixturePath,
+ ]
+ : [fixturePath];
+
+const child = spawn(electronBin, electronArgs, {
+ stdio: ['ignore', 'pipe', 'pipe'],
+ env: { ...process.env, ELECTRON_DISABLE_SANDBOX: '1' },
+});
+
+interface Rect {
+ x: number;
+ y: number;
+ width: number;
+ height: number;
+}
+interface Bounds {
+ tray: Rect;
+ window: Rect;
+ scale: number;
+}
+
+let ready = false;
+let windowShown = false;
+let bounds: Bounds | null = null;
+let stdoutBuf = '';
+child.stdout.on('data', (chunk: Buffer) => {
+ const s = chunk.toString();
+ process.stdout.write(s);
+ stdoutBuf += s;
+ const lines = stdoutBuf.split('\n');
+ stdoutBuf = lines.pop() ?? '';
+ for (const line of lines) {
+ if (line.includes('VISUAL:ready')) ready = true;
+ if (line.includes('VISUAL:window-shown')) windowShown = true;
+ const m = line.match(/VISUAL:bounds=(\{.+\})/);
+ if (m) {
+ try {
+ bounds = JSON.parse(m[1]) as Bounds;
+ } catch {
+ console.error('failed to parse VISUAL:bounds payload:', m[1]);
+ }
+ }
+ }
+});
+child.stderr.on('data', (chunk: Buffer) => process.stderr.write(chunk));
+child.on('exit', (code) => {
+ if (!ready)
+ console.error(`fixture exited (code=${code}) before VISUAL:ready`);
+});
+
+const deadline = Date.now() + READY_TIMEOUT_MS;
+while (!ready && Date.now() < deadline && child.exitCode === null) {
+ await new Promise((r) => setTimeout(r, 100));
+}
+
+if (!ready) {
+ child.kill('SIGTERM');
+ writeResult({ status: 'fail', reason: 'fixture did not emit ready' });
+ process.exit(1);
+}
+
+await new Promise((r) => setTimeout(r, POST_READY_DELAY_MS));
+
+if (!windowShown) {
+ console.warn('fixture did not emit VISUAL:window-shown before screenshot');
+}
+
+const prepareCmd = process.env.VISUAL_PREPARE_CMD;
+if (prepareCmd) {
+ console.log(`running VISUAL_PREPARE_CMD: ${prepareCmd}`);
+ if (process.platform === 'win32') {
+ execFileSync('powershell', ['-NoProfile', '-Command', prepareCmd], {
+ stdio: 'inherit',
+ });
+ } else {
+ execFileSync('sh', ['-c', prepareCmd], { stdio: 'inherit' });
+ }
+}
+
+try {
+ capture(screenshotPath);
+} catch (err) {
+ child.kill('SIGTERM');
+ writeResult({
+ status: 'fail',
+ reason: `screenshot failed: ${(err as Error).message}`,
+ });
+ throw err;
+}
+
+child.kill('SIGTERM');
+
+const png = PNG.sync.read(readFileSync(screenshotPath));
+
+// Tray icon: magenta/green checker, detected globally (works on Linux SNI
+// where tray.getBounds() returns {0,0,0,0}). Saturated-pixel fallback for
+// platforms like KDE Plasma that recolor SNI icons.
+// Window content: white box + black inner square, detected only INSIDE the
+// reported window rect so OS chrome white/black text doesn't false-positive.
+const winRect = bounds ? scaleRect(bounds.window, bounds.scale) : null;
+let exactTray = 0;
+let saturatedNonWindow = 0;
+let windowWhite = 0;
+let windowBlack = 0;
+let globalWhite = 0;
+let globalBlack = 0;
+for (let y = 0; y < png.height; y++) {
+ const inWinY = winRect && y >= winRect.y && y < winRect.y2;
+ for (let x = 0; x < png.width; x++) {
+ const i = (y * png.width + x) * 4;
+ const r = png.data[i];
+ const g = png.data[i + 1];
+ const b = png.data[i + 2];
+ const isMagenta = r > 200 && g < 80 && b > 200;
+ const isGreen = r < 80 && g > 200 && b < 80;
+ if (isMagenta || isGreen) exactTray++;
+ const max = Math.max(r, g, b);
+ const min = Math.min(r, g, b);
+ if (max > 180 && max - min > 140) saturatedNonWindow++;
+ const isWhite = r > 240 && g > 240 && b > 240;
+ const isBlack = r < 15 && g < 15 && b < 15;
+ if (isWhite) globalWhite++;
+ if (isBlack) globalBlack++;
+ if (inWinY && x >= winRect!.x && x < winRect!.x2) {
+ if (isWhite) windowWhite++;
+ else if (isBlack) windowBlack++;
+ }
+ }
+}
+
+const trayDetected =
+ exactTray >= TRAY_EXACT_THRESHOLD ||
+ saturatedNonWindow >= TRAY_SATURATED_FALLBACK;
+// Window detected inside the reported bounds OR globally — covers GNOME
+// where Mutter renders the window at a different position than getBounds()
+// reports. Global thresholds set just below the fully-rendered expected
+// counts (16800 white + 3200 black) to reject OS chrome false positives.
+const windowDetectedBounded =
+ winRect !== null &&
+ windowWhite >= WINDOW_WHITE_THRESHOLD &&
+ windowBlack >= WINDOW_BLACK_THRESHOLD;
+// globalBlack varies wildly with wallpaper (macOS black is huge, others are
+// tiny) so we don't use it. globalWhite at >= 14000 reliably signals the
+// rendered white window background even when GNOME's Mutter paints the
+// window at a position that diverges from getBounds().
+const windowDetectedGlobal = globalWhite >= 14000;
+const windowDetected = windowDetectedBounded || windowDetectedGlobal;
+const status: 'pass' | 'fail' =
+ trayDetected && windowDetected ? 'pass' : 'fail';
+console.log(
+ [
+ `exactTray=${exactTray}`,
+ `saturatedNonWindow=${saturatedNonWindow}`,
+ `windowWhite=${windowWhite}`,
+ `windowBlack=${windowBlack}`,
+ `globalWhite=${globalWhite}`,
+ `globalBlack=${globalBlack}`,
+ `→ ${status}`,
+ `(tray=${trayDetected}, window=${windowDetected}`,
+ `bounded=${windowDetectedBounded}`,
+ `global=${windowDetectedGlobal})`,
+ ].join(' '),
+);
+writeResult({
+ status,
+ exactTray,
+ saturatedNonWindow,
+ windowWhite,
+ windowBlack,
+ globalWhite,
+ globalBlack,
+ trayDetected,
+ windowDetected,
+ windowDetectedBounded,
+ windowDetectedGlobal,
+});
+
+// Overwrite the on-disk screenshot with a mask that keeps only the tray-icon
+// and popover-window rects. The pixel-check above ran on the original
+// full-screen capture; the saved PNG is the clean version for diffing.
+if (bounds) {
+ const masked = maskToRects(png, bounds);
+ writeFileSync(screenshotPath, PNG.sync.write(masked));
+ console.log(
+ `masked screenshot to tray=${rectStr(bounds.tray, bounds.scale)} window=${rectStr(bounds.window, bounds.scale)}`,
+ );
+} else {
+ console.warn('VISUAL:bounds not received; leaving screenshot unmasked');
+}
+
+if (status === 'fail') process.exit(1);
+
+function capture(path: string): void {
+ if (process.platform === 'darwin') {
+ execFileSync('screencapture', ['-x', path], { stdio: 'inherit' });
+ } else if (process.platform === 'win32') {
+ const ps = [
+ 'Add-Type -AssemblyName System.Windows.Forms,System.Drawing;',
+ '$bounds = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds;',
+ '$bmp = New-Object System.Drawing.Bitmap $bounds.Width, $bounds.Height;',
+ '$g = [System.Drawing.Graphics]::FromImage($bmp);',
+ '$g.CopyFromScreen($bounds.Location, [System.Drawing.Point]::Empty, $bounds.Size);',
+ `$bmp.Save($env:VISUAL_OUT_PATH, [System.Drawing.Imaging.ImageFormat]::Png);`,
+ ].join(' ');
+ execFileSync('powershell', ['-NoProfile', '-Command', ps], {
+ stdio: 'inherit',
+ env: { ...process.env, VISUAL_OUT_PATH: path },
+ });
+ } else if (isWayland) {
+ execFileSync('grim', [path], { stdio: 'inherit' });
+ } else {
+ execFileSync('import', ['-window', 'root', path], { stdio: 'inherit' });
+ }
+}
+
+function writeResult(payload: Record): void {
+ writeFileSync(
+ resultPath,
+ JSON.stringify(
+ { key, label, ...payload, date: new Date().toISOString() },
+ null,
+ 2,
+ ),
+ );
+}
+
+function rectStr(r: Rect, scale: number): string {
+ const w = Math.round(r.width * scale);
+ const h = Math.round(r.height * scale);
+ const x = Math.round(r.x * scale);
+ const y = Math.round(r.y * scale);
+ return `${w}x${h}@${x},${y}`;
+}
+
+interface PixelRect {
+ x: number;
+ y: number;
+ x2: number;
+ y2: number;
+}
+
+function scaleRect(r: Rect, scale: number): PixelRect {
+ return {
+ x: Math.round(r.x * scale),
+ y: Math.round(r.y * scale),
+ x2: Math.round((r.x + r.width) * scale),
+ y2: Math.round((r.y + r.height) * scale),
+ };
+}
+
+// Blacks out everything outside the tray + window rects (scaled from DIPs
+// to physical pixels). Drops OS chrome, wallpaper, clocks, dock icons —
+// only marker content survives so diffs reflect real rendering changes.
+function maskToRects(src: PNG, b: Bounds): PNG {
+ const scale = b.scale || 1;
+ const keep = [b.tray, b.window]
+ .filter((r) => r.width > 0 && r.height > 0)
+ .map((r) => ({
+ x: Math.max(0, Math.round(r.x * scale) - RECT_PADDING),
+ y: Math.max(0, Math.round(r.y * scale) - RECT_PADDING),
+ x2: Math.min(
+ src.width,
+ Math.round((r.x + r.width) * scale) + RECT_PADDING,
+ ),
+ y2: Math.min(
+ src.height,
+ Math.round((r.y + r.height) * scale) + RECT_PADDING,
+ ),
+ }));
+ const out = new PNG({ width: src.width, height: src.height });
+ for (let i = 0; i < out.data.length; i += 4) {
+ out.data[i] = 0;
+ out.data[i + 1] = 0;
+ out.data[i + 2] = 0;
+ out.data[i + 3] = 255;
+ }
+ for (const r of keep) {
+ for (let y = r.y; y < r.y2; y++) {
+ for (let x = r.x; x < r.x2; x++) {
+ const i = (y * src.width + x) * 4;
+ out.data[i] = src.data[i];
+ out.data[i + 1] = src.data[i + 1];
+ out.data[i + 2] = src.data[i + 2];
+ out.data[i + 3] = 255;
+ }
+ }
+ }
+ return out;
+}
diff --git a/tests/visual/update-platforms.mts b/tests/visual/update-platforms.mts
new file mode 100644
index 00000000..75057a38
--- /dev/null
+++ b/tests/visual/update-platforms.mts
@@ -0,0 +1,71 @@
+#!/usr/bin/env node
+import { readFileSync, readdirSync, writeFileSync } from 'node:fs';
+import { join } from 'node:path';
+
+interface VisualResult {
+ key: string;
+ label: string;
+ status: 'pass' | 'fail';
+ date: string;
+}
+
+const START = '';
+const END = '';
+
+const resultsDir = process.argv[2] ?? 'test-results/visual';
+const targetPath = process.argv[3] ?? 'PLATFORMS.md';
+
+const files = readdirSync(resultsDir).filter((f) => f.endsWith('.json'));
+const results: VisualResult[] = files
+ .map(
+ (f) =>
+ JSON.parse(readFileSync(join(resultsDir, f), 'utf8')) as VisualResult,
+ )
+ .sort((a, b) => a.label.localeCompare(b.label));
+
+if (results.length === 0) {
+ console.error('no result files found in', resultsDir);
+ process.exit(1);
+}
+
+const screenshotCell = (key: string): string =>
+ `view

`;
+
+const rows = results
+ .map(
+ (r) =>
+ `| ${r.label} | ${r.status === 'pass' ? '✅ Pass' : '❌ Fail'} | ${screenshotCell(r.key)} |`,
+ )
+ .join('\n');
+
+const block = [
+ START,
+ '',
+ '_Continuously verified by [visual tray rendering tests](.github/workflows/visual-tray.yml). Each run boots the menubar fixture, screenshots the OS panel, and asserts both the tray icon and the popover window are painted. These checks confirm rendering, not tray-anchored placement. See [Window positioning on Linux](#window-positioning-on-linux)._',
+ '',
+ '| Platform | Tray + Window | Screenshot |',
+ '| -------- | ------------- | ---------- |',
+ rows,
+ '',
+ END,
+].join('\n');
+
+const original = readFileSync(targetPath, 'utf8');
+const startIdx = original.indexOf(START);
+const endIdx = original.indexOf(END);
+
+if (startIdx === -1 || endIdx === -1) {
+ console.error(`markers ${START} / ${END} not found in ${targetPath}`);
+ process.exit(1);
+}
+
+const updated =
+ original.slice(0, startIdx) + block + original.slice(endIdx + END.length);
+
+if (updated === original) {
+ console.log(`${targetPath} unchanged`);
+ process.exit(0);
+}
+
+writeFileSync(targetPath, updated);
+console.log(`${targetPath} updated with ${results.length} platform(s)`);
diff --git a/tsconfig.json b/tsconfig.json
index 06c500ea..01ac16ff 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,11 +1,15 @@
{
"compilerOptions": {
- "module": "commonjs",
+ "target": "ES2022",
+ "module": "ESNext",
+ "moduleResolution": "Bundler",
"esModuleInterop": true,
"strict": true,
"declaration": true,
- "outDir": "./lib",
"skipLibCheck": true,
- "target": "es5"
- }
+ "noEmit": true,
+ "isolatedModules": true,
+ "verbatimModuleSyntax": true
+ },
+ "include": ["src/**/*", "vite.config.ts"]
}
diff --git a/typedoc.js b/typedoc.js
deleted file mode 100644
index 50db2aa3..00000000
--- a/typedoc.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = {
- exclude: ['**/*spec.ts', '**/__mocks__/**'],
- excludeExternals: true,
- excludeNotExported: true,
- excludePrivate: true,
- excludeProtected: true,
- hideGenerator: true,
- includes: './src',
- module: 'commonjs',
- out: 'docs',
- stripInternal: 'true',
- theme: 'markdown',
-};
diff --git a/vite.config.ts b/vite.config.ts
new file mode 100644
index 00000000..a122d0d9
--- /dev/null
+++ b/vite.config.ts
@@ -0,0 +1,34 @@
+import { defineConfig } from 'vite-plus';
+
+export default defineConfig({
+ pack: {
+ entry: ['src/index.ts'],
+ format: ['esm', 'cjs'],
+ platform: 'node',
+ dts: true,
+ sourcemap: true,
+ clean: true,
+ outDir: 'lib',
+ },
+ test: {
+ include: ['src/**/*.spec.ts'],
+ },
+ lint: {
+ ignorePatterns: ['lib/**', 'docs/**', 'examples/**', 'coverage/**'],
+ },
+ fmt: {
+ singleQuote: true,
+ tabWidth: 2,
+ printWidth: 80,
+ sortImports: true,
+ ignorePatterns: [
+ 'lib/**',
+ 'docs/**',
+ 'examples/**',
+ 'coverage/**',
+ 'CHANGELOG.md',
+ '**/*.md',
+ '.github/**',
+ ],
+ },
+});
diff --git a/yarn.lock b/yarn.lock
deleted file mode 100644
index 1c479ec0..00000000
--- a/yarn.lock
+++ /dev/null
@@ -1,5071 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@ampproject/remapping@^2.2.0":
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
- integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
- dependencies:
- "@jridgewell/gen-mapping" "^0.3.5"
- "@jridgewell/trace-mapping" "^0.3.24"
-
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.24.7":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465"
- integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==
- dependencies:
- "@babel/highlight" "^7.24.7"
- picocolors "^1.0.0"
-
-"@babel/compat-data@^7.24.7":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.7.tgz#d23bbea508c3883ba8251fb4164982c36ea577ed"
- integrity sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==
-
-"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.5":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.7.tgz#b676450141e0b52a3d43bc91da86aa608f950ac4"
- integrity sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==
- dependencies:
- "@ampproject/remapping" "^2.2.0"
- "@babel/code-frame" "^7.24.7"
- "@babel/generator" "^7.24.7"
- "@babel/helper-compilation-targets" "^7.24.7"
- "@babel/helper-module-transforms" "^7.24.7"
- "@babel/helpers" "^7.24.7"
- "@babel/parser" "^7.24.7"
- "@babel/template" "^7.24.7"
- "@babel/traverse" "^7.24.7"
- "@babel/types" "^7.24.7"
- convert-source-map "^2.0.0"
- debug "^4.1.0"
- gensync "^1.0.0-beta.2"
- json5 "^2.2.3"
- semver "^6.3.1"
-
-"@babel/generator@^7.24.7":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.7.tgz#1654d01de20ad66b4b4d99c135471bc654c55e6d"
- integrity sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==
- dependencies:
- "@babel/types" "^7.24.7"
- "@jridgewell/gen-mapping" "^0.3.5"
- "@jridgewell/trace-mapping" "^0.3.25"
- jsesc "^2.5.1"
-
-"@babel/helper-compilation-targets@^7.24.7":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz#4eb6c4a80d6ffeac25ab8cd9a21b5dfa48d503a9"
- integrity sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==
- dependencies:
- "@babel/compat-data" "^7.24.7"
- "@babel/helper-validator-option" "^7.24.7"
- browserslist "^4.22.2"
- lru-cache "^5.1.1"
- semver "^6.3.1"
-
-"@babel/helper-environment-visitor@^7.24.7":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9"
- integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==
- dependencies:
- "@babel/types" "^7.24.7"
-
-"@babel/helper-function-name@^7.24.7":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2"
- integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==
- dependencies:
- "@babel/template" "^7.24.7"
- "@babel/types" "^7.24.7"
-
-"@babel/helper-hoist-variables@^7.24.7":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee"
- integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==
- dependencies:
- "@babel/types" "^7.24.7"
-
-"@babel/helper-module-imports@^7.24.7":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b"
- integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==
- dependencies:
- "@babel/traverse" "^7.24.7"
- "@babel/types" "^7.24.7"
-
-"@babel/helper-module-transforms@^7.24.7":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz#31b6c9a2930679498db65b685b1698bfd6c7daf8"
- integrity sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==
- dependencies:
- "@babel/helper-environment-visitor" "^7.24.7"
- "@babel/helper-module-imports" "^7.24.7"
- "@babel/helper-simple-access" "^7.24.7"
- "@babel/helper-split-export-declaration" "^7.24.7"
- "@babel/helper-validator-identifier" "^7.24.7"
-
-"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz#98c84fe6fe3d0d3ae7bfc3a5e166a46844feb2a0"
- integrity sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==
-
-"@babel/helper-simple-access@^7.24.7":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3"
- integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==
- dependencies:
- "@babel/traverse" "^7.24.7"
- "@babel/types" "^7.24.7"
-
-"@babel/helper-split-export-declaration@^7.24.7":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856"
- integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==
- dependencies:
- "@babel/types" "^7.24.7"
-
-"@babel/helper-string-parser@^7.24.7":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz#4d2d0f14820ede3b9807ea5fc36dfc8cd7da07f2"
- integrity sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==
-
-"@babel/helper-validator-identifier@^7.24.7":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db"
- integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==
-
-"@babel/helper-validator-option@^7.24.7":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz#24c3bb77c7a425d1742eec8fb433b5a1b38e62f6"
- integrity sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==
-
-"@babel/helpers@^7.24.7":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.7.tgz#aa2ccda29f62185acb5d42fb4a3a1b1082107416"
- integrity sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==
- dependencies:
- "@babel/template" "^7.24.7"
- "@babel/types" "^7.24.7"
-
-"@babel/highlight@^7.24.7":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d"
- integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==
- dependencies:
- "@babel/helper-validator-identifier" "^7.24.7"
- chalk "^2.4.2"
- js-tokens "^4.0.0"
- picocolors "^1.0.0"
-
-"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.24.7":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.7.tgz#9a5226f92f0c5c8ead550b750f5608e766c8ce85"
- integrity sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==
-
-"@babel/plugin-syntax-async-generators@^7.8.4":
- version "7.8.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
- integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-bigint@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea"
- integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-class-properties@^7.8.3":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"
- integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.12.13"
-
-"@babel/plugin-syntax-import-meta@^7.8.3":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
- integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
- dependencies:
- "@babel/helper-plugin-utils" "^7.10.4"
-
-"@babel/plugin-syntax-json-strings@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
- integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
- integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
- dependencies:
- "@babel/helper-plugin-utils" "^7.10.4"
-
-"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
- integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-numeric-separator@^7.8.3":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
- integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
- dependencies:
- "@babel/helper-plugin-utils" "^7.10.4"
-
-"@babel/plugin-syntax-object-rest-spread@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
- integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-optional-catch-binding@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
- integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-optional-chaining@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
- integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-top-level-await@^7.8.3":
- version "7.14.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"
- integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.14.5"
-
-"@babel/template@^7.24.7", "@babel/template@^7.3.3":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.7.tgz#02efcee317d0609d2c07117cb70ef8fb17ab7315"
- integrity sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==
- dependencies:
- "@babel/code-frame" "^7.24.7"
- "@babel/parser" "^7.24.7"
- "@babel/types" "^7.24.7"
-
-"@babel/traverse@^7.1.0", "@babel/traverse@^7.24.7":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.7.tgz#de2b900163fa741721ba382163fe46a936c40cf5"
- integrity sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==
- dependencies:
- "@babel/code-frame" "^7.24.7"
- "@babel/generator" "^7.24.7"
- "@babel/helper-environment-visitor" "^7.24.7"
- "@babel/helper-function-name" "^7.24.7"
- "@babel/helper-hoist-variables" "^7.24.7"
- "@babel/helper-split-export-declaration" "^7.24.7"
- "@babel/parser" "^7.24.7"
- "@babel/types" "^7.24.7"
- debug "^4.3.1"
- globals "^11.1.0"
-
-"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.3.3":
- version "7.24.7"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.7.tgz#6027fe12bc1aa724cd32ab113fb7f1988f1f66f2"
- integrity sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==
- dependencies:
- "@babel/helper-string-parser" "^7.24.7"
- "@babel/helper-validator-identifier" "^7.24.7"
- to-fast-properties "^2.0.0"
-
-"@bcoe/v8-coverage@^0.2.3":
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
- integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
-
-"@biomejs/biome@^1.9.3":
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/@biomejs/biome/-/biome-1.9.3.tgz#5362fc390ac00c82e3698824490e3801d012c1b0"
- integrity sha512-POjAPz0APAmX33WOQFGQrwLvlu7WLV4CFJMlB12b6ZSg+2q6fYu9kZwLCOA+x83zXfcPd1RpuWOKJW0GbBwLIQ==
- optionalDependencies:
- "@biomejs/cli-darwin-arm64" "1.9.3"
- "@biomejs/cli-darwin-x64" "1.9.3"
- "@biomejs/cli-linux-arm64" "1.9.3"
- "@biomejs/cli-linux-arm64-musl" "1.9.3"
- "@biomejs/cli-linux-x64" "1.9.3"
- "@biomejs/cli-linux-x64-musl" "1.9.3"
- "@biomejs/cli-win32-arm64" "1.9.3"
- "@biomejs/cli-win32-x64" "1.9.3"
-
-"@biomejs/cli-darwin-arm64@1.9.3":
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.3.tgz#3a981835a7a891589b356bbdb4e50157e494aa7d"
- integrity sha512-QZzD2XrjJDUyIZK+aR2i5DDxCJfdwiYbUKu9GzkCUJpL78uSelAHAPy7m0GuPMVtF/Uo+OKv97W3P9nuWZangQ==
-
-"@biomejs/cli-darwin-x64@1.9.3":
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.3.tgz#0e33284e5def9cbc17705b6a9acbc22b161accb1"
- integrity sha512-vSCoIBJE0BN3SWDFuAY/tRavpUtNoqiceJ5PrU3xDfsLcm/U6N93JSM0M9OAiC/X7mPPfejtr6Yc9vSgWlEgVw==
-
-"@biomejs/cli-linux-arm64-musl@1.9.3":
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.3.tgz#b68e2fe56381cbf71770b6c785215448c47595fd"
- integrity sha512-VBzyhaqqqwP3bAkkBrhVq50i3Uj9+RWuj+pYmXrMDgjS5+SKYGE56BwNw4l8hR3SmYbLSbEo15GcV043CDSk+Q==
-
-"@biomejs/cli-linux-arm64@1.9.3":
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.3.tgz#bb8186f000bd7366c3a1822a4a505e374905c462"
- integrity sha512-vJkAimD2+sVviNTbaWOGqEBy31cW0ZB52KtpVIbkuma7PlfII3tsLhFa+cwbRAcRBkobBBhqZ06hXoZAN8NODQ==
-
-"@biomejs/cli-linux-x64-musl@1.9.3":
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.3.tgz#01ccee0db2ca2ec9fb51fa69b2fc9e96434b5b32"
- integrity sha512-TJmnOG2+NOGM72mlczEsNki9UT+XAsMFAOo8J0me/N47EJ/vkLXxf481evfHLlxMejTY6IN8SdRSiPVLv6AHlA==
-
-"@biomejs/cli-linux-x64@1.9.3":
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.3.tgz#82d6fb824dd2c76142ab8625e202eb63a34e14f1"
- integrity sha512-x220V4c+romd26Mu1ptU+EudMXVS4xmzKxPVb9mgnfYlN4Yx9vD5NZraSx/onJnd3Gh/y8iPUdU5CDZJKg9COA==
-
-"@biomejs/cli-win32-arm64@1.9.3":
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.3.tgz#7fac607ade8e204eecae09e127713f000da0ccf2"
- integrity sha512-lg/yZis2HdQGsycUvHWSzo9kOvnGgvtrYRgoCEwPBwwAL8/6crOp3+f47tPwI/LI1dZrhSji7PNsGKGHbwyAhw==
-
-"@biomejs/cli-win32-x64@1.9.3":
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.3.tgz#1cbc269dcd5f29b034cb7f5982353c1cc3629318"
- integrity sha512-cQMy2zanBkVLpmmxXdK6YePzmZx0s5Z7KEnwmrW54rcXK3myCNbQa09SwGZ8i/8sLw0H9F3X7K4rxVNGU8/D4Q==
-
-"@cnakazawa/watch@^1.0.3":
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a"
- integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==
- dependencies:
- exec-sh "^0.3.2"
- minimist "^1.2.0"
-
-"@electron/get@^2.0.0":
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.3.tgz#fba552683d387aebd9f3fcadbcafc8e12ee4f960"
- integrity sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==
- dependencies:
- debug "^4.1.1"
- env-paths "^2.2.0"
- fs-extra "^8.1.0"
- got "^11.8.5"
- progress "^2.0.3"
- semver "^6.2.0"
- sumchecker "^3.0.1"
- optionalDependencies:
- global-agent "^3.0.0"
-
-"@hutson/parse-repository-url@^3.0.0":
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340"
- integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==
-
-"@istanbuljs/load-nyc-config@^1.0.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
- integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==
- 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"
-
-"@istanbuljs/schema@^0.1.2":
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
- integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
-
-"@jest/console@^26.6.2":
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2"
- integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==
- dependencies:
- "@jest/types" "^26.6.2"
- "@types/node" "*"
- chalk "^4.0.0"
- jest-message-util "^26.6.2"
- jest-util "^26.6.2"
- slash "^3.0.0"
-
-"@jest/core@^26.6.3":
- version "26.6.3"
- resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad"
- integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==
- dependencies:
- "@jest/console" "^26.6.2"
- "@jest/reporters" "^26.6.2"
- "@jest/test-result" "^26.6.2"
- "@jest/transform" "^26.6.2"
- "@jest/types" "^26.6.2"
- "@types/node" "*"
- ansi-escapes "^4.2.1"
- chalk "^4.0.0"
- exit "^0.1.2"
- graceful-fs "^4.2.4"
- jest-changed-files "^26.6.2"
- jest-config "^26.6.3"
- jest-haste-map "^26.6.2"
- jest-message-util "^26.6.2"
- jest-regex-util "^26.0.0"
- jest-resolve "^26.6.2"
- jest-resolve-dependencies "^26.6.3"
- jest-runner "^26.6.3"
- jest-runtime "^26.6.3"
- jest-snapshot "^26.6.2"
- jest-util "^26.6.2"
- jest-validate "^26.6.2"
- jest-watcher "^26.6.2"
- micromatch "^4.0.2"
- p-each-series "^2.1.0"
- rimraf "^3.0.0"
- slash "^3.0.0"
- strip-ansi "^6.0.0"
-
-"@jest/environment@^26.6.2":
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c"
- integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==
- dependencies:
- "@jest/fake-timers" "^26.6.2"
- "@jest/types" "^26.6.2"
- "@types/node" "*"
- jest-mock "^26.6.2"
-
-"@jest/fake-timers@^26.6.2":
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad"
- integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==
- dependencies:
- "@jest/types" "^26.6.2"
- "@sinonjs/fake-timers" "^6.0.1"
- "@types/node" "*"
- jest-message-util "^26.6.2"
- jest-mock "^26.6.2"
- jest-util "^26.6.2"
-
-"@jest/globals@^26.6.2":
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a"
- integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==
- dependencies:
- "@jest/environment" "^26.6.2"
- "@jest/types" "^26.6.2"
- expect "^26.6.2"
-
-"@jest/reporters@^26.6.2":
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6"
- integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==
- dependencies:
- "@bcoe/v8-coverage" "^0.2.3"
- "@jest/console" "^26.6.2"
- "@jest/test-result" "^26.6.2"
- "@jest/transform" "^26.6.2"
- "@jest/types" "^26.6.2"
- chalk "^4.0.0"
- collect-v8-coverage "^1.0.0"
- exit "^0.1.2"
- glob "^7.1.2"
- graceful-fs "^4.2.4"
- istanbul-lib-coverage "^3.0.0"
- istanbul-lib-instrument "^4.0.3"
- istanbul-lib-report "^3.0.0"
- istanbul-lib-source-maps "^4.0.0"
- istanbul-reports "^3.0.2"
- jest-haste-map "^26.6.2"
- jest-resolve "^26.6.2"
- jest-util "^26.6.2"
- jest-worker "^26.6.2"
- slash "^3.0.0"
- source-map "^0.6.0"
- string-length "^4.0.1"
- terminal-link "^2.0.0"
- v8-to-istanbul "^7.0.0"
- optionalDependencies:
- node-notifier "^8.0.0"
-
-"@jest/source-map@^26.6.2":
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535"
- integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==
- dependencies:
- callsites "^3.0.0"
- graceful-fs "^4.2.4"
- source-map "^0.6.0"
-
-"@jest/test-result@^26.6.2":
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18"
- integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==
- dependencies:
- "@jest/console" "^26.6.2"
- "@jest/types" "^26.6.2"
- "@types/istanbul-lib-coverage" "^2.0.0"
- collect-v8-coverage "^1.0.0"
-
-"@jest/test-sequencer@^26.6.3":
- version "26.6.3"
- resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17"
- integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==
- dependencies:
- "@jest/test-result" "^26.6.2"
- graceful-fs "^4.2.4"
- jest-haste-map "^26.6.2"
- jest-runner "^26.6.3"
- jest-runtime "^26.6.3"
-
-"@jest/transform@^26.6.2":
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b"
- integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==
- dependencies:
- "@babel/core" "^7.1.0"
- "@jest/types" "^26.6.2"
- babel-plugin-istanbul "^6.0.0"
- chalk "^4.0.0"
- convert-source-map "^1.4.0"
- fast-json-stable-stringify "^2.0.0"
- graceful-fs "^4.2.4"
- jest-haste-map "^26.6.2"
- jest-regex-util "^26.0.0"
- jest-util "^26.6.2"
- micromatch "^4.0.2"
- pirates "^4.0.1"
- slash "^3.0.0"
- source-map "^0.6.1"
- write-file-atomic "^3.0.0"
-
-"@jest/types@^25.5.0":
- version "25.5.0"
- resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d"
- integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==
- dependencies:
- "@types/istanbul-lib-coverage" "^2.0.0"
- "@types/istanbul-reports" "^1.1.1"
- "@types/yargs" "^15.0.0"
- chalk "^3.0.0"
-
-"@jest/types@^26.6.2":
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e"
- integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==
- dependencies:
- "@types/istanbul-lib-coverage" "^2.0.0"
- "@types/istanbul-reports" "^3.0.0"
- "@types/node" "*"
- "@types/yargs" "^15.0.0"
- chalk "^4.0.0"
-
-"@jridgewell/gen-mapping@^0.3.5":
- version "0.3.5"
- resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36"
- integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==
- dependencies:
- "@jridgewell/set-array" "^1.2.1"
- "@jridgewell/sourcemap-codec" "^1.4.10"
- "@jridgewell/trace-mapping" "^0.3.24"
-
-"@jridgewell/resolve-uri@^3.1.0":
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
- integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
-
-"@jridgewell/set-array@^1.2.1":
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
- integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
-
-"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
- version "1.4.15"
- resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
- integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
-
-"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
- version "0.3.25"
- resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
- integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
- dependencies:
- "@jridgewell/resolve-uri" "^3.1.0"
- "@jridgewell/sourcemap-codec" "^1.4.14"
-
-"@sindresorhus/is@^4.0.0":
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f"
- integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==
-
-"@sinonjs/commons@^1.7.0":
- version "1.8.6"
- resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9"
- integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==
- dependencies:
- type-detect "4.0.8"
-
-"@sinonjs/fake-timers@^6.0.1":
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40"
- integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==
- dependencies:
- "@sinonjs/commons" "^1.7.0"
-
-"@szmarczak/http-timer@^4.0.5":
- version "4.0.6"
- resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807"
- integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==
- dependencies:
- defer-to-connect "^2.0.0"
-
-"@tootallnate/once@1":
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
- integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
-
-"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7":
- version "7.20.5"
- resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017"
- integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==
- dependencies:
- "@babel/parser" "^7.20.7"
- "@babel/types" "^7.20.7"
- "@types/babel__generator" "*"
- "@types/babel__template" "*"
- "@types/babel__traverse" "*"
-
-"@types/babel__generator@*":
- version "7.6.8"
- resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab"
- integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==
- dependencies:
- "@babel/types" "^7.0.0"
-
-"@types/babel__template@*":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f"
- integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==
- dependencies:
- "@babel/parser" "^7.1.0"
- "@babel/types" "^7.0.0"
-
-"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6":
- version "7.20.6"
- resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7"
- integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==
- dependencies:
- "@babel/types" "^7.20.7"
-
-"@types/cacheable-request@^6.0.1":
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183"
- integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==
- dependencies:
- "@types/http-cache-semantics" "*"
- "@types/keyv" "^3.1.4"
- "@types/node" "*"
- "@types/responselike" "^1.0.0"
-
-"@types/graceful-fs@^4.1.2":
- version "4.1.9"
- resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4"
- integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==
- dependencies:
- "@types/node" "*"
-
-"@types/http-cache-semantics@*":
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4"
- integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==
-
-"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7"
- integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==
-
-"@types/istanbul-lib-report@*":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf"
- integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==
- dependencies:
- "@types/istanbul-lib-coverage" "*"
-
-"@types/istanbul-reports@^1.1.1":
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2"
- integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==
- dependencies:
- "@types/istanbul-lib-coverage" "*"
- "@types/istanbul-lib-report" "*"
-
-"@types/istanbul-reports@^3.0.0":
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54"
- integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==
- dependencies:
- "@types/istanbul-lib-report" "*"
-
-"@types/jest@^25.2.3":
- version "25.2.3"
- resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.2.3.tgz#33d27e4c4716caae4eced355097a47ad363fdcaf"
- integrity sha512-JXc1nK/tXHiDhV55dvfzqtmP4S3sy3T3ouV2tkViZgxY/zeUkcpQcQPGRlgF4KmWzWW5oiWYSZwtCB+2RsE4Fw==
- dependencies:
- jest-diff "^25.2.1"
- pretty-format "^25.2.1"
-
-"@types/keyv@^3.1.4":
- version "3.1.4"
- resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6"
- integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==
- dependencies:
- "@types/node" "*"
-
-"@types/minimist@^1.2.0":
- version "1.2.5"
- resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e"
- integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==
-
-"@types/node@*", "@types/node@^20.9.0":
- version "20.14.9"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.9.tgz#12e8e765ab27f8c421a1820c99f5f313a933b420"
- integrity sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==
- dependencies:
- undici-types "~5.26.4"
-
-"@types/normalize-package-data@^2.4.0":
- version "2.4.4"
- resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901"
- integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==
-
-"@types/prettier@^2.0.0":
- version "2.7.3"
- resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f"
- integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==
-
-"@types/responselike@^1.0.0":
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50"
- integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==
- dependencies:
- "@types/node" "*"
-
-"@types/stack-utils@^2.0.0":
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8"
- integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==
-
-"@types/yargs-parser@*":
- version "21.0.3"
- resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15"
- integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==
-
-"@types/yargs@^15.0.0":
- version "15.0.19"
- resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.19.tgz#328fb89e46109ecbdb70c295d96ff2f46dfd01b9"
- integrity sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==
- dependencies:
- "@types/yargs-parser" "*"
-
-"@types/yauzl@^2.9.1":
- version "2.10.3"
- resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999"
- integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==
- dependencies:
- "@types/node" "*"
-
-JSONStream@^1.0.4:
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
- integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
- dependencies:
- jsonparse "^1.2.0"
- through ">=2.2.7 <3"
-
-abab@^2.0.3, abab@^2.0.5:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
- integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
-
-acorn-globals@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
- integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==
- dependencies:
- acorn "^7.1.1"
- acorn-walk "^7.1.1"
-
-acorn-walk@^7.1.1:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
- integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
-
-acorn@^7.1.1:
- version "7.4.1"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
- integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
-
-acorn@^8.2.4:
- version "8.12.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.0.tgz#1627bfa2e058148036133b8d9b51a700663c294c"
- integrity sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==
-
-add-stream@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa"
- integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==
-
-agent-base@6:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
- integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
- dependencies:
- debug "4"
-
-ansi-escapes@^4.2.1:
- version "4.3.2"
- resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
- integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
- dependencies:
- type-fest "^0.21.3"
-
-ansi-regex@^5.0.0, ansi-regex@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
- integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
-
-ansi-styles@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
- integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
- dependencies:
- color-convert "^1.9.0"
-
-ansi-styles@^4.0.0, ansi-styles@^4.1.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
- integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
- dependencies:
- color-convert "^2.0.1"
-
-anymatch@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
- integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
- dependencies:
- micromatch "^3.1.4"
- normalize-path "^2.1.1"
-
-anymatch@^3.0.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
- integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
- dependencies:
- normalize-path "^3.0.0"
- picomatch "^2.0.4"
-
-argparse@^1.0.7:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
- integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
- dependencies:
- sprintf-js "~1.0.2"
-
-arr-diff@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
- integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==
-
-arr-flatten@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
- integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
-
-arr-union@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
- integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==
-
-array-find-index@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
- integrity sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==
-
-array-ify@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece"
- integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==
-
-array-unique@^0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
- integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==
-
-arrify@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
- integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==
-
-assign-symbols@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
- integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==
-
-asynckit@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
- integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
-
-at-least-node@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
- integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
-
-atob@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
- integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
-
-babel-jest@^26.6.3:
- version "26.6.3"
- resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056"
- integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==
- dependencies:
- "@jest/transform" "^26.6.2"
- "@jest/types" "^26.6.2"
- "@types/babel__core" "^7.1.7"
- babel-plugin-istanbul "^6.0.0"
- babel-preset-jest "^26.6.2"
- chalk "^4.0.0"
- graceful-fs "^4.2.4"
- slash "^3.0.0"
-
-babel-plugin-istanbul@^6.0.0:
- version "6.1.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73"
- integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==
- 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"
-
-babel-plugin-jest-hoist@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d"
- integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==
- dependencies:
- "@babel/template" "^7.3.3"
- "@babel/types" "^7.3.3"
- "@types/babel__core" "^7.0.0"
- "@types/babel__traverse" "^7.0.6"
-
-babel-preset-current-node-syntax@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b"
- integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==
- dependencies:
- "@babel/plugin-syntax-async-generators" "^7.8.4"
- "@babel/plugin-syntax-bigint" "^7.8.3"
- "@babel/plugin-syntax-class-properties" "^7.8.3"
- "@babel/plugin-syntax-import-meta" "^7.8.3"
- "@babel/plugin-syntax-json-strings" "^7.8.3"
- "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"
- "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
- "@babel/plugin-syntax-numeric-separator" "^7.8.3"
- "@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-top-level-await" "^7.8.3"
-
-babel-preset-jest@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee"
- integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==
- dependencies:
- babel-plugin-jest-hoist "^26.6.2"
- babel-preset-current-node-syntax "^1.0.0"
-
-balanced-match@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
- integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-
-base@^0.11.1:
- version "0.11.2"
- resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
- integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
- dependencies:
- cache-base "^1.0.1"
- class-utils "^0.3.5"
- component-emitter "^1.2.1"
- define-property "^1.0.0"
- isobject "^3.0.1"
- mixin-deep "^1.2.0"
- pascalcase "^0.1.1"
-
-boolean@^3.0.1:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b"
- integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==
-
-brace-expansion@^1.1.7:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
- integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
- dependencies:
- balanced-match "^1.0.0"
- concat-map "0.0.1"
-
-braces@^2.3.1:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
- integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
- dependencies:
- arr-flatten "^1.1.0"
- array-unique "^0.3.2"
- extend-shallow "^2.0.1"
- fill-range "^4.0.0"
- isobject "^3.0.1"
- repeat-element "^1.1.2"
- snapdragon "^0.8.1"
- snapdragon-node "^2.0.1"
- split-string "^3.0.2"
- to-regex "^3.0.1"
-
-braces@^3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
- integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
- dependencies:
- fill-range "^7.1.1"
-
-browser-process-hrtime@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
- integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
-
-browserslist@^4.22.2:
- version "4.23.1"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.1.tgz#ce4af0534b3d37db5c1a4ca98b9080f985041e96"
- integrity sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==
- dependencies:
- caniuse-lite "^1.0.30001629"
- electron-to-chromium "^1.4.796"
- node-releases "^2.0.14"
- update-browserslist-db "^1.0.16"
-
-bs-logger@0.x:
- version "0.2.6"
- resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8"
- integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==
- dependencies:
- fast-json-stable-stringify "2.x"
-
-bser@2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
- integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
- dependencies:
- node-int64 "^0.4.0"
-
-buffer-crc32@~0.2.3:
- version "0.2.13"
- resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
- integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
-
-buffer-from@1.x, buffer-from@^1.0.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
- integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
-
-cache-base@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
- integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
- dependencies:
- collection-visit "^1.0.0"
- component-emitter "^1.2.1"
- get-value "^2.0.6"
- has-value "^1.0.0"
- isobject "^3.0.1"
- set-value "^2.0.0"
- to-object-path "^0.3.0"
- union-value "^1.0.0"
- unset-value "^1.0.0"
-
-cacheable-lookup@^5.0.3:
- version "5.0.4"
- resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005"
- integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==
-
-cacheable-request@^7.0.2:
- version "7.0.4"
- resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817"
- integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==
- dependencies:
- clone-response "^1.0.2"
- get-stream "^5.1.0"
- http-cache-semantics "^4.0.0"
- keyv "^4.0.0"
- lowercase-keys "^2.0.0"
- normalize-url "^6.0.1"
- responselike "^2.0.0"
-
-callsites@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
- integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
-
-camelcase-keys@^4.0.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77"
- integrity sha512-Ej37YKYbFUI8QiYlvj9YHb6/Z60dZyPJW0Cs8sFilMbd2lP0bw3ylAq9yJkK4lcTA2dID5fG8LjmJYbO7kWb7Q==
- dependencies:
- camelcase "^4.1.0"
- map-obj "^2.0.0"
- quick-lru "^1.0.0"
-
-camelcase-keys@^6.2.2:
- version "6.2.2"
- resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0"
- integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==
- dependencies:
- camelcase "^5.3.1"
- map-obj "^4.0.0"
- quick-lru "^4.0.1"
-
-camelcase@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
- integrity sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==
-
-camelcase@^5.0.0, camelcase@^5.3.1:
- version "5.3.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
- integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
-
-camelcase@^6.0.0:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
- integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
-
-caniuse-lite@^1.0.30001629:
- version "1.0.30001637"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001637.tgz#d9fab531493d9ef46a8ff305e9812190ac463f21"
- integrity sha512-1x0qRI1mD1o9e+7mBI7XtzFAP4XszbHaVWsMiGbSPLYekKTJF7K+FNk6AsXH4sUpc+qrsI3pVgf1Jdl/uGkuSQ==
-
-capture-exit@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
- integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==
- dependencies:
- rsvp "^4.8.4"
-
-chalk@^2.4.2:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
- integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
-chalk@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
- integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
- dependencies:
- ansi-styles "^4.1.0"
- supports-color "^7.1.0"
-
-chalk@^4.0.0:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
- integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
- dependencies:
- ansi-styles "^4.1.0"
- supports-color "^7.1.0"
-
-char-regex@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
- integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
-
-ci-info@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
- integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
-
-cjs-module-lexer@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f"
- integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==
-
-class-utils@^0.3.5:
- version "0.3.6"
- resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
- integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
- dependencies:
- arr-union "^3.1.0"
- define-property "^0.2.5"
- isobject "^3.0.0"
- static-extend "^0.1.1"
-
-cliui@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
- integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
- dependencies:
- string-width "^4.2.0"
- strip-ansi "^6.0.0"
- wrap-ansi "^6.2.0"
-
-cliui@^7.0.2:
- version "7.0.4"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
- integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
- dependencies:
- string-width "^4.2.0"
- strip-ansi "^6.0.0"
- wrap-ansi "^7.0.0"
-
-clone-response@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3"
- integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==
- dependencies:
- mimic-response "^1.0.0"
-
-co@^4.6.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
- integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==
-
-collect-v8-coverage@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9"
- integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==
-
-collection-visit@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
- integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==
- dependencies:
- map-visit "^1.0.0"
- object-visit "^1.0.0"
-
-color-convert@^1.9.0:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
- integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
- dependencies:
- color-name "1.1.3"
-
-color-convert@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
- integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
- dependencies:
- color-name "~1.1.4"
-
-color-name@1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
- integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
-
-color-name@~1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
- integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-
-combined-stream@^1.0.8:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
- integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
- dependencies:
- delayed-stream "~1.0.0"
-
-compare-func@^1.3.1:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.4.tgz#6b07c4c5e8341119baf44578085bda0f4a823516"
- integrity sha512-sq2sWtrqKPkEXAC8tEJA1+BqAH9GbFkGBtUOqrUX57VSfwp8xyktctk+uLoRy5eccTdxzDcVIztlYDpKs3Jv1Q==
- dependencies:
- array-ify "^1.0.0"
- dot-prop "^3.0.0"
-
-compare-func@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3"
- integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==
- dependencies:
- array-ify "^1.0.0"
- dot-prop "^5.1.0"
-
-component-emitter@^1.2.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17"
- integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==
-
-concat-map@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
- integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
-
-concat-stream@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1"
- integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==
- dependencies:
- buffer-from "^1.0.0"
- inherits "^2.0.3"
- readable-stream "^3.0.2"
- typedarray "^0.0.6"
-
-conventional-changelog-angular@^5.0.10:
- version "5.0.13"
- resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c"
- integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==
- dependencies:
- compare-func "^2.0.0"
- q "^1.5.1"
-
-conventional-changelog-atom@^2.0.7:
- version "2.0.8"
- resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz#a759ec61c22d1c1196925fca88fe3ae89fd7d8de"
- integrity sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==
- dependencies:
- q "^1.5.1"
-
-conventional-changelog-codemirror@^2.0.7:
- version "2.0.8"
- resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz#398e9530f08ce34ec4640af98eeaf3022eb1f7dc"
- integrity sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==
- dependencies:
- q "^1.5.1"
-
-conventional-changelog-config-spec@2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz#874a635287ef8b581fd8558532bf655d4fb59f2d"
- integrity sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==
-
-conventional-changelog-conventionalcommits@4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.3.0.tgz#c4205a659f7ca9d7881f29ee78a4e7d6aeb8b3c2"
- integrity sha512-oYHydvZKU+bS8LnGqTMlNrrd7769EsuEHKy4fh1oMdvvDi7fem8U+nvfresJ1IDB8K00Mn4LpiA/lR+7Gs6rgg==
- dependencies:
- compare-func "^1.3.1"
- lodash "^4.17.15"
- q "^1.5.1"
-
-conventional-changelog-conventionalcommits@^4.3.0:
- version "4.6.3"
- resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz#0765490f56424b46f6cb4db9135902d6e5a36dc2"
- integrity sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==
- dependencies:
- compare-func "^2.0.0"
- lodash "^4.17.15"
- q "^1.5.1"
-
-conventional-changelog-core@^4.1.7:
- version "4.2.4"
- resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f"
- integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==
- dependencies:
- add-stream "^1.0.0"
- conventional-changelog-writer "^5.0.0"
- conventional-commits-parser "^3.2.0"
- dateformat "^3.0.0"
- get-pkg-repo "^4.0.0"
- git-raw-commits "^2.0.8"
- git-remote-origin-url "^2.0.0"
- git-semver-tags "^4.1.1"
- lodash "^4.17.15"
- normalize-package-data "^3.0.0"
- q "^1.5.1"
- read-pkg "^3.0.0"
- read-pkg-up "^3.0.0"
- through2 "^4.0.0"
-
-conventional-changelog-ember@^2.0.8:
- version "2.0.9"
- resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz#619b37ec708be9e74a220f4dcf79212ae1c92962"
- integrity sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==
- dependencies:
- q "^1.5.1"
-
-conventional-changelog-eslint@^3.0.8:
- version "3.0.9"
- resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz#689bd0a470e02f7baafe21a495880deea18b7cdb"
- integrity sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==
- dependencies:
- q "^1.5.1"
-
-conventional-changelog-express@^2.0.5:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz#420c9d92a347b72a91544750bffa9387665a6ee8"
- integrity sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==
- dependencies:
- q "^1.5.1"
-
-conventional-changelog-jquery@^3.0.10:
- version "3.0.11"
- resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz#d142207400f51c9e5bb588596598e24bba8994bf"
- integrity sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==
- dependencies:
- q "^1.5.1"
-
-conventional-changelog-jshint@^2.0.7:
- version "2.0.9"
- resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz#f2d7f23e6acd4927a238555d92c09b50fe3852ff"
- integrity sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==
- dependencies:
- compare-func "^2.0.0"
- q "^1.5.1"
-
-conventional-changelog-preset-loader@^2.3.4:
- version "2.3.4"
- resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c"
- integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==
-
-conventional-changelog-writer@^5.0.0:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359"
- integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==
- dependencies:
- conventional-commits-filter "^2.0.7"
- dateformat "^3.0.0"
- handlebars "^4.7.7"
- json-stringify-safe "^5.0.1"
- lodash "^4.17.15"
- meow "^8.0.0"
- semver "^6.0.0"
- split "^1.0.0"
- through2 "^4.0.0"
-
-conventional-changelog@3.1.21:
- version "3.1.21"
- resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-3.1.21.tgz#4a774e6bf503acfd7e4685bb750da8c0eccf1e0d"
- integrity sha512-ZGecVZPEo3aC75VVE4nu85589dDhpMyqfqgUM5Myq6wfKWiNqhDJLSDMsc8qKXshZoY7dqs1hR0H/15kI/G2jQ==
- dependencies:
- conventional-changelog-angular "^5.0.10"
- conventional-changelog-atom "^2.0.7"
- conventional-changelog-codemirror "^2.0.7"
- conventional-changelog-conventionalcommits "^4.3.0"
- conventional-changelog-core "^4.1.7"
- conventional-changelog-ember "^2.0.8"
- conventional-changelog-eslint "^3.0.8"
- conventional-changelog-express "^2.0.5"
- conventional-changelog-jquery "^3.0.10"
- conventional-changelog-jshint "^2.0.7"
- conventional-changelog-preset-loader "^2.3.4"
-
-conventional-commits-filter@^2.0.6, conventional-commits-filter@^2.0.7:
- version "2.0.7"
- resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3"
- integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==
- dependencies:
- lodash.ismatch "^4.4.0"
- modify-values "^1.0.0"
-
-conventional-commits-parser@^3.1.0, conventional-commits-parser@^3.2.0:
- version "3.2.4"
- resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972"
- integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==
- dependencies:
- JSONStream "^1.0.4"
- is-text-path "^1.0.1"
- lodash "^4.17.15"
- meow "^8.0.0"
- split2 "^3.0.0"
- through2 "^4.0.0"
-
-conventional-recommended-bump@6.0.9:
- version "6.0.9"
- resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-6.0.9.tgz#49ee74f52fbafcc63e89e2297d020279fea318f0"
- integrity sha512-DpRmW1k8CpRrcsXHOPGgHgOd4BMGiq2gtXAveGM8B9pSd9b4r4WKnqp1Fd0vkDtk8l973mIk8KKKUYnKRr9SFw==
- dependencies:
- concat-stream "^2.0.0"
- conventional-changelog-preset-loader "^2.3.4"
- conventional-commits-filter "^2.0.6"
- conventional-commits-parser "^3.1.0"
- git-raw-commits "2.0.0"
- git-semver-tags "^4.0.0"
- meow "^7.0.0"
- q "^1.5.1"
-
-convert-source-map@^1.4.0, convert-source-map@^1.6.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
- integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
-
-convert-source-map@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
- integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
-
-copy-descriptor@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
- integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==
-
-core-util-is@~1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
- integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
-
-cross-spawn@^6.0.0:
- version "6.0.5"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
- integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
- dependencies:
- nice-try "^1.0.4"
- path-key "^2.0.1"
- semver "^5.5.0"
- shebang-command "^1.2.0"
- which "^1.2.9"
-
-cross-spawn@^7.0.0:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
- integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
- dependencies:
- path-key "^3.1.0"
- shebang-command "^2.0.0"
- which "^2.0.1"
-
-cssom@^0.4.4:
- version "0.4.4"
- resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10"
- integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==
-
-cssom@~0.3.6:
- version "0.3.8"
- resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
- integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
-
-cssstyle@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
- integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
- dependencies:
- cssom "~0.3.6"
-
-currently-unhandled@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
- integrity sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==
- dependencies:
- array-find-index "^1.0.1"
-
-dargs@^4.0.1:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17"
- integrity sha512-jyweV/k0rbv2WK4r9KLayuBrSh2Py0tNmV7LBoSMH4hMQyrG8OPyIOWB2VEx4DJKXWmK4lopYMVvORlDt2S8Aw==
- dependencies:
- number-is-nan "^1.0.0"
-
-dargs@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc"
- integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==
-
-data-urls@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
- integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==
- dependencies:
- abab "^2.0.3"
- whatwg-mimetype "^2.3.0"
- whatwg-url "^8.0.0"
-
-dateformat@^3.0.0:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
- integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
-
-debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1:
- version "4.3.5"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e"
- integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==
- dependencies:
- ms "2.1.2"
-
-debug@^2.2.0, debug@^2.3.3:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
- integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
- dependencies:
- ms "2.0.0"
-
-decamelize-keys@^1.0.0, decamelize-keys@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8"
- integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==
- dependencies:
- decamelize "^1.1.0"
- map-obj "^1.0.0"
-
-decamelize@^1.1.0, decamelize@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
- integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
-
-decimal.js@^10.2.1:
- version "10.4.3"
- resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23"
- integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==
-
-decode-uri-component@^0.2.0:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9"
- integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==
-
-decompress-response@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
- integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
- dependencies:
- mimic-response "^3.1.0"
-
-deepmerge@^4.2.2:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
- integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
-
-defer-to-connect@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
- integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
-
-define-data-property@^1.0.1:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
- integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
- dependencies:
- es-define-property "^1.0.0"
- es-errors "^1.3.0"
- gopd "^1.0.1"
-
-define-properties@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"
- integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
- dependencies:
- define-data-property "^1.0.1"
- has-property-descriptors "^1.0.0"
- object-keys "^1.1.1"
-
-define-property@^0.2.5:
- version "0.2.5"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
- integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==
- dependencies:
- is-descriptor "^0.1.0"
-
-define-property@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
- integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==
- dependencies:
- is-descriptor "^1.0.0"
-
-define-property@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
- integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
- dependencies:
- is-descriptor "^1.0.2"
- isobject "^3.0.1"
-
-delayed-stream@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
- integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
-
-detect-indent@^6.0.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6"
- integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==
-
-detect-newline@^3.0.0, detect-newline@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
- integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
-
-detect-node@^2.0.4:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
- integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
-
-diff-sequences@^25.2.6:
- version "25.2.6"
- resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd"
- integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==
-
-diff-sequences@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1"
- integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==
-
-domexception@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304"
- integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==
- dependencies:
- webidl-conversions "^5.0.0"
-
-dot-prop@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177"
- integrity sha512-k4ELWeEU3uCcwub7+dWydqQBRjAjkV9L33HjVRG5Xo2QybI6ja/v+4W73SRi8ubCqJz0l9XsTP1NbewfyqaSlw==
- dependencies:
- is-obj "^1.0.0"
-
-dot-prop@^5.1.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88"
- integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==
- dependencies:
- is-obj "^2.0.0"
-
-dotgitignore@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/dotgitignore/-/dotgitignore-2.1.0.tgz#a4b15a4e4ef3cf383598aaf1dfa4a04bcc089b7b"
- integrity sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==
- dependencies:
- find-up "^3.0.0"
- minimatch "^3.0.4"
-
-electron-positioner@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/electron-positioner/-/electron-positioner-4.1.0.tgz#e158f8f6aabd6725a8a9b4f2279b9504bcbea1b0"
- integrity sha512-726DfbI9ZNoCg+Fcu6XLuTKTnzf+6nFqv7h+K/V6Ug7IbaPMI7s9S8URnGtWFCy5N5PL4HSzRFF2mXuinftDdg==
-
-electron-to-chromium@^1.4.796:
- version "1.4.812"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.812.tgz#21b78709c5a13af5d5c688d135a22dcea7617acf"
- integrity sha512-7L8fC2Ey/b6SePDFKR2zHAy4mbdp1/38Yk5TsARO66W3hC5KEaeKMMHoxwtuH+jcu2AYLSn9QX04i95t6Fl1Hg==
-
-electron@^34.3.0:
- version "34.3.0"
- resolved "https://registry.yarnpkg.com/electron/-/electron-34.3.0.tgz#d52a5bd14c72a5811a0c0e233db5c20ad70ba078"
- integrity sha512-I238qRnYTAsuwJ/rS7HGaFNY4NNKAcjX8nlj7mnNmj1TK3z4HvNoD1r7Zud81DYDFx8AITuLd76EPrEnnfF9Bg==
- dependencies:
- "@electron/get" "^2.0.0"
- "@types/node" "^20.9.0"
- extract-zip "^2.0.1"
-
-emittery@^0.7.1:
- version "0.7.2"
- resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82"
- integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==
-
-emoji-regex@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
- integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
-
-end-of-stream@^1.1.0:
- version "1.4.4"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
- integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
- dependencies:
- once "^1.4.0"
-
-env-paths@^2.2.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
- integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
-
-error-ex@^1.3.1:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
- integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
- dependencies:
- is-arrayish "^0.2.1"
-
-es-define-property@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845"
- integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==
- dependencies:
- get-intrinsic "^1.2.4"
-
-es-errors@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
- integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
-
-es6-error@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d"
- integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==
-
-escalade@^3.1.1, escalade@^3.1.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27"
- integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==
-
-escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
- integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
-
-escape-string-regexp@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
- integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
-
-escape-string-regexp@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
- integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
-
-escodegen@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17"
- integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==
- dependencies:
- esprima "^4.0.1"
- estraverse "^5.2.0"
- esutils "^2.0.2"
- optionalDependencies:
- source-map "~0.6.1"
-
-esprima@^4.0.0, esprima@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
- integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-
-estraverse@^5.2.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
- integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
-
-esutils@^2.0.2:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
- integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
-
-exec-sh@^0.3.2:
- version "0.3.6"
- resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc"
- integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==
-
-execa@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
- integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
- dependencies:
- cross-spawn "^6.0.0"
- get-stream "^4.0.0"
- is-stream "^1.1.0"
- npm-run-path "^2.0.0"
- p-finally "^1.0.0"
- signal-exit "^3.0.0"
- strip-eof "^1.0.0"
-
-execa@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a"
- integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==
- dependencies:
- cross-spawn "^7.0.0"
- get-stream "^5.0.0"
- human-signals "^1.1.1"
- is-stream "^2.0.0"
- merge-stream "^2.0.0"
- npm-run-path "^4.0.0"
- onetime "^5.1.0"
- signal-exit "^3.0.2"
- strip-final-newline "^2.0.0"
-
-exit@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
- integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==
-
-expand-brackets@^2.1.4:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
- integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==
- dependencies:
- debug "^2.3.3"
- define-property "^0.2.5"
- extend-shallow "^2.0.1"
- posix-character-classes "^0.1.0"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.1"
-
-expect@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417"
- integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==
- dependencies:
- "@jest/types" "^26.6.2"
- ansi-styles "^4.0.0"
- jest-get-type "^26.3.0"
- jest-matcher-utils "^26.6.2"
- jest-message-util "^26.6.2"
- jest-regex-util "^26.0.0"
-
-extend-shallow@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
- integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==
- dependencies:
- is-extendable "^0.1.0"
-
-extend-shallow@^3.0.0, extend-shallow@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
- integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==
- dependencies:
- assign-symbols "^1.0.0"
- is-extendable "^1.0.1"
-
-extglob@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
- integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
- dependencies:
- array-unique "^0.3.2"
- define-property "^1.0.0"
- expand-brackets "^2.1.4"
- extend-shallow "^2.0.1"
- fragment-cache "^0.2.1"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.1"
-
-extract-zip@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
- integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==
- dependencies:
- debug "^4.1.1"
- get-stream "^5.1.0"
- yauzl "^2.10.0"
- optionalDependencies:
- "@types/yauzl" "^2.9.1"
-
-fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
- integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-
-fb-watchman@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c"
- integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==
- dependencies:
- bser "2.1.1"
-
-fd-slicer@~1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
- integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==
- dependencies:
- pend "~1.2.0"
-
-figures@^3.1.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
- integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
- dependencies:
- escape-string-regexp "^1.0.5"
-
-fill-range@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
- integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==
- dependencies:
- extend-shallow "^2.0.1"
- is-number "^3.0.0"
- repeat-string "^1.6.1"
- to-regex-range "^2.1.0"
-
-fill-range@^7.1.1:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
- integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
- dependencies:
- to-regex-range "^5.0.1"
-
-find-up@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
- integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==
- dependencies:
- locate-path "^2.0.0"
-
-find-up@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
- integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
- dependencies:
- locate-path "^3.0.0"
-
-find-up@^4.0.0, find-up@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
- integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
- dependencies:
- locate-path "^5.0.0"
- path-exists "^4.0.0"
-
-for-in@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
- integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==
-
-form-data@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f"
- integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.8"
- mime-types "^2.1.12"
-
-fragment-cache@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
- integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==
- dependencies:
- map-cache "^0.2.2"
-
-fs-access@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a"
- integrity sha512-05cXDIwNbFaoFWaz5gNHlUTbH5whiss/hr/ibzPd4MH3cR4w0ZKeIPiVdbyJurg3O5r/Bjpvn9KOb1/rPMf3nA==
- dependencies:
- null-check "^1.0.0"
-
-fs-extra@^8.1.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
- integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
- dependencies:
- graceful-fs "^4.2.0"
- jsonfile "^4.0.0"
- universalify "^0.1.0"
-
-fs-extra@^9.0.1:
- version "9.1.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
- integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
- dependencies:
- at-least-node "^1.0.0"
- graceful-fs "^4.2.0"
- jsonfile "^6.0.1"
- universalify "^2.0.0"
-
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
- integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
-
-fsevents@^2.1.2:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
- integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
-
-function-bind@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
- integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
-
-gensync@^1.0.0-beta.2:
- version "1.0.0-beta.2"
- resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
- integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
-
-get-caller-file@^2.0.1, get-caller-file@^2.0.5:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
- integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-
-get-intrinsic@^1.1.3, get-intrinsic@^1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd"
- integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==
- dependencies:
- es-errors "^1.3.0"
- function-bind "^1.1.2"
- has-proto "^1.0.1"
- has-symbols "^1.0.3"
- hasown "^2.0.0"
-
-get-package-type@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
- integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
-
-get-pkg-repo@^4.0.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385"
- integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==
- dependencies:
- "@hutson/parse-repository-url" "^3.0.0"
- hosted-git-info "^4.0.0"
- through2 "^2.0.0"
- yargs "^16.2.0"
-
-get-stream@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
- integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
- dependencies:
- pump "^3.0.0"
-
-get-stream@^5.0.0, get-stream@^5.1.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
- integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
- dependencies:
- pump "^3.0.0"
-
-get-value@^2.0.3, get-value@^2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
- integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==
-
-git-raw-commits@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5"
- integrity sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg==
- dependencies:
- dargs "^4.0.1"
- lodash.template "^4.0.2"
- meow "^4.0.0"
- split2 "^2.0.0"
- through2 "^2.0.0"
-
-git-raw-commits@^2.0.8:
- version "2.0.11"
- resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723"
- integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==
- dependencies:
- dargs "^7.0.0"
- lodash "^4.17.15"
- meow "^8.0.0"
- split2 "^3.0.0"
- through2 "^4.0.0"
-
-git-remote-origin-url@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f"
- integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==
- dependencies:
- gitconfiglocal "^1.0.0"
- pify "^2.3.0"
-
-git-semver-tags@^4.0.0, git-semver-tags@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780"
- integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==
- dependencies:
- meow "^8.0.0"
- semver "^6.0.0"
-
-gitconfiglocal@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b"
- integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==
- dependencies:
- ini "^1.3.2"
-
-glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
- version "7.2.3"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
- integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
- 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"
-
-global-agent@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6"
- integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==
- dependencies:
- boolean "^3.0.1"
- es6-error "^4.1.1"
- matcher "^3.0.0"
- roarr "^2.15.3"
- semver "^7.3.2"
- serialize-error "^7.0.1"
-
-globals@^11.1.0:
- version "11.12.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
- integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
-
-globalthis@^1.0.1:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236"
- integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==
- dependencies:
- define-properties "^1.2.1"
- gopd "^1.0.1"
-
-gopd@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
- integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
- dependencies:
- get-intrinsic "^1.1.3"
-
-got@^11.8.5:
- version "11.8.6"
- resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a"
- integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==
- dependencies:
- "@sindresorhus/is" "^4.0.0"
- "@szmarczak/http-timer" "^4.0.5"
- "@types/cacheable-request" "^6.0.1"
- "@types/responselike" "^1.0.0"
- cacheable-lookup "^5.0.3"
- cacheable-request "^7.0.2"
- decompress-response "^6.0.0"
- http2-wrapper "^1.0.0-beta.5.2"
- lowercase-keys "^2.0.0"
- p-cancelable "^2.0.0"
- responselike "^2.0.0"
-
-graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4:
- version "4.2.11"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
- integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
-
-growly@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
- integrity sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==
-
-handlebars@^4.7.6, handlebars@^4.7.7:
- version "4.7.8"
- resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9"
- integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==
- dependencies:
- minimist "^1.2.5"
- neo-async "^2.6.2"
- source-map "^0.6.1"
- wordwrap "^1.0.0"
- optionalDependencies:
- uglify-js "^3.1.4"
-
-hard-rejection@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883"
- integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==
-
-has-flag@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
- integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
-
-has-flag@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
- integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
-
-has-property-descriptors@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854"
- integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
- dependencies:
- es-define-property "^1.0.0"
-
-has-proto@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd"
- integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==
-
-has-symbols@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
- integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
-
-has-value@^0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
- integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==
- dependencies:
- get-value "^2.0.3"
- has-values "^0.1.4"
- isobject "^2.0.0"
-
-has-value@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
- integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==
- dependencies:
- get-value "^2.0.6"
- has-values "^1.0.0"
- isobject "^3.0.0"
-
-has-values@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
- integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==
-
-has-values@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
- integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==
- dependencies:
- is-number "^3.0.0"
- kind-of "^4.0.0"
-
-hasown@^2.0.0, hasown@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
- integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
- dependencies:
- function-bind "^1.1.2"
-
-highlight.js@^10.0.0:
- version "10.7.3"
- resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531"
- integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==
-
-hosted-git-info@^2.1.4:
- version "2.8.9"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
- integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
-
-hosted-git-info@^4.0.0, hosted-git-info@^4.0.1:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224"
- integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==
- dependencies:
- lru-cache "^6.0.0"
-
-html-encoding-sniffer@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"
- integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==
- dependencies:
- whatwg-encoding "^1.0.5"
-
-html-escaper@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
- integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
-
-http-cache-semantics@^4.0.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
- integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
-
-http-proxy-agent@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"
- integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==
- dependencies:
- "@tootallnate/once" "1"
- agent-base "6"
- debug "4"
-
-http2-wrapper@^1.0.0-beta.5.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
- integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==
- dependencies:
- quick-lru "^5.1.1"
- resolve-alpn "^1.0.0"
-
-https-proxy-agent@^5.0.0:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
- integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
- dependencies:
- agent-base "6"
- debug "4"
-
-human-signals@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
- integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
-
-iconv-lite@0.4.24:
- version "0.4.24"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
- integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
- dependencies:
- safer-buffer ">= 2.1.2 < 3"
-
-import-local@^3.0.2:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
- integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==
- dependencies:
- pkg-dir "^4.2.0"
- resolve-cwd "^3.0.0"
-
-imurmurhash@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
- integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
-
-indent-string@^3.0.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
- integrity sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==
-
-indent-string@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
- integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
-
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@2, inherits@^2.0.3, inherits@~2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
- integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-
-ini@^1.3.2:
- version "1.3.8"
- resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
- integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
-
-interpret@^1.0.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
- integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
-
-is-accessor-descriptor@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz#3223b10628354644b86260db29b3e693f5ceedd4"
- integrity sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==
- dependencies:
- hasown "^2.0.0"
-
-is-arrayish@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
- integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
-
-is-buffer@^1.1.5:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
- integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
-
-is-ci@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
- integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
- dependencies:
- ci-info "^2.0.0"
-
-is-core-module@^2.13.0, is-core-module@^2.5.0:
- version "2.14.0"
- resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.14.0.tgz#43b8ef9f46a6a08888db67b1ffd4ec9e3dfd59d1"
- integrity sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==
- dependencies:
- hasown "^2.0.2"
-
-is-data-descriptor@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz#2109164426166d32ea38c405c1e0945d9e6a4eeb"
- integrity sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==
- dependencies:
- hasown "^2.0.0"
-
-is-descriptor@^0.1.0:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.7.tgz#2727eb61fd789dcd5bdf0ed4569f551d2fe3be33"
- integrity sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==
- dependencies:
- is-accessor-descriptor "^1.0.1"
- is-data-descriptor "^1.0.1"
-
-is-descriptor@^1.0.0, is-descriptor@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.3.tgz#92d27cb3cd311c4977a4db47df457234a13cb306"
- integrity sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==
- dependencies:
- is-accessor-descriptor "^1.0.1"
- is-data-descriptor "^1.0.1"
-
-is-docker@^2.0.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
- integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
-
-is-extendable@^0.1.0, is-extendable@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
- integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==
-
-is-extendable@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
- integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
- dependencies:
- is-plain-object "^2.0.4"
-
-is-fullwidth-code-point@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
- integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
-
-is-generator-fn@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
- integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
-
-is-number@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
- integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==
- dependencies:
- kind-of "^3.0.2"
-
-is-number@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
- integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-
-is-obj@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
- integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==
-
-is-obj@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
- integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
-
-is-plain-obj@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
- integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==
-
-is-plain-object@^2.0.3, is-plain-object@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
- integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
- dependencies:
- isobject "^3.0.1"
-
-is-potential-custom-element-name@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
- integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
-
-is-stream@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
- integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==
-
-is-stream@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
- integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
-
-is-text-path@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e"
- integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==
- dependencies:
- text-extensions "^1.0.0"
-
-is-typedarray@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
- integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==
-
-is-windows@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
- integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
-
-is-wsl@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
- integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
- dependencies:
- is-docker "^2.0.0"
-
-isarray@1.0.0, isarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
- integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
-
-isexe@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
- integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
-
-isobject@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
- integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==
- dependencies:
- isarray "1.0.0"
-
-isobject@^3.0.0, isobject@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
- integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
-
-istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756"
- integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==
-
-istanbul-lib-instrument@^4.0.3:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d"
- integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==
- dependencies:
- "@babel/core" "^7.7.5"
- "@istanbuljs/schema" "^0.1.2"
- istanbul-lib-coverage "^3.0.0"
- semver "^6.3.0"
-
-istanbul-lib-instrument@^5.0.4:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d"
- integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==
- 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"
-
-istanbul-lib-report@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d"
- integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==
- dependencies:
- istanbul-lib-coverage "^3.0.0"
- make-dir "^4.0.0"
- supports-color "^7.1.0"
-
-istanbul-lib-source-maps@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551"
- integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==
- dependencies:
- debug "^4.1.1"
- istanbul-lib-coverage "^3.0.0"
- source-map "^0.6.1"
-
-istanbul-reports@^3.0.2:
- version "3.1.7"
- resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b"
- integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==
- dependencies:
- html-escaper "^2.0.0"
- istanbul-lib-report "^3.0.0"
-
-jest-changed-files@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0"
- integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==
- dependencies:
- "@jest/types" "^26.6.2"
- execa "^4.0.0"
- throat "^5.0.0"
-
-jest-cli@^26.6.3:
- version "26.6.3"
- resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a"
- integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==
- dependencies:
- "@jest/core" "^26.6.3"
- "@jest/test-result" "^26.6.2"
- "@jest/types" "^26.6.2"
- chalk "^4.0.0"
- exit "^0.1.2"
- graceful-fs "^4.2.4"
- import-local "^3.0.2"
- is-ci "^2.0.0"
- jest-config "^26.6.3"
- jest-util "^26.6.2"
- jest-validate "^26.6.2"
- prompts "^2.0.1"
- yargs "^15.4.1"
-
-jest-config@^26.6.3:
- version "26.6.3"
- resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349"
- integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==
- dependencies:
- "@babel/core" "^7.1.0"
- "@jest/test-sequencer" "^26.6.3"
- "@jest/types" "^26.6.2"
- babel-jest "^26.6.3"
- chalk "^4.0.0"
- deepmerge "^4.2.2"
- glob "^7.1.1"
- graceful-fs "^4.2.4"
- jest-environment-jsdom "^26.6.2"
- jest-environment-node "^26.6.2"
- jest-get-type "^26.3.0"
- jest-jasmine2 "^26.6.3"
- jest-regex-util "^26.0.0"
- jest-resolve "^26.6.2"
- jest-util "^26.6.2"
- jest-validate "^26.6.2"
- micromatch "^4.0.2"
- pretty-format "^26.6.2"
-
-jest-diff@^25.2.1:
- version "25.5.0"
- resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9"
- integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==
- dependencies:
- chalk "^3.0.0"
- diff-sequences "^25.2.6"
- jest-get-type "^25.2.6"
- pretty-format "^25.5.0"
-
-jest-diff@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394"
- integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==
- dependencies:
- chalk "^4.0.0"
- diff-sequences "^26.6.2"
- jest-get-type "^26.3.0"
- pretty-format "^26.6.2"
-
-jest-docblock@^26.0.0:
- version "26.0.0"
- resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5"
- integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==
- dependencies:
- detect-newline "^3.0.0"
-
-jest-each@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb"
- integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==
- dependencies:
- "@jest/types" "^26.6.2"
- chalk "^4.0.0"
- jest-get-type "^26.3.0"
- jest-util "^26.6.2"
- pretty-format "^26.6.2"
-
-jest-environment-jsdom@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e"
- integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==
- dependencies:
- "@jest/environment" "^26.6.2"
- "@jest/fake-timers" "^26.6.2"
- "@jest/types" "^26.6.2"
- "@types/node" "*"
- jest-mock "^26.6.2"
- jest-util "^26.6.2"
- jsdom "^16.4.0"
-
-jest-environment-node@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c"
- integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==
- dependencies:
- "@jest/environment" "^26.6.2"
- "@jest/fake-timers" "^26.6.2"
- "@jest/types" "^26.6.2"
- "@types/node" "*"
- jest-mock "^26.6.2"
- jest-util "^26.6.2"
-
-jest-get-type@^25.2.6:
- version "25.2.6"
- resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877"
- integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==
-
-jest-get-type@^26.3.0:
- version "26.3.0"
- resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0"
- integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==
-
-jest-haste-map@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa"
- integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==
- dependencies:
- "@jest/types" "^26.6.2"
- "@types/graceful-fs" "^4.1.2"
- "@types/node" "*"
- anymatch "^3.0.3"
- fb-watchman "^2.0.0"
- graceful-fs "^4.2.4"
- jest-regex-util "^26.0.0"
- jest-serializer "^26.6.2"
- jest-util "^26.6.2"
- jest-worker "^26.6.2"
- micromatch "^4.0.2"
- sane "^4.0.3"
- walker "^1.0.7"
- optionalDependencies:
- fsevents "^2.1.2"
-
-jest-jasmine2@^26.6.3:
- version "26.6.3"
- resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd"
- integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==
- dependencies:
- "@babel/traverse" "^7.1.0"
- "@jest/environment" "^26.6.2"
- "@jest/source-map" "^26.6.2"
- "@jest/test-result" "^26.6.2"
- "@jest/types" "^26.6.2"
- "@types/node" "*"
- chalk "^4.0.0"
- co "^4.6.0"
- expect "^26.6.2"
- is-generator-fn "^2.0.0"
- jest-each "^26.6.2"
- jest-matcher-utils "^26.6.2"
- jest-message-util "^26.6.2"
- jest-runtime "^26.6.3"
- jest-snapshot "^26.6.2"
- jest-util "^26.6.2"
- pretty-format "^26.6.2"
- throat "^5.0.0"
-
-jest-leak-detector@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af"
- integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==
- dependencies:
- jest-get-type "^26.3.0"
- pretty-format "^26.6.2"
-
-jest-matcher-utils@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a"
- integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==
- dependencies:
- chalk "^4.0.0"
- jest-diff "^26.6.2"
- jest-get-type "^26.3.0"
- pretty-format "^26.6.2"
-
-jest-message-util@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07"
- integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==
- dependencies:
- "@babel/code-frame" "^7.0.0"
- "@jest/types" "^26.6.2"
- "@types/stack-utils" "^2.0.0"
- chalk "^4.0.0"
- graceful-fs "^4.2.4"
- micromatch "^4.0.2"
- pretty-format "^26.6.2"
- slash "^3.0.0"
- stack-utils "^2.0.2"
-
-jest-mock@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302"
- integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==
- dependencies:
- "@jest/types" "^26.6.2"
- "@types/node" "*"
-
-jest-pnp-resolver@^1.2.2:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e"
- integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==
-
-jest-regex-util@^26.0.0:
- version "26.0.0"
- resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28"
- integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==
-
-jest-resolve-dependencies@^26.6.3:
- version "26.6.3"
- resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6"
- integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==
- dependencies:
- "@jest/types" "^26.6.2"
- jest-regex-util "^26.0.0"
- jest-snapshot "^26.6.2"
-
-jest-resolve@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507"
- integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==
- dependencies:
- "@jest/types" "^26.6.2"
- chalk "^4.0.0"
- graceful-fs "^4.2.4"
- jest-pnp-resolver "^1.2.2"
- jest-util "^26.6.2"
- read-pkg-up "^7.0.1"
- resolve "^1.18.1"
- slash "^3.0.0"
-
-jest-runner@^26.6.3:
- version "26.6.3"
- resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159"
- integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==
- dependencies:
- "@jest/console" "^26.6.2"
- "@jest/environment" "^26.6.2"
- "@jest/test-result" "^26.6.2"
- "@jest/types" "^26.6.2"
- "@types/node" "*"
- chalk "^4.0.0"
- emittery "^0.7.1"
- exit "^0.1.2"
- graceful-fs "^4.2.4"
- jest-config "^26.6.3"
- jest-docblock "^26.0.0"
- jest-haste-map "^26.6.2"
- jest-leak-detector "^26.6.2"
- jest-message-util "^26.6.2"
- jest-resolve "^26.6.2"
- jest-runtime "^26.6.3"
- jest-util "^26.6.2"
- jest-worker "^26.6.2"
- source-map-support "^0.5.6"
- throat "^5.0.0"
-
-jest-runtime@^26.6.3:
- version "26.6.3"
- resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b"
- integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==
- dependencies:
- "@jest/console" "^26.6.2"
- "@jest/environment" "^26.6.2"
- "@jest/fake-timers" "^26.6.2"
- "@jest/globals" "^26.6.2"
- "@jest/source-map" "^26.6.2"
- "@jest/test-result" "^26.6.2"
- "@jest/transform" "^26.6.2"
- "@jest/types" "^26.6.2"
- "@types/yargs" "^15.0.0"
- chalk "^4.0.0"
- cjs-module-lexer "^0.6.0"
- collect-v8-coverage "^1.0.0"
- exit "^0.1.2"
- glob "^7.1.3"
- graceful-fs "^4.2.4"
- jest-config "^26.6.3"
- jest-haste-map "^26.6.2"
- jest-message-util "^26.6.2"
- jest-mock "^26.6.2"
- jest-regex-util "^26.0.0"
- jest-resolve "^26.6.2"
- jest-snapshot "^26.6.2"
- jest-util "^26.6.2"
- jest-validate "^26.6.2"
- slash "^3.0.0"
- strip-bom "^4.0.0"
- yargs "^15.4.1"
-
-jest-serializer@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1"
- integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==
- dependencies:
- "@types/node" "*"
- graceful-fs "^4.2.4"
-
-jest-snapshot@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84"
- integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==
- dependencies:
- "@babel/types" "^7.0.0"
- "@jest/types" "^26.6.2"
- "@types/babel__traverse" "^7.0.4"
- "@types/prettier" "^2.0.0"
- chalk "^4.0.0"
- expect "^26.6.2"
- graceful-fs "^4.2.4"
- jest-diff "^26.6.2"
- jest-get-type "^26.3.0"
- jest-haste-map "^26.6.2"
- jest-matcher-utils "^26.6.2"
- jest-message-util "^26.6.2"
- jest-resolve "^26.6.2"
- natural-compare "^1.4.0"
- pretty-format "^26.6.2"
- semver "^7.3.2"
-
-jest-util@^26.1.0, jest-util@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1"
- integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==
- dependencies:
- "@jest/types" "^26.6.2"
- "@types/node" "*"
- chalk "^4.0.0"
- graceful-fs "^4.2.4"
- is-ci "^2.0.0"
- micromatch "^4.0.2"
-
-jest-validate@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec"
- integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==
- dependencies:
- "@jest/types" "^26.6.2"
- camelcase "^6.0.0"
- chalk "^4.0.0"
- jest-get-type "^26.3.0"
- leven "^3.1.0"
- pretty-format "^26.6.2"
-
-jest-watcher@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975"
- integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==
- dependencies:
- "@jest/test-result" "^26.6.2"
- "@jest/types" "^26.6.2"
- "@types/node" "*"
- ansi-escapes "^4.2.1"
- chalk "^4.0.0"
- jest-util "^26.6.2"
- string-length "^4.0.1"
-
-jest-worker@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed"
- integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==
- dependencies:
- "@types/node" "*"
- merge-stream "^2.0.0"
- supports-color "^7.0.0"
-
-jest@^26.0.1:
- version "26.6.3"
- resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef"
- integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==
- dependencies:
- "@jest/core" "^26.6.3"
- import-local "^3.0.2"
- jest-cli "^26.6.3"
-
-js-tokens@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
- integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
-
-js-yaml@^3.13.1:
- version "3.14.1"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
- integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
- dependencies:
- argparse "^1.0.7"
- esprima "^4.0.0"
-
-jsdom@^16.4.0:
- version "16.7.0"
- resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710"
- integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==
- dependencies:
- abab "^2.0.5"
- acorn "^8.2.4"
- acorn-globals "^6.0.0"
- cssom "^0.4.4"
- cssstyle "^2.3.0"
- data-urls "^2.0.0"
- decimal.js "^10.2.1"
- domexception "^2.0.1"
- escodegen "^2.0.0"
- form-data "^3.0.0"
- html-encoding-sniffer "^2.0.1"
- http-proxy-agent "^4.0.1"
- https-proxy-agent "^5.0.0"
- is-potential-custom-element-name "^1.0.1"
- nwsapi "^2.2.0"
- parse5 "6.0.1"
- saxes "^5.0.1"
- symbol-tree "^3.2.4"
- tough-cookie "^4.0.0"
- w3c-hr-time "^1.0.2"
- w3c-xmlserializer "^2.0.0"
- webidl-conversions "^6.1.0"
- whatwg-encoding "^1.0.5"
- whatwg-mimetype "^2.3.0"
- whatwg-url "^8.5.0"
- ws "^7.4.6"
- xml-name-validator "^3.0.0"
-
-jsesc@^2.5.1:
- version "2.5.2"
- resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
- integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
-
-json-buffer@3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
- integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
-
-json-parse-better-errors@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
- integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
-
-json-parse-even-better-errors@^2.3.0:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
- integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
-
-json-stringify-safe@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
- integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
-
-json5@2.x, json5@^2.2.3:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
- integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
-
-jsonfile@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
- integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==
- optionalDependencies:
- graceful-fs "^4.1.6"
-
-jsonfile@^6.0.1:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
- integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
- dependencies:
- universalify "^2.0.0"
- optionalDependencies:
- graceful-fs "^4.1.6"
-
-jsonparse@^1.2.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
- integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==
-
-keyv@^4.0.0:
- version "4.5.4"
- resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
- integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
- dependencies:
- json-buffer "3.0.1"
-
-kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
- integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==
- dependencies:
- is-buffer "^1.1.5"
-
-kind-of@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
- integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==
- dependencies:
- is-buffer "^1.1.5"
-
-kind-of@^6.0.2, kind-of@^6.0.3:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
- integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
-
-kleur@^3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
- integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
-
-leven@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
- integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
-
-lines-and-columns@^1.1.6:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
- integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
-
-load-json-file@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
- integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==
- dependencies:
- graceful-fs "^4.1.2"
- parse-json "^4.0.0"
- pify "^3.0.0"
- strip-bom "^3.0.0"
-
-locate-path@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
- integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==
- dependencies:
- p-locate "^2.0.0"
- path-exists "^3.0.0"
-
-locate-path@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
- integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
- dependencies:
- p-locate "^3.0.0"
- path-exists "^3.0.0"
-
-locate-path@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
- integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
- dependencies:
- p-locate "^4.1.0"
-
-lodash._reinterpolate@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
- integrity sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==
-
-lodash.ismatch@^4.4.0:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37"
- integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==
-
-lodash.template@^4.0.2:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab"
- integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==
- dependencies:
- lodash._reinterpolate "^3.0.0"
- lodash.templatesettings "^4.0.0"
-
-lodash.templatesettings@^4.0.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33"
- integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==
- dependencies:
- lodash._reinterpolate "^3.0.0"
-
-lodash@4.x, lodash@^4.17.15, lodash@^4.7.0:
- version "4.17.21"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
- integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
-
-loud-rejection@^1.0.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
- integrity sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==
- dependencies:
- currently-unhandled "^0.4.1"
- signal-exit "^3.0.0"
-
-lowercase-keys@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
- integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
-
-lru-cache@^5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
- integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
- dependencies:
- yallist "^3.0.2"
-
-lru-cache@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
- integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
- dependencies:
- yallist "^4.0.0"
-
-lunr@^2.3.8:
- version "2.3.9"
- resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1"
- integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==
-
-make-dir@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e"
- integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==
- dependencies:
- semver "^7.5.3"
-
-make-error@1.x:
- version "1.3.6"
- resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
- integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
-
-makeerror@1.0.12:
- version "1.0.12"
- resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a"
- integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==
- dependencies:
- tmpl "1.0.5"
-
-map-cache@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
- integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==
-
-map-obj@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
- integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==
-
-map-obj@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9"
- integrity sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==
-
-map-obj@^4.0.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a"
- integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==
-
-map-visit@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
- integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==
- dependencies:
- object-visit "^1.0.0"
-
-marked@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/marked/-/marked-1.0.0.tgz#d35784245a04871e5988a491e28867362e941693"
- integrity sha512-Wo+L1pWTVibfrSr+TTtMuiMfNzmZWiOPeO7rZsQUY5bgsxpHesBEcIWJloWVTFnrMXnf/TL30eTFSGJddmQAng==
-
-matcher@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca"
- integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==
- dependencies:
- escape-string-regexp "^4.0.0"
-
-meow@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975"
- integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==
- dependencies:
- camelcase-keys "^4.0.0"
- decamelize-keys "^1.0.0"
- loud-rejection "^1.0.0"
- minimist "^1.1.3"
- minimist-options "^3.0.1"
- normalize-package-data "^2.3.4"
- read-pkg-up "^3.0.0"
- redent "^2.0.0"
- trim-newlines "^2.0.0"
-
-meow@^7.0.0:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/meow/-/meow-7.1.1.tgz#7c01595e3d337fcb0ec4e8eed1666ea95903d306"
- integrity sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==
- dependencies:
- "@types/minimist" "^1.2.0"
- camelcase-keys "^6.2.2"
- decamelize-keys "^1.1.0"
- hard-rejection "^2.1.0"
- minimist-options "4.1.0"
- normalize-package-data "^2.5.0"
- read-pkg-up "^7.0.1"
- redent "^3.0.0"
- trim-newlines "^3.0.0"
- type-fest "^0.13.1"
- yargs-parser "^18.1.3"
-
-meow@^8.0.0:
- version "8.1.2"
- resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897"
- integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==
- dependencies:
- "@types/minimist" "^1.2.0"
- camelcase-keys "^6.2.2"
- decamelize-keys "^1.1.0"
- hard-rejection "^2.1.0"
- minimist-options "4.1.0"
- normalize-package-data "^3.0.0"
- read-pkg-up "^7.0.1"
- redent "^3.0.0"
- trim-newlines "^3.0.0"
- type-fest "^0.18.0"
- yargs-parser "^20.2.3"
-
-merge-stream@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
- integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
-
-micromatch@^3.1.4:
- version "3.1.10"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
- integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
- dependencies:
- arr-diff "^4.0.0"
- array-unique "^0.3.2"
- braces "^2.3.1"
- define-property "^2.0.2"
- extend-shallow "^3.0.2"
- extglob "^2.0.4"
- fragment-cache "^0.2.1"
- kind-of "^6.0.2"
- nanomatch "^1.2.9"
- object.pick "^1.3.0"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.2"
-
-micromatch@^4.0.2:
- version "4.0.7"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5"
- integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==
- dependencies:
- braces "^3.0.3"
- picomatch "^2.3.1"
-
-mime-db@1.52.0:
- version "1.52.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
- integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
-
-mime-types@^2.1.12:
- version "2.1.35"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
- integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
- dependencies:
- mime-db "1.52.0"
-
-mimic-fn@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
- integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
-
-mimic-response@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
- integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
-
-mimic-response@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
- integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
-
-min-indent@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
- integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
-
-minimatch@^3.0.0, minimatch@^3.0.4, minimatch@^3.1.1:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
- integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
- dependencies:
- brace-expansion "^1.1.7"
-
-minimist-options@4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619"
- integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==
- dependencies:
- arrify "^1.0.1"
- is-plain-obj "^1.1.0"
- kind-of "^6.0.3"
-
-minimist-options@^3.0.1:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954"
- integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==
- dependencies:
- arrify "^1.0.1"
- is-plain-obj "^1.1.0"
-
-minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5:
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
- integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
-
-mixin-deep@^1.2.0:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
- integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
- dependencies:
- for-in "^1.0.2"
- is-extendable "^1.0.1"
-
-mkdirp@1.x:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
- integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
-
-modify-values@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022"
- integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==
-
-ms@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
- integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
-
-ms@2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
- integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-
-nanomatch@^1.2.9:
- version "1.2.13"
- resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
- integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
- dependencies:
- arr-diff "^4.0.0"
- array-unique "^0.3.2"
- define-property "^2.0.2"
- extend-shallow "^3.0.2"
- fragment-cache "^0.2.1"
- is-windows "^1.0.2"
- kind-of "^6.0.2"
- object.pick "^1.3.0"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.1"
-
-natural-compare@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
- integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
-
-neo-async@^2.6.2:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
- integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
-
-nice-try@^1.0.4:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
- integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
-
-node-int64@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
- integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==
-
-node-notifier@^8.0.0:
- version "8.0.2"
- resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5"
- integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==
- dependencies:
- growly "^1.3.0"
- is-wsl "^2.2.0"
- semver "^7.3.2"
- shellwords "^0.1.1"
- uuid "^8.3.0"
- which "^2.0.2"
-
-node-releases@^2.0.14:
- version "2.0.14"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
- integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
-
-normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
- integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
- dependencies:
- hosted-git-info "^2.1.4"
- resolve "^1.10.0"
- semver "2 || 3 || 4 || 5"
- validate-npm-package-license "^3.0.1"
-
-normalize-package-data@^3.0.0:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e"
- integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==
- dependencies:
- hosted-git-info "^4.0.1"
- is-core-module "^2.5.0"
- semver "^7.3.4"
- validate-npm-package-license "^3.0.1"
-
-normalize-path@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
- integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==
- dependencies:
- remove-trailing-separator "^1.0.1"
-
-normalize-path@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
- integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
-
-normalize-url@^6.0.1:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
- integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
-
-npm-run-path@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
- integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==
- dependencies:
- path-key "^2.0.0"
-
-npm-run-path@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
- integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
- dependencies:
- path-key "^3.0.0"
-
-null-check@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd"
- integrity sha512-j8ZNHg19TyIQOWCGeeQJBuu6xZYIEurf8M1Qsfd8mFrGEfIZytbw18YjKWg+LcO25NowXGZXZpKAx+Ui3TFfDw==
-
-number-is-nan@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
- integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==
-
-nwsapi@^2.2.0:
- version "2.2.10"
- resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.10.tgz#0b77a68e21a0b483db70b11fad055906e867cda8"
- integrity sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==
-
-object-copy@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
- integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==
- dependencies:
- copy-descriptor "^0.1.0"
- define-property "^0.2.5"
- kind-of "^3.0.3"
-
-object-keys@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
- integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
-
-object-visit@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
- integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==
- dependencies:
- isobject "^3.0.0"
-
-object.pick@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
- integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==
- dependencies:
- isobject "^3.0.1"
-
-once@^1.3.0, once@^1.3.1, once@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
- dependencies:
- wrappy "1"
-
-onetime@^5.1.0:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
- integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
- dependencies:
- mimic-fn "^2.1.0"
-
-p-cancelable@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf"
- integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==
-
-p-each-series@^2.1.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a"
- integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==
-
-p-finally@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
- integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==
-
-p-limit@^1.1.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
- integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
- dependencies:
- p-try "^1.0.0"
-
-p-limit@^2.0.0, p-limit@^2.2.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
- integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
- dependencies:
- p-try "^2.0.0"
-
-p-locate@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
- integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==
- dependencies:
- p-limit "^1.1.0"
-
-p-locate@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
- integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
- dependencies:
- p-limit "^2.0.0"
-
-p-locate@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
- integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
- dependencies:
- p-limit "^2.2.0"
-
-p-try@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
- integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==
-
-p-try@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
- integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-
-parse-json@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
- integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==
- dependencies:
- error-ex "^1.3.1"
- json-parse-better-errors "^1.0.1"
-
-parse-json@^5.0.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
- integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
- 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"
-
-parse5@6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
- integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
-
-pascalcase@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
- integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==
-
-path-exists@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
- integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==
-
-path-exists@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
- integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
-
-path-is-absolute@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
- integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
-
-path-key@^2.0.0, path-key@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
- integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==
-
-path-key@^3.0.0, path-key@^3.1.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
- integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
-
-path-parse@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
- integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
-
-path-type@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
- integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
- dependencies:
- pify "^3.0.0"
-
-pend@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
- integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
-
-picocolors@^1.0.0, picocolors@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1"
- integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==
-
-picomatch@^2.0.4, picomatch@^2.3.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
- integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
-
-pify@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
- integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
-
-pify@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
- integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==
-
-pirates@^4.0.1:
- version "4.0.6"
- resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9"
- integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
-
-pkg-dir@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
- integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
- dependencies:
- find-up "^4.0.0"
-
-posix-character-classes@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
- integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==
-
-pretty-format@^25.2.1, pretty-format@^25.5.0:
- version "25.5.0"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a"
- integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==
- dependencies:
- "@jest/types" "^25.5.0"
- ansi-regex "^5.0.0"
- ansi-styles "^4.0.0"
- react-is "^16.12.0"
-
-pretty-format@^26.6.2:
- version "26.6.2"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93"
- integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==
- dependencies:
- "@jest/types" "^26.6.2"
- ansi-regex "^5.0.0"
- ansi-styles "^4.0.0"
- react-is "^17.0.1"
-
-process-nextick-args@~2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
- integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-
-progress@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
- integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
-
-prompts@^2.0.1:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
- integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
- dependencies:
- kleur "^3.0.3"
- sisteransi "^1.0.5"
-
-psl@^1.1.33:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
- integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
-
-pump@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
- integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
- dependencies:
- end-of-stream "^1.1.0"
- once "^1.3.1"
-
-punycode@^2.1.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
- integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
-
-q@^1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
- integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==
-
-querystringify@^2.1.1:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6"
- integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==
-
-quick-lru@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8"
- integrity sha512-tRS7sTgyxMXtLum8L65daJnHUhfDUgboRdcWW2bR9vBfrj2+O5HSMbQOJfJJjIVSPFqbBCF37FpwWXGitDc5tA==
-
-quick-lru@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f"
- integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
-
-quick-lru@^5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
- integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
-
-react-is@^16.12.0:
- version "16.13.1"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
- integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
-
-react-is@^17.0.1:
- version "17.0.2"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
- integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
-
-read-pkg-up@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
- integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==
- dependencies:
- find-up "^2.0.0"
- read-pkg "^3.0.0"
-
-read-pkg-up@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
- integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==
- dependencies:
- find-up "^4.1.0"
- read-pkg "^5.2.0"
- type-fest "^0.8.1"
-
-read-pkg@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
- integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==
- dependencies:
- load-json-file "^4.0.0"
- normalize-package-data "^2.3.2"
- path-type "^3.0.0"
-
-read-pkg@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
- integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==
- dependencies:
- "@types/normalize-package-data" "^2.4.0"
- normalize-package-data "^2.5.0"
- parse-json "^5.0.0"
- type-fest "^0.6.0"
-
-readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2:
- version "3.6.2"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
- integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
- dependencies:
- inherits "^2.0.3"
- string_decoder "^1.1.1"
- util-deprecate "^1.0.1"
-
-readable-stream@~2.3.6:
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
- integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~2.0.0"
- safe-buffer "~5.1.1"
- string_decoder "~1.1.1"
- util-deprecate "~1.0.1"
-
-rechoir@^0.6.2:
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
- integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==
- dependencies:
- resolve "^1.1.6"
-
-redent@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa"
- integrity sha512-XNwrTx77JQCEMXTeb8movBKuK75MgH0RZkujNuDKCezemx/voapl9i2gCSi8WWm8+ox5ycJi1gxF22fR7c0Ciw==
- dependencies:
- indent-string "^3.0.0"
- strip-indent "^2.0.0"
-
-redent@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
- integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
- dependencies:
- indent-string "^4.0.0"
- strip-indent "^3.0.0"
-
-regex-not@^1.0.0, regex-not@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
- integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
- dependencies:
- extend-shallow "^3.0.2"
- safe-regex "^1.1.0"
-
-remove-trailing-separator@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
- integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==
-
-repeat-element@^1.1.2:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9"
- integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==
-
-repeat-string@^1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
- integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==
-
-require-directory@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
- integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
-
-require-main-filename@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
- integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
-
-requires-port@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
- integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
-
-resolve-alpn@^1.0.0:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9"
- integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==
-
-resolve-cwd@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
- integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
- dependencies:
- resolve-from "^5.0.0"
-
-resolve-from@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
- integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
-
-resolve-url@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
- integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==
-
-resolve@^1.1.6, resolve@^1.10.0, resolve@^1.18.1:
- version "1.22.8"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
- integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
- dependencies:
- is-core-module "^2.13.0"
- path-parse "^1.0.7"
- supports-preserve-symlinks-flag "^1.0.0"
-
-responselike@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc"
- integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==
- dependencies:
- lowercase-keys "^2.0.0"
-
-ret@~0.1.10:
- version "0.1.15"
- resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
- integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
-
-rimraf@^3.0.0, rimraf@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
- integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
- dependencies:
- glob "^7.1.3"
-
-roarr@^2.15.3:
- version "2.15.4"
- resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd"
- integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==
- dependencies:
- boolean "^3.0.1"
- detect-node "^2.0.4"
- globalthis "^1.0.1"
- json-stringify-safe "^5.0.1"
- semver-compare "^1.0.0"
- sprintf-js "^1.1.2"
-
-rsvp@^4.8.4:
- version "4.8.5"
- resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
- integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
-
-safe-buffer@~5.1.0, safe-buffer@~5.1.1:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-safe-buffer@~5.2.0:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
- integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-
-safe-regex@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
- integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==
- dependencies:
- ret "~0.1.10"
-
-"safer-buffer@>= 2.1.2 < 3":
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
- integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-
-sane@^4.0.3:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded"
- integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==
- dependencies:
- "@cnakazawa/watch" "^1.0.3"
- anymatch "^2.0.0"
- capture-exit "^2.0.0"
- exec-sh "^0.3.2"
- execa "^1.0.0"
- fb-watchman "^2.0.0"
- micromatch "^3.1.4"
- minimist "^1.1.1"
- walker "~1.0.5"
-
-saxes@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
- integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==
- dependencies:
- xmlchars "^2.2.0"
-
-semver-compare@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
- integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==
-
-"semver@2 || 3 || 4 || 5", semver@^5.5.0:
- version "5.7.2"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
- integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
-
-semver@7.x, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.5.3:
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13"
- integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==
-
-semver@^6.0.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1:
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
- integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-
-serialize-error@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18"
- integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==
- dependencies:
- type-fest "^0.13.1"
-
-set-blocking@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
- integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
-
-set-value@^2.0.0, set-value@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
- integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
- dependencies:
- extend-shallow "^2.0.1"
- is-extendable "^0.1.1"
- is-plain-object "^2.0.3"
- split-string "^3.0.1"
-
-shebang-command@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
- integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==
- dependencies:
- shebang-regex "^1.0.0"
-
-shebang-command@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
- integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
- dependencies:
- shebang-regex "^3.0.0"
-
-shebang-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
- integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==
-
-shebang-regex@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
- integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-
-shelljs@^0.8.4:
- version "0.8.5"
- resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c"
- integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==
- dependencies:
- glob "^7.0.0"
- interpret "^1.0.0"
- rechoir "^0.6.2"
-
-shellwords@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
- integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
-
-signal-exit@^3.0.0, signal-exit@^3.0.2:
- version "3.0.7"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
- integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
-
-sisteransi@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
- integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
-
-slash@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
- integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
-
-snapdragon-node@^2.0.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
- integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
- dependencies:
- define-property "^1.0.0"
- isobject "^3.0.0"
- snapdragon-util "^3.0.1"
-
-snapdragon-util@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
- integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
- dependencies:
- kind-of "^3.2.0"
-
-snapdragon@^0.8.1:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
- integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
- dependencies:
- base "^0.11.1"
- debug "^2.2.0"
- define-property "^0.2.5"
- extend-shallow "^2.0.1"
- map-cache "^0.2.2"
- source-map "^0.5.6"
- source-map-resolve "^0.5.0"
- use "^3.1.0"
-
-source-map-resolve@^0.5.0:
- version "0.5.3"
- resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
- integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
- dependencies:
- atob "^2.1.2"
- decode-uri-component "^0.2.0"
- resolve-url "^0.2.1"
- source-map-url "^0.4.0"
- urix "^0.1.0"
-
-source-map-support@^0.5.6:
- version "0.5.21"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
- integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
- dependencies:
- buffer-from "^1.0.0"
- source-map "^0.6.0"
-
-source-map-url@^0.4.0:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
- integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
-
-source-map@^0.5.6:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
- integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
-
-source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
- integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
-source-map@^0.7.3:
- version "0.7.4"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656"
- integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==
-
-spdx-correct@^3.0.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c"
- integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==
- dependencies:
- spdx-expression-parse "^3.0.0"
- spdx-license-ids "^3.0.0"
-
-spdx-exceptions@^2.1.0:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66"
- integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==
-
-spdx-expression-parse@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
- integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
- dependencies:
- spdx-exceptions "^2.1.0"
- spdx-license-ids "^3.0.0"
-
-spdx-license-ids@^3.0.0:
- version "3.0.18"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz#22aa922dcf2f2885a6494a261f2d8b75345d0326"
- integrity sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==
-
-split-string@^3.0.1, split-string@^3.0.2:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
- integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
- dependencies:
- extend-shallow "^3.0.0"
-
-split2@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493"
- integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==
- dependencies:
- through2 "^2.0.2"
-
-split2@^3.0.0:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f"
- integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==
- dependencies:
- readable-stream "^3.0.0"
-
-split@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9"
- integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==
- dependencies:
- through "2"
-
-sprintf-js@^1.1.2:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a"
- integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==
-
-sprintf-js@~1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
- integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
-
-stack-utils@^2.0.2:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f"
- integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==
- dependencies:
- escape-string-regexp "^2.0.0"
-
-standard-version@^8.0.0:
- version "8.0.2"
- resolved "https://registry.yarnpkg.com/standard-version/-/standard-version-8.0.2.tgz#02ed7131f83046bd04358dc54f97d42c4b2fd828"
- integrity sha512-L8X9KFq2SmVmaeZgUmWHFJMOsEWpjgFAwqic6yIIoveM1kdw1vH4Io03WWxUDjypjGqGU6qUtcJoR8UvOv5w3g==
- dependencies:
- chalk "^2.4.2"
- conventional-changelog "3.1.21"
- conventional-changelog-config-spec "2.1.0"
- conventional-changelog-conventionalcommits "4.3.0"
- conventional-recommended-bump "6.0.9"
- detect-indent "^6.0.0"
- detect-newline "^3.1.0"
- dotgitignore "^2.1.0"
- figures "^3.1.0"
- find-up "^4.1.0"
- fs-access "^1.0.1"
- git-semver-tags "^4.0.0"
- semver "^7.1.1"
- stringify-package "^1.0.1"
- yargs "^15.3.1"
-
-static-extend@^0.1.1:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
- integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==
- dependencies:
- define-property "^0.2.5"
- object-copy "^0.1.0"
-
-string-length@^4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"
- integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==
- dependencies:
- char-regex "^1.0.2"
- strip-ansi "^6.0.0"
-
-string-width@^4.1.0, string-width@^4.2.0:
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
- integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
- dependencies:
- emoji-regex "^8.0.0"
- is-fullwidth-code-point "^3.0.0"
- strip-ansi "^6.0.1"
-
-string_decoder@^1.1.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
- integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
- dependencies:
- safe-buffer "~5.2.0"
-
-string_decoder@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
- integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
- dependencies:
- safe-buffer "~5.1.0"
-
-stringify-package@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85"
- integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==
-
-strip-ansi@^6.0.0, strip-ansi@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
- integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
- dependencies:
- ansi-regex "^5.0.1"
-
-strip-bom@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
- integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
-
-strip-bom@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
- integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
-
-strip-eof@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
- integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==
-
-strip-final-newline@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
- integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
-
-strip-indent@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68"
- integrity sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==
-
-strip-indent@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
- integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
- dependencies:
- min-indent "^1.0.0"
-
-sumchecker@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42"
- integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==
- dependencies:
- debug "^4.1.0"
-
-supports-color@^5.3.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
- integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
- dependencies:
- has-flag "^3.0.0"
-
-supports-color@^7.0.0, supports-color@^7.1.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
- integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
- dependencies:
- has-flag "^4.0.0"
-
-supports-hyperlinks@^2.0.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624"
- integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==
- dependencies:
- has-flag "^4.0.0"
- supports-color "^7.0.0"
-
-supports-preserve-symlinks-flag@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
- integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
-
-symbol-tree@^3.2.4:
- version "3.2.4"
- resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
- integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
-
-terminal-link@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"
- integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==
- dependencies:
- ansi-escapes "^4.2.1"
- supports-hyperlinks "^2.0.0"
-
-test-exclude@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
- integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==
- dependencies:
- "@istanbuljs/schema" "^0.1.2"
- glob "^7.1.4"
- minimatch "^3.0.4"
-
-text-extensions@^1.0.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26"
- integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==
-
-throat@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b"
- integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==
-
-through2@^2.0.0, through2@^2.0.2:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
- integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
- dependencies:
- readable-stream "~2.3.6"
- xtend "~4.0.1"
-
-through2@^4.0.0:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764"
- integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==
- dependencies:
- readable-stream "3"
-
-through@2, "through@>=2.2.7 <3":
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
- integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
-
-tmpl@1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
- integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==
-
-to-fast-properties@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
- integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
-
-to-object-path@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
- integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==
- dependencies:
- kind-of "^3.0.2"
-
-to-regex-range@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
- integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==
- dependencies:
- is-number "^3.0.0"
- repeat-string "^1.6.1"
-
-to-regex-range@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
- integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
- dependencies:
- is-number "^7.0.0"
-
-to-regex@^3.0.1, to-regex@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
- integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
- dependencies:
- define-property "^2.0.2"
- extend-shallow "^3.0.2"
- regex-not "^1.0.2"
- safe-regex "^1.1.0"
-
-tough-cookie@^4.0.0:
- version "4.1.4"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36"
- integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==
- dependencies:
- psl "^1.1.33"
- punycode "^2.1.1"
- universalify "^0.2.0"
- url-parse "^1.5.3"
-
-tr46@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240"
- integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==
- dependencies:
- punycode "^2.1.1"
-
-trim-newlines@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20"
- integrity sha512-MTBWv3jhVjTU7XR3IQHllbiJs8sc75a80OEhB6or/q7pLTWgQ0bMGQXXYQSrSuXe6WiKWDZ5txXY5P59a/coVA==
-
-trim-newlines@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144"
- integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==
-
-ts-jest@^26.0.0:
- version "26.5.6"
- resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.6.tgz#c32e0746425274e1dfe333f43cd3c800e014ec35"
- integrity sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==
- dependencies:
- bs-logger "0.x"
- buffer-from "1.x"
- fast-json-stable-stringify "2.x"
- jest-util "^26.1.0"
- json5 "2.x"
- lodash "4.x"
- make-error "1.x"
- mkdirp "1.x"
- semver "7.x"
- yargs-parser "20.x"
-
-type-detect@4.0.8:
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
- integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
-
-type-fest@^0.13.1:
- version "0.13.1"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
- integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
-
-type-fest@^0.18.0:
- version "0.18.1"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f"
- integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==
-
-type-fest@^0.21.3:
- version "0.21.3"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
- integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
-
-type-fest@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
- integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
-
-type-fest@^0.8.1:
- version "0.8.1"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
- integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
-
-typedarray-to-buffer@^3.1.5:
- version "3.1.5"
- resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
- integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
- dependencies:
- is-typedarray "^1.0.0"
-
-typedarray@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
- integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
-
-typedoc-default-themes@^0.10.2:
- version "0.10.2"
- resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.10.2.tgz#743380a80afe62c5ef92ca1bd4abe2ac596be4d2"
- integrity sha512-zo09yRj+xwLFE3hyhJeVHWRSPuKEIAsFK5r2u47KL/HBKqpwdUSanoaz5L34IKiSATFrjG5ywmIu98hPVMfxZg==
- dependencies:
- lunr "^2.3.8"
-
-typedoc-plugin-markdown@^2.2.17:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-2.4.2.tgz#2d83fe4f279643436ebc44ca2f937855b0fd9f12"
- integrity sha512-BBH+9/Uq5XbsqfzCDl8Jq4iaLXRMXRuAHZRFarAZX7df8+F3vUjDx/WHWoWqbZ/XUFzduLC2Iuy2qwsJX8SQ7A==
- dependencies:
- fs-extra "^9.0.1"
- handlebars "^4.7.6"
-
-typedoc-plugin-no-inherit@^1.1.10:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/typedoc-plugin-no-inherit/-/typedoc-plugin-no-inherit-1.4.0.tgz#8eafc790588f63f0a24621b646219cd6e8d6e4d6"
- integrity sha512-cAvqQ8X9xh1xztVoDKtF4nYRSBx9XwttN3OBbNNpA0YaJSRM8XvpVVhugq8FoO1HdWjF3aizS0JzdUOMDt0y9g==
-
-typedoc@^0.17.7:
- version "0.17.8"
- resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.17.8.tgz#96b67e9454aa7853bfc4dc9a55c8a07adfd5478e"
- integrity sha512-/OyrHCJ8jtzu+QZ+771YaxQ9s4g5Z3XsQE3Ma7q+BL392xxBn4UMvvCdVnqKC2T/dz03/VXSLVKOP3lHmDdc/w==
- dependencies:
- fs-extra "^8.1.0"
- handlebars "^4.7.6"
- highlight.js "^10.0.0"
- lodash "^4.17.15"
- lunr "^2.3.8"
- marked "1.0.0"
- minimatch "^3.0.0"
- progress "^2.0.3"
- shelljs "^0.8.4"
- typedoc-default-themes "^0.10.2"
-
-typescript@^4.6.2:
- version "4.9.5"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a"
- integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
-
-uglify-js@^3.1.4:
- version "3.18.0"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.18.0.tgz#73b576a7e8fda63d2831e293aeead73e0a270deb"
- integrity sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==
-
-undici-types@~5.26.4:
- version "5.26.5"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
- integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
-
-union-value@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
- integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
- dependencies:
- arr-union "^3.1.0"
- get-value "^2.0.6"
- is-extendable "^0.1.1"
- set-value "^2.0.1"
-
-universalify@^0.1.0:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
- integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
-
-universalify@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0"
- integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==
-
-universalify@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d"
- integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
-
-unset-value@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
- integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==
- dependencies:
- has-value "^0.3.1"
- isobject "^3.0.0"
-
-update-browserslist-db@^1.0.16:
- version "1.0.16"
- resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz#f6d489ed90fb2f07d67784eb3f53d7891f736356"
- integrity sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==
- dependencies:
- escalade "^3.1.2"
- picocolors "^1.0.1"
-
-urix@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
- integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==
-
-url-parse@^1.5.3:
- version "1.5.10"
- resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1"
- integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==
- dependencies:
- querystringify "^2.1.1"
- requires-port "^1.0.0"
-
-use@^3.1.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
- integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
-
-util-deprecate@^1.0.1, util-deprecate@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
- integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
-
-uuid@^8.3.0:
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
- integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
-
-v8-to-istanbul@^7.0.0:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1"
- integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==
- dependencies:
- "@types/istanbul-lib-coverage" "^2.0.1"
- convert-source-map "^1.6.0"
- source-map "^0.7.3"
-
-validate-npm-package-license@^3.0.1:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
- integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
- dependencies:
- spdx-correct "^3.0.0"
- spdx-expression-parse "^3.0.0"
-
-w3c-hr-time@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
- integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==
- dependencies:
- browser-process-hrtime "^1.0.0"
-
-w3c-xmlserializer@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a"
- integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==
- dependencies:
- xml-name-validator "^3.0.0"
-
-walker@^1.0.7, walker@~1.0.5:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f"
- integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==
- dependencies:
- makeerror "1.0.12"
-
-webidl-conversions@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
- integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==
-
-webidl-conversions@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"
- integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
-
-whatwg-encoding@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
- integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
- dependencies:
- iconv-lite "0.4.24"
-
-whatwg-mimetype@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
- integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
-
-whatwg-url@^8.0.0, whatwg-url@^8.5.0:
- version "8.7.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77"
- integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==
- dependencies:
- lodash "^4.7.0"
- tr46 "^2.1.0"
- webidl-conversions "^6.1.0"
-
-which-module@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409"
- integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==
-
-which@^1.2.9:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
- integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
- dependencies:
- isexe "^2.0.0"
-
-which@^2.0.1, which@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
- integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
- dependencies:
- isexe "^2.0.0"
-
-wordwrap@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
- integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==
-
-wrap-ansi@^6.2.0:
- version "6.2.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
- integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
- dependencies:
- ansi-styles "^4.0.0"
- string-width "^4.1.0"
- strip-ansi "^6.0.0"
-
-wrap-ansi@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
- integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
- dependencies:
- ansi-styles "^4.0.0"
- string-width "^4.1.0"
- strip-ansi "^6.0.0"
-
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
- integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
-
-write-file-atomic@^3.0.0:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
- integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
- dependencies:
- imurmurhash "^0.1.4"
- is-typedarray "^1.0.0"
- signal-exit "^3.0.2"
- typedarray-to-buffer "^3.1.5"
-
-ws@^7.4.6:
- version "7.5.10"
- resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9"
- integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==
-
-xml-name-validator@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
- integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
-
-xmlchars@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
- integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
-
-xtend@~4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
- integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
-
-y18n@^4.0.0:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
- integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
-
-y18n@^5.0.5:
- version "5.0.8"
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
- integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
-
-yallist@^3.0.2:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
- integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
-
-yallist@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
- integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
-
-yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3:
- version "20.2.9"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
- integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
-
-yargs-parser@^18.1.2, yargs-parser@^18.1.3:
- version "18.1.3"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
- integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
- dependencies:
- camelcase "^5.0.0"
- decamelize "^1.2.0"
-
-yargs@^15.3.1, yargs@^15.4.1:
- version "15.4.1"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
- integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
- dependencies:
- cliui "^6.0.0"
- decamelize "^1.2.0"
- find-up "^4.1.0"
- get-caller-file "^2.0.1"
- require-directory "^2.1.1"
- require-main-filename "^2.0.0"
- set-blocking "^2.0.0"
- string-width "^4.2.0"
- which-module "^2.0.0"
- y18n "^4.0.0"
- yargs-parser "^18.1.2"
-
-yargs@^16.2.0:
- version "16.2.0"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
- integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
- dependencies:
- cliui "^7.0.2"
- escalade "^3.1.1"
- get-caller-file "^2.0.5"
- require-directory "^2.1.1"
- string-width "^4.2.0"
- y18n "^5.0.5"
- yargs-parser "^20.2.2"
-
-yauzl@^2.10.0:
- version "2.10.0"
- resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
- integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==
- dependencies:
- buffer-crc32 "~0.2.3"
- fd-slicer "~1.1.0"