├── .editorconfig ├── .github ├── changelog-configuration.json └── workflows │ ├── deploy.yml │ ├── docs.yml │ ├── release.yml │ └── virtualos.yml ├── .gitignore ├── .mise.toml ├── .mise └── tasks │ ├── build │ ├── bundle │ ├── cache │ ├── docs │ ├── build │ ├── deploy │ └── dev │ ├── encrypt-certificate │ ├── install │ ├── lint │ ├── lint-fix │ └── test ├── .swiftformat ├── .swiftlint.yml ├── CHANGELOG.md ├── LICENSE ├── Package.resolved ├── Package.swift ├── Project.swift ├── README.md ├── Sources ├── VirtualOSEnvironment │ └── Environment.swift ├── VirtualOSEnvironmentInterface │ ├── Environmenting.swift │ └── ServiceContext+Environment.swift ├── VirtualOSLogging │ └── Logger.swift ├── VirtualOSNetwork │ └── VirtualOSNetwork.swift ├── VirtualOSNetworkInterface │ └── NetworkInterface.swift ├── VirtualOSOCI │ └── VirtualOSOCI.swift ├── VirtualOSOCIInterface │ ├── OCIContentDescriptor.swift │ └── OCIImage.swift ├── VirtualOSPull │ ├── PullCommand.swift │ └── PullService.swift ├── VirtualOSPullInterface │ └── VirtualOSPullInterface.swift ├── VirtualOSPushInterface │ └── VirtualOSPushInterface.swift ├── VirtualOSRun │ └── RunCommand.swift ├── VirtualOSRunInterface │ └── VirtualOSRunInterface.swift ├── VirtualOSStorage │ └── Storage.swift ├── VirtualOSStorageInterface │ ├── Image.swift │ └── Storaging.swift └── virtualos │ ├── VirtualOS.swift │ └── VirtualOSCommand.swift ├── Tests ├── VirtualOSEnvironmentTests │ └── VirtualOSEnvironmentTests.swift ├── VirtualOSLoggingTests │ └── LoggerTests.swift ├── VirtualOSNetworkTests │ └── VirtualOSNetworkTests.swift ├── VirtualOSOCITests │ └── VirtualOSOCITests.swift ├── VirtualOSPullTests │ └── VirtualOSPullTests.swift ├── VirtualOSRunTests │ └── VirtualOSRunTests.swift └── VirtualOSStorageTests │ └── VirtualOSStorageTests.swift ├── Tuist.swift ├── Tuist └── ProjectDescriptionHelpers │ └── Module.swift ├── assets └── logo.svg ├── certificates └── certificate.p12.enc ├── cliff.toml ├── docs ├── .vitepress │ ├── config.mjs │ └── icons.mjs ├── content │ ├── index.md │ └── public │ │ ├── favicon.ico │ │ ├── logo.png │ │ └── og.jpeg ├── package.json └── pnpm-lock.yaml └── renovate.json /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://EditorConfig.org 2 | 3 | # Top-most EditorConfig file 4 | root = true 5 | 6 | # Unix-style newlines with a newline ending every file 7 | [*] 8 | end_of_line = lf 9 | insert_final_newline = true 10 | indent_style = space 11 | indent_size = 2 12 | trim_trailing_whitespace = true 13 | 14 | [*.rb] 15 | charset = utf-8 16 | 17 | [*.md] 18 | trim_trailing_whitespace = false -------------------------------------------------------------------------------- /.github/changelog-configuration.json: -------------------------------------------------------------------------------- 1 | { 2 | "categories": [ 3 | { 4 | "title": "#### Changed", 5 | "labels": ["changelog:changed"] 6 | }, 7 | { 8 | "title": "#### Added", 9 | "labels": ["changelog:added"] 10 | }, 11 | { 12 | "title": "#### Fixed", 13 | "labels": ["changelog:fixed"] 14 | }, 15 | { 16 | "title": "#### Dependency updates", 17 | "labels": ["changelog:updated-dependencies"] 18 | } 19 | ], 20 | "pr_template": "- ${{TITLE}} by [@${{AUTHOR}}](https://github.com/${{AUTHOR}})" 21 | } -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy 2 | on: 3 | push: 4 | branches: 5 | - "main" 6 | 7 | concurrency: 8 | group: deploy-${{ github.head_ref }} 9 | cancel-in-progress: true 10 | 11 | env: 12 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 13 | 14 | jobs: 15 | docs: 16 | name: Docs 17 | runs-on: ubuntu-latest 18 | env: 19 | CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} 20 | CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} 21 | steps: 22 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 23 | - uses: jdx/mise-action@v2 24 | with: 25 | experimental: true 26 | - run: mise run install 27 | - run: mise run docs:deploy 28 | -------------------------------------------------------------------------------- /.github/workflows/docs.yml: -------------------------------------------------------------------------------- 1 | name: Docs 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: {} 8 | 9 | concurrency: 10 | group: docs-${{ github.head_ref }} 11 | cancel-in-progress: true 12 | 13 | env: 14 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 15 | 16 | jobs: 17 | build: 18 | name: "Build" 19 | runs-on: "ubuntu-latest" 20 | steps: 21 | - uses: actions/checkout@v4 22 | - uses: jdx/mise-action@v2 23 | with: 24 | experimental: true 25 | - name: Install 26 | run: | 27 | mise run install 28 | - name: Build 29 | run: | 30 | mise run docs:build 31 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | concurrency: 9 | group: release-${{ github.head_ref }} 10 | cancel-in-progress: true 11 | 12 | env: 13 | MISE_EXPERIMENTAL: "1" 14 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 15 | 16 | jobs: 17 | build: 18 | name: Continuous 19 | runs-on: "macos-14" 20 | steps: 21 | - uses: actions/checkout@v4 22 | with: 23 | fetch-depth: "0" 24 | fetch-tags: true 25 | - uses: jdx/mise-action@v2 26 | if: "!startsWith(github.event.head_commit.message, 'release')" 27 | - run: mise run install 28 | if: "!startsWith(github.event.head_commit.message, 'release')" 29 | - name: bundle 30 | if: "!startsWith(github.event.head_commit.message, 'release')" 31 | env: 32 | CERTIFICATE_PASSWORD: ${{ secrets.CERTIFICATE_PASSWORD }} 33 | APPLE_ID: ${{ secrets.APPLE_ID }} 34 | APP_SPECIFIC_PASSWORD: ${{ secrets.APP_SPECIFIC_PASSWORD }} 35 | CERTIFICATE_ENCRYPTION_PASSWORD: ${{ secrets.CERTIFICATE_ENCRYPTION_PASSWORD }} 36 | TUIST_CONFIG_TOKEN: ${{ secrets.TUIST_CONFIG_TOKEN }} 37 | run: mise run bundle 38 | - name: Get next version 39 | if: "!startsWith(github.event.head_commit.message, 'release')" 40 | id: version 41 | env: 42 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 43 | run: | 44 | echo "VERSION=$(git-cliff --bumped-version)" >> $GITHUB_ENV 45 | - name: Generate changelog 46 | if: "!startsWith(github.event.head_commit.message, 'release')" 47 | id: changelog 48 | env: 49 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 50 | run: | 51 | git-cliff --bump -o CHANGELOG.md 52 | # - name: Generate release notes 53 | # if: "!startsWith(github.event.head_commit.message, 'release')" 54 | # id: release-notes 55 | # env: 56 | # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 57 | # run: | 58 | # echo "RELEASE_NOTES=$(git-cliff --unreleased)" >> $GITHUB_ENV 59 | - uses: stefanzweifel/git-auto-commit-action@v5 60 | if: "!startsWith(github.event.head_commit.message, 'release')" 61 | with: 62 | commit_message: release ${{ env.VERSION }} 63 | - name: Release 64 | uses: softprops/action-gh-release@v2 65 | if: "!startsWith(github.event.head_commit.message, 'release')" 66 | with: 67 | draft: false 68 | name: ${{ env.VERSION }} 69 | tag_name: ${{ env.VERSION }} 70 | make_latest: true 71 | generate_release_notes: true 72 | files: | 73 | build/artifacts/virtualos.zip 74 | build/artifacts/SHASUMS256.txt 75 | build/artifacts/SHASUMS512.txt 76 | -------------------------------------------------------------------------------- /.github/workflows/virtualos.yml: -------------------------------------------------------------------------------- 1 | name: VirtualOS 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: {} 8 | 9 | concurrency: 10 | group: virtualos-${{ github.head_ref }} 11 | cancel-in-progress: true 12 | 13 | env: 14 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 15 | 16 | jobs: 17 | build: 18 | name: "Build" 19 | runs-on: "macos-13" 20 | steps: 21 | - uses: actions/checkout@v4 22 | - uses: jdx/mise-action@v2 23 | with: 24 | experimental: true 25 | - name: Run 26 | env: 27 | TUIST_CONFIG_TOKEN: ${{ secrets.TUIST_CONFIG_TOKEN }} 28 | run: | 29 | mise run install 30 | mise run build 31 | 32 | bundle: 33 | name: "Bundle" 34 | runs-on: "macos-13" 35 | steps: 36 | - uses: actions/checkout@v4 37 | - uses: jdx/mise-action@v2 38 | with: 39 | experimental: true 40 | - run: mise run install 41 | - name: bundle 42 | env: 43 | CERTIFICATE_PASSWORD: ${{ secrets.CERTIFICATE_PASSWORD }} 44 | APPLE_ID: ${{ secrets.APPLE_ID }} 45 | APP_SPECIFIC_PASSWORD: ${{ secrets.APP_SPECIFIC_PASSWORD }} 46 | CERTIFICATE_ENCRYPTION_PASSWORD: ${{ secrets.CERTIFICATE_ENCRYPTION_PASSWORD }} 47 | TUIST_CONFIG_TOKEN: ${{ secrets.TUIST_CONFIG_TOKEN }} 48 | run: mise run bundle 49 | 50 | test: 51 | name: "Test" 52 | runs-on: "macos-13" 53 | steps: 54 | - uses: actions/checkout@v4 55 | - uses: jdx/mise-action@v2 56 | with: 57 | experimental: true 58 | - name: Run 59 | env: 60 | TUIST_CONFIG_TOKEN: ${{ secrets.TUIST_CONFIG_TOKEN }} 61 | run: | 62 | mise run install 63 | mise run test 64 | 65 | lint: 66 | name: Lint 67 | runs-on: macos-15 68 | steps: 69 | - uses: actions/checkout@v4 70 | - uses: jdx/mise-action@v2 71 | with: 72 | experimental: true 73 | - name: Run 74 | run: mise run lint 75 | 76 | implicit-imports: 77 | name: Implicit imports 78 | runs-on: macos-15 79 | steps: 80 | - uses: actions/checkout@v4 81 | - uses: jdx/mise-action@v2 82 | with: 83 | experimental: true 84 | - run: tuist inspect implicit-imports 85 | 86 | cache: 87 | name: Cache 88 | runs-on: macos-15 89 | steps: 90 | - uses: actions/checkout@v4 91 | - uses: jdx/mise-action@v2 92 | with: 93 | experimental: true 94 | - name: Run 95 | env: 96 | TUIST_CONFIG_TOKEN: ${{ secrets.TUIST_CONFIG_TOKEN }} 97 | run: | 98 | mise run install 99 | mise run cache 100 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /.build 3 | /Packages 4 | xcuserdata/ 5 | DerivedData/ 6 | .swiftpm/configuration/registries.json 7 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata 8 | .netrc 9 | 10 | *.xcodeproj/ 11 | *.xcworkspace 12 | Tuist/Dependencies/SwiftPackageManager 13 | 14 | Derived/ 15 | .swiftpm/ 16 | build/ 17 | 18 | node_modules/ 19 | docs/.vitepress/cache/ 20 | docs/.vitepress/dist/ 21 | 22 | certificates/certificate.p12 23 | -------------------------------------------------------------------------------- /.mise.toml: -------------------------------------------------------------------------------- 1 | [tools] 2 | "tuist" = "4.40.0" 3 | "swiftlint" = "0.54.0" 4 | "swiftformat" = "0.52.10" 5 | "swift" = "5.9.2" 6 | "node" = "22.13.1" 7 | "pnpm" = "9.15.4" 8 | "git-cliff" = "2.4.0" 9 | 10 | [alias] 11 | tuist = "asdf:asdf-community/asdf-tuist" 12 | swift = "asdf:fcrespo82/asdf-swift" 13 | virtualos = "asdf:tuist/asdf-virtualos" 14 | -------------------------------------------------------------------------------- /.mise/tasks/build: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # mise description="Builds the package using Tuist" 3 | 4 | set -euo pipefail 5 | 6 | tuist build --path $MISE_PROJECT_ROOT -------------------------------------------------------------------------------- /.mise/tasks/bundle: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # mise description="Bundles the CLI for distribution" 3 | 4 | set -euo pipefail 5 | 6 | # Usage 7 | # CERTIFICATE_PASSWORD=xxxxx APPLE_ID=email APP_SPECIFIC_PASSWORD=xxx mise run bundle 8 | 9 | TMP_DIRECTORY=$(mktemp -d) 10 | TMP_KEYCHAIN_PATH=$TMP_DIRECTORY/keychain.keychain 11 | KEYCHAIN_PASSWORD=$(uuidgen) 12 | ENCRYPTED_CERTIFICATE_PATH=$MISE_PROJECT_ROOT/certificates/certificate.p12.enc 13 | CERTIFICATE_PATH=$TMP_DIRECTORY/certificate.p12 14 | BUILD_DIRECTORY=$MISE_PROJECT_ROOT/build 15 | DERIVED_DATA_PATH=$BUILD_DIRECTORY/derived 16 | BUILD_DIRECTORY_BINARY=$DERIVED_DATA_PATH/Build/Products/Release/virtualos 17 | BUILD_ARTIFACTS_DIRECTORY=$BUILD_DIRECTORY/artifacts 18 | BUILD_ZIP_PATH=$BUILD_ARTIFACTS_DIRECTORY/virtualos.zip 19 | SHASUMS256_FILE=$BUILD_ARTIFACTS_DIRECTORY/SHASUMS256.txt 20 | SHASUMS512_FILE=$BUILD_ARTIFACTS_DIRECTORY/SHASUMS512.txt 21 | TEAM_ID='U6LC622NKF' 22 | GREEN='\033[0;32m' 23 | YELLOW='\033[1;33m' 24 | NC='\033[0m' 25 | 26 | print_status() { 27 | echo -e "${YELLOW}$1${NC}" 28 | } 29 | 30 | # Remove temporary directory on exit 31 | trap "rm -rf $TMP_DIRECTORY" EXIT 32 | 33 | # Decrypt the certificate 34 | print_status "Decrypting the certificate..." 35 | openssl enc -aes-256-cbc -d -pbkdf2 -in $ENCRYPTED_CERTIFICATE_PATH -out $CERTIFICATE_PATH -pass pass:"$CERTIFICATE_ENCRYPTION_PASSWORD" 36 | 37 | # Build 38 | print_status "Building the virtualos..." 39 | tuist generate --path $MISE_PROJECT_ROOT --no-open 40 | tuist build --clean --path $MISE_PROJECT_ROOT virtualos -- -configuration Release -destination generic/platform=macOS -derivedDataPath $DERIVED_DATA_PATH 41 | 42 | # Codesign 43 | print_status "Code signing virtualos..." 44 | security create-keychain -p $KEYCHAIN_PASSWORD $TMP_KEYCHAIN_PATH 45 | security default-keychain -s $TMP_KEYCHAIN_PATH 46 | security import $CERTIFICATE_PATH -P $CERTIFICATE_PASSWORD -A 47 | codesign --force --options runtime --sign "Developer ID Application: Tuist GmbH (U6LC622NKF)" $BUILD_DIRECTORY_BINARY 48 | 49 | # Notarize 50 | print_status "Submitting virtualos for notarization..." 51 | mkdir -p $BUILD_ARTIFACTS_DIRECTORY 52 | ditto -c -k --keepParent $BUILD_DIRECTORY_BINARY $BUILD_ZIP_PATH 53 | SUBMISSION_ID=$(xcrun notarytool submit "${BUILD_ZIP_PATH}" \ 54 | --apple-id "$APPLE_ID" \ 55 | --team-id "$TEAM_ID" \ 56 | --password "$APP_SPECIFIC_PASSWORD" \ 57 | --output-format json | jq -r '.id') 58 | 59 | while true; do 60 | STATUS=$(xcrun notarytool info "$SUBMISSION_ID" \ 61 | --apple-id "$APPLE_ID" \ 62 | --team-id "$TEAM_ID" \ 63 | --password "$APP_SPECIFIC_PASSWORD" \ 64 | --output-format json | jq -r '.status') 65 | 66 | case $STATUS in 67 | "Accepted") 68 | echo -e "${GREEN}Notarization succeeded!${NC}" 69 | break 70 | ;; 71 | "In Progress") 72 | print_status "Notarization in progress... waiting 30 seconds" 73 | sleep 30 74 | ;; 75 | "Invalid"|"Rejected") 76 | echo "Notarization failed with status: $STATUS" 77 | xcrun notarytool log "$SUBMISSION_ID" \ 78 | --apple-id "$APPLE_ID" \ 79 | --team-id "$TEAM_ID" \ 80 | --password "$APP_SPECIFIC_PASSWORD" 81 | exit 1 82 | ;; 83 | *) 84 | echo "Unknown status: $STATUS" 85 | exit 1 86 | ;; 87 | esac 88 | done 89 | 90 | # Generathing shasums 91 | print_status "Generating shasums..." 92 | for file in "$BUILD_ARTIFACTS_DIRECTORY"/*; do 93 | if [ -f "$file" ] && [[ $(basename "$file") != SHASUMS* ]]; then 94 | shasum -a 256 "$file" | awk '{print $1 " " FILENAME}' FILENAME=$(basename "$file") >> $SHASUMS256_FILE 95 | shasum -a 512 "$file" | awk '{print $1 " " FILENAME}' FILENAME=$(basename "$file") >> $SHASUMS512_FILE 96 | fi 97 | done 98 | -------------------------------------------------------------------------------- /.mise/tasks/cache: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # mise description="Warms the Tuist cache" 3 | 4 | set -euo pipefail 5 | 6 | tuist cache --path $MISE_PROJECT_ROOT -------------------------------------------------------------------------------- /.mise/tasks/docs/build: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # mise description="Dev the documentation" 3 | 4 | set -euo pipefail 5 | 6 | pnpm run -C $MISE_PROJECT_ROOT/docs build 7 | -------------------------------------------------------------------------------- /.mise/tasks/docs/deploy: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # mise description="Deploy the website" 3 | 4 | pnpm run -C $MISE_PROJECT_ROOT/docs deploy 5 | -------------------------------------------------------------------------------- /.mise/tasks/docs/dev: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # mise description="Dev the documentation" 3 | 4 | set -euo pipefail 5 | 6 | pnpm run -C $MISE_PROJECT_ROOT/docs dev -------------------------------------------------------------------------------- /.mise/tasks/encrypt-certificate: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # mise description="Encrypts the certificate" 3 | 4 | set -euo pipefail 5 | 6 | openssl enc -aes-256-cbc -salt -pbkdf2 -in $MISE_PROJECT_ROOT/certificates/certificate.p12 -out $MISE_PROJECT_ROOT/certificates/certificate.p12.enc -pass pass:"$CERTIFICATE_ENCRYPTION_PASSWORD" 7 | -------------------------------------------------------------------------------- /.mise/tasks/install: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # mise description="Installs the project dependencies" 3 | 4 | set -euo pipefail 5 | 6 | if [[ "$(uname)" == "Darwin" ]]; then 7 | tuist install --path $MISE_PROJECT_ROOT 8 | fi 9 | pnpm install -C $MISE_PROJECT_ROOT/docs 10 | -------------------------------------------------------------------------------- /.mise/tasks/lint: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # mise description="Lints the project" 3 | 4 | set -euo pipefail 5 | 6 | swiftformat $MISE_PROJECT_ROOT --lint 7 | swiftlint lint --quiet --config $MISE_PROJECT_ROOT/.swiftlint.yml $MISE_PROJECT_ROOT/Sources 8 | -------------------------------------------------------------------------------- /.mise/tasks/lint-fix: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # mise description = "Lints the project fixing the fixable issues" 3 | set -euo pipefail 4 | 5 | swiftformat $MISE_PROJECT_ROOT 6 | swiftlint lint --fix --quiet --config $MISE_PROJECT_ROOT/.swiftlint.yml $MISE_PROJECT_ROOT/Sources 7 | -------------------------------------------------------------------------------- /.mise/tasks/test: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # mise description="Tests the package using the Tuist" 3 | set -euo pipefail 4 | 5 | tuist test --path $MISE_PROJECT_ROOT -------------------------------------------------------------------------------- /.swiftformat: -------------------------------------------------------------------------------- 1 | # file options 2 | 3 | --symlinks ignore 4 | --disable hoistAwait 5 | --disable hoistTry 6 | --swiftversion 5.7 7 | 8 | # format options 9 | 10 | --allman false 11 | --binarygrouping 4,8 12 | --closingparen balanced 13 | --commas always 14 | --comments indent 15 | --decimalgrouping 3,6 16 | --elseposition same-line 17 | --empty void 18 | --exponentcase lowercase 19 | --exponentgrouping disabled 20 | --extensionacl on-declarations 21 | --fractiongrouping disabled 22 | --header strip 23 | --hexgrouping 4,8 24 | --hexliteralcase uppercase 25 | --ifdef indent 26 | --indent 4 27 | --indentcase false 28 | --importgrouping testable-bottom 29 | --linebreaks lf 30 | --octalgrouping 4,8 31 | --operatorfunc spaced 32 | --patternlet hoist 33 | --ranges spaced 34 | --self remove 35 | --semicolons inline 36 | --stripunusedargs always 37 | --trimwhitespace always 38 | --maxwidth 130 39 | --wraparguments before-first 40 | --wrapcollections before-first 41 | --wrapconditions after-first 42 | --wrapparameters before-first -------------------------------------------------------------------------------- /.swiftlint.yml: -------------------------------------------------------------------------------- 1 | disabled_rules: 2 | - trailing_whitespace 3 | - trailing_comma 4 | - nesting 5 | - cyclomatic_complexity 6 | - file_length 7 | - todo 8 | - function_parameter_count 9 | - opening_brace 10 | - line_length 11 | identifier_name: 12 | min_length: 13 | error: 1 14 | warning: 1 15 | max_length: 16 | warning: 60 17 | error: 80 18 | inclusive_language: 19 | override_allowed_terms: 20 | - masterKey 21 | type_name: 22 | min_length: 23 | error: 1 24 | warning: 1 -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## What's Changed in 0.1.119 2 | * chore(deps): lock file maintenance by @pepicrft in [#144](https://github.com/tuist/virtualOS/pull/144) 3 | * chore(deps): lock file maintenance by @renovate[bot] 4 | * chore(deps): update dependency tuist/filesystem to from: "0.7.2" by @pepicrft in [#149](https://github.com/tuist/virtualOS/pull/149) 5 | * chore(deps): update dependency tuist/filesystem to from: "0.7.2" by @renovate[bot] 6 | * chore(deps): update dependency wrangler to v3.105.1 by @pepicrft in [#147](https://github.com/tuist/virtualOS/pull/147) 7 | * chore(deps): update dependency wrangler to v3.105.1 by @renovate[bot] 8 | * chore(deps): update dependency tuist to v4.40.0 by @pepicrft in [#148](https://github.com/tuist/virtualOS/pull/148) 9 | * chore(deps): update dependency tuist to v4.40.0 by @renovate[bot] 10 | * chore(deps): update dependency pnpm to v9.15.4 by @pepicrft in [#145](https://github.com/tuist/virtualOS/pull/145) 11 | * chore(deps): update dependency pnpm to v9.15.4 by @renovate[bot] 12 | * chore(deps): update dependency node to v22.13.1 by @pepicrft in [#146](https://github.com/tuist/virtualOS/pull/146) 13 | * chore(deps): update dependency node to v22.13.1 by @renovate[bot] 14 | * chore(deps): update dependency vitepress to v1.6.3 by @pepicrft in [#150](https://github.com/tuist/virtualOS/pull/150) 15 | * chore(deps): update dependency vitepress to v1.6.3 by @renovate[bot] 16 | 17 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.118...0.1.119 18 | 19 | ## What's Changed in 0.1.118 20 | * release 0.1.118 by @pepicrft 21 | * Refactor .mise.toml: Change plugin definitions to alias format for asdf integration by @pepicrft 22 | 23 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.117...0.1.118 24 | 25 | ## What's Changed in 0.1.117 26 | * release 0.1.117 by @pepicrft 27 | * Fixes by @pepicrft 28 | * Set up environment and logging infrastructure by @pepicrft in [#142](https://github.com/tuist/virtualOS/pull/142) 29 | * Set up logging by @pepicrft 30 | 31 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.116...0.1.117 32 | 33 | ## What's Changed in 0.1.116 34 | * release 0.1.116 by @renovate[bot] 35 | * chore(deps): update dependency pnpm to v9.15.2 by @renovate[bot] in [#141](https://github.com/tuist/virtualOS/pull/141) 36 | 37 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.115...0.1.116 38 | 39 | ## What's Changed in 0.1.115 40 | * release 0.1.115 by @renovate[bot] 41 | * chore(deps): update dependency apple/swift-service-context to from: "1.1.0" by @renovate[bot] in [#140](https://github.com/tuist/virtualOS/pull/140) 42 | 43 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.114...0.1.115 44 | 45 | ## What's Changed in 0.1.114 46 | * release 0.1.114 by @pepicrft 47 | * Set up default environment and logger instances by @pepicrft in [#139](https://github.com/tuist/virtualOS/pull/139) 48 | * Create VirtualOSEnvironmentInterface by @pepicrft 49 | * Add directories to Environment by @pepicrft 50 | * Add logger setup by @pepicrft 51 | 52 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.113...0.1.114 53 | 54 | ## What's Changed in 0.1.113 55 | * release 0.1.113 by @pepicrft 56 | * chore(deps): update dependency tuist to v4.38.2 by @pepicrft in [#137](https://github.com/tuist/virtualOS/pull/137) 57 | * chore(deps): update dependency tuist to v4.38.2 by @renovate[bot] 58 | * chore(deps): update dependency macos to v14 by @pepicrft in [#138](https://github.com/tuist/virtualOS/pull/138) 59 | * chore(deps): update dependency macos to v14 by @renovate[bot] 60 | 61 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.112...0.1.113 62 | 63 | ## What's Changed in 0.1.112 64 | * release 0.1.112 by @pepicrft 65 | * Add a home page by @pepicrft 66 | 67 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.111...0.1.112 68 | 69 | ## What's Changed in 0.1.111 70 | * release 0.1.111 by @pepicrft 71 | * Expose the GitHub token to prevent hitting 403 with Mise by @pepicrft 72 | * Fix continuous integration by @pepicrft in [#136](https://github.com/tuist/virtualOS/pull/136) 73 | * Run on macOS 15 by @pepicrft 74 | * Adopt the most recent Tuist conventions and fix the compilation by @pepicrft 75 | * Expose GITHUB_TOKEN to prevent 403 errors when we do mise install by @pepicrft 76 | * Update dependency tuist to v4.38.1 by @pepicrft in [#102](https://github.com/tuist/virtualOS/pull/102) 77 | * Update dependency tuist to v4.38.1 by @renovate[bot] 78 | * Update dependency node to v22 by @pepicrft in [#99](https://github.com/tuist/virtualOS/pull/99) 79 | * Update dependency node to v22 by @renovate[bot] 80 | * Update dependency Kolos65/Mockable to from: "0.2.0" by @pepicrft in [#80](https://github.com/tuist/virtualOS/pull/80) 81 | * Update dependency Kolos65/Mockable to from: "0.2.0" by @renovate[bot] 82 | 83 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.110...0.1.111 84 | 85 | ## What's Changed in 0.1.110 86 | * release 0.1.110 by @renovate[bot] 87 | * Lock file maintenance by @renovate[bot] in [#135](https://github.com/tuist/virtualOS/pull/135) 88 | * Update dependency pnpm to v9.15.1 by @renovate[bot] in [#134](https://github.com/tuist/virtualOS/pull/134) 89 | 90 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.109...0.1.110 91 | 92 | ## What's Changed in 0.1.109 93 | * release 0.1.109 by @renovate[bot] 94 | * Update dependency wrangler to v3.99.0 by @renovate[bot] in [#133](https://github.com/tuist/virtualOS/pull/133) 95 | 96 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.108...0.1.109 97 | 98 | ## What's Changed in 0.1.108 99 | * release 0.1.108 by @renovate[bot] 100 | * Update dependency wrangler to v3.98.0 by @renovate[bot] in [#132](https://github.com/tuist/virtualOS/pull/132) 101 | 102 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.107...0.1.108 103 | 104 | ## What's Changed in 0.1.107 105 | * release 0.1.107 by @renovate[bot] 106 | * Update dependency wrangler to v3.97.0 by @renovate[bot] in [#131](https://github.com/tuist/virtualOS/pull/131) 107 | 108 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.106...0.1.107 109 | 110 | ## What's Changed in 0.1.106 111 | * release 0.1.106 by @renovate[bot] 112 | * Update dependency wrangler to v3.96.0 by @renovate[bot] in [#130](https://github.com/tuist/virtualOS/pull/130) 113 | 114 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.105...0.1.106 115 | 116 | ## What's Changed in 0.1.105 117 | * release 0.1.105 by @renovate[bot] 118 | * Lock file maintenance by @renovate[bot] in [#129](https://github.com/tuist/virtualOS/pull/129) 119 | 120 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.104...0.1.105 121 | 122 | ## What's Changed in 0.1.104 123 | * release 0.1.104 by @renovate[bot] 124 | * Update dependency wrangler to v3.95.0 by @renovate[bot] in [#128](https://github.com/tuist/virtualOS/pull/128) 125 | 126 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.103...0.1.104 127 | 128 | ## What's Changed in 0.1.103 129 | * release 0.1.103 by @renovate[bot] 130 | * Update dependency wrangler to v3.94.0 by @renovate[bot] in [#127](https://github.com/tuist/virtualOS/pull/127) 131 | 132 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.102...0.1.103 133 | 134 | ## What's Changed in 0.1.102 135 | * release 0.1.102 by @renovate[bot] 136 | * Lock file maintenance by @renovate[bot] in [#126](https://github.com/tuist/virtualOS/pull/126) 137 | 138 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.101...0.1.102 139 | 140 | ## What's Changed in 0.1.101 141 | * release 0.1.101 by @renovate[bot] 142 | * Update dependency pnpm to v9.15.0 by @renovate[bot] in [#124](https://github.com/tuist/virtualOS/pull/124) 143 | 144 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.100...0.1.101 145 | 146 | ## What's Changed in 0.1.100 147 | * release 0.1.100 by @renovate[bot] 148 | * Update dependency wrangler to v3.93.0 by @renovate[bot] in [#125](https://github.com/tuist/virtualOS/pull/125) 149 | 150 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.99...0.1.100 151 | 152 | ## What's Changed in 0.1.99 153 | * release 0.1.99 by @renovate[bot] 154 | * Update dependency wrangler to v3.92.0 by @renovate[bot] in [#123](https://github.com/tuist/virtualOS/pull/123) 155 | 156 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.98...0.1.99 157 | 158 | ## What's Changed in 0.1.98 159 | * release 0.1.98 by @renovate[bot] 160 | * Update dependency pnpm to v9.14.4 by @renovate[bot] in [#121](https://github.com/tuist/virtualOS/pull/121) 161 | 162 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.97...0.1.98 163 | 164 | ## What's Changed in 0.1.97 165 | * release 0.1.97 by @renovate[bot] 166 | * Lock file maintenance by @renovate[bot] in [#122](https://github.com/tuist/virtualOS/pull/122) 167 | 168 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.96...0.1.97 169 | 170 | ## What's Changed in 0.1.96 171 | * release 0.1.96 by @renovate[bot] 172 | * Update dependency wrangler to v3.91.0 by @renovate[bot] in [#120](https://github.com/tuist/virtualOS/pull/120) 173 | 174 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.95...0.1.96 175 | 176 | ## What's Changed in 0.1.95 177 | * release 0.1.95 by @renovate[bot] 178 | * Lock file maintenance by @renovate[bot] in [#119](https://github.com/tuist/virtualOS/pull/119) 179 | 180 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.94...0.1.95 181 | 182 | ## What's Changed in 0.1.94 183 | * release 0.1.94 by @renovate[bot] 184 | * Update dependency wrangler to v3.90.0 by @renovate[bot] in [#118](https://github.com/tuist/virtualOS/pull/118) 185 | 186 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.93...0.1.94 187 | 188 | ## What's Changed in 0.1.93 189 | * release 0.1.93 by @renovate[bot] 190 | * Update dependency pnpm to v9.14.2 by @renovate[bot] in [#112](https://github.com/tuist/virtualOS/pull/112) 191 | 192 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.92...0.1.93 193 | 194 | ## What's Changed in 0.1.92 195 | * release 0.1.92 by @renovate[bot] 196 | * Update dependency node to v20.18.1 by @renovate[bot] in [#116](https://github.com/tuist/virtualOS/pull/116) 197 | 198 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.91...0.1.92 199 | 200 | ## What's Changed in 0.1.91 201 | * release 0.1.91 by @renovate[bot] 202 | * Update dependency wrangler to v3.89.0 by @renovate[bot] in [#117](https://github.com/tuist/virtualOS/pull/117) 203 | 204 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.90...0.1.91 205 | 206 | ## What's Changed in 0.1.90 207 | * release 0.1.90 by @renovate[bot] 208 | * Update dependency wrangler to v3.88.0 by @renovate[bot] in [#115](https://github.com/tuist/virtualOS/pull/115) 209 | 210 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.89...0.1.90 211 | 212 | ## What's Changed in 0.1.89 213 | * release 0.1.89 by @renovate[bot] 214 | * Lock file maintenance by @renovate[bot] in [#114](https://github.com/tuist/virtualOS/pull/114) 215 | 216 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.88...0.1.89 217 | 218 | ## What's Changed in 0.1.88 219 | * release 0.1.88 by @renovate[bot] 220 | * Update dependency wrangler to v3.87.0 by @renovate[bot] in [#113](https://github.com/tuist/virtualOS/pull/113) 221 | 222 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.87...0.1.88 223 | 224 | ## What's Changed in 0.1.87 225 | * release 0.1.87 by @renovate[bot] 226 | * Update dependency pnpm to v9.13.0 by @renovate[bot] in [#111](https://github.com/tuist/virtualOS/pull/111) 227 | 228 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.86...0.1.87 229 | 230 | ## What's Changed in 0.1.86 231 | * release 0.1.86 by @renovate[bot] 232 | * Update dependency wrangler to v3.86.1 by @renovate[bot] in [#110](https://github.com/tuist/virtualOS/pull/110) 233 | 234 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.85...0.1.86 235 | 236 | ## What's Changed in 0.1.85 237 | * release 0.1.85 by @renovate[bot] 238 | * Lock file maintenance by @renovate[bot] in [#109](https://github.com/tuist/virtualOS/pull/109) 239 | 240 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.84...0.1.85 241 | 242 | ## What's Changed in 0.1.84 243 | * release 0.1.84 by @renovate[bot] 244 | * Update dependency wrangler to v3.86.0 by @renovate[bot] in [#108](https://github.com/tuist/virtualOS/pull/108) 245 | 246 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.83...0.1.84 247 | 248 | ## What's Changed in 0.1.83 249 | * release 0.1.83 by @renovate[bot] 250 | * Update dependency wrangler to v3.85.0 by @renovate[bot] in [#107](https://github.com/tuist/virtualOS/pull/107) 251 | 252 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.82...0.1.83 253 | 254 | ## What's Changed in 0.1.82 255 | * release 0.1.82 by @renovate[bot] 256 | * Update dependency vitepress to v1.5.0 by @renovate[bot] in [#106](https://github.com/tuist/virtualOS/pull/106) 257 | 258 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.81...0.1.82 259 | 260 | ## What's Changed in 0.1.81 261 | * release 0.1.81 by @renovate[bot] 262 | * Lock file maintenance by @renovate[bot] in [#105](https://github.com/tuist/virtualOS/pull/105) 263 | 264 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.80...0.1.81 265 | 266 | ## What's Changed in 0.1.80 267 | * release 0.1.80 by @renovate[bot] 268 | * Update dependency vitepress to v1.4.5 by @renovate[bot] in [#104](https://github.com/tuist/virtualOS/pull/104) 269 | 270 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.79...0.1.80 271 | 272 | ## What's Changed in 0.1.79 273 | * release 0.1.79 by @renovate[bot] 274 | * Update dependency wrangler to v3.84.1 by @renovate[bot] in [#103](https://github.com/tuist/virtualOS/pull/103) 275 | 276 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.78...0.1.79 277 | 278 | ## What's Changed in 0.1.78 279 | * release 0.1.78 by @renovate[bot] 280 | * Update dependency vitepress to v1.4.3 by @renovate[bot] in [#101](https://github.com/tuist/virtualOS/pull/101) 281 | 282 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.77...0.1.78 283 | 284 | ## What's Changed in 0.1.77 285 | * release 0.1.77 by @renovate[bot] 286 | * Update dependency wrangler to v3.84.0 by @renovate[bot] in [#100](https://github.com/tuist/virtualOS/pull/100) 287 | 288 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.76...0.1.77 289 | 290 | ## What's Changed in 0.1.76 291 | * release 0.1.76 by @renovate[bot] 292 | * Update dependency vitepress to v1.4.2 by @renovate[bot] in [#98](https://github.com/tuist/virtualOS/pull/98) 293 | 294 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.75...0.1.76 295 | 296 | ## What's Changed in 0.1.75 297 | * release 0.1.75 by @renovate[bot] 298 | * Update dependency pnpm to v9.12.3 by @renovate[bot] in [#97](https://github.com/tuist/virtualOS/pull/97) 299 | 300 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.74...0.1.75 301 | 302 | ## What's Changed in 0.1.74 303 | * release 0.1.74 by @renovate[bot] 304 | * Lock file maintenance by @renovate[bot] in [#96](https://github.com/tuist/virtualOS/pull/96) 305 | 306 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.73...0.1.74 307 | 308 | ## What's Changed in 0.1.73 309 | * release 0.1.73 by @renovate[bot] 310 | * Update dependency wrangler to v3.83.0 by @renovate[bot] in [#95](https://github.com/tuist/virtualOS/pull/95) 311 | 312 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.72...0.1.73 313 | 314 | ## What's Changed in 0.1.72 315 | * release 0.1.72 by @renovate[bot] 316 | * Update actions/checkout digest to 11bd719 by @renovate[bot] in [#94](https://github.com/tuist/virtualOS/pull/94) 317 | 318 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.71...0.1.72 319 | 320 | ## What's Changed in 0.1.71 321 | * release 0.1.71 by @renovate[bot] 322 | * Update dependency tuist to v4.31.0 by @renovate[bot] in [#93](https://github.com/tuist/virtualOS/pull/93) 323 | 324 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.70...0.1.71 325 | 326 | ## What's Changed in 0.1.70 327 | * release 0.1.70 by @renovate[bot] 328 | * Update dependency wrangler to v3.82.0 by @renovate[bot] in [#92](https://github.com/tuist/virtualOS/pull/92) 329 | 330 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.69...0.1.70 331 | 332 | ## What's Changed in 0.1.69 333 | * release 0.1.69 by @renovate[bot] 334 | * Update dependency wrangler to v3.81.0 by @renovate[bot] in [#91](https://github.com/tuist/virtualOS/pull/91) 335 | 336 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.68...0.1.69 337 | 338 | ## What's Changed in 0.1.68 339 | * release 0.1.68 by @renovate[bot] 340 | * Update dependency vitepress to v1.4.1 by @renovate[bot] in [#87](https://github.com/tuist/virtualOS/pull/87) 341 | 342 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.67...0.1.68 343 | 344 | ## What's Changed in 0.1.67 345 | * release 0.1.67 by @renovate[bot] 346 | * Update dependency tuist to v4.30.0 by @renovate[bot] in [#83](https://github.com/tuist/virtualOS/pull/83) 347 | 348 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.66...0.1.67 349 | 350 | ## What's Changed in 0.1.66 351 | * release 0.1.66 by @renovate[bot] 352 | * Update dependency node to v20.18.0 by @renovate[bot] in [#84](https://github.com/tuist/virtualOS/pull/84) 353 | 354 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.65...0.1.66 355 | 356 | ## What's Changed in 0.1.65 357 | * release 0.1.65 by @renovate[bot] 358 | * Update dependency tuist/path to from: "0.3.8" by @renovate[bot] in [#90](https://github.com/tuist/virtualOS/pull/90) 359 | 360 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.64...0.1.65 361 | 362 | ## What's Changed in 0.1.64 363 | * release 0.1.64 by @renovate[bot] 364 | * Update dependency pnpm to v9.12.2 by @renovate[bot] in [#88](https://github.com/tuist/virtualOS/pull/88) 365 | 366 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.63...0.1.64 367 | 368 | ## What's Changed in 0.1.63 369 | * release 0.1.63 by @renovate[bot] 370 | * Update actions/checkout digest to eef6144 by @renovate[bot] in [#89](https://github.com/tuist/virtualOS/pull/89) 371 | 372 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.62...0.1.63 373 | 374 | ## What's Changed in 0.1.62 375 | * release 0.1.62 by @renovate[bot] 376 | * Update dependency wrangler to v3.80.5 by @renovate[bot] in [#85](https://github.com/tuist/virtualOS/pull/85) 377 | * Implement `virtualos` pull command by @pepicrft in [#26](https://github.com/tuist/virtualOS/pull/26) 378 | * Lint the code changes by @pepicrft 379 | * Start working on the pull command by @pepicrft 380 | 381 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.61...0.1.62 382 | 383 | ## What's Changed in 0.1.61 384 | * release 0.1.61 by @renovate[bot] 385 | * Update dependency pnpm to v9.12.0 by @renovate[bot] in [#82](https://github.com/tuist/virtualOS/pull/82) 386 | 387 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.60...0.1.61 388 | 389 | ## What's Changed in 0.1.60 390 | * release 0.1.60 by @renovate[bot] 391 | * Update dependency wrangler to v3.79.0 by @renovate[bot] in [#81](https://github.com/tuist/virtualOS/pull/81) 392 | 393 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.59...0.1.60 394 | 395 | ## What's Changed in 0.1.59 396 | * release 0.1.59 by @renovate[bot] 397 | * Lock file maintenance by @renovate[bot] in [#79](https://github.com/tuist/virtualOS/pull/79) 398 | 399 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.58...0.1.59 400 | 401 | ## What's Changed in 0.1.58 402 | * release 0.1.58 by @renovate[bot] 403 | * Update dependency wrangler to v3.78.12 by @renovate[bot] in [#78](https://github.com/tuist/virtualOS/pull/78) 404 | 405 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.57...0.1.58 406 | 407 | ## What's Changed in 0.1.57 408 | * release 0.1.57 by @renovate[bot] 409 | * Update dependency wrangler to v3.78.11 by @renovate[bot] in [#77](https://github.com/tuist/virtualOS/pull/77) 410 | * Update dependency tuist to v4.28.1 by @renovate[bot] in [#76](https://github.com/tuist/virtualOS/pull/76) 411 | 412 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.56...0.1.57 413 | 414 | ## What's Changed in 0.1.56 415 | * release 0.1.56 by @renovate[bot] 416 | * Update dependency wrangler to v3.78.10 by @renovate[bot] in [#75](https://github.com/tuist/virtualOS/pull/75) 417 | 418 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.55...0.1.56 419 | 420 | ## What's Changed in 0.1.55 421 | * release 0.1.55 by @renovate[bot] 422 | * Update dependency tuist to v4.28.0 by @renovate[bot] in [#74](https://github.com/tuist/virtualOS/pull/74) 423 | 424 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.54...0.1.55 425 | 426 | ## What's Changed in 0.1.54 427 | * release 0.1.54 by @renovate[bot] 428 | * Update dependency wrangler to v3.78.9 by @renovate[bot] in [#73](https://github.com/tuist/virtualOS/pull/73) 429 | 430 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.53...0.1.54 431 | 432 | ## What's Changed in 0.1.53 433 | * release 0.1.53 by @renovate[bot] 434 | * Update dependency wrangler to v3.78.8 by @renovate[bot] in [#72](https://github.com/tuist/virtualOS/pull/72) 435 | 436 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.52...0.1.53 437 | 438 | ## What's Changed in 0.1.52 439 | * release 0.1.52 by @renovate[bot] 440 | * Lock file maintenance by @renovate[bot] in [#71](https://github.com/tuist/virtualOS/pull/71) 441 | 442 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.51...0.1.52 443 | 444 | ## What's Changed in 0.1.51 445 | * release 0.1.51 by @renovate[bot] 446 | * Update dependency wrangler to v3.78.7 by @renovate[bot] in [#70](https://github.com/tuist/virtualOS/pull/70) 447 | 448 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.50...0.1.51 449 | 450 | ## What's Changed in 0.1.50 451 | * release 0.1.50 by @renovate[bot] 452 | * Update dependency pnpm to v9.11.0 by @renovate[bot] in [#69](https://github.com/tuist/virtualOS/pull/69) 453 | 454 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.49...0.1.50 455 | 456 | ## What's Changed in 0.1.49 457 | * release 0.1.49 by @renovate[bot] 458 | * Update dependency wrangler to v3.78.6 by @renovate[bot] in [#68](https://github.com/tuist/virtualOS/pull/68) 459 | 460 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.48...0.1.49 461 | 462 | ## What's Changed in 0.1.48 463 | * release 0.1.48 by @renovate[bot] 464 | * Update dependency tuist to v4.27.0 by @renovate[bot] in [#67](https://github.com/tuist/virtualOS/pull/67) 465 | 466 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.47...0.1.48 467 | 468 | ## What's Changed in 0.1.47 469 | * release 0.1.47 by @renovate[bot] 470 | * Update dependency wrangler to v3.78.5 by @renovate[bot] in [#66](https://github.com/tuist/virtualOS/pull/66) 471 | 472 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.46...0.1.47 473 | 474 | ## What's Changed in 0.1.46 475 | * release 0.1.46 by @renovate[bot] 476 | * Update dependency wrangler to v3.78.4 by @renovate[bot] in [#65](https://github.com/tuist/virtualOS/pull/65) 477 | 478 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.45...0.1.46 479 | 480 | ## What's Changed in 0.1.45 481 | * release 0.1.45 by @renovate[bot] 482 | * Update dependency wrangler to v3.78.3 by @renovate[bot] in [#64](https://github.com/tuist/virtualOS/pull/64) 483 | 484 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.44...0.1.45 485 | 486 | ## What's Changed in 0.1.44 487 | * release 0.1.44 by @renovate[bot] 488 | * Lock file maintenance by @renovate[bot] in [#63](https://github.com/tuist/virtualOS/pull/63) 489 | 490 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.43...0.1.44 491 | 492 | ## What's Changed in 0.1.43 493 | * release 0.1.43 by @renovate[bot] 494 | * Update dependency wrangler to v3.78.2 by @renovate[bot] in [#62](https://github.com/tuist/virtualOS/pull/62) 495 | 496 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.42...0.1.43 497 | 498 | ## What's Changed in 0.1.42 499 | * release 0.1.42 by @renovate[bot] 500 | * Update dependency wrangler to v3.78.1 by @renovate[bot] in [#61](https://github.com/tuist/virtualOS/pull/61) 501 | 502 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.41...0.1.42 503 | 504 | ## What's Changed in 0.1.41 505 | * release 0.1.41 by @renovate[bot] 506 | * Update dependency wrangler to v3.77.0 by @renovate[bot] in [#60](https://github.com/tuist/virtualOS/pull/60) 507 | 508 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.40...0.1.41 509 | 510 | ## What's Changed in 0.1.40 511 | * release 0.1.40 by @renovate[bot] 512 | * Update dependency wrangler to v3.76.0 by @renovate[bot] in [#59](https://github.com/tuist/virtualOS/pull/59) 513 | 514 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.39...0.1.40 515 | 516 | ## What's Changed in 0.1.39 517 | * release 0.1.39 by @renovate[bot] 518 | * Update dependency pnpm to v9.10.0 by @renovate[bot] in [#58](https://github.com/tuist/virtualOS/pull/58) 519 | 520 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.38...0.1.39 521 | 522 | ## What's Changed in 0.1.38 523 | * release 0.1.38 by @renovate[bot] 524 | * Lock file maintenance by @renovate[bot] in [#57](https://github.com/tuist/virtualOS/pull/57) 525 | 526 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.37...0.1.38 527 | 528 | ## What's Changed in 0.1.37 529 | * release 0.1.37 by @renovate[bot] 530 | * Update dependency wrangler to v3.75.0 by @renovate[bot] in [#56](https://github.com/tuist/virtualOS/pull/56) 531 | 532 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.36...0.1.37 533 | 534 | ## What's Changed in 0.1.36 535 | * release 0.1.36 by @renovate[bot] 536 | * Update dependency wrangler to v3.74.0 by @renovate[bot] in [#55](https://github.com/tuist/virtualOS/pull/55) 537 | 538 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.35...0.1.36 539 | 540 | ## What's Changed in 0.1.35 541 | * release 0.1.35 by @renovate[bot] 542 | * Update dependency tuist to v4.26.0 by @renovate[bot] in [#54](https://github.com/tuist/virtualOS/pull/54) 543 | 544 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.34...0.1.35 545 | 546 | ## What's Changed in 0.1.34 547 | * release 0.1.34 by @renovate[bot] 548 | * Lock file maintenance by @renovate[bot] in [#53](https://github.com/tuist/virtualOS/pull/53) 549 | 550 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.33...0.1.34 551 | 552 | ## What's Changed in 0.1.33 553 | * release 0.1.33 by @renovate[bot] 554 | * Update dependency wrangler to v3.73.0 by @renovate[bot] in [#52](https://github.com/tuist/virtualOS/pull/52) 555 | 556 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.32...0.1.33 557 | 558 | ## What's Changed in 0.1.32 559 | * release 0.1.32 by @renovate[bot] 560 | * Update dependency wrangler to v3.72.3 by @renovate[bot] in [#51](https://github.com/tuist/virtualOS/pull/51) 561 | 562 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.31...0.1.32 563 | 564 | ## What's Changed in 0.1.31 565 | * release 0.1.31 by @renovate[bot] 566 | * Update dependency tuist to v4.25.0 by @renovate[bot] in [#50](https://github.com/tuist/virtualOS/pull/50) 567 | 568 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.30...0.1.31 569 | 570 | ## What's Changed in 0.1.30 571 | * release 0.1.30 by @renovate[bot] 572 | * Update dependency pnpm to v9.9.0 by @renovate[bot] in [#49](https://github.com/tuist/virtualOS/pull/49) 573 | 574 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.29...0.1.30 575 | 576 | ## What's Changed in 0.1.29 577 | * release 0.1.29 by @renovate[bot] 578 | * Lock file maintenance by @renovate[bot] in [#48](https://github.com/tuist/virtualOS/pull/48) 579 | 580 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.28...0.1.29 581 | 582 | ## What's Changed in 0.1.28 583 | * release 0.1.28 by @renovate[bot] 584 | * Update dependency vitepress to v1.3.4 by @renovate[bot] in [#47](https://github.com/tuist/virtualOS/pull/47) 585 | 586 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.27...0.1.28 587 | 588 | ## What's Changed in 0.1.27 589 | * release 0.1.27 by @renovate[bot] 590 | * Update dependency wrangler to v3.72.2 by @renovate[bot] in [#46](https://github.com/tuist/virtualOS/pull/46) 591 | 592 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.26...0.1.27 593 | 594 | ## What's Changed in 0.1.26 595 | * release 0.1.26 by @renovate[bot] 596 | * Update dependency pnpm to v9.8.0 by @renovate[bot] in [#45](https://github.com/tuist/virtualOS/pull/45) 597 | 598 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.25...0.1.26 599 | 600 | ## What's Changed in 0.1.25 601 | * release 0.1.25 by @renovate[bot] 602 | * Update dependency node to v20.17.0 by @renovate[bot] in [#44](https://github.com/tuist/virtualOS/pull/44) 603 | 604 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.24...0.1.25 605 | 606 | ## What's Changed in 0.1.24 607 | * release 0.1.24 by @renovate[bot] 608 | * Update dependency wrangler to v3.72.1 by @renovate[bot] in [#43](https://github.com/tuist/virtualOS/pull/43) 609 | 610 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.23...0.1.24 611 | 612 | ## What's Changed in 0.1.23 613 | * release 0.1.23 by @renovate[bot] 614 | * Update dependency tuist to v4.24.0 by @renovate[bot] in [#42](https://github.com/tuist/virtualOS/pull/42) 615 | 616 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.22...0.1.23 617 | 618 | ## What's Changed in 0.1.22 619 | * release 0.1.22 by @renovate[bot] 620 | * Lock file maintenance by @renovate[bot] in [#41](https://github.com/tuist/virtualOS/pull/41) 621 | 622 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.21...0.1.22 623 | 624 | ## What's Changed in 0.1.21 625 | * release 0.1.21 by @renovate[bot] 626 | * Lock file maintenance by @renovate[bot] in [#40](https://github.com/tuist/virtualOS/pull/40) 627 | 628 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.20...0.1.21 629 | 630 | ## What's Changed in 0.1.20 631 | * release 0.1.20 by @renovate[bot] 632 | * Update dependency vitepress to v1.3.3 by @renovate[bot] in [#39](https://github.com/tuist/virtualOS/pull/39) 633 | 634 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.19...0.1.20 635 | 636 | ## What's Changed in 0.1.19 637 | * release 0.1.19 by @renovate[bot] 638 | * Update dependency wrangler to v3.72.0 by @renovate[bot] in [#38](https://github.com/tuist/virtualOS/pull/38) 639 | 640 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.18...0.1.19 641 | 642 | ## What's Changed in 0.1.18 643 | * release 0.1.18 by @renovate[bot] 644 | * Update dependency pnpm to v9.7.1 by @renovate[bot] in [#37](https://github.com/tuist/virtualOS/pull/37) 645 | 646 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.17...0.1.18 647 | 648 | ## What's Changed in 0.1.17 649 | * release 0.1.17 by @renovate[bot] 650 | * Update dependency wrangler to v3.71.0 by @renovate[bot] in [#36](https://github.com/tuist/virtualOS/pull/36) 651 | 652 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.16...0.1.17 653 | 654 | ## What's Changed in 0.1.16 655 | * release 0.1.16 by @renovate[bot] 656 | * Lock file maintenance by @renovate[bot] in [#35](https://github.com/tuist/virtualOS/pull/35) 657 | 658 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.15...0.1.16 659 | 660 | ## What's Changed in 0.1.15 661 | * release 0.1.15 by @renovate[bot] 662 | * Update dependency wrangler to v3.70.0 by @renovate[bot] in [#34](https://github.com/tuist/virtualOS/pull/34) 663 | 664 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.14...0.1.15 665 | 666 | ## What's Changed in 0.1.14 667 | * release 0.1.14 by @renovate[bot] 668 | * Update dependency pnpm to v9.7.0 by @renovate[bot] in [#33](https://github.com/tuist/virtualOS/pull/33) 669 | 670 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.13...0.1.14 671 | 672 | ## What's Changed in 0.1.13 673 | * release 0.1.13 by @renovate[bot] 674 | * Update dependency wrangler to v3.69.1 by @renovate[bot] in [#32](https://github.com/tuist/virtualOS/pull/32) 675 | 676 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.12...0.1.13 677 | 678 | ## What's Changed in 0.1.12 679 | * release 0.1.12 by @renovate[bot] 680 | * Update dependency vitepress to v1.3.2 by @renovate[bot] in [#31](https://github.com/tuist/virtualOS/pull/31) 681 | 682 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.11...0.1.12 683 | 684 | ## What's Changed in 0.1.11 685 | * release 0.1.11 by @renovate[bot] 686 | * Update dependency tuist to v4.23.0 by @renovate[bot] in [#30](https://github.com/tuist/virtualOS/pull/30) 687 | 688 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.10...0.1.11 689 | 690 | ## What's Changed in 0.1.10 691 | * release 0.1.10 by @renovate[bot] 692 | * Lock file maintenance by @renovate[bot] in [#29](https://github.com/tuist/virtualOS/pull/29) 693 | 694 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.9...0.1.10 695 | 696 | ## What's Changed in 0.1.9 697 | * release 0.1.9 by @renovate[bot] 698 | * Update dependency Kolos65/Mockable to from: "0.0.10" by @renovate[bot] in [#28](https://github.com/tuist/virtualOS/pull/28) 699 | 700 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.8...0.1.9 701 | 702 | ## What's Changed in 0.1.8 703 | * release 0.1.8 by @renovate[bot] 704 | * Update dependency wrangler to v3.68.0 by @renovate[bot] in [#27](https://github.com/tuist/virtualOS/pull/27) 705 | 706 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.7...0.1.8 707 | 708 | ## What's Changed in 0.1.7 709 | * release 0.1.7 by @renovate[bot] 710 | * Update dependency tuist to v4.22.0 by @renovate[bot] in [#25](https://github.com/tuist/virtualOS/pull/25) 711 | 712 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.6...0.1.7 713 | 714 | ## What's Changed in 0.1.6 715 | * release 0.1.6 by @renovate[bot] 716 | * Lock file maintenance by @renovate[bot] in [#24](https://github.com/tuist/virtualOS/pull/24) 717 | 718 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.5...0.1.6 719 | 720 | ## What's Changed in 0.1.5 721 | * release 0.1.5 by @renovate[bot] 722 | * Update dependency wrangler to v3.67.1 by @renovate[bot] in [#23](https://github.com/tuist/virtualOS/pull/23) 723 | 724 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.4...0.1.5 725 | 726 | ## What's Changed in 0.1.4 727 | * release 0.1.4 by @renovate[bot] 728 | * Update dependency wrangler to v3.67.0 by @renovate[bot] in [#22](https://github.com/tuist/virtualOS/pull/22) 729 | 730 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.3...0.1.4 731 | 732 | ## What's Changed in 0.1.3 733 | * release 0.1.3 by @renovate[bot] 734 | * Update dependency node to v20.16.0 by @renovate[bot] in [#21](https://github.com/tuist/virtualOS/pull/21) 735 | 736 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.2...0.1.3 737 | 738 | ## What's Changed in 0.1.2 739 | * release 0.1.2 by @renovate[bot] 740 | * Update dependency wrangler to v3.66.0 by @renovate[bot] in [#20](https://github.com/tuist/virtualOS/pull/20) 741 | 742 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.1...0.1.2 743 | 744 | ## What's Changed in 0.1.1 745 | * release 0.1.1 by @pepicrft 746 | * Read the right value by @pepicrft 747 | * release by @pepicrft 748 | * Auto generate release notes by @pepicrft 749 | * release by @pepicrft 750 | 751 | **Full Changelog**: https://github.com/tuist/virtualOS/compare/0.1.0...0.1.1 752 | 753 | ## What's Changed in 0.1.0 754 | * Add the remote configuration by @pepicrft 755 | * Another attempt by @pepicrft 756 | * Use the right version by @pepicrft 757 | * Use --unreleased by @pepicrft 758 | * Fix by @pepicrft 759 | * Fetch tags by @pepicrft 760 | * Clone the whole history by @pepicrft 761 | * Fix release pipeline by @pepicrft 762 | * Use the GitHub token when using git cliff by @pepicrft 763 | * Fix by @pepicrft 764 | * Fix release pipeline by @pepicrft 765 | * Fix by @pepicrft 766 | * Automate the release by @pepicrft 767 | * Lock file maintenance by @renovate[bot] in [#19](https://github.com/tuist/virtualOS/pull/19) 768 | * Update dependency pnpm to v9.6.0 by @renovate[bot] in [#18](https://github.com/tuist/virtualOS/pull/18) 769 | * Implement bundle workflow by @pepicrft in [#16](https://github.com/tuist/virtualOS/pull/16) 770 | * Set the default keychain by @pepicrft 771 | * Expose the Tuist token to authenticate requests by @pepicrft 772 | * Skip the Xcode selection by @pepicrft 773 | * Implement bundle workflow by @pepicrft 774 | * Create the project by @pepicrft 775 | 776 | 777 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Tuist 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "pins" : [ 3 | { 4 | "identity" : "filesystem", 5 | "kind" : "remoteSourceControl", 6 | "location" : "https://github.com/tuist/FileSystem/", 7 | "state" : { 8 | "revision" : "b2c6c9a68fd7609ca1b7b3e8dd4d2fc76396eac3", 9 | "version" : "0.7.2" 10 | } 11 | }, 12 | { 13 | "identity" : "mockable", 14 | "kind" : "remoteSourceControl", 15 | "location" : "https://github.com/Kolos65/Mockable", 16 | "state" : { 17 | "revision" : "e1b311b01c11415099341eee49769185e965ac4c", 18 | "version" : "0.2.0" 19 | } 20 | }, 21 | { 22 | "identity" : "path", 23 | "kind" : "remoteSourceControl", 24 | "location" : "https://github.com/tuist/path", 25 | "state" : { 26 | "revision" : "7c74ac435e03a927c3a73134c48b61e60221abcb", 27 | "version" : "0.3.8" 28 | } 29 | }, 30 | { 31 | "identity" : "swift-argument-parser", 32 | "kind" : "remoteSourceControl", 33 | "location" : "https://github.com/apple/swift-argument-parser", 34 | "state" : { 35 | "revision" : "41982a3656a71c768319979febd796c6fd111d5c", 36 | "version" : "1.5.0" 37 | } 38 | }, 39 | { 40 | "identity" : "swift-atomics", 41 | "kind" : "remoteSourceControl", 42 | "location" : "https://github.com/apple/swift-atomics.git", 43 | "state" : { 44 | "revision" : "cd142fd2f64be2100422d658e7411e39489da985", 45 | "version" : "1.2.0" 46 | } 47 | }, 48 | { 49 | "identity" : "swift-collections", 50 | "kind" : "remoteSourceControl", 51 | "location" : "https://github.com/apple/swift-collections.git", 52 | "state" : { 53 | "revision" : "671108c96644956dddcd89dd59c203dcdb36cec7", 54 | "version" : "1.1.4" 55 | } 56 | }, 57 | { 58 | "identity" : "swift-log", 59 | "kind" : "remoteSourceControl", 60 | "location" : "https://github.com/apple/swift-log", 61 | "state" : { 62 | "revision" : "96a2f8a0fa41e9e09af4585e2724c4e825410b91", 63 | "version" : "1.6.2" 64 | } 65 | }, 66 | { 67 | "identity" : "swift-log-file", 68 | "kind" : "remoteSourceControl", 69 | "location" : "https://github.com/crspybits/swift-log-file", 70 | "state" : { 71 | "revision" : "aa94b38bf88c7d9cbc87ceafcdffadaffbc2bffa", 72 | "version" : "0.1.0" 73 | } 74 | }, 75 | { 76 | "identity" : "swift-log-oslog", 77 | "kind" : "remoteSourceControl", 78 | "location" : "https://github.com/chrisaljoudi/swift-log-oslog", 79 | "state" : { 80 | "revision" : "176d41d46429e79c806333025b226e0c50a0c602", 81 | "version" : "0.2.2" 82 | } 83 | }, 84 | { 85 | "identity" : "swift-log-testing", 86 | "kind" : "remoteSourceControl", 87 | "location" : "https://github.com/neallester/swift-log-testing", 88 | "state" : { 89 | "revision" : "8459cec10d45da4c566aaec9052fa4a1bef3b861", 90 | "version" : "0.0.1" 91 | } 92 | }, 93 | { 94 | "identity" : "swift-nio", 95 | "kind" : "remoteSourceControl", 96 | "location" : "https://github.com/apple/swift-nio", 97 | "state" : { 98 | "revision" : "ba72f31e11275fc5bf060c966cf6c1f36842a291", 99 | "version" : "2.79.0" 100 | } 101 | }, 102 | { 103 | "identity" : "swift-service-context", 104 | "kind" : "remoteSourceControl", 105 | "location" : "https://github.com/apple/swift-service-context", 106 | "state" : { 107 | "revision" : "0c62c5b4601d6c125050b5c3a97f20cce881d32b", 108 | "version" : "1.1.0" 109 | } 110 | }, 111 | { 112 | "identity" : "swift-syntax", 113 | "kind" : "remoteSourceControl", 114 | "location" : "https://github.com/swiftlang/swift-syntax.git", 115 | "state" : { 116 | "revision" : "0687f71944021d616d34d922343dcef086855920", 117 | "version" : "600.0.1" 118 | } 119 | }, 120 | { 121 | "identity" : "swift-system", 122 | "kind" : "remoteSourceControl", 123 | "location" : "https://github.com/apple/swift-system.git", 124 | "state" : { 125 | "revision" : "c8a44d836fe7913603e246acab7c528c2e780168", 126 | "version" : "1.4.0" 127 | } 128 | }, 129 | { 130 | "identity" : "xcglogger", 131 | "kind" : "remoteSourceControl", 132 | "location" : "https://github.com/DaveWoodCom/XCGLogger.git", 133 | "state" : { 134 | "revision" : "4def3c1c772ca90ad5e7bfc8ac437c3b0b4276cf", 135 | "version" : "7.1.5" 136 | } 137 | }, 138 | { 139 | "identity" : "xctest-dynamic-overlay", 140 | "kind" : "remoteSourceControl", 141 | "location" : "https://github.com/pointfreeco/xctest-dynamic-overlay", 142 | "state" : { 143 | "revision" : "a3f634d1a409c7979cabc0a71b3f26ffa9fc8af1", 144 | "version" : "1.4.3" 145 | } 146 | }, 147 | { 148 | "identity" : "zipfoundation", 149 | "kind" : "remoteSourceControl", 150 | "location" : "https://github.com/weichsel/ZIPFoundation", 151 | "state" : { 152 | "revision" : "02b6abe5f6eef7e3cbd5f247c5cc24e246efcfe0", 153 | "version" : "0.9.19" 154 | } 155 | } 156 | ], 157 | "version" : 2 158 | } 159 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version: 5.8.1 2 | // The swift-tools-version declares the minimum version of Swift required to build this package. 3 | 4 | @preconcurrency import PackageDescription 5 | 6 | #if TUIST 7 | import ProjectDescription 8 | 9 | let packageSettings = PackageSettings(baseSettings: .settings(base: [ 10 | "SWIFT_STRICT_CONCURRENCY": "complete", 11 | "GENERATE_MASTER_OBJECT_FILE": "YES", 12 | ])) 13 | #endif 14 | 15 | let package = Package( 16 | name: "virtualOS", 17 | dependencies: [ 18 | .package(url: "https://github.com/Kolos65/Mockable", .upToNextMajor(from: "0.2.0")), 19 | .package(url: "https://github.com/apple/swift-argument-parser", .upToNextMajor(from: "1.5.0")), 20 | .package(url: "https://github.com/tuist/path", .upToNextMajor(from: "0.3.8")), 21 | .package(url: "https://github.com/tuist/FileSystem/", .upToNextMajor(from: "0.7.2")), 22 | .package(url: "https://github.com/apple/swift-service-context", .upToNextMajor(from: "1.1.0")), 23 | .package(url: "https://github.com/apple/swift-log", .upToNextMajor(from: "1.6.2")), 24 | .package(url: "https://github.com/chrisaljoudi/swift-log-oslog", .upToNextMajor(from: "0.2.2")), 25 | .package(url: "https://github.com/crspybits/swift-log-file", .upToNextMajor(from: "0.1.0")), 26 | .package(url: "https://github.com/neallester/swift-log-testing", .upToNextMajor(from: "0.0.1")), 27 | ] 28 | ) 29 | -------------------------------------------------------------------------------- /Project.swift: -------------------------------------------------------------------------------- 1 | import ProjectDescription 2 | import ProjectDescriptionHelpers 3 | 4 | let project = Project( 5 | name: "virtualOS", 6 | settings: .settings(base: ["SWIFT_STRICT_CONCURRENCY": "complete"]), 7 | targets: Module.allCases.flatMap(\.targets) 8 | ) 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # virtualOS 2 | 3 | virtualOS is an OCI-compliant virtualization tool for macOS environments. 4 | It builds on Apple's powerful [Virtualization](https://developer.apple.com/documentation/virtualization) framework. 5 | 6 | ## Motivation 7 | 8 | With the [Virtualization](https://developer.apple.com/documentation/virtualization) framework, Apple made virtualization a commodity upon which organizations and businesses could develop their virtualization solutions. However, the framework is a very low-level API, and it requires a lot of work to build a virtualization solution on top of it. VirtualOS aims to provide a high-level API that resembles Docker's API and makes the solution compliant with the [OCI specification](https://github.com/opencontainers/image-spec). We developed it for some of our business products, and we are gifting this piece to the community. 9 | 10 | ## Usage 11 | 12 | ### Installation 13 | 14 | You can install virtualOS using [Mise](https://mise.jdx.dev/): 15 | 16 | ```bash 17 | mise install virtualos 18 | mise use -g virtualos@latest # To activate it globally 19 | ``` 20 | 21 | Alternatively, you can [download the binary from the releases page](https://github.com/tuist/virtualOS/releases). 22 | 23 | ## Development 24 | 25 | ### Using Tuist 26 | 27 | 1. Clone the repository: `git clone https://github.com/tuist/virtualOS.git` 28 | 2. Install system dependencies: `mise install` 29 | 3. Install project dependencies: `mise run install` 30 | 2. Generate the project: `tuist generate` 31 | 32 | ## Documentation 33 | 34 | The documentation is available at [https://virtualos.tuist.dev](https://virtualos.tuist.dev). 35 | -------------------------------------------------------------------------------- /Sources/VirtualOSEnvironment/Environment.swift: -------------------------------------------------------------------------------- 1 | import FileSystem 2 | import Foundation 3 | import Path 4 | import VirtualOSEnvironmentInterface 5 | 6 | public enum EnvironmentError: Error, Equatable, CustomStringConvertible { 7 | case couldntObtainCacheDirectory 8 | case couldntObtainDataDirectory 9 | case couldntObtainConfigDirectory 10 | 11 | public var description: String { 12 | switch self { 13 | case .couldntObtainCacheDirectory: 14 | "We couldn't obtain the cache directory. Make sure either $XDG_CACHE_HOME or $HOME are present in the environment." 15 | case .couldntObtainDataDirectory: 16 | "We couldn't obtain the data directory. Make sure either $XDG_DATA_HOME or $HOME are present in the environment." 17 | case .couldntObtainConfigDirectory: 18 | "We couldn't obtain the config directory. Make sure either $XDG_CONFIG_HOME or $HOME are present in the environment." 19 | } 20 | } 21 | } 22 | 23 | /// Environment represents the environment variable. 24 | public struct Environment: Environmenting { 25 | /// Environment variables of the environment in which virtualOS is running. 26 | public var variables: [String: String] 27 | 28 | /// The current working directory. 29 | public var currentWorkingDirectory: AbsolutePath 30 | 31 | /// The cache directory. 32 | public var cacheDirectory: AbsolutePath 33 | 34 | /// The data directory. 35 | public var dataDirectory: AbsolutePath 36 | 37 | /// The config directory. 38 | public var configDirectory: AbsolutePath 39 | 40 | /// It returns the current environment. 41 | /// - Returns: It should not be used directly, but dependency-injected down from the root of the program. 42 | public static func current() async throws -> Environment { 43 | let variables = ProcessInfo.processInfo.environment 44 | let fileSystem = FileSystem() 45 | let homeDirectory = try variables["HOME"].map { try AbsolutePath(validating: $0) } 46 | 47 | let cacheDirectory = if let xdgCacheHomeDirectory = try variables["XDG_CACHE_HOME"] 48 | .map({ try AbsolutePath(validating: $0) }) ?? homeDirectory?.appending(components: [".cache"]) 49 | { 50 | xdgCacheHomeDirectory.appending(component: "virtualOS") 51 | } else { 52 | throw EnvironmentError.couldntObtainCacheDirectory 53 | } 54 | 55 | let dataDirectory = if let xdgDataHomeDirectory = try variables["XDG_DATA_HOME"] 56 | .map({ try AbsolutePath(validating: $0) }) ?? homeDirectory? 57 | .appending(components: [".local", "share"]) 58 | { 59 | xdgDataHomeDirectory.appending(component: "virtualOS") 60 | } else { 61 | throw EnvironmentError.couldntObtainDataDirectory 62 | } 63 | let configDirectory = if let xdgConfigHomeDirectory = try variables["XDG_CONFIG_HOME"] 64 | .map({ try AbsolutePath(validating: $0) }) ?? homeDirectory?.appending(components: [".config"]) 65 | { 66 | xdgConfigHomeDirectory.appending(component: "virtualOS") 67 | } else { 68 | throw EnvironmentError.couldntObtainConfigDirectory 69 | } 70 | 71 | return Environment( 72 | variables: variables, 73 | currentWorkingDirectory: try await fileSystem.currentWorkingDirectory(), 74 | cacheDirectory: cacheDirectory, 75 | dataDirectory: dataDirectory, 76 | configDirectory: configDirectory 77 | ) 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /Sources/VirtualOSEnvironmentInterface/Environmenting.swift: -------------------------------------------------------------------------------- 1 | import Path 2 | 3 | public protocol Environmenting: Sendable { 4 | /// The environment variables. 5 | var variables: [String: String] { get } 6 | 7 | /// The current working directory. 8 | var currentWorkingDirectory: AbsolutePath { get } 9 | 10 | /// The directory where virtualOS should store cache files. 11 | var cacheDirectory: AbsolutePath { get } 12 | 13 | /// The directory where virtualOS should store data files. 14 | var dataDirectory: AbsolutePath { get } 15 | 16 | /// The directory where virtualOS should store configuration files. 17 | var configDirectory: AbsolutePath { get } 18 | } 19 | -------------------------------------------------------------------------------- /Sources/VirtualOSEnvironmentInterface/ServiceContext+Environment.swift: -------------------------------------------------------------------------------- 1 | import ServiceContextModule 2 | 3 | enum EnvironmentKey: Sendable, ServiceContextKey { 4 | typealias Value = Environmenting 5 | } 6 | 7 | extension ServiceContext { 8 | public var environment: Environmenting? { 9 | get { 10 | self[EnvironmentKey.self] 11 | } 12 | set { 13 | self[EnvironmentKey.self] = newValue 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Sources/VirtualOSLogging/Logger.swift: -------------------------------------------------------------------------------- 1 | import FileLogging 2 | import Foundation 3 | import Logging 4 | import LoggingOSLog 5 | import Path 6 | import ServiceContextModule 7 | 8 | enum LoggerKey: ServiceContextKey { 9 | typealias Value = Logger 10 | } 11 | 12 | extension ServiceContext { 13 | public var logger: Logger? { 14 | get { 15 | self[LoggerKey.self] 16 | } 17 | set { 18 | self[LoggerKey.self] = newValue 19 | } 20 | } 21 | } 22 | 23 | extension Logger { 24 | /// Creates an instance of the default logger. 25 | /// - Parameter logFilePath: The file where file logs should be stored. 26 | /// - Returns: An instance of `Logger`. 27 | public static func makeDefaultLogger(logFilePath: AbsolutePath) -> Logger { 28 | Logger(label: "dev.tuist.virtualos") { label in 29 | MultiplexLogHandler([ 30 | // swiftlint:disable:next force_try 31 | try! FileLogHandler(label: label, localFile: URL(fileURLWithPath: logFilePath.pathString)), 32 | LoggingOSLog(label: label), 33 | ]) 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Sources/VirtualOSNetwork/VirtualOSNetwork.swift: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Sources/VirtualOSNetworkInterface/NetworkInterface.swift: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Sources/VirtualOSOCI/VirtualOSOCI.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import VirtualOSOCIInterface 3 | -------------------------------------------------------------------------------- /Sources/VirtualOSOCIInterface/OCIContentDescriptor.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | /// Content descriptors, or simply descriptors, declare references between the components 4 | /// in the Merkle Directed Acyclic Graph (DAG). 5 | public struct OCIContentDescriptor: Codable { 6 | /// Describes the media type of the referenced content. 7 | /// The value must complain with [RFC6838](https://tools.ietf.org/html/rfc6838) 8 | public var mediaType: String 9 | 10 | /// It represents the digest of the targeted content. 11 | /// Any retrieved content from untrusted sources should be verified against this digest. 12 | public var digest: String 13 | 14 | /// Specifies the size in bytes of the raw content. 15 | /// The client should use this to check the size before doing further validations like digest validation. 16 | public var size: Int64 17 | 18 | /// Specifies a list of URLs from where the referred content might be downloaded. 19 | /// URLs must conform to [RFC3986](https://tools.ietf.org/html/rfc3986) and should use 20 | /// either the `http` or the `https` schemes. 21 | public var urls: [URL]? 22 | 23 | /// Contains arbitrary metadata. 24 | public var annotations: [String: String]? 25 | 26 | /// Contains an embedded representation of the referenced content. 27 | /// The value must conform to the [Base 64](https://tools.ietf.org/html/rfc4648#section-4) encoding. 28 | public var data: String? 29 | 30 | /// Contains the type of an artifact when the descriptor points to an artifact. 31 | /// This is the value of the config descriptor `mediaType` when the descriptor references an image manifest. 32 | /// The value must conform to [RFC6838](https://tools.ietf.org/html/rfc6838) 33 | public var artifactType: String? 34 | } 35 | -------------------------------------------------------------------------------- /Sources/VirtualOSOCIInterface/OCIImage.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | /// Defines the [OCI Image Schema](https://github.com/opencontainers/image-spec/blob/main/manifest.md) in Swift. 4 | public struct OCIImage: Codable { 5 | /// Specifies the manifest schema version. 6 | /// It must be 2 to ensure backward compatible with older Docker versions. 7 | public var schemaVersion: Int 8 | 9 | /// It contains the media type `application/vnd.oci.image.manifest.v1+json` 10 | public var mediaType: String 11 | 12 | /// Contains the artifact type when the manifest is used as an artifact. 13 | public var artifactType: String? 14 | 15 | /// References a configuration object for a container, by digest. 16 | /// Some important notes: 17 | /// - The referenced content should not be parsed if this media type is unknown and instead considered the referenced 18 | /// content as arbitrary binary data (e.g., `application/octet-stream`). The implementations should support at least 19 | /// `application/vnd.oci.image.config.v1+json`. 20 | /// 21 | public var config: OCIContentDescriptor 22 | 23 | /// It contains the image layers. For portability, layers should contain at least one item. 24 | /// - When `config.mediaType` is `application/vnd.oci.image.config.v1+json`: 25 | /// - The array must have the base layer at index 0. 26 | /// - Subsequent layers must follow in stack order. 27 | /// - The final filesystem layout must match the result of applying the layers to an empty directory. 28 | /// - The ownership, mode, and other attributes of the initial empty directory are unspecified. 29 | /// - The `mediaType` of layers must support at least one of the following types. 30 | /// - `application/vnd.oci.image.layer.v1.tar` 31 | /// - `application/vnd.oci.image.layer.v1.tar+gzip` 32 | /// - `application/vnd.oci.image.layer.nondistributable.v1.tar` 33 | /// - `application/vnd.oci.image.layer.nondistributable.v1.tar+gzip` 34 | public var layers: [OCIContentDescriptor] 35 | 36 | /// Specifies a descriptor of another manifest. 37 | /// It defines a weak association to a separate Merkle Directed Acyclic Graph (DAG), 38 | /// and is used by the referrers API to include this manifest in the list of responses for the subject digest. 39 | public var subject: OCIContentDescriptor? 40 | 41 | /// Contains arbitrary metadata for the image manifest. 42 | public var annotations: [String: String]? 43 | } 44 | -------------------------------------------------------------------------------- /Sources/VirtualOSPull/PullCommand.swift: -------------------------------------------------------------------------------- 1 | import ArgumentParser 2 | import Logging 3 | import ServiceContextModule 4 | import VirtualOSLogging 5 | 6 | /** 7 | This command is responsible from pulling images from remote registries. 8 | - **Docker reference:** https://docs.docker.com/reference/cli/docker/image/pull/ 9 | */ 10 | public struct PullCommand: AsyncParsableCommand { 11 | public static let configuration = CommandConfiguration( 12 | commandName: "pull", 13 | abstract: "Pulls an image from the registry" 14 | ) 15 | 16 | @Flag(help: "Suppress verbose output.") 17 | var insecure: Bool = false 18 | 19 | @Argument(help: "The identifier of the image to pull") 20 | var image: String 21 | 22 | public init() {} 23 | 24 | public func run() async throws { 25 | ServiceContext.current?.logger?.info("Pulling images") 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Sources/VirtualOSPull/PullService.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | protocol PullServicing {} 4 | -------------------------------------------------------------------------------- /Sources/VirtualOSPullInterface/VirtualOSPullInterface.swift: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Sources/VirtualOSPushInterface/VirtualOSPushInterface.swift: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Sources/VirtualOSRun/RunCommand.swift: -------------------------------------------------------------------------------- 1 | import ArgumentParser 2 | 3 | /** 4 | This command is responsible from pulling images from remote registries. 5 | - **Docker reference:** https://docs.docker.com/reference/cli/docker/image/run/ 6 | */ 7 | public struct RunCommand: AsyncParsableCommand { 8 | public static var configuration: CommandConfiguration = .init( 9 | commandName: "run", 10 | abstract: "Runs an image" 11 | ) 12 | 13 | public init() {} 14 | 15 | @Argument(help: "The phrase to repeat.") 16 | public var image: String 17 | 18 | public func run() async throws {} 19 | } 20 | -------------------------------------------------------------------------------- /Sources/VirtualOSRunInterface/VirtualOSRunInterface.swift: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Sources/VirtualOSStorage/Storage.swift: -------------------------------------------------------------------------------- 1 | import Path 2 | import VirtualOSStorageInterface 3 | 4 | struct Storage: Storaging { 5 | func images(cacheDirectory _: AbsolutePath) async throws -> [VirtualOSStorageInterface.Image] { 6 | [] 7 | } 8 | 9 | private func imagesDirectory(cacheDirectory: AbsolutePath) -> AbsolutePath { 10 | cacheDirectory.appending(component: "images") 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Sources/VirtualOSStorageInterface/Image.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public struct Image {} 4 | -------------------------------------------------------------------------------- /Sources/VirtualOSStorageInterface/Storaging.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import Path 3 | 4 | public protocol Storaging { 5 | func images(cacheDirectory: AbsolutePath) async throws -> [Image] 6 | } 7 | -------------------------------------------------------------------------------- /Sources/virtualos/VirtualOS.swift: -------------------------------------------------------------------------------- 1 | import ArgumentParser 2 | import FileSystem 3 | import Foundation 4 | import Logging 5 | import Path 6 | import ServiceContextModule 7 | import VirtualOSEnvironment 8 | import VirtualOSEnvironmentInterface 9 | import VirtualOSLogging 10 | 11 | @main 12 | private enum VirtualOS { 13 | static func main() async throws { 14 | let fileSystem = FileSystem() 15 | let environment = try await Environment.current() 16 | let logFilePath = environment.cacheDirectory.appending(components: ["logs", "\(UUID().uuidString).log"]) 17 | if try await !fileSystem.exists(logFilePath.parentDirectory) { 18 | try await fileSystem.makeDirectory(at: logFilePath.parentDirectory) 19 | } 20 | let logger = Logger.makeDefaultLogger(logFilePath: logFilePath) 21 | var serviceContext = ServiceContext.topLevel 22 | serviceContext.logger = logger 23 | serviceContext.environment = environment 24 | 25 | await ServiceContext.$current.withValue(serviceContext) { 26 | defer { 27 | showCompletion(logFilePath: logFilePath) 28 | } 29 | 30 | do { 31 | var command = try VirtualOSCommand.parseAsRoot() 32 | if var asyncCommand = command as? AsyncParsableCommand { 33 | try await asyncCommand.run() 34 | } else { 35 | try command.run() 36 | } 37 | } catch { 38 | showCompletion(logFilePath: logFilePath) 39 | VirtualOSCommand.exit(withError: error) 40 | } 41 | } 42 | } 43 | 44 | private static func showCompletion(logFilePath: AbsolutePath) { 45 | if !CommandLine.arguments.contains("--help"), !CommandLine.arguments.contains("-h") { 46 | print("Logs available at: \(logFilePath.pathString)") 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Sources/virtualos/VirtualOSCommand.swift: -------------------------------------------------------------------------------- 1 | import ArgumentParser 2 | import Foundation 3 | import VirtualOSPull 4 | import VirtualOSRun 5 | 6 | struct VirtualOSCommand: AsyncParsableCommand { 7 | static let configuration = CommandConfiguration( 8 | commandName: "virtualos", 9 | abstract: "Virtualized macOS environments", 10 | subcommands: [PullCommand.self, RunCommand.self] 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /Tests/VirtualOSEnvironmentTests/VirtualOSEnvironmentTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tuist/virtualOS/7d0919db5d510bceb7b808289ca9aab432cab7d6/Tests/VirtualOSEnvironmentTests/VirtualOSEnvironmentTests.swift -------------------------------------------------------------------------------- /Tests/VirtualOSLoggingTests/LoggerTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tuist/virtualOS/7d0919db5d510bceb7b808289ca9aab432cab7d6/Tests/VirtualOSLoggingTests/LoggerTests.swift -------------------------------------------------------------------------------- /Tests/VirtualOSNetworkTests/VirtualOSNetworkTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tuist/virtualOS/7d0919db5d510bceb7b808289ca9aab432cab7d6/Tests/VirtualOSNetworkTests/VirtualOSNetworkTests.swift -------------------------------------------------------------------------------- /Tests/VirtualOSOCITests/VirtualOSOCITests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tuist/virtualOS/7d0919db5d510bceb7b808289ca9aab432cab7d6/Tests/VirtualOSOCITests/VirtualOSOCITests.swift -------------------------------------------------------------------------------- /Tests/VirtualOSPullTests/VirtualOSPullTests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | @testable import VirtualOSPull 3 | 4 | final class VirtualOSPullTests: XCTestCase { 5 | func testExample() throws { 6 | // XCTest Documentation 7 | // https://developer.apple.com/documentation/xctest 8 | 9 | // Defining Test Cases and Test Methods 10 | // https://developer.apple.com/documentation/xctest/defining_test_cases_and_test_methods 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Tests/VirtualOSRunTests/VirtualOSRunTests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | @testable import VirtualOSRun 3 | 4 | final class VirtualOSRunTests: XCTestCase { 5 | func testExample() throws { 6 | // XCTest Documentation 7 | // https://developer.apple.com/documentation/xctest 8 | 9 | // Defining Test Cases and Test Methods 10 | // https://developer.apple.com/documentation/xctest/defining_test_cases_and_test_methods 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Tests/VirtualOSStorageTests/VirtualOSStorageTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tuist/virtualOS/7d0919db5d510bceb7b808289ca9aab432cab7d6/Tests/VirtualOSStorageTests/VirtualOSStorageTests.swift -------------------------------------------------------------------------------- /Tuist.swift: -------------------------------------------------------------------------------- 1 | import ProjectDescription 2 | 3 | let tuist = Tuist(fullHandle: "tuist/virtualos") 4 | -------------------------------------------------------------------------------- /Tuist/ProjectDescriptionHelpers/Module.swift: -------------------------------------------------------------------------------- 1 | import ProjectDescription 2 | 3 | public enum Module: CaseIterable { 4 | case virtualos 5 | case pull 6 | case run 7 | case network 8 | case oci 9 | case storage 10 | case environment 11 | case logging 12 | 13 | public var targetName: String { 14 | switch self { 15 | case .virtualos: "virtualos" 16 | case .pull: "VirtualOSPull" 17 | case .run: "VirtualOSRun" 18 | case .network: "VirtualOSNetwork" 19 | case .oci: "VirtualOSOCI" 20 | case .storage: "VirtualOSStorage" 21 | case .environment: "VirtualOSEnvironment" 22 | case .logging: "VirtualOSLogging" 23 | } 24 | } 25 | 26 | public var product: Product { 27 | switch self { 28 | case .virtualos: 29 | return .commandLineTool 30 | case .pull, .run, .network, .oci, .storage, .environment, .logging: 31 | return .staticLibrary 32 | } 33 | } 34 | 35 | public var destination: Destination { 36 | .mac 37 | } 38 | 39 | public var interfaceTargetName: String? { 40 | switch self { 41 | case .virtualos, .logging: 42 | return nil 43 | case .pull, .run, .network, .oci, .storage, .environment: 44 | return "\(targetName)Interface" 45 | } 46 | } 47 | 48 | public var dependencies: [TargetDependency] { 49 | switch self { 50 | case .virtualos: return [ 51 | .target(name: Module.pull.targetName), 52 | .target(name: Module.run.targetName), 53 | .target(name: Module.logging.targetName), 54 | .target(name: Module.environment.targetName), 55 | .target(name: Module.environment.interfaceTargetName!), 56 | .external(name: "ServiceContextModule"), 57 | .external(name: "ArgumentParser"), 58 | .external(name: "Logging"), 59 | .external(name: "Path"), 60 | .external(name: "FileSystem"), 61 | ] 62 | case .pull: return [ 63 | .target(name: Module.logging.targetName), 64 | .external(name: "ArgumentParser"), 65 | .external(name: "Path"), 66 | .external(name: "ServiceContextModule"), 67 | .external(name: "Logging"), 68 | ] 69 | case .run: return [ 70 | .external(name: "ArgumentParser"), 71 | .external(name: "Path"), 72 | ] 73 | case .network, .oci, .storage: 74 | return [ 75 | .external(name: "Path"), 76 | ] 77 | case .environment: 78 | return [ 79 | .external(name: "Path"), 80 | .external(name: "ServiceContextModule"), 81 | .external(name: "FileSystem"), 82 | ] 83 | case .logging: 84 | return [ 85 | .external(name: "ServiceContextModule"), 86 | .external(name: "Logging"), 87 | .external(name: "LoggingOSLog"), 88 | .external(name: "FileLogging"), 89 | .external(name: "Path"), 90 | ] 91 | } 92 | } 93 | 94 | public var bundleId: String { 95 | "io.tuist.\(targetName)" 96 | } 97 | 98 | public func sources(targetName: String) -> SourceFilesList { 99 | [ 100 | "Sources/\(targetName)/**/*.swift", 101 | ] 102 | } 103 | 104 | public func testSources(targetName: String) -> SourceFilesList { 105 | [ 106 | "Tests/\(targetName)Tests/**/*.swift", 107 | ] 108 | } 109 | 110 | var testsTargetName: String? { 111 | switch self { 112 | case .virtualos: 113 | return nil 114 | case .pull, .run, .oci, .storage, .network, .environment, .logging: 115 | return "\(targetName)Tests" 116 | } 117 | } 118 | 119 | public var targets: [Target] { 120 | var targets: [Target] = [] 121 | 122 | if let interfaceTargetName { 123 | targets.append(.target( 124 | name: interfaceTargetName, 125 | destinations: Set(arrayLiteral: destination), 126 | product: product, 127 | bundleId: "\(bundleId).interface", 128 | deploymentTargets: .macOS("13.0.0"), 129 | sources: sources(targetName: interfaceTargetName), 130 | dependencies: dependencies + [.external(name: "Mockable")], 131 | settings: .settings(configurations: [ 132 | .debug(name: .debug, settings: [:]), 133 | .release(name: .release, settings: [:]), 134 | ]) 135 | )) 136 | } 137 | 138 | targets.append(.target( 139 | name: targetName, 140 | destinations: Set(arrayLiteral: destination), 141 | product: product, 142 | bundleId: bundleId, 143 | deploymentTargets: .macOS("13.0.0"), 144 | sources: sources(targetName: targetName), 145 | dependencies: dependencies + [.external(name: "Mockable")] + 146 | (interfaceTargetName != nil ? [.target(name: interfaceTargetName!)] : []), 147 | settings: .settings(configurations: [ 148 | // This is important to exclude the mock implementations from release builds 149 | .debug(name: .debug, settings: ["SWIFT_ACTIVE_COMPILATION_CONDITIONS": "$(inherited) MOCKING"]), 150 | .release(name: .release, settings: [:]), 151 | ]) 152 | )) 153 | 154 | if let testsTargetName { 155 | targets.append(.target( 156 | name: testsTargetName, 157 | destinations: Set(arrayLiteral: destination), 158 | product: .unitTests, 159 | bundleId: bundleId, 160 | deploymentTargets: .macOS("13.0.0"), 161 | sources: testSources(targetName: targetName), 162 | dependencies: dependencies + [.xctest, .target(name: targetName)] 163 | )) 164 | } 165 | return targets 166 | } 167 | } 168 | -------------------------------------------------------------------------------- /assets/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /certificates/certificate.p12.enc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tuist/virtualOS/7d0919db5d510bceb7b808289ca9aab432cab7d6/certificates/certificate.p12.enc -------------------------------------------------------------------------------- /cliff.toml: -------------------------------------------------------------------------------- 1 | # git-cliff ~ configuration file 2 | # https://git-cliff.org/docs/configuration 3 | 4 | [bump] 5 | initial_tag = "0.1.0" 6 | 7 | [remote.github] 8 | owner = "tuist" 9 | repo = "virtualOS" 10 | 11 | [changelog] 12 | # template for the changelog body 13 | # https://keats.github.io/tera/docs/#introduction 14 | body = """ 15 | ## What's Changed 16 | 17 | {%- if version %} in {{ version }}{%- endif -%} 18 | {% for commit in commits %} 19 | {% if commit.github.pr_title -%} 20 | {%- set commit_message = commit.github.pr_title -%} 21 | {%- else -%} 22 | {%- set commit_message = commit.message -%} 23 | {%- endif -%} 24 | * {{ commit_message | split(pat="\n") | first | trim }}\ 25 | {% if commit.github.username %} by @{{ commit.github.username }}{%- endif -%} 26 | {% if commit.github.pr_number %} in \ 27 | [#{{ commit.github.pr_number }}]({{ self::remote_url() }}/pull/{{ commit.github.pr_number }}) \ 28 | {%- endif %} 29 | {%- endfor -%} 30 | 31 | {%- if github -%} 32 | {% if github.contributors | filter(attribute="is_first_time", value=true) | length != 0 %} 33 | {% raw %}\n{% endraw -%} 34 | ## New Contributors 35 | {%- endif %}\ 36 | {% for contributor in github.contributors | filter(attribute="is_first_time", value=true) %} 37 | * @{{ contributor.username }} made their first contribution 38 | {%- if contributor.pr_number %} in \ 39 | [#{{ contributor.pr_number }}]({{ self::remote_url() }}/pull/{{ contributor.pr_number }}) \ 40 | {%- endif %} 41 | {%- endfor -%} 42 | {%- endif -%} 43 | 44 | {% if version %} 45 | {% if previous.version %} 46 | **Full Changelog**: {{ self::remote_url() }}/compare/{{ previous.version }}...{{ version }} 47 | {% endif %} 48 | {% else -%} 49 | {% raw %}\n{% endraw %} 50 | {% endif %} 51 | 52 | {%- macro remote_url() -%} 53 | https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }} 54 | {%- endmacro -%} 55 | """ 56 | # remove the leading and trailing whitespace from the template 57 | trim = true 58 | # changelog footer 59 | footer = """ 60 | 61 | """ 62 | # postprocessors 63 | postprocessors = [] 64 | 65 | [git] 66 | # parse the commits based on https://www.conventionalcommits.org 67 | conventional_commits = false 68 | # filter out the commits that are not conventional 69 | filter_unconventional = true 70 | # process each line of a commit as an individual commit 71 | split_commits = false 72 | # regex for preprocessing the commit messages 73 | commit_preprocessors = [ 74 | # remove issue numbers from commits 75 | { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "" }, 76 | ] 77 | # protect breaking changes from being skipped due to matching a skipping commit_parser 78 | protect_breaking_commits = false 79 | # filter out the commits that are not matched by commit parsers 80 | filter_commits = true 81 | # regex for matching git tags 82 | tag_pattern = "[0-9].*" 83 | # regex for skipping tags 84 | skip_tags = "beta|alpha" 85 | # regex for ignoring tags 86 | ignore_tags = "rc" 87 | # sort the tags topologically 88 | topo_order = false 89 | # sort the commits inside sections by oldest/newest order 90 | sort_commits = "newest" 91 | -------------------------------------------------------------------------------- /docs/.vitepress/config.mjs: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vitepress"; 2 | import { atom01Icon } from "./icons.mjs"; 3 | 4 | // https://vitepress.dev/reference/site-config 5 | export default defineConfig({ 6 | title: "virtualOS", 7 | titleTemplate: ":title | virtualOS", 8 | srcDir: "content", 9 | lastUpdated: true, 10 | description: "A virtualization CLI for macOS environments", 11 | cleanUrls: true, 12 | sitemap: { 13 | hostname: "https://virtualos.tuist.dev", 14 | }, 15 | head: [ 16 | [ 17 | "meta", 18 | { property: "og:url", content: "https://virtualos.tuist.dev" }, 19 | "", 20 | ], 21 | ["meta", { property: "og:type", content: "website" }, ""], 22 | [ 23 | "meta", 24 | { property: "og:image", content: "https://virtualos.tuist.dev/og.jpeg" }, 25 | "", 26 | ], 27 | ["meta", { name: "twitter:card", content: "summary" }, ""], 28 | [ 29 | "meta", 30 | { property: "twitter:domain", content: "virtualos.tuist.dev" }, 31 | "", 32 | ], 33 | [ 34 | "meta", 35 | { property: "twitter:url", content: "https://virtualos.tuist.dev" }, 36 | "", 37 | ], 38 | [ 39 | "meta", 40 | { 41 | name: "twitter:image", 42 | content: "https://virtualos.tuist.dev/og.jpeg", 43 | }, 44 | "", 45 | ], 46 | ], 47 | themeConfig: { 48 | logo: "/logo.png", 49 | editLink: { 50 | pattern: "https://github.com/tuist/virtualos/edit/main/docs/:path", 51 | }, 52 | nav: [ 53 | { text: "Tuist", link: "https://tuist.dev" }, 54 | { text: "Community", link: "https://community.tuist.dev" }, 55 | { text: "Slack", link: "https://slack.tuist.dev" }, 56 | ], 57 | search: { 58 | provider: "local", 59 | }, 60 | sidebar: [ 61 | { 62 | text: `
virtualOS ${atom01Icon()}
`, 63 | link: "/", 64 | items: [{ text: "Markdown Examples", link: "/markdown-examples" }], 65 | }, 66 | ], 67 | editLink: { 68 | pattern: 69 | "https://github.com/tuist/virtualos/edit/main/docs/content/:path", 70 | }, 71 | socialLinks: [ 72 | { icon: "github", link: "https://github.com/tuist/tuist" }, 73 | { icon: "bluesky", link: "https://bsky.app/profile/tuist.dev" }, 74 | { icon: "mastodon", link: "https://fosstodon.org/@tuist" }, 75 | { 76 | icon: "slack", 77 | link: "https://join.slack.com/t/tuistapp/shared_invite/zt-1y667mjbk-s2LTRX1YByb9EIITjdLcLw", 78 | }, 79 | ], 80 | footer: { 81 | message: "Released under the MIT License.", 82 | copyright: "Copyright © 2024-present Tuist GmbH", 83 | }, 84 | }, 85 | }); 86 | -------------------------------------------------------------------------------- /docs/.vitepress/icons.mjs: -------------------------------------------------------------------------------- 1 | export function atom01Icon(size = 15) { 2 | return ` 3 | 4 | 5 | `; 6 | } 7 | -------------------------------------------------------------------------------- /docs/content/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "virtualOS - Virtualized macOS environments" 3 | titleTemplate: :title 4 | --- 5 | 6 | # virtualOS 7 | 8 | In November 2020, Apple introduced the [Virtualization framework](https://developer.apple.com/documentation/virtualization), which provides a high-level API for creating and managing virtual machines. 9 | This technology brought us closer to having a [Docker](https://www.docker.com/)-like experience for macOS, where we can run macOS environments in isolation, but lacked a user-friendly CLI-based interface to manage and run these virtual machines. 10 | 11 | virtualOS is a CLI tool that aims to provide a user-friendly interface to manage and run virtual machines on macOS using the Virtualization framework. It aligns with the Docker CLI interface for familiarity, and embraces the OCI image format to define the virtual machine images. 12 | 13 | ## Installation 14 | 15 | You can install virtualOS using [Mise](https://mise.jdx.dev/): 16 | 17 | ```bash 18 | mise install virtualos 19 | mise use -g virtualos@latest # To activate it globally 20 | ``` 21 | 22 | Alternatively, you can [download the binary from the releases page](https://github.com/tuist/virtualOS/releases). 23 | 24 | > [!WARNING] WORK IN PROGRESS 25 | > virtualOS is a work in progress. We are actively working on it, and we are looking for contributors to help us build it. If you are interested, you can grab one of the issues labeled as `good first issue` and start contributing. 26 | -------------------------------------------------------------------------------- /docs/content/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tuist/virtualOS/7d0919db5d510bceb7b808289ca9aab432cab7d6/docs/content/public/favicon.ico -------------------------------------------------------------------------------- /docs/content/public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tuist/virtualOS/7d0919db5d510bceb7b808289ca9aab432cab7d6/docs/content/public/logo.png -------------------------------------------------------------------------------- /docs/content/public/og.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tuist/virtualOS/7d0919db5d510bceb7b808289ca9aab432cab7d6/docs/content/public/og.jpeg -------------------------------------------------------------------------------- /docs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "devDependencies": { 3 | "vitepress": "^1.5.0", 4 | "wrangler": "^3.28.2" 5 | }, 6 | "scripts": { 7 | "dev": "vitepress dev", 8 | "build": "vitepress build", 9 | "preview": "vitepress preview", 10 | "deploy": "vitepress build && wrangler pages deploy .vitepress/dist --project-name tuist-virtualos --branch main" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /docs/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | vitepress: 12 | specifier: ^1.5.0 13 | version: 1.6.3(@algolia/client-search@5.20.0)(postcss@8.5.1)(search-insights@2.17.3) 14 | wrangler: 15 | specifier: ^3.28.2 16 | version: 3.105.1 17 | 18 | packages: 19 | 20 | '@algolia/autocomplete-core@1.17.7': 21 | resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==} 22 | 23 | '@algolia/autocomplete-plugin-algolia-insights@1.17.7': 24 | resolution: {integrity: sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==} 25 | peerDependencies: 26 | search-insights: '>= 1 < 3' 27 | 28 | '@algolia/autocomplete-preset-algolia@1.17.7': 29 | resolution: {integrity: sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==} 30 | peerDependencies: 31 | '@algolia/client-search': '>= 4.9.1 < 6' 32 | algoliasearch: '>= 4.9.1 < 6' 33 | 34 | '@algolia/autocomplete-shared@1.17.7': 35 | resolution: {integrity: sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==} 36 | peerDependencies: 37 | '@algolia/client-search': '>= 4.9.1 < 6' 38 | algoliasearch: '>= 4.9.1 < 6' 39 | 40 | '@algolia/client-abtesting@5.20.0': 41 | resolution: {integrity: sha512-YaEoNc1Xf2Yk6oCfXXkZ4+dIPLulCx8Ivqj0OsdkHWnsI3aOJChY5qsfyHhDBNSOhqn2ilgHWxSfyZrjxBcAww==} 42 | engines: {node: '>= 14.0.0'} 43 | 44 | '@algolia/client-analytics@5.20.0': 45 | resolution: {integrity: sha512-CIT9ni0+5sYwqehw+t5cesjho3ugKQjPVy/iPiJvtJX4g8Cdb6je6SPt2uX72cf2ISiXCAX9U3cY0nN0efnRDw==} 46 | engines: {node: '>= 14.0.0'} 47 | 48 | '@algolia/client-common@5.20.0': 49 | resolution: {integrity: sha512-iSTFT3IU8KNpbAHcBUJw2HUrPnMXeXLyGajmCL7gIzWOsYM4GabZDHXOFx93WGiXMti1dymz8k8R+bfHv1YZmA==} 50 | engines: {node: '>= 14.0.0'} 51 | 52 | '@algolia/client-insights@5.20.0': 53 | resolution: {integrity: sha512-w9RIojD45z1csvW1vZmAko82fqE/Dm+Ovsy2ElTsjFDB0HMAiLh2FO86hMHbEXDPz6GhHKgGNmBRiRP8dDPgJg==} 54 | engines: {node: '>= 14.0.0'} 55 | 56 | '@algolia/client-personalization@5.20.0': 57 | resolution: {integrity: sha512-p/hftHhrbiHaEcxubYOzqVV4gUqYWLpTwK+nl2xN3eTrSW9SNuFlAvUBFqPXSVBqc6J5XL9dNKn3y8OA1KElSQ==} 58 | engines: {node: '>= 14.0.0'} 59 | 60 | '@algolia/client-query-suggestions@5.20.0': 61 | resolution: {integrity: sha512-m4aAuis5vZi7P4gTfiEs6YPrk/9hNTESj3gEmGFgfJw3hO2ubdS4jSId1URd6dGdt0ax2QuapXufcrN58hPUcw==} 62 | engines: {node: '>= 14.0.0'} 63 | 64 | '@algolia/client-search@5.20.0': 65 | resolution: {integrity: sha512-KL1zWTzrlN4MSiaK1ea560iCA/UewMbS4ZsLQRPoDTWyrbDKVbztkPwwv764LAqgXk0fvkNZvJ3IelcK7DqhjQ==} 66 | engines: {node: '>= 14.0.0'} 67 | 68 | '@algolia/ingestion@1.20.0': 69 | resolution: {integrity: sha512-shj2lTdzl9un4XJblrgqg54DoK6JeKFO8K8qInMu4XhE2JuB8De6PUuXAQwiRigZupbI0xq8aM0LKdc9+qiLQA==} 70 | engines: {node: '>= 14.0.0'} 71 | 72 | '@algolia/monitoring@1.20.0': 73 | resolution: {integrity: sha512-aF9blPwOhKtWvkjyyXh9P5peqmhCA1XxLBRgItT+K6pbT0q4hBDQrCid+pQZJYy4HFUKjB/NDDwyzFhj/rwKhw==} 74 | engines: {node: '>= 14.0.0'} 75 | 76 | '@algolia/recommend@5.20.0': 77 | resolution: {integrity: sha512-T6B/WPdZR3b89/F9Vvk6QCbt/wrLAtrGoL8z4qPXDFApQ8MuTFWbleN/4rHn6APWO3ps+BUePIEbue2rY5MlRw==} 78 | engines: {node: '>= 14.0.0'} 79 | 80 | '@algolia/requester-browser-xhr@5.20.0': 81 | resolution: {integrity: sha512-t6//lXsq8E85JMenHrI6mhViipUT5riNhEfCcvtRsTV+KIBpC6Od18eK864dmBhoc5MubM0f+sGpKOqJIlBSCg==} 82 | engines: {node: '>= 14.0.0'} 83 | 84 | '@algolia/requester-fetch@5.20.0': 85 | resolution: {integrity: sha512-FHxYGqRY+6bgjKsK4aUsTAg6xMs2S21elPe4Y50GB0Y041ihvw41Vlwy2QS6K9ldoftX4JvXodbKTcmuQxywdQ==} 86 | engines: {node: '>= 14.0.0'} 87 | 88 | '@algolia/requester-node-http@5.20.0': 89 | resolution: {integrity: sha512-kmtQClq/w3vtPteDSPvaW9SPZL/xrIgMrxZyAgsFwrJk0vJxqyC5/hwHmrCraDnStnGSADnLpBf4SpZnwnkwWw==} 90 | engines: {node: '>= 14.0.0'} 91 | 92 | '@babel/helper-string-parser@7.25.9': 93 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 94 | engines: {node: '>=6.9.0'} 95 | 96 | '@babel/helper-validator-identifier@7.25.9': 97 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 98 | engines: {node: '>=6.9.0'} 99 | 100 | '@babel/parser@7.26.7': 101 | resolution: {integrity: sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==} 102 | engines: {node: '>=6.0.0'} 103 | hasBin: true 104 | 105 | '@babel/types@7.26.7': 106 | resolution: {integrity: sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==} 107 | engines: {node: '>=6.9.0'} 108 | 109 | '@cloudflare/kv-asset-handler@0.3.4': 110 | resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==} 111 | engines: {node: '>=16.13'} 112 | 113 | '@cloudflare/workerd-darwin-64@1.20250124.0': 114 | resolution: {integrity: sha512-P5Z5KfVAuoCidIc0o2JPQZFLNTXDjtxN8vhtreCUr6V+xF5pqDNwQqeBDnDDF0gcszFQOYi2OZAB9e1MwssTwA==} 115 | engines: {node: '>=16'} 116 | cpu: [x64] 117 | os: [darwin] 118 | 119 | '@cloudflare/workerd-darwin-arm64@1.20250124.0': 120 | resolution: {integrity: sha512-lVxf6qIfmJ5rS6rmGKV7lt6ApY6nhD4kAQTK4vKYm/npk2sXod6LASIY0U4WBCwy4N+S75a8hP2QtmQf+KV3Iw==} 121 | engines: {node: '>=16'} 122 | cpu: [arm64] 123 | os: [darwin] 124 | 125 | '@cloudflare/workerd-linux-64@1.20250124.0': 126 | resolution: {integrity: sha512-5S4GzN08vW/CfzaM1rVAkRhPPSDX1O1t7u0pj+xdbGl4GcazBzE4ZLre+y9OMplZ9PBCkxXkRWqHXzabWA1x4A==} 127 | engines: {node: '>=16'} 128 | cpu: [x64] 129 | os: [linux] 130 | 131 | '@cloudflare/workerd-linux-arm64@1.20250124.0': 132 | resolution: {integrity: sha512-CHSYnutDfXgUWL9WcP0GbzIb5OyC9RZVCJGhKbDTQy6/uH7AivNcLzXtOhNdqetKjERmOxUbL9Us7vcMQLztog==} 133 | engines: {node: '>=16'} 134 | cpu: [arm64] 135 | os: [linux] 136 | 137 | '@cloudflare/workerd-windows-64@1.20250124.0': 138 | resolution: {integrity: sha512-5TunEy5x4pNUQ10Z47qP5iF6m3X9uB2ZScKDLkNaWtbQ7EcMCapOWzuynVkTKIMBgDeKw6DAB8nbbkybPyMS9w==} 139 | engines: {node: '>=16'} 140 | cpu: [x64] 141 | os: [win32] 142 | 143 | '@cspotcode/source-map-support@0.8.1': 144 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 145 | engines: {node: '>=12'} 146 | 147 | '@docsearch/css@3.8.2': 148 | resolution: {integrity: sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==} 149 | 150 | '@docsearch/js@3.8.2': 151 | resolution: {integrity: sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==} 152 | 153 | '@docsearch/react@3.8.2': 154 | resolution: {integrity: sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==} 155 | peerDependencies: 156 | '@types/react': '>= 16.8.0 < 19.0.0' 157 | react: '>= 16.8.0 < 19.0.0' 158 | react-dom: '>= 16.8.0 < 19.0.0' 159 | search-insights: '>= 1 < 3' 160 | peerDependenciesMeta: 161 | '@types/react': 162 | optional: true 163 | react: 164 | optional: true 165 | react-dom: 166 | optional: true 167 | search-insights: 168 | optional: true 169 | 170 | '@esbuild-plugins/node-globals-polyfill@0.2.3': 171 | resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==} 172 | peerDependencies: 173 | esbuild: '*' 174 | 175 | '@esbuild-plugins/node-modules-polyfill@0.2.2': 176 | resolution: {integrity: sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==} 177 | peerDependencies: 178 | esbuild: '*' 179 | 180 | '@esbuild/aix-ppc64@0.21.5': 181 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 182 | engines: {node: '>=12'} 183 | cpu: [ppc64] 184 | os: [aix] 185 | 186 | '@esbuild/android-arm64@0.17.19': 187 | resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} 188 | engines: {node: '>=12'} 189 | cpu: [arm64] 190 | os: [android] 191 | 192 | '@esbuild/android-arm64@0.21.5': 193 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 194 | engines: {node: '>=12'} 195 | cpu: [arm64] 196 | os: [android] 197 | 198 | '@esbuild/android-arm@0.17.19': 199 | resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} 200 | engines: {node: '>=12'} 201 | cpu: [arm] 202 | os: [android] 203 | 204 | '@esbuild/android-arm@0.21.5': 205 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 206 | engines: {node: '>=12'} 207 | cpu: [arm] 208 | os: [android] 209 | 210 | '@esbuild/android-x64@0.17.19': 211 | resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} 212 | engines: {node: '>=12'} 213 | cpu: [x64] 214 | os: [android] 215 | 216 | '@esbuild/android-x64@0.21.5': 217 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 218 | engines: {node: '>=12'} 219 | cpu: [x64] 220 | os: [android] 221 | 222 | '@esbuild/darwin-arm64@0.17.19': 223 | resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} 224 | engines: {node: '>=12'} 225 | cpu: [arm64] 226 | os: [darwin] 227 | 228 | '@esbuild/darwin-arm64@0.21.5': 229 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 230 | engines: {node: '>=12'} 231 | cpu: [arm64] 232 | os: [darwin] 233 | 234 | '@esbuild/darwin-x64@0.17.19': 235 | resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} 236 | engines: {node: '>=12'} 237 | cpu: [x64] 238 | os: [darwin] 239 | 240 | '@esbuild/darwin-x64@0.21.5': 241 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 242 | engines: {node: '>=12'} 243 | cpu: [x64] 244 | os: [darwin] 245 | 246 | '@esbuild/freebsd-arm64@0.17.19': 247 | resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} 248 | engines: {node: '>=12'} 249 | cpu: [arm64] 250 | os: [freebsd] 251 | 252 | '@esbuild/freebsd-arm64@0.21.5': 253 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 254 | engines: {node: '>=12'} 255 | cpu: [arm64] 256 | os: [freebsd] 257 | 258 | '@esbuild/freebsd-x64@0.17.19': 259 | resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} 260 | engines: {node: '>=12'} 261 | cpu: [x64] 262 | os: [freebsd] 263 | 264 | '@esbuild/freebsd-x64@0.21.5': 265 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 266 | engines: {node: '>=12'} 267 | cpu: [x64] 268 | os: [freebsd] 269 | 270 | '@esbuild/linux-arm64@0.17.19': 271 | resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} 272 | engines: {node: '>=12'} 273 | cpu: [arm64] 274 | os: [linux] 275 | 276 | '@esbuild/linux-arm64@0.21.5': 277 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 278 | engines: {node: '>=12'} 279 | cpu: [arm64] 280 | os: [linux] 281 | 282 | '@esbuild/linux-arm@0.17.19': 283 | resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} 284 | engines: {node: '>=12'} 285 | cpu: [arm] 286 | os: [linux] 287 | 288 | '@esbuild/linux-arm@0.21.5': 289 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 290 | engines: {node: '>=12'} 291 | cpu: [arm] 292 | os: [linux] 293 | 294 | '@esbuild/linux-ia32@0.17.19': 295 | resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} 296 | engines: {node: '>=12'} 297 | cpu: [ia32] 298 | os: [linux] 299 | 300 | '@esbuild/linux-ia32@0.21.5': 301 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 302 | engines: {node: '>=12'} 303 | cpu: [ia32] 304 | os: [linux] 305 | 306 | '@esbuild/linux-loong64@0.17.19': 307 | resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} 308 | engines: {node: '>=12'} 309 | cpu: [loong64] 310 | os: [linux] 311 | 312 | '@esbuild/linux-loong64@0.21.5': 313 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 314 | engines: {node: '>=12'} 315 | cpu: [loong64] 316 | os: [linux] 317 | 318 | '@esbuild/linux-mips64el@0.17.19': 319 | resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} 320 | engines: {node: '>=12'} 321 | cpu: [mips64el] 322 | os: [linux] 323 | 324 | '@esbuild/linux-mips64el@0.21.5': 325 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 326 | engines: {node: '>=12'} 327 | cpu: [mips64el] 328 | os: [linux] 329 | 330 | '@esbuild/linux-ppc64@0.17.19': 331 | resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} 332 | engines: {node: '>=12'} 333 | cpu: [ppc64] 334 | os: [linux] 335 | 336 | '@esbuild/linux-ppc64@0.21.5': 337 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 338 | engines: {node: '>=12'} 339 | cpu: [ppc64] 340 | os: [linux] 341 | 342 | '@esbuild/linux-riscv64@0.17.19': 343 | resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} 344 | engines: {node: '>=12'} 345 | cpu: [riscv64] 346 | os: [linux] 347 | 348 | '@esbuild/linux-riscv64@0.21.5': 349 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 350 | engines: {node: '>=12'} 351 | cpu: [riscv64] 352 | os: [linux] 353 | 354 | '@esbuild/linux-s390x@0.17.19': 355 | resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} 356 | engines: {node: '>=12'} 357 | cpu: [s390x] 358 | os: [linux] 359 | 360 | '@esbuild/linux-s390x@0.21.5': 361 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 362 | engines: {node: '>=12'} 363 | cpu: [s390x] 364 | os: [linux] 365 | 366 | '@esbuild/linux-x64@0.17.19': 367 | resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} 368 | engines: {node: '>=12'} 369 | cpu: [x64] 370 | os: [linux] 371 | 372 | '@esbuild/linux-x64@0.21.5': 373 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 374 | engines: {node: '>=12'} 375 | cpu: [x64] 376 | os: [linux] 377 | 378 | '@esbuild/netbsd-x64@0.17.19': 379 | resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} 380 | engines: {node: '>=12'} 381 | cpu: [x64] 382 | os: [netbsd] 383 | 384 | '@esbuild/netbsd-x64@0.21.5': 385 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 386 | engines: {node: '>=12'} 387 | cpu: [x64] 388 | os: [netbsd] 389 | 390 | '@esbuild/openbsd-x64@0.17.19': 391 | resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} 392 | engines: {node: '>=12'} 393 | cpu: [x64] 394 | os: [openbsd] 395 | 396 | '@esbuild/openbsd-x64@0.21.5': 397 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 398 | engines: {node: '>=12'} 399 | cpu: [x64] 400 | os: [openbsd] 401 | 402 | '@esbuild/sunos-x64@0.17.19': 403 | resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} 404 | engines: {node: '>=12'} 405 | cpu: [x64] 406 | os: [sunos] 407 | 408 | '@esbuild/sunos-x64@0.21.5': 409 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 410 | engines: {node: '>=12'} 411 | cpu: [x64] 412 | os: [sunos] 413 | 414 | '@esbuild/win32-arm64@0.17.19': 415 | resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} 416 | engines: {node: '>=12'} 417 | cpu: [arm64] 418 | os: [win32] 419 | 420 | '@esbuild/win32-arm64@0.21.5': 421 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 422 | engines: {node: '>=12'} 423 | cpu: [arm64] 424 | os: [win32] 425 | 426 | '@esbuild/win32-ia32@0.17.19': 427 | resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} 428 | engines: {node: '>=12'} 429 | cpu: [ia32] 430 | os: [win32] 431 | 432 | '@esbuild/win32-ia32@0.21.5': 433 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 434 | engines: {node: '>=12'} 435 | cpu: [ia32] 436 | os: [win32] 437 | 438 | '@esbuild/win32-x64@0.17.19': 439 | resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} 440 | engines: {node: '>=12'} 441 | cpu: [x64] 442 | os: [win32] 443 | 444 | '@esbuild/win32-x64@0.21.5': 445 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 446 | engines: {node: '>=12'} 447 | cpu: [x64] 448 | os: [win32] 449 | 450 | '@fastify/busboy@2.1.1': 451 | resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} 452 | engines: {node: '>=14'} 453 | 454 | '@iconify-json/simple-icons@1.2.22': 455 | resolution: {integrity: sha512-0UzThRMwHuOJfgpp+tyV/y2uEBLjFVrxC4igv9iWjSEQEBK4tNjWZNTRCBCYyv/FwWVYyKAsA8tZQ8vUYzvFnw==} 456 | 457 | '@iconify/types@2.0.0': 458 | resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} 459 | 460 | '@jridgewell/resolve-uri@3.1.2': 461 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 462 | engines: {node: '>=6.0.0'} 463 | 464 | '@jridgewell/sourcemap-codec@1.5.0': 465 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 466 | 467 | '@jridgewell/trace-mapping@0.3.9': 468 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 469 | 470 | '@rollup/rollup-android-arm-eabi@4.32.0': 471 | resolution: {integrity: sha512-G2fUQQANtBPsNwiVFg4zKiPQyjVKZCUdQUol53R8E71J7AsheRMV/Yv/nB8giOcOVqP7//eB5xPqieBYZe9bGg==} 472 | cpu: [arm] 473 | os: [android] 474 | 475 | '@rollup/rollup-android-arm64@4.32.0': 476 | resolution: {integrity: sha512-qhFwQ+ljoymC+j5lXRv8DlaJYY/+8vyvYmVx074zrLsu5ZGWYsJNLjPPVJJjhZQpyAKUGPydOq9hRLLNvh1s3A==} 477 | cpu: [arm64] 478 | os: [android] 479 | 480 | '@rollup/rollup-darwin-arm64@4.32.0': 481 | resolution: {integrity: sha512-44n/X3lAlWsEY6vF8CzgCx+LQaoqWGN7TzUfbJDiTIOjJm4+L2Yq+r5a8ytQRGyPqgJDs3Rgyo8eVL7n9iW6AQ==} 482 | cpu: [arm64] 483 | os: [darwin] 484 | 485 | '@rollup/rollup-darwin-x64@4.32.0': 486 | resolution: {integrity: sha512-F9ct0+ZX5Np6+ZDztxiGCIvlCaW87HBdHcozUfsHnj1WCUTBUubAoanhHUfnUHZABlElyRikI0mgcw/qdEm2VQ==} 487 | cpu: [x64] 488 | os: [darwin] 489 | 490 | '@rollup/rollup-freebsd-arm64@4.32.0': 491 | resolution: {integrity: sha512-JpsGxLBB2EFXBsTLHfkZDsXSpSmKD3VxXCgBQtlPcuAqB8TlqtLcbeMhxXQkCDv1avgwNjF8uEIbq5p+Cee0PA==} 492 | cpu: [arm64] 493 | os: [freebsd] 494 | 495 | '@rollup/rollup-freebsd-x64@4.32.0': 496 | resolution: {integrity: sha512-wegiyBT6rawdpvnD9lmbOpx5Sph+yVZKHbhnSP9MqUEDX08G4UzMU+D87jrazGE7lRSyTRs6NEYHtzfkJ3FjjQ==} 497 | cpu: [x64] 498 | os: [freebsd] 499 | 500 | '@rollup/rollup-linux-arm-gnueabihf@4.32.0': 501 | resolution: {integrity: sha512-3pA7xecItbgOs1A5H58dDvOUEboG5UfpTq3WzAdF54acBbUM+olDJAPkgj1GRJ4ZqE12DZ9/hNS2QZk166v92A==} 502 | cpu: [arm] 503 | os: [linux] 504 | 505 | '@rollup/rollup-linux-arm-musleabihf@4.32.0': 506 | resolution: {integrity: sha512-Y7XUZEVISGyge51QbYyYAEHwpGgmRrAxQXO3siyYo2kmaj72USSG8LtlQQgAtlGfxYiOwu+2BdbPjzEpcOpRmQ==} 507 | cpu: [arm] 508 | os: [linux] 509 | 510 | '@rollup/rollup-linux-arm64-gnu@4.32.0': 511 | resolution: {integrity: sha512-r7/OTF5MqeBrZo5omPXcTnjvv1GsrdH8a8RerARvDFiDwFpDVDnJyByYM/nX+mvks8XXsgPUxkwe/ltaX2VH7w==} 512 | cpu: [arm64] 513 | os: [linux] 514 | 515 | '@rollup/rollup-linux-arm64-musl@4.32.0': 516 | resolution: {integrity: sha512-HJbifC9vex9NqnlodV2BHVFNuzKL5OnsV2dvTw6e1dpZKkNjPG6WUq+nhEYV6Hv2Bv++BXkwcyoGlXnPrjAKXw==} 517 | cpu: [arm64] 518 | os: [linux] 519 | 520 | '@rollup/rollup-linux-loongarch64-gnu@4.32.0': 521 | resolution: {integrity: sha512-VAEzZTD63YglFlWwRj3taofmkV1V3xhebDXffon7msNz4b14xKsz7utO6F8F4cqt8K/ktTl9rm88yryvDpsfOw==} 522 | cpu: [loong64] 523 | os: [linux] 524 | 525 | '@rollup/rollup-linux-powerpc64le-gnu@4.32.0': 526 | resolution: {integrity: sha512-Sts5DST1jXAc9YH/iik1C9QRsLcCoOScf3dfbY5i4kH9RJpKxiTBXqm7qU5O6zTXBTEZry69bGszr3SMgYmMcQ==} 527 | cpu: [ppc64] 528 | os: [linux] 529 | 530 | '@rollup/rollup-linux-riscv64-gnu@4.32.0': 531 | resolution: {integrity: sha512-qhlXeV9AqxIyY9/R1h1hBD6eMvQCO34ZmdYvry/K+/MBs6d1nRFLm6BOiITLVI+nFAAB9kUB6sdJRKyVHXnqZw==} 532 | cpu: [riscv64] 533 | os: [linux] 534 | 535 | '@rollup/rollup-linux-s390x-gnu@4.32.0': 536 | resolution: {integrity: sha512-8ZGN7ExnV0qjXa155Rsfi6H8M4iBBwNLBM9lcVS+4NcSzOFaNqmt7djlox8pN1lWrRPMRRQ8NeDlozIGx3Omsw==} 537 | cpu: [s390x] 538 | os: [linux] 539 | 540 | '@rollup/rollup-linux-x64-gnu@4.32.0': 541 | resolution: {integrity: sha512-VDzNHtLLI5s7xd/VubyS10mq6TxvZBp+4NRWoW+Hi3tgV05RtVm4qK99+dClwTN1McA6PHwob6DEJ6PlXbY83A==} 542 | cpu: [x64] 543 | os: [linux] 544 | 545 | '@rollup/rollup-linux-x64-musl@4.32.0': 546 | resolution: {integrity: sha512-qcb9qYDlkxz9DxJo7SDhWxTWV1gFuwznjbTiov289pASxlfGbaOD54mgbs9+z94VwrXtKTu+2RqwlSTbiOqxGg==} 547 | cpu: [x64] 548 | os: [linux] 549 | 550 | '@rollup/rollup-win32-arm64-msvc@4.32.0': 551 | resolution: {integrity: sha512-pFDdotFDMXW2AXVbfdUEfidPAk/OtwE/Hd4eYMTNVVaCQ6Yl8et0meDaKNL63L44Haxv4UExpv9ydSf3aSayDg==} 552 | cpu: [arm64] 553 | os: [win32] 554 | 555 | '@rollup/rollup-win32-ia32-msvc@4.32.0': 556 | resolution: {integrity: sha512-/TG7WfrCAjeRNDvI4+0AAMoHxea/USWhAzf9PVDFHbcqrQ7hMMKp4jZIy4VEjk72AAfN5k4TiSMRXRKf/0akSw==} 557 | cpu: [ia32] 558 | os: [win32] 559 | 560 | '@rollup/rollup-win32-x64-msvc@4.32.0': 561 | resolution: {integrity: sha512-5hqO5S3PTEO2E5VjCePxv40gIgyS2KvO7E7/vvC/NbIW4SIRamkMr1hqj+5Y67fbBWv/bQLB6KelBQmXlyCjWA==} 562 | cpu: [x64] 563 | os: [win32] 564 | 565 | '@shikijs/core@2.1.0': 566 | resolution: {integrity: sha512-v795KDmvs+4oV0XD05YLzfDMe9ISBgNjtFxP4PAEv5DqyeghO1/TwDqs9ca5/E6fuO95IcAcWqR6cCX9TnqLZA==} 567 | 568 | '@shikijs/engine-javascript@2.1.0': 569 | resolution: {integrity: sha512-cgIUdAliOsoaa0rJz/z+jvhrpRd+fVAoixVFEVxUq5FA+tHgBZAIfVJSgJNVRj2hs/wZ1+4hMe82eKAThVh0nQ==} 570 | 571 | '@shikijs/engine-oniguruma@2.1.0': 572 | resolution: {integrity: sha512-Ujik33wEDqgqY2WpjRDUBECGcKPv3eGGkoXPujIXvokLaRmGky8NisSk8lHUGeSFxo/Cz5sgFej9sJmA9yeepg==} 573 | 574 | '@shikijs/langs@2.1.0': 575 | resolution: {integrity: sha512-Jn0gS4rPgerMDPj1ydjgFzZr5fAIoMYz4k7ZT3LJxWWBWA6lokK0pumUwVtb+MzXtlpjxOaQejLprmLbvMZyww==} 576 | 577 | '@shikijs/themes@2.1.0': 578 | resolution: {integrity: sha512-oS2mU6+bz+8TKutsjBxBA7Z3vrQk21RCmADLpnu8cy3tZD6Rw0FKqDyXNtwX52BuIDKHxZNmRlTdG3vtcYv3NQ==} 579 | 580 | '@shikijs/transformers@2.1.0': 581 | resolution: {integrity: sha512-3sfvh6OKUVkT5wZFU1xxiq1qqNIuCwUY3yOb9ZGm19y80UZ/eoroLE2orGNzfivyTxR93GfXXZC/ghPR0/SBow==} 582 | 583 | '@shikijs/types@2.1.0': 584 | resolution: {integrity: sha512-OFOdHA6VEVbiQvepJ8yqicC6VmBrKxFFhM2EsHHrZESqLVAXOSeRDiuSYV185lIgp15TVic5vYBYNhTsk1xHLg==} 585 | 586 | '@shikijs/vscode-textmate@10.0.1': 587 | resolution: {integrity: sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==} 588 | 589 | '@types/estree@1.0.6': 590 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 591 | 592 | '@types/hast@3.0.4': 593 | resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} 594 | 595 | '@types/linkify-it@5.0.0': 596 | resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} 597 | 598 | '@types/markdown-it@14.1.2': 599 | resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} 600 | 601 | '@types/mdast@4.0.4': 602 | resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} 603 | 604 | '@types/mdurl@2.0.0': 605 | resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} 606 | 607 | '@types/unist@3.0.3': 608 | resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} 609 | 610 | '@types/web-bluetooth@0.0.20': 611 | resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} 612 | 613 | '@ungap/structured-clone@1.3.0': 614 | resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} 615 | 616 | '@vitejs/plugin-vue@5.2.1': 617 | resolution: {integrity: sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==} 618 | engines: {node: ^18.0.0 || >=20.0.0} 619 | peerDependencies: 620 | vite: ^5.0.0 || ^6.0.0 621 | vue: ^3.2.25 622 | 623 | '@vue/compiler-core@3.5.13': 624 | resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} 625 | 626 | '@vue/compiler-dom@3.5.13': 627 | resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} 628 | 629 | '@vue/compiler-sfc@3.5.13': 630 | resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} 631 | 632 | '@vue/compiler-ssr@3.5.13': 633 | resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} 634 | 635 | '@vue/devtools-api@7.7.1': 636 | resolution: {integrity: sha512-Cexc8GimowoDkJ6eNelOPdYIzsu2mgNyp0scOQ3tiaYSb9iok6LOESSsJvHaI+ib3joRfqRJNLkHFjhNuWA5dg==} 637 | 638 | '@vue/devtools-kit@7.7.1': 639 | resolution: {integrity: sha512-yhZ4NPnK/tmxGtLNQxmll90jIIXdb2jAhPF76anvn5M/UkZCiLJy28bYgPIACKZ7FCosyKoaope89/RsFJll1w==} 640 | 641 | '@vue/devtools-shared@7.7.1': 642 | resolution: {integrity: sha512-BtgF7kHq4BHG23Lezc/3W2UhK2ga7a8ohAIAGJMBr4BkxUFzhqntQtCiuL1ijo2ztWnmusymkirgqUrXoQKumA==} 643 | 644 | '@vue/reactivity@3.5.13': 645 | resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} 646 | 647 | '@vue/runtime-core@3.5.13': 648 | resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} 649 | 650 | '@vue/runtime-dom@3.5.13': 651 | resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} 652 | 653 | '@vue/server-renderer@3.5.13': 654 | resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} 655 | peerDependencies: 656 | vue: 3.5.13 657 | 658 | '@vue/shared@3.5.13': 659 | resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} 660 | 661 | '@vueuse/core@12.5.0': 662 | resolution: {integrity: sha512-GVyH1iYqNANwcahAx8JBm6awaNgvR/SwZ1fjr10b8l1HIgDp82ngNbfzJUgOgWEoxjL+URAggnlilAEXwCOZtg==} 663 | 664 | '@vueuse/integrations@12.5.0': 665 | resolution: {integrity: sha512-HYLt8M6mjUfcoUOzyBcX2RjpfapIwHPBmQJtTmXOQW845Y/Osu9VuTJ5kPvnmWJ6IUa05WpblfOwZ+P0G4iZsQ==} 666 | peerDependencies: 667 | async-validator: ^4 668 | axios: ^1 669 | change-case: ^5 670 | drauu: ^0.4 671 | focus-trap: ^7 672 | fuse.js: ^7 673 | idb-keyval: ^6 674 | jwt-decode: ^4 675 | nprogress: ^0.2 676 | qrcode: ^1.5 677 | sortablejs: ^1 678 | universal-cookie: ^7 679 | peerDependenciesMeta: 680 | async-validator: 681 | optional: true 682 | axios: 683 | optional: true 684 | change-case: 685 | optional: true 686 | drauu: 687 | optional: true 688 | focus-trap: 689 | optional: true 690 | fuse.js: 691 | optional: true 692 | idb-keyval: 693 | optional: true 694 | jwt-decode: 695 | optional: true 696 | nprogress: 697 | optional: true 698 | qrcode: 699 | optional: true 700 | sortablejs: 701 | optional: true 702 | universal-cookie: 703 | optional: true 704 | 705 | '@vueuse/metadata@12.5.0': 706 | resolution: {integrity: sha512-Ui7Lo2a7AxrMAXRF+fAp9QsXuwTeeZ8fIB9wsLHqzq9MQk+2gMYE2IGJW48VMJ8ecvCB3z3GsGLKLbSasQ5Qlg==} 707 | 708 | '@vueuse/shared@12.5.0': 709 | resolution: {integrity: sha512-vMpcL1lStUU6O+kdj6YdHDixh0odjPAUM15uJ9f7MY781jcYkIwFA4iv2EfoIPO6vBmvutI1HxxAwmf0cx5ISQ==} 710 | 711 | acorn-walk@8.3.4: 712 | resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} 713 | engines: {node: '>=0.4.0'} 714 | 715 | acorn@8.14.0: 716 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 717 | engines: {node: '>=0.4.0'} 718 | hasBin: true 719 | 720 | algoliasearch@5.20.0: 721 | resolution: {integrity: sha512-groO71Fvi5SWpxjI9Ia+chy0QBwT61mg6yxJV27f5YFf+Mw+STT75K6SHySpP8Co5LsCrtsbCH5dJZSRtkSKaQ==} 722 | engines: {node: '>= 14.0.0'} 723 | 724 | as-table@1.0.55: 725 | resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} 726 | 727 | birpc@0.2.19: 728 | resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} 729 | 730 | blake3-wasm@2.1.5: 731 | resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} 732 | 733 | capnp-ts@0.7.0: 734 | resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==} 735 | 736 | ccount@2.0.1: 737 | resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} 738 | 739 | character-entities-html4@2.1.0: 740 | resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} 741 | 742 | character-entities-legacy@3.0.0: 743 | resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} 744 | 745 | comma-separated-tokens@2.0.3: 746 | resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} 747 | 748 | confbox@0.1.8: 749 | resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} 750 | 751 | cookie@0.7.2: 752 | resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} 753 | engines: {node: '>= 0.6'} 754 | 755 | copy-anything@3.0.5: 756 | resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} 757 | engines: {node: '>=12.13'} 758 | 759 | csstype@3.1.3: 760 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 761 | 762 | data-uri-to-buffer@2.0.2: 763 | resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} 764 | 765 | debug@4.4.0: 766 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 767 | engines: {node: '>=6.0'} 768 | peerDependencies: 769 | supports-color: '*' 770 | peerDependenciesMeta: 771 | supports-color: 772 | optional: true 773 | 774 | defu@6.1.4: 775 | resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} 776 | 777 | dequal@2.0.3: 778 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 779 | engines: {node: '>=6'} 780 | 781 | devlop@1.1.0: 782 | resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} 783 | 784 | emoji-regex-xs@1.0.0: 785 | resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} 786 | 787 | entities@4.5.0: 788 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 789 | engines: {node: '>=0.12'} 790 | 791 | esbuild@0.17.19: 792 | resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} 793 | engines: {node: '>=12'} 794 | hasBin: true 795 | 796 | esbuild@0.21.5: 797 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 798 | engines: {node: '>=12'} 799 | hasBin: true 800 | 801 | escape-string-regexp@4.0.0: 802 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 803 | engines: {node: '>=10'} 804 | 805 | estree-walker@0.6.1: 806 | resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} 807 | 808 | estree-walker@2.0.2: 809 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 810 | 811 | exit-hook@2.2.1: 812 | resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} 813 | engines: {node: '>=6'} 814 | 815 | focus-trap@7.6.4: 816 | resolution: {integrity: sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==} 817 | 818 | fsevents@2.3.3: 819 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 820 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 821 | os: [darwin] 822 | 823 | get-source@2.0.12: 824 | resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} 825 | 826 | glob-to-regexp@0.4.1: 827 | resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} 828 | 829 | hast-util-to-html@9.0.4: 830 | resolution: {integrity: sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==} 831 | 832 | hast-util-whitespace@3.0.0: 833 | resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} 834 | 835 | hookable@5.5.3: 836 | resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} 837 | 838 | html-void-elements@3.0.0: 839 | resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} 840 | 841 | is-what@4.1.16: 842 | resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} 843 | engines: {node: '>=12.13'} 844 | 845 | magic-string@0.25.9: 846 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} 847 | 848 | magic-string@0.30.17: 849 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 850 | 851 | mark.js@8.11.1: 852 | resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} 853 | 854 | mdast-util-to-hast@13.2.0: 855 | resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} 856 | 857 | micromark-util-character@2.1.1: 858 | resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} 859 | 860 | micromark-util-encode@2.0.1: 861 | resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} 862 | 863 | micromark-util-sanitize-uri@2.0.1: 864 | resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} 865 | 866 | micromark-util-symbol@2.0.1: 867 | resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} 868 | 869 | micromark-util-types@2.0.1: 870 | resolution: {integrity: sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==} 871 | 872 | mime@3.0.0: 873 | resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} 874 | engines: {node: '>=10.0.0'} 875 | hasBin: true 876 | 877 | miniflare@3.20250124.0: 878 | resolution: {integrity: sha512-ewsetUwhj4FqeLoE3UMqYHHyCYIOPzdhlpF9CHuHpMZbfLvI9SPd+VrKrLfOgyAF97EHqVWb6WamIrLdgtj6Kg==} 879 | engines: {node: '>=16.13'} 880 | hasBin: true 881 | 882 | minisearch@7.1.1: 883 | resolution: {integrity: sha512-b3YZEYCEH4EdCAtYP7OlDyx7FdPwNzuNwLQ34SfJpM9dlbBZzeXndGavTrC+VCiRWomL21SWfMc6SCKO/U2ZNw==} 884 | 885 | mitt@3.0.1: 886 | resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} 887 | 888 | mlly@1.7.4: 889 | resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} 890 | 891 | ms@2.1.3: 892 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 893 | 894 | mustache@4.2.0: 895 | resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} 896 | hasBin: true 897 | 898 | nanoid@3.3.8: 899 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 900 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 901 | hasBin: true 902 | 903 | ohash@1.1.4: 904 | resolution: {integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==} 905 | 906 | oniguruma-to-es@2.3.0: 907 | resolution: {integrity: sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==} 908 | 909 | path-to-regexp@6.3.0: 910 | resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} 911 | 912 | pathe@1.1.2: 913 | resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} 914 | 915 | pathe@2.0.2: 916 | resolution: {integrity: sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==} 917 | 918 | perfect-debounce@1.0.0: 919 | resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} 920 | 921 | picocolors@1.1.1: 922 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 923 | 924 | pkg-types@1.3.1: 925 | resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} 926 | 927 | postcss@8.5.1: 928 | resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} 929 | engines: {node: ^10 || ^12 || >=14} 930 | 931 | preact@10.25.4: 932 | resolution: {integrity: sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==} 933 | 934 | printable-characters@1.0.42: 935 | resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} 936 | 937 | property-information@6.5.0: 938 | resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} 939 | 940 | regex-recursion@5.1.1: 941 | resolution: {integrity: sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==} 942 | 943 | regex-utilities@2.3.0: 944 | resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} 945 | 946 | regex@5.1.1: 947 | resolution: {integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==} 948 | 949 | rfdc@1.4.1: 950 | resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} 951 | 952 | rollup-plugin-inject@3.0.2: 953 | resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} 954 | deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. 955 | 956 | rollup-plugin-node-polyfills@0.2.1: 957 | resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==} 958 | 959 | rollup-pluginutils@2.8.2: 960 | resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} 961 | 962 | rollup@4.32.0: 963 | resolution: {integrity: sha512-JmrhfQR31Q4AuNBjjAX4s+a/Pu/Q8Q9iwjWBsjRH1q52SPFE2NqRMK6fUZKKnvKO6id+h7JIRf0oYsph53eATg==} 964 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 965 | hasBin: true 966 | 967 | search-insights@2.17.3: 968 | resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==} 969 | 970 | shiki@2.1.0: 971 | resolution: {integrity: sha512-yvKPdNGLXZv7WC4bl7JBbU3CEcUxnBanvMez8MG3gZXKpClGL4bHqFyLhTx+2zUvbjClUANs/S22HXb7aeOgmA==} 972 | 973 | source-map-js@1.2.1: 974 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 975 | engines: {node: '>=0.10.0'} 976 | 977 | source-map@0.6.1: 978 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 979 | engines: {node: '>=0.10.0'} 980 | 981 | sourcemap-codec@1.4.8: 982 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 983 | deprecated: Please use @jridgewell/sourcemap-codec instead 984 | 985 | space-separated-tokens@2.0.2: 986 | resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} 987 | 988 | speakingurl@14.0.1: 989 | resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} 990 | engines: {node: '>=0.10.0'} 991 | 992 | stacktracey@2.1.8: 993 | resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} 994 | 995 | stoppable@1.1.0: 996 | resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} 997 | engines: {node: '>=4', npm: '>=6'} 998 | 999 | stringify-entities@4.0.4: 1000 | resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} 1001 | 1002 | superjson@2.2.2: 1003 | resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==} 1004 | engines: {node: '>=16'} 1005 | 1006 | tabbable@6.2.0: 1007 | resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} 1008 | 1009 | trim-lines@3.0.1: 1010 | resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} 1011 | 1012 | tslib@2.8.1: 1013 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1014 | 1015 | ufo@1.5.4: 1016 | resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} 1017 | 1018 | undici@5.28.5: 1019 | resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==} 1020 | engines: {node: '>=14.0'} 1021 | 1022 | unenv@2.0.0-rc.0: 1023 | resolution: {integrity: sha512-H0kl2w8jFL/FAk0xvjVing4bS3jd//mbg1QChDnn58l9Sc5RtduaKmLAL8n+eBw5jJo8ZjYV7CrEGage5LAOZQ==} 1024 | 1025 | unist-util-is@6.0.0: 1026 | resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} 1027 | 1028 | unist-util-position@5.0.0: 1029 | resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} 1030 | 1031 | unist-util-stringify-position@4.0.0: 1032 | resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} 1033 | 1034 | unist-util-visit-parents@6.0.1: 1035 | resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} 1036 | 1037 | unist-util-visit@5.0.0: 1038 | resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} 1039 | 1040 | vfile-message@4.0.2: 1041 | resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} 1042 | 1043 | vfile@6.0.3: 1044 | resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} 1045 | 1046 | vite@5.4.14: 1047 | resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} 1048 | engines: {node: ^18.0.0 || >=20.0.0} 1049 | hasBin: true 1050 | peerDependencies: 1051 | '@types/node': ^18.0.0 || >=20.0.0 1052 | less: '*' 1053 | lightningcss: ^1.21.0 1054 | sass: '*' 1055 | sass-embedded: '*' 1056 | stylus: '*' 1057 | sugarss: '*' 1058 | terser: ^5.4.0 1059 | peerDependenciesMeta: 1060 | '@types/node': 1061 | optional: true 1062 | less: 1063 | optional: true 1064 | lightningcss: 1065 | optional: true 1066 | sass: 1067 | optional: true 1068 | sass-embedded: 1069 | optional: true 1070 | stylus: 1071 | optional: true 1072 | sugarss: 1073 | optional: true 1074 | terser: 1075 | optional: true 1076 | 1077 | vitepress@1.6.3: 1078 | resolution: {integrity: sha512-fCkfdOk8yRZT8GD9BFqusW3+GggWYZ/rYncOfmgcDtP3ualNHCAg+Robxp2/6xfH1WwPHtGpPwv7mbA3qomtBw==} 1079 | hasBin: true 1080 | peerDependencies: 1081 | markdown-it-mathjax3: ^4 1082 | postcss: ^8 1083 | peerDependenciesMeta: 1084 | markdown-it-mathjax3: 1085 | optional: true 1086 | postcss: 1087 | optional: true 1088 | 1089 | vue@3.5.13: 1090 | resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} 1091 | peerDependencies: 1092 | typescript: '*' 1093 | peerDependenciesMeta: 1094 | typescript: 1095 | optional: true 1096 | 1097 | workerd@1.20250124.0: 1098 | resolution: {integrity: sha512-EnT9gN3M9/UHRFPZptKgK36DLOW8WfJV7cjNs3zstVbmF5cpFaHCAzX7tXWBO6zyvW/+EjklJPFtOvfatiZsuQ==} 1099 | engines: {node: '>=16'} 1100 | hasBin: true 1101 | 1102 | wrangler@3.105.1: 1103 | resolution: {integrity: sha512-Hl+wwWrMuDAcQOo+oKccf/MlAF+BHN66hbjGLo7cYhsrj1fm+w2jcFhiVTrRDpdJHPJMDfMGGbH8Gq7sexUGEQ==} 1104 | engines: {node: '>=16.17.0'} 1105 | hasBin: true 1106 | peerDependencies: 1107 | '@cloudflare/workers-types': ^4.20250121.0 1108 | peerDependenciesMeta: 1109 | '@cloudflare/workers-types': 1110 | optional: true 1111 | 1112 | ws@8.18.0: 1113 | resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} 1114 | engines: {node: '>=10.0.0'} 1115 | peerDependencies: 1116 | bufferutil: ^4.0.1 1117 | utf-8-validate: '>=5.0.2' 1118 | peerDependenciesMeta: 1119 | bufferutil: 1120 | optional: true 1121 | utf-8-validate: 1122 | optional: true 1123 | 1124 | youch@3.3.4: 1125 | resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==} 1126 | 1127 | zod@3.24.1: 1128 | resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} 1129 | 1130 | zwitch@2.0.4: 1131 | resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} 1132 | 1133 | snapshots: 1134 | 1135 | '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)(search-insights@2.17.3)': 1136 | dependencies: 1137 | '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)(search-insights@2.17.3) 1138 | '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0) 1139 | transitivePeerDependencies: 1140 | - '@algolia/client-search' 1141 | - algoliasearch 1142 | - search-insights 1143 | 1144 | '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)(search-insights@2.17.3)': 1145 | dependencies: 1146 | '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0) 1147 | search-insights: 2.17.3 1148 | transitivePeerDependencies: 1149 | - '@algolia/client-search' 1150 | - algoliasearch 1151 | 1152 | '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)': 1153 | dependencies: 1154 | '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0) 1155 | '@algolia/client-search': 5.20.0 1156 | algoliasearch: 5.20.0 1157 | 1158 | '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)': 1159 | dependencies: 1160 | '@algolia/client-search': 5.20.0 1161 | algoliasearch: 5.20.0 1162 | 1163 | '@algolia/client-abtesting@5.20.0': 1164 | dependencies: 1165 | '@algolia/client-common': 5.20.0 1166 | '@algolia/requester-browser-xhr': 5.20.0 1167 | '@algolia/requester-fetch': 5.20.0 1168 | '@algolia/requester-node-http': 5.20.0 1169 | 1170 | '@algolia/client-analytics@5.20.0': 1171 | dependencies: 1172 | '@algolia/client-common': 5.20.0 1173 | '@algolia/requester-browser-xhr': 5.20.0 1174 | '@algolia/requester-fetch': 5.20.0 1175 | '@algolia/requester-node-http': 5.20.0 1176 | 1177 | '@algolia/client-common@5.20.0': {} 1178 | 1179 | '@algolia/client-insights@5.20.0': 1180 | dependencies: 1181 | '@algolia/client-common': 5.20.0 1182 | '@algolia/requester-browser-xhr': 5.20.0 1183 | '@algolia/requester-fetch': 5.20.0 1184 | '@algolia/requester-node-http': 5.20.0 1185 | 1186 | '@algolia/client-personalization@5.20.0': 1187 | dependencies: 1188 | '@algolia/client-common': 5.20.0 1189 | '@algolia/requester-browser-xhr': 5.20.0 1190 | '@algolia/requester-fetch': 5.20.0 1191 | '@algolia/requester-node-http': 5.20.0 1192 | 1193 | '@algolia/client-query-suggestions@5.20.0': 1194 | dependencies: 1195 | '@algolia/client-common': 5.20.0 1196 | '@algolia/requester-browser-xhr': 5.20.0 1197 | '@algolia/requester-fetch': 5.20.0 1198 | '@algolia/requester-node-http': 5.20.0 1199 | 1200 | '@algolia/client-search@5.20.0': 1201 | dependencies: 1202 | '@algolia/client-common': 5.20.0 1203 | '@algolia/requester-browser-xhr': 5.20.0 1204 | '@algolia/requester-fetch': 5.20.0 1205 | '@algolia/requester-node-http': 5.20.0 1206 | 1207 | '@algolia/ingestion@1.20.0': 1208 | dependencies: 1209 | '@algolia/client-common': 5.20.0 1210 | '@algolia/requester-browser-xhr': 5.20.0 1211 | '@algolia/requester-fetch': 5.20.0 1212 | '@algolia/requester-node-http': 5.20.0 1213 | 1214 | '@algolia/monitoring@1.20.0': 1215 | dependencies: 1216 | '@algolia/client-common': 5.20.0 1217 | '@algolia/requester-browser-xhr': 5.20.0 1218 | '@algolia/requester-fetch': 5.20.0 1219 | '@algolia/requester-node-http': 5.20.0 1220 | 1221 | '@algolia/recommend@5.20.0': 1222 | dependencies: 1223 | '@algolia/client-common': 5.20.0 1224 | '@algolia/requester-browser-xhr': 5.20.0 1225 | '@algolia/requester-fetch': 5.20.0 1226 | '@algolia/requester-node-http': 5.20.0 1227 | 1228 | '@algolia/requester-browser-xhr@5.20.0': 1229 | dependencies: 1230 | '@algolia/client-common': 5.20.0 1231 | 1232 | '@algolia/requester-fetch@5.20.0': 1233 | dependencies: 1234 | '@algolia/client-common': 5.20.0 1235 | 1236 | '@algolia/requester-node-http@5.20.0': 1237 | dependencies: 1238 | '@algolia/client-common': 5.20.0 1239 | 1240 | '@babel/helper-string-parser@7.25.9': {} 1241 | 1242 | '@babel/helper-validator-identifier@7.25.9': {} 1243 | 1244 | '@babel/parser@7.26.7': 1245 | dependencies: 1246 | '@babel/types': 7.26.7 1247 | 1248 | '@babel/types@7.26.7': 1249 | dependencies: 1250 | '@babel/helper-string-parser': 7.25.9 1251 | '@babel/helper-validator-identifier': 7.25.9 1252 | 1253 | '@cloudflare/kv-asset-handler@0.3.4': 1254 | dependencies: 1255 | mime: 3.0.0 1256 | 1257 | '@cloudflare/workerd-darwin-64@1.20250124.0': 1258 | optional: true 1259 | 1260 | '@cloudflare/workerd-darwin-arm64@1.20250124.0': 1261 | optional: true 1262 | 1263 | '@cloudflare/workerd-linux-64@1.20250124.0': 1264 | optional: true 1265 | 1266 | '@cloudflare/workerd-linux-arm64@1.20250124.0': 1267 | optional: true 1268 | 1269 | '@cloudflare/workerd-windows-64@1.20250124.0': 1270 | optional: true 1271 | 1272 | '@cspotcode/source-map-support@0.8.1': 1273 | dependencies: 1274 | '@jridgewell/trace-mapping': 0.3.9 1275 | 1276 | '@docsearch/css@3.8.2': {} 1277 | 1278 | '@docsearch/js@3.8.2(@algolia/client-search@5.20.0)(search-insights@2.17.3)': 1279 | dependencies: 1280 | '@docsearch/react': 3.8.2(@algolia/client-search@5.20.0)(search-insights@2.17.3) 1281 | preact: 10.25.4 1282 | transitivePeerDependencies: 1283 | - '@algolia/client-search' 1284 | - '@types/react' 1285 | - react 1286 | - react-dom 1287 | - search-insights 1288 | 1289 | '@docsearch/react@3.8.2(@algolia/client-search@5.20.0)(search-insights@2.17.3)': 1290 | dependencies: 1291 | '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)(search-insights@2.17.3) 1292 | '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0) 1293 | '@docsearch/css': 3.8.2 1294 | algoliasearch: 5.20.0 1295 | optionalDependencies: 1296 | search-insights: 2.17.3 1297 | transitivePeerDependencies: 1298 | - '@algolia/client-search' 1299 | 1300 | '@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.17.19)': 1301 | dependencies: 1302 | esbuild: 0.17.19 1303 | 1304 | '@esbuild-plugins/node-modules-polyfill@0.2.2(esbuild@0.17.19)': 1305 | dependencies: 1306 | esbuild: 0.17.19 1307 | escape-string-regexp: 4.0.0 1308 | rollup-plugin-node-polyfills: 0.2.1 1309 | 1310 | '@esbuild/aix-ppc64@0.21.5': 1311 | optional: true 1312 | 1313 | '@esbuild/android-arm64@0.17.19': 1314 | optional: true 1315 | 1316 | '@esbuild/android-arm64@0.21.5': 1317 | optional: true 1318 | 1319 | '@esbuild/android-arm@0.17.19': 1320 | optional: true 1321 | 1322 | '@esbuild/android-arm@0.21.5': 1323 | optional: true 1324 | 1325 | '@esbuild/android-x64@0.17.19': 1326 | optional: true 1327 | 1328 | '@esbuild/android-x64@0.21.5': 1329 | optional: true 1330 | 1331 | '@esbuild/darwin-arm64@0.17.19': 1332 | optional: true 1333 | 1334 | '@esbuild/darwin-arm64@0.21.5': 1335 | optional: true 1336 | 1337 | '@esbuild/darwin-x64@0.17.19': 1338 | optional: true 1339 | 1340 | '@esbuild/darwin-x64@0.21.5': 1341 | optional: true 1342 | 1343 | '@esbuild/freebsd-arm64@0.17.19': 1344 | optional: true 1345 | 1346 | '@esbuild/freebsd-arm64@0.21.5': 1347 | optional: true 1348 | 1349 | '@esbuild/freebsd-x64@0.17.19': 1350 | optional: true 1351 | 1352 | '@esbuild/freebsd-x64@0.21.5': 1353 | optional: true 1354 | 1355 | '@esbuild/linux-arm64@0.17.19': 1356 | optional: true 1357 | 1358 | '@esbuild/linux-arm64@0.21.5': 1359 | optional: true 1360 | 1361 | '@esbuild/linux-arm@0.17.19': 1362 | optional: true 1363 | 1364 | '@esbuild/linux-arm@0.21.5': 1365 | optional: true 1366 | 1367 | '@esbuild/linux-ia32@0.17.19': 1368 | optional: true 1369 | 1370 | '@esbuild/linux-ia32@0.21.5': 1371 | optional: true 1372 | 1373 | '@esbuild/linux-loong64@0.17.19': 1374 | optional: true 1375 | 1376 | '@esbuild/linux-loong64@0.21.5': 1377 | optional: true 1378 | 1379 | '@esbuild/linux-mips64el@0.17.19': 1380 | optional: true 1381 | 1382 | '@esbuild/linux-mips64el@0.21.5': 1383 | optional: true 1384 | 1385 | '@esbuild/linux-ppc64@0.17.19': 1386 | optional: true 1387 | 1388 | '@esbuild/linux-ppc64@0.21.5': 1389 | optional: true 1390 | 1391 | '@esbuild/linux-riscv64@0.17.19': 1392 | optional: true 1393 | 1394 | '@esbuild/linux-riscv64@0.21.5': 1395 | optional: true 1396 | 1397 | '@esbuild/linux-s390x@0.17.19': 1398 | optional: true 1399 | 1400 | '@esbuild/linux-s390x@0.21.5': 1401 | optional: true 1402 | 1403 | '@esbuild/linux-x64@0.17.19': 1404 | optional: true 1405 | 1406 | '@esbuild/linux-x64@0.21.5': 1407 | optional: true 1408 | 1409 | '@esbuild/netbsd-x64@0.17.19': 1410 | optional: true 1411 | 1412 | '@esbuild/netbsd-x64@0.21.5': 1413 | optional: true 1414 | 1415 | '@esbuild/openbsd-x64@0.17.19': 1416 | optional: true 1417 | 1418 | '@esbuild/openbsd-x64@0.21.5': 1419 | optional: true 1420 | 1421 | '@esbuild/sunos-x64@0.17.19': 1422 | optional: true 1423 | 1424 | '@esbuild/sunos-x64@0.21.5': 1425 | optional: true 1426 | 1427 | '@esbuild/win32-arm64@0.17.19': 1428 | optional: true 1429 | 1430 | '@esbuild/win32-arm64@0.21.5': 1431 | optional: true 1432 | 1433 | '@esbuild/win32-ia32@0.17.19': 1434 | optional: true 1435 | 1436 | '@esbuild/win32-ia32@0.21.5': 1437 | optional: true 1438 | 1439 | '@esbuild/win32-x64@0.17.19': 1440 | optional: true 1441 | 1442 | '@esbuild/win32-x64@0.21.5': 1443 | optional: true 1444 | 1445 | '@fastify/busboy@2.1.1': {} 1446 | 1447 | '@iconify-json/simple-icons@1.2.22': 1448 | dependencies: 1449 | '@iconify/types': 2.0.0 1450 | 1451 | '@iconify/types@2.0.0': {} 1452 | 1453 | '@jridgewell/resolve-uri@3.1.2': {} 1454 | 1455 | '@jridgewell/sourcemap-codec@1.5.0': {} 1456 | 1457 | '@jridgewell/trace-mapping@0.3.9': 1458 | dependencies: 1459 | '@jridgewell/resolve-uri': 3.1.2 1460 | '@jridgewell/sourcemap-codec': 1.5.0 1461 | 1462 | '@rollup/rollup-android-arm-eabi@4.32.0': 1463 | optional: true 1464 | 1465 | '@rollup/rollup-android-arm64@4.32.0': 1466 | optional: true 1467 | 1468 | '@rollup/rollup-darwin-arm64@4.32.0': 1469 | optional: true 1470 | 1471 | '@rollup/rollup-darwin-x64@4.32.0': 1472 | optional: true 1473 | 1474 | '@rollup/rollup-freebsd-arm64@4.32.0': 1475 | optional: true 1476 | 1477 | '@rollup/rollup-freebsd-x64@4.32.0': 1478 | optional: true 1479 | 1480 | '@rollup/rollup-linux-arm-gnueabihf@4.32.0': 1481 | optional: true 1482 | 1483 | '@rollup/rollup-linux-arm-musleabihf@4.32.0': 1484 | optional: true 1485 | 1486 | '@rollup/rollup-linux-arm64-gnu@4.32.0': 1487 | optional: true 1488 | 1489 | '@rollup/rollup-linux-arm64-musl@4.32.0': 1490 | optional: true 1491 | 1492 | '@rollup/rollup-linux-loongarch64-gnu@4.32.0': 1493 | optional: true 1494 | 1495 | '@rollup/rollup-linux-powerpc64le-gnu@4.32.0': 1496 | optional: true 1497 | 1498 | '@rollup/rollup-linux-riscv64-gnu@4.32.0': 1499 | optional: true 1500 | 1501 | '@rollup/rollup-linux-s390x-gnu@4.32.0': 1502 | optional: true 1503 | 1504 | '@rollup/rollup-linux-x64-gnu@4.32.0': 1505 | optional: true 1506 | 1507 | '@rollup/rollup-linux-x64-musl@4.32.0': 1508 | optional: true 1509 | 1510 | '@rollup/rollup-win32-arm64-msvc@4.32.0': 1511 | optional: true 1512 | 1513 | '@rollup/rollup-win32-ia32-msvc@4.32.0': 1514 | optional: true 1515 | 1516 | '@rollup/rollup-win32-x64-msvc@4.32.0': 1517 | optional: true 1518 | 1519 | '@shikijs/core@2.1.0': 1520 | dependencies: 1521 | '@shikijs/engine-javascript': 2.1.0 1522 | '@shikijs/engine-oniguruma': 2.1.0 1523 | '@shikijs/types': 2.1.0 1524 | '@shikijs/vscode-textmate': 10.0.1 1525 | '@types/hast': 3.0.4 1526 | hast-util-to-html: 9.0.4 1527 | 1528 | '@shikijs/engine-javascript@2.1.0': 1529 | dependencies: 1530 | '@shikijs/types': 2.1.0 1531 | '@shikijs/vscode-textmate': 10.0.1 1532 | oniguruma-to-es: 2.3.0 1533 | 1534 | '@shikijs/engine-oniguruma@2.1.0': 1535 | dependencies: 1536 | '@shikijs/types': 2.1.0 1537 | '@shikijs/vscode-textmate': 10.0.1 1538 | 1539 | '@shikijs/langs@2.1.0': 1540 | dependencies: 1541 | '@shikijs/types': 2.1.0 1542 | 1543 | '@shikijs/themes@2.1.0': 1544 | dependencies: 1545 | '@shikijs/types': 2.1.0 1546 | 1547 | '@shikijs/transformers@2.1.0': 1548 | dependencies: 1549 | '@shikijs/core': 2.1.0 1550 | '@shikijs/types': 2.1.0 1551 | 1552 | '@shikijs/types@2.1.0': 1553 | dependencies: 1554 | '@shikijs/vscode-textmate': 10.0.1 1555 | '@types/hast': 3.0.4 1556 | 1557 | '@shikijs/vscode-textmate@10.0.1': {} 1558 | 1559 | '@types/estree@1.0.6': {} 1560 | 1561 | '@types/hast@3.0.4': 1562 | dependencies: 1563 | '@types/unist': 3.0.3 1564 | 1565 | '@types/linkify-it@5.0.0': {} 1566 | 1567 | '@types/markdown-it@14.1.2': 1568 | dependencies: 1569 | '@types/linkify-it': 5.0.0 1570 | '@types/mdurl': 2.0.0 1571 | 1572 | '@types/mdast@4.0.4': 1573 | dependencies: 1574 | '@types/unist': 3.0.3 1575 | 1576 | '@types/mdurl@2.0.0': {} 1577 | 1578 | '@types/unist@3.0.3': {} 1579 | 1580 | '@types/web-bluetooth@0.0.20': {} 1581 | 1582 | '@ungap/structured-clone@1.3.0': {} 1583 | 1584 | '@vitejs/plugin-vue@5.2.1(vite@5.4.14)(vue@3.5.13)': 1585 | dependencies: 1586 | vite: 5.4.14 1587 | vue: 3.5.13 1588 | 1589 | '@vue/compiler-core@3.5.13': 1590 | dependencies: 1591 | '@babel/parser': 7.26.7 1592 | '@vue/shared': 3.5.13 1593 | entities: 4.5.0 1594 | estree-walker: 2.0.2 1595 | source-map-js: 1.2.1 1596 | 1597 | '@vue/compiler-dom@3.5.13': 1598 | dependencies: 1599 | '@vue/compiler-core': 3.5.13 1600 | '@vue/shared': 3.5.13 1601 | 1602 | '@vue/compiler-sfc@3.5.13': 1603 | dependencies: 1604 | '@babel/parser': 7.26.7 1605 | '@vue/compiler-core': 3.5.13 1606 | '@vue/compiler-dom': 3.5.13 1607 | '@vue/compiler-ssr': 3.5.13 1608 | '@vue/shared': 3.5.13 1609 | estree-walker: 2.0.2 1610 | magic-string: 0.30.17 1611 | postcss: 8.5.1 1612 | source-map-js: 1.2.1 1613 | 1614 | '@vue/compiler-ssr@3.5.13': 1615 | dependencies: 1616 | '@vue/compiler-dom': 3.5.13 1617 | '@vue/shared': 3.5.13 1618 | 1619 | '@vue/devtools-api@7.7.1': 1620 | dependencies: 1621 | '@vue/devtools-kit': 7.7.1 1622 | 1623 | '@vue/devtools-kit@7.7.1': 1624 | dependencies: 1625 | '@vue/devtools-shared': 7.7.1 1626 | birpc: 0.2.19 1627 | hookable: 5.5.3 1628 | mitt: 3.0.1 1629 | perfect-debounce: 1.0.0 1630 | speakingurl: 14.0.1 1631 | superjson: 2.2.2 1632 | 1633 | '@vue/devtools-shared@7.7.1': 1634 | dependencies: 1635 | rfdc: 1.4.1 1636 | 1637 | '@vue/reactivity@3.5.13': 1638 | dependencies: 1639 | '@vue/shared': 3.5.13 1640 | 1641 | '@vue/runtime-core@3.5.13': 1642 | dependencies: 1643 | '@vue/reactivity': 3.5.13 1644 | '@vue/shared': 3.5.13 1645 | 1646 | '@vue/runtime-dom@3.5.13': 1647 | dependencies: 1648 | '@vue/reactivity': 3.5.13 1649 | '@vue/runtime-core': 3.5.13 1650 | '@vue/shared': 3.5.13 1651 | csstype: 3.1.3 1652 | 1653 | '@vue/server-renderer@3.5.13(vue@3.5.13)': 1654 | dependencies: 1655 | '@vue/compiler-ssr': 3.5.13 1656 | '@vue/shared': 3.5.13 1657 | vue: 3.5.13 1658 | 1659 | '@vue/shared@3.5.13': {} 1660 | 1661 | '@vueuse/core@12.5.0': 1662 | dependencies: 1663 | '@types/web-bluetooth': 0.0.20 1664 | '@vueuse/metadata': 12.5.0 1665 | '@vueuse/shared': 12.5.0 1666 | vue: 3.5.13 1667 | transitivePeerDependencies: 1668 | - typescript 1669 | 1670 | '@vueuse/integrations@12.5.0(focus-trap@7.6.4)': 1671 | dependencies: 1672 | '@vueuse/core': 12.5.0 1673 | '@vueuse/shared': 12.5.0 1674 | vue: 3.5.13 1675 | optionalDependencies: 1676 | focus-trap: 7.6.4 1677 | transitivePeerDependencies: 1678 | - typescript 1679 | 1680 | '@vueuse/metadata@12.5.0': {} 1681 | 1682 | '@vueuse/shared@12.5.0': 1683 | dependencies: 1684 | vue: 3.5.13 1685 | transitivePeerDependencies: 1686 | - typescript 1687 | 1688 | acorn-walk@8.3.4: 1689 | dependencies: 1690 | acorn: 8.14.0 1691 | 1692 | acorn@8.14.0: {} 1693 | 1694 | algoliasearch@5.20.0: 1695 | dependencies: 1696 | '@algolia/client-abtesting': 5.20.0 1697 | '@algolia/client-analytics': 5.20.0 1698 | '@algolia/client-common': 5.20.0 1699 | '@algolia/client-insights': 5.20.0 1700 | '@algolia/client-personalization': 5.20.0 1701 | '@algolia/client-query-suggestions': 5.20.0 1702 | '@algolia/client-search': 5.20.0 1703 | '@algolia/ingestion': 1.20.0 1704 | '@algolia/monitoring': 1.20.0 1705 | '@algolia/recommend': 5.20.0 1706 | '@algolia/requester-browser-xhr': 5.20.0 1707 | '@algolia/requester-fetch': 5.20.0 1708 | '@algolia/requester-node-http': 5.20.0 1709 | 1710 | as-table@1.0.55: 1711 | dependencies: 1712 | printable-characters: 1.0.42 1713 | 1714 | birpc@0.2.19: {} 1715 | 1716 | blake3-wasm@2.1.5: {} 1717 | 1718 | capnp-ts@0.7.0: 1719 | dependencies: 1720 | debug: 4.4.0 1721 | tslib: 2.8.1 1722 | transitivePeerDependencies: 1723 | - supports-color 1724 | 1725 | ccount@2.0.1: {} 1726 | 1727 | character-entities-html4@2.1.0: {} 1728 | 1729 | character-entities-legacy@3.0.0: {} 1730 | 1731 | comma-separated-tokens@2.0.3: {} 1732 | 1733 | confbox@0.1.8: {} 1734 | 1735 | cookie@0.7.2: {} 1736 | 1737 | copy-anything@3.0.5: 1738 | dependencies: 1739 | is-what: 4.1.16 1740 | 1741 | csstype@3.1.3: {} 1742 | 1743 | data-uri-to-buffer@2.0.2: {} 1744 | 1745 | debug@4.4.0: 1746 | dependencies: 1747 | ms: 2.1.3 1748 | 1749 | defu@6.1.4: {} 1750 | 1751 | dequal@2.0.3: {} 1752 | 1753 | devlop@1.1.0: 1754 | dependencies: 1755 | dequal: 2.0.3 1756 | 1757 | emoji-regex-xs@1.0.0: {} 1758 | 1759 | entities@4.5.0: {} 1760 | 1761 | esbuild@0.17.19: 1762 | optionalDependencies: 1763 | '@esbuild/android-arm': 0.17.19 1764 | '@esbuild/android-arm64': 0.17.19 1765 | '@esbuild/android-x64': 0.17.19 1766 | '@esbuild/darwin-arm64': 0.17.19 1767 | '@esbuild/darwin-x64': 0.17.19 1768 | '@esbuild/freebsd-arm64': 0.17.19 1769 | '@esbuild/freebsd-x64': 0.17.19 1770 | '@esbuild/linux-arm': 0.17.19 1771 | '@esbuild/linux-arm64': 0.17.19 1772 | '@esbuild/linux-ia32': 0.17.19 1773 | '@esbuild/linux-loong64': 0.17.19 1774 | '@esbuild/linux-mips64el': 0.17.19 1775 | '@esbuild/linux-ppc64': 0.17.19 1776 | '@esbuild/linux-riscv64': 0.17.19 1777 | '@esbuild/linux-s390x': 0.17.19 1778 | '@esbuild/linux-x64': 0.17.19 1779 | '@esbuild/netbsd-x64': 0.17.19 1780 | '@esbuild/openbsd-x64': 0.17.19 1781 | '@esbuild/sunos-x64': 0.17.19 1782 | '@esbuild/win32-arm64': 0.17.19 1783 | '@esbuild/win32-ia32': 0.17.19 1784 | '@esbuild/win32-x64': 0.17.19 1785 | 1786 | esbuild@0.21.5: 1787 | optionalDependencies: 1788 | '@esbuild/aix-ppc64': 0.21.5 1789 | '@esbuild/android-arm': 0.21.5 1790 | '@esbuild/android-arm64': 0.21.5 1791 | '@esbuild/android-x64': 0.21.5 1792 | '@esbuild/darwin-arm64': 0.21.5 1793 | '@esbuild/darwin-x64': 0.21.5 1794 | '@esbuild/freebsd-arm64': 0.21.5 1795 | '@esbuild/freebsd-x64': 0.21.5 1796 | '@esbuild/linux-arm': 0.21.5 1797 | '@esbuild/linux-arm64': 0.21.5 1798 | '@esbuild/linux-ia32': 0.21.5 1799 | '@esbuild/linux-loong64': 0.21.5 1800 | '@esbuild/linux-mips64el': 0.21.5 1801 | '@esbuild/linux-ppc64': 0.21.5 1802 | '@esbuild/linux-riscv64': 0.21.5 1803 | '@esbuild/linux-s390x': 0.21.5 1804 | '@esbuild/linux-x64': 0.21.5 1805 | '@esbuild/netbsd-x64': 0.21.5 1806 | '@esbuild/openbsd-x64': 0.21.5 1807 | '@esbuild/sunos-x64': 0.21.5 1808 | '@esbuild/win32-arm64': 0.21.5 1809 | '@esbuild/win32-ia32': 0.21.5 1810 | '@esbuild/win32-x64': 0.21.5 1811 | 1812 | escape-string-regexp@4.0.0: {} 1813 | 1814 | estree-walker@0.6.1: {} 1815 | 1816 | estree-walker@2.0.2: {} 1817 | 1818 | exit-hook@2.2.1: {} 1819 | 1820 | focus-trap@7.6.4: 1821 | dependencies: 1822 | tabbable: 6.2.0 1823 | 1824 | fsevents@2.3.3: 1825 | optional: true 1826 | 1827 | get-source@2.0.12: 1828 | dependencies: 1829 | data-uri-to-buffer: 2.0.2 1830 | source-map: 0.6.1 1831 | 1832 | glob-to-regexp@0.4.1: {} 1833 | 1834 | hast-util-to-html@9.0.4: 1835 | dependencies: 1836 | '@types/hast': 3.0.4 1837 | '@types/unist': 3.0.3 1838 | ccount: 2.0.1 1839 | comma-separated-tokens: 2.0.3 1840 | hast-util-whitespace: 3.0.0 1841 | html-void-elements: 3.0.0 1842 | mdast-util-to-hast: 13.2.0 1843 | property-information: 6.5.0 1844 | space-separated-tokens: 2.0.2 1845 | stringify-entities: 4.0.4 1846 | zwitch: 2.0.4 1847 | 1848 | hast-util-whitespace@3.0.0: 1849 | dependencies: 1850 | '@types/hast': 3.0.4 1851 | 1852 | hookable@5.5.3: {} 1853 | 1854 | html-void-elements@3.0.0: {} 1855 | 1856 | is-what@4.1.16: {} 1857 | 1858 | magic-string@0.25.9: 1859 | dependencies: 1860 | sourcemap-codec: 1.4.8 1861 | 1862 | magic-string@0.30.17: 1863 | dependencies: 1864 | '@jridgewell/sourcemap-codec': 1.5.0 1865 | 1866 | mark.js@8.11.1: {} 1867 | 1868 | mdast-util-to-hast@13.2.0: 1869 | dependencies: 1870 | '@types/hast': 3.0.4 1871 | '@types/mdast': 4.0.4 1872 | '@ungap/structured-clone': 1.3.0 1873 | devlop: 1.1.0 1874 | micromark-util-sanitize-uri: 2.0.1 1875 | trim-lines: 3.0.1 1876 | unist-util-position: 5.0.0 1877 | unist-util-visit: 5.0.0 1878 | vfile: 6.0.3 1879 | 1880 | micromark-util-character@2.1.1: 1881 | dependencies: 1882 | micromark-util-symbol: 2.0.1 1883 | micromark-util-types: 2.0.1 1884 | 1885 | micromark-util-encode@2.0.1: {} 1886 | 1887 | micromark-util-sanitize-uri@2.0.1: 1888 | dependencies: 1889 | micromark-util-character: 2.1.1 1890 | micromark-util-encode: 2.0.1 1891 | micromark-util-symbol: 2.0.1 1892 | 1893 | micromark-util-symbol@2.0.1: {} 1894 | 1895 | micromark-util-types@2.0.1: {} 1896 | 1897 | mime@3.0.0: {} 1898 | 1899 | miniflare@3.20250124.0: 1900 | dependencies: 1901 | '@cspotcode/source-map-support': 0.8.1 1902 | acorn: 8.14.0 1903 | acorn-walk: 8.3.4 1904 | capnp-ts: 0.7.0 1905 | exit-hook: 2.2.1 1906 | glob-to-regexp: 0.4.1 1907 | stoppable: 1.1.0 1908 | undici: 5.28.5 1909 | workerd: 1.20250124.0 1910 | ws: 8.18.0 1911 | youch: 3.3.4 1912 | zod: 3.24.1 1913 | transitivePeerDependencies: 1914 | - bufferutil 1915 | - supports-color 1916 | - utf-8-validate 1917 | 1918 | minisearch@7.1.1: {} 1919 | 1920 | mitt@3.0.1: {} 1921 | 1922 | mlly@1.7.4: 1923 | dependencies: 1924 | acorn: 8.14.0 1925 | pathe: 2.0.2 1926 | pkg-types: 1.3.1 1927 | ufo: 1.5.4 1928 | 1929 | ms@2.1.3: {} 1930 | 1931 | mustache@4.2.0: {} 1932 | 1933 | nanoid@3.3.8: {} 1934 | 1935 | ohash@1.1.4: {} 1936 | 1937 | oniguruma-to-es@2.3.0: 1938 | dependencies: 1939 | emoji-regex-xs: 1.0.0 1940 | regex: 5.1.1 1941 | regex-recursion: 5.1.1 1942 | 1943 | path-to-regexp@6.3.0: {} 1944 | 1945 | pathe@1.1.2: {} 1946 | 1947 | pathe@2.0.2: {} 1948 | 1949 | perfect-debounce@1.0.0: {} 1950 | 1951 | picocolors@1.1.1: {} 1952 | 1953 | pkg-types@1.3.1: 1954 | dependencies: 1955 | confbox: 0.1.8 1956 | mlly: 1.7.4 1957 | pathe: 2.0.2 1958 | 1959 | postcss@8.5.1: 1960 | dependencies: 1961 | nanoid: 3.3.8 1962 | picocolors: 1.1.1 1963 | source-map-js: 1.2.1 1964 | 1965 | preact@10.25.4: {} 1966 | 1967 | printable-characters@1.0.42: {} 1968 | 1969 | property-information@6.5.0: {} 1970 | 1971 | regex-recursion@5.1.1: 1972 | dependencies: 1973 | regex: 5.1.1 1974 | regex-utilities: 2.3.0 1975 | 1976 | regex-utilities@2.3.0: {} 1977 | 1978 | regex@5.1.1: 1979 | dependencies: 1980 | regex-utilities: 2.3.0 1981 | 1982 | rfdc@1.4.1: {} 1983 | 1984 | rollup-plugin-inject@3.0.2: 1985 | dependencies: 1986 | estree-walker: 0.6.1 1987 | magic-string: 0.25.9 1988 | rollup-pluginutils: 2.8.2 1989 | 1990 | rollup-plugin-node-polyfills@0.2.1: 1991 | dependencies: 1992 | rollup-plugin-inject: 3.0.2 1993 | 1994 | rollup-pluginutils@2.8.2: 1995 | dependencies: 1996 | estree-walker: 0.6.1 1997 | 1998 | rollup@4.32.0: 1999 | dependencies: 2000 | '@types/estree': 1.0.6 2001 | optionalDependencies: 2002 | '@rollup/rollup-android-arm-eabi': 4.32.0 2003 | '@rollup/rollup-android-arm64': 4.32.0 2004 | '@rollup/rollup-darwin-arm64': 4.32.0 2005 | '@rollup/rollup-darwin-x64': 4.32.0 2006 | '@rollup/rollup-freebsd-arm64': 4.32.0 2007 | '@rollup/rollup-freebsd-x64': 4.32.0 2008 | '@rollup/rollup-linux-arm-gnueabihf': 4.32.0 2009 | '@rollup/rollup-linux-arm-musleabihf': 4.32.0 2010 | '@rollup/rollup-linux-arm64-gnu': 4.32.0 2011 | '@rollup/rollup-linux-arm64-musl': 4.32.0 2012 | '@rollup/rollup-linux-loongarch64-gnu': 4.32.0 2013 | '@rollup/rollup-linux-powerpc64le-gnu': 4.32.0 2014 | '@rollup/rollup-linux-riscv64-gnu': 4.32.0 2015 | '@rollup/rollup-linux-s390x-gnu': 4.32.0 2016 | '@rollup/rollup-linux-x64-gnu': 4.32.0 2017 | '@rollup/rollup-linux-x64-musl': 4.32.0 2018 | '@rollup/rollup-win32-arm64-msvc': 4.32.0 2019 | '@rollup/rollup-win32-ia32-msvc': 4.32.0 2020 | '@rollup/rollup-win32-x64-msvc': 4.32.0 2021 | fsevents: 2.3.3 2022 | 2023 | search-insights@2.17.3: {} 2024 | 2025 | shiki@2.1.0: 2026 | dependencies: 2027 | '@shikijs/core': 2.1.0 2028 | '@shikijs/engine-javascript': 2.1.0 2029 | '@shikijs/engine-oniguruma': 2.1.0 2030 | '@shikijs/langs': 2.1.0 2031 | '@shikijs/themes': 2.1.0 2032 | '@shikijs/types': 2.1.0 2033 | '@shikijs/vscode-textmate': 10.0.1 2034 | '@types/hast': 3.0.4 2035 | 2036 | source-map-js@1.2.1: {} 2037 | 2038 | source-map@0.6.1: {} 2039 | 2040 | sourcemap-codec@1.4.8: {} 2041 | 2042 | space-separated-tokens@2.0.2: {} 2043 | 2044 | speakingurl@14.0.1: {} 2045 | 2046 | stacktracey@2.1.8: 2047 | dependencies: 2048 | as-table: 1.0.55 2049 | get-source: 2.0.12 2050 | 2051 | stoppable@1.1.0: {} 2052 | 2053 | stringify-entities@4.0.4: 2054 | dependencies: 2055 | character-entities-html4: 2.1.0 2056 | character-entities-legacy: 3.0.0 2057 | 2058 | superjson@2.2.2: 2059 | dependencies: 2060 | copy-anything: 3.0.5 2061 | 2062 | tabbable@6.2.0: {} 2063 | 2064 | trim-lines@3.0.1: {} 2065 | 2066 | tslib@2.8.1: {} 2067 | 2068 | ufo@1.5.4: {} 2069 | 2070 | undici@5.28.5: 2071 | dependencies: 2072 | '@fastify/busboy': 2.1.1 2073 | 2074 | unenv@2.0.0-rc.0: 2075 | dependencies: 2076 | defu: 6.1.4 2077 | mlly: 1.7.4 2078 | ohash: 1.1.4 2079 | pathe: 1.1.2 2080 | ufo: 1.5.4 2081 | 2082 | unist-util-is@6.0.0: 2083 | dependencies: 2084 | '@types/unist': 3.0.3 2085 | 2086 | unist-util-position@5.0.0: 2087 | dependencies: 2088 | '@types/unist': 3.0.3 2089 | 2090 | unist-util-stringify-position@4.0.0: 2091 | dependencies: 2092 | '@types/unist': 3.0.3 2093 | 2094 | unist-util-visit-parents@6.0.1: 2095 | dependencies: 2096 | '@types/unist': 3.0.3 2097 | unist-util-is: 6.0.0 2098 | 2099 | unist-util-visit@5.0.0: 2100 | dependencies: 2101 | '@types/unist': 3.0.3 2102 | unist-util-is: 6.0.0 2103 | unist-util-visit-parents: 6.0.1 2104 | 2105 | vfile-message@4.0.2: 2106 | dependencies: 2107 | '@types/unist': 3.0.3 2108 | unist-util-stringify-position: 4.0.0 2109 | 2110 | vfile@6.0.3: 2111 | dependencies: 2112 | '@types/unist': 3.0.3 2113 | vfile-message: 4.0.2 2114 | 2115 | vite@5.4.14: 2116 | dependencies: 2117 | esbuild: 0.21.5 2118 | postcss: 8.5.1 2119 | rollup: 4.32.0 2120 | optionalDependencies: 2121 | fsevents: 2.3.3 2122 | 2123 | vitepress@1.6.3(@algolia/client-search@5.20.0)(postcss@8.5.1)(search-insights@2.17.3): 2124 | dependencies: 2125 | '@docsearch/css': 3.8.2 2126 | '@docsearch/js': 3.8.2(@algolia/client-search@5.20.0)(search-insights@2.17.3) 2127 | '@iconify-json/simple-icons': 1.2.22 2128 | '@shikijs/core': 2.1.0 2129 | '@shikijs/transformers': 2.1.0 2130 | '@shikijs/types': 2.1.0 2131 | '@types/markdown-it': 14.1.2 2132 | '@vitejs/plugin-vue': 5.2.1(vite@5.4.14)(vue@3.5.13) 2133 | '@vue/devtools-api': 7.7.1 2134 | '@vue/shared': 3.5.13 2135 | '@vueuse/core': 12.5.0 2136 | '@vueuse/integrations': 12.5.0(focus-trap@7.6.4) 2137 | focus-trap: 7.6.4 2138 | mark.js: 8.11.1 2139 | minisearch: 7.1.1 2140 | shiki: 2.1.0 2141 | vite: 5.4.14 2142 | vue: 3.5.13 2143 | optionalDependencies: 2144 | postcss: 8.5.1 2145 | transitivePeerDependencies: 2146 | - '@algolia/client-search' 2147 | - '@types/node' 2148 | - '@types/react' 2149 | - async-validator 2150 | - axios 2151 | - change-case 2152 | - drauu 2153 | - fuse.js 2154 | - idb-keyval 2155 | - jwt-decode 2156 | - less 2157 | - lightningcss 2158 | - nprogress 2159 | - qrcode 2160 | - react 2161 | - react-dom 2162 | - sass 2163 | - sass-embedded 2164 | - search-insights 2165 | - sortablejs 2166 | - stylus 2167 | - sugarss 2168 | - terser 2169 | - typescript 2170 | - universal-cookie 2171 | 2172 | vue@3.5.13: 2173 | dependencies: 2174 | '@vue/compiler-dom': 3.5.13 2175 | '@vue/compiler-sfc': 3.5.13 2176 | '@vue/runtime-dom': 3.5.13 2177 | '@vue/server-renderer': 3.5.13(vue@3.5.13) 2178 | '@vue/shared': 3.5.13 2179 | 2180 | workerd@1.20250124.0: 2181 | optionalDependencies: 2182 | '@cloudflare/workerd-darwin-64': 1.20250124.0 2183 | '@cloudflare/workerd-darwin-arm64': 1.20250124.0 2184 | '@cloudflare/workerd-linux-64': 1.20250124.0 2185 | '@cloudflare/workerd-linux-arm64': 1.20250124.0 2186 | '@cloudflare/workerd-windows-64': 1.20250124.0 2187 | 2188 | wrangler@3.105.1: 2189 | dependencies: 2190 | '@cloudflare/kv-asset-handler': 0.3.4 2191 | '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) 2192 | '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19) 2193 | blake3-wasm: 2.1.5 2194 | esbuild: 0.17.19 2195 | miniflare: 3.20250124.0 2196 | path-to-regexp: 6.3.0 2197 | unenv: 2.0.0-rc.0 2198 | workerd: 1.20250124.0 2199 | optionalDependencies: 2200 | fsevents: 2.3.3 2201 | transitivePeerDependencies: 2202 | - bufferutil 2203 | - supports-color 2204 | - utf-8-validate 2205 | 2206 | ws@8.18.0: {} 2207 | 2208 | youch@3.3.4: 2209 | dependencies: 2210 | cookie: 0.7.2 2211 | mustache: 4.2.0 2212 | stacktracey: 2.1.8 2213 | 2214 | zod@3.24.1: {} 2215 | 2216 | zwitch@2.0.4: {} 2217 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | ":semanticCommits", 5 | ":disableDependencyDashboard", 6 | "config:recommended" 7 | ], 8 | "packageRules": [ 9 | { 10 | "matchUpdateTypes": ["minor", "patch", "pin", "digest"], 11 | "automerge": true, 12 | "automergeType": "pr", 13 | "automergeStrategy": "auto" 14 | } 15 | ], 16 | "lockFileMaintenance": { 17 | "enabled": true, 18 | "automerge": true 19 | } 20 | } 21 | --------------------------------------------------------------------------------